# Callables > Callables turns Python functions into tools a team can run. Add `@deploy` to a function and push the repo to GitHub: every function gets a web form generated from its type hints, plus schedules, run history, secrets and per-function sharing. For internal tools, admin actions, scheduled reports and file jobs that non-technical teammates need to run. Install the SDK with `pip install callables`, run `call init` in the repo, and check functions with `call check` and `call local` before pushing. Every push to the connected branch deploys. Python 3.11 to 3.14. Runs last up to 15 minutes, so Callables suits short jobs, not long-running services, public APIs or customer-facing apps. ```python from typing import Literal from callables import deploy @deploy(title="Refund an order", secrets=["STRIPE_KEY"]) def refund(order_id: str, reason: Literal["Damaged", "Late", "Other"]) -> str: """Refunds the order in Stripe and records why.""" ... ``` ## Get started - [What is Callables?](https://callables.app/docs.md): Callables turns Python functions into web forms, schedules and run history that your whole team can use. What it is, and when to use it. - [Quickstart](https://callables.app/docs/quickstart.md): Install the SDK, write a function, connect a GitHub repo and run your first automation from the web app. - [Coding agents](https://callables.app/docs/coding-agents.md): Set up Claude Code, Cursor, Codex and other agents to write, check and run Callables functions. ## Writing functions - [The @deploy decorator](https://callables.app/docs/deploy.md): Every option @deploy takes: name, title, description, secrets, timeout, schedule and next. - [Inputs](https://callables.app/docs/inputs.md): How type hints become form fields: text, numbers, dropdowns, dates, lists, models and file uploads. - [Results](https://callables.app/docs/results.md): How the return type picks the display: Markdown, tables with CSV download, key-value lists and files. - [Files](https://callables.app/docs/files.md): Take file uploads, return files to download, and save extra files from a run. - [Groups and local commands](https://callables.app/docs/groups.md): Organize related functions into groups with shared secrets, and add local-only CLI commands. - [Flows](https://callables.app/docs/flows.md): Offer next actions on each result row, with their inputs filled in from that row. ## Running - [Secrets](https://callables.app/docs/secrets.md): Give functions API keys and passwords without putting them in code or showing them to the people who run them. - [Schedules](https://callables.app/docs/schedules.md): Run functions on a schedule from the web app, or declare the schedule in code. - [Sharing and access](https://callables.app/docs/sharing.md): Team roles, who can run each function, and who sees which runs. ## Platform - [Builds and runtime](https://callables.app/docs/builds.md): How a push becomes a deploy: Python version, dependencies, system packages, subfolders and the sandbox each run gets. - [Limits](https://callables.app/docs/limits.md): Run length, file sizes, memory and the other limits that apply to every run. - [CLI reference](https://callables.app/docs/cli.md): Every call command: check, local, run as a command, manifest, docs and init. ## Guides and comparisons - [Deploy from a monorepo or subfolder, with system packages](https://callables.app/blog/monorepo-subfolder-and-system-packages): Build just one folder of a bigger repo, choose the Python version, install dependencies and add tools like ffmpeg with apt.txt. - [Control who can run your automations](https://callables.app/blog/control-who-can-run-what): Roles for your team, sharing for each function, and run history that only the right people see. How access works in Callables. - [Build an internal admin panel in Python](https://callables.app/blog/internal-admin-panel-in-python): Search for a record, then act on it from buttons on each row. Chain Python functions into step-by-step tools your support and ops teams can use. - [Organize lots of automations with groups](https://callables.app/blog/organize-automations-with-groups): Group related functions into sections, share secrets across them, and run them as subcommands. Keeps a growing repo of automations easy to find. - [Callables vs Windmill and Airplane: a repo-first alternative](https://callables.app/blog/callables-vs-windmill-and-airplane): How Callables compares to Windmill, and where Airplane users can go now. Same goal, different starting point: your repo, your editor, your agent. - [Test your automations locally before you push](https://callables.app/blog/test-automations-locally): Check for deploy problems and run functions on your own machine, with the same input validation as the platform, before anything goes live. - [Build automations with Claude Code, Cursor and other AI agents](https://callables.app/blog/build-automations-with-ai-agents): One command teaches your coding agent how to write Callables functions, check them and run them locally. Then you push. - [Let teammates upload a file and get a result back](https://callables.app/blog/file-upload-tools-in-python): Turn a Python function into a tool where someone uploads a CSV, spreadsheet or PDF and downloads the result, with no front end to build. - [Callables vs Power Automate: running Python automations for your team](https://callables.app/blog/callables-vs-power-automate): Power Automate is built for Microsoft 365 workflows. Callables runs the Python you already have. How they compare, and when to use each. - [How to run a Python script on a schedule](https://callables.app/blog/run-python-scripts-on-a-schedule): Run a Python function every hour, every weekday at 9am or on any cron schedule, with logs for every run and no server to keep alive. - [How to keep API keys out of your Python scripts](https://callables.app/blog/keep-api-keys-out-of-python-scripts): Declare the secrets a function needs, set them once in the web app, and read them from the environment. Nobody running the function ever sees them. - [Show results your team can read: tables, reports and downloads](https://callables.app/blog/show-results-your-team-can-read): Your function's return type decides how the result looks. Return rows for a table with CSV download, a string for a Markdown report, or a file to download. - [Callables vs Zapier: when your automation is really code](https://callables.app/blog/callables-vs-zapier): Zapier connects apps without code. Callables runs the Python you already have. How they compare on logic, limits and pricing, and how they work together. - [How to share Python scripts with non-technical teammates](https://callables.app/blog/share-python-scripts-with-non-technical-users): Your script works, and now someone in ops needs to run it without a terminal. The usual options, what each one costs, and how to get a script ready for other people. - [How to turn a Python script into a web form](https://callables.app/blog/python-script-to-web-form): Type hints become form fields: dropdowns, date pickers, checkboxes and file uploads. Add one decorator, push, and your teammates get a form. ## Optional - [All docs in one file](https://callables.app/llms-full.txt): every page above, as Markdown. - [Pricing](https://callables.app/pricing): a 30-day free trial with no card, then Hobby ($5/month) or Pro ($20/team/month). - [Python SDK on GitHub](https://github.com/callables-app/callables-python): source, README and the guide `call docs` prints. - [Python SDK on PyPI](https://pypi.org/project/callables/)