Quickstart
Deploy your first agent to every tenant
Scaffold an agent, deploy it once for every tenant on your platform, run it, and open the result in the Console. About ten minutes, four commands.
tanomisinstalled and signed in as a platform operator (Get access)- Python 3.12 or newer and
uvon yourPATH - A directory in your own repository
The journey is Prepare → Scaffold → Validate → Deploy → Run.
1. Check you are signed in
Section titled “1. Check you are signed in”Confirm the context, and see the tenants the deploy will reach:
tanomis auth statustanomis tenant lscontext: saas logged-in: yes expires in 54m
TENANT STATEnorthwind-sandbox activebluewater-bank activeorion-retail activehelix-health active2. Scaffold a working agent
Section titled “2. Scaffold a working agent”One command gives you a Claude Agent SDK project that already answers. You will make it yours after it runs.
tanomis agent new support-copilot --harness claude-agents-sdk --agents-root ./agents --description "Triage and draft responses to support requests"agents/support-copilot/├── agent.py create_agent(input, context) returns (prompt, options)├── agent.yaml what the agent may do: model, hosts, tools, limits├── pyproject.toml├── uv.lock└── tests/test_agent_contract.pyOpen agent.py and change one line, the system_prompt, to “Triage support requests: severity,
summary, and a concise draft reply.” Everything else stays. Then run the contract test:
cd agents/support-copilotuv run python -m unittest tests/test_agent_contract.py3. Dry-run the deploy
Section titled “3. Dry-run the deploy”See exactly what would be built and where it would be enabled, without uploading a byte. This is the same command you will put on every pull request.
uv lock --lockedtanomis agent deploy . --scope global --tenants all --dry-rundry-run: tanomis agent deploy .
name: support-copilot version: 0.1.0 scope: global tenants: all (active customer tenants snapshotted by the server) build profile: python-managed lock policy: uv-frozen files: 5 checksum: sha256:9f1c…e2a0
no changes made (dry-run) — no build was created, no bytes were uploaded4. Deploy to every tenant
Section titled “4. Deploy to every tenant”One command builds remotely, registers an immutable global version with the contract you declared, takes a warm-start snapshot, and enables the version for every active tenant. Nothing routes traffic until that last step.
tanomis agent deploy . --scope global --tenants allbuild bld_3f9a2c created for support-copilot@0.1.0 (global, tenants all, profile python-managed, lock uv-frozen)upload donebuild done image sha256:7ab3…register done support-copilot@0.1.0golden ready sessions will warm-startenable done 12 tenants → 0.1.0Not a platform operator? Organization members deploy to their own tenants with
--tenant TENANTinstead of--scope global --tenants all. The rest of this page is the same.
Confirm what each tenant now serves:
tanomis agent versions support-copilot --by-tenant5. Run it
Section titled “5. Run it”Invoke the agent in the sandbox tenant through the same managed path the Console and your applications use. The command opens a session, starts a run, and streams its events.
tanomis session run support-copilot \ --tenant northwind-sandbox \ --prompt "Customer reports that CSV exports stop at 80%. Draft a first response."session ses_7d4f9c run run_a12bc3 version support-copilot@0.1.0run_started 12:04:01agent_message Thanks for flagging this. Exports stopping at 80% usually means ...run_completed 12:04:09 status=succeededOpen the run in the Console. The same events are there, plus who invoked it, the policy decisions the run passed, and the execution trace. This is the record every run gets; see Tour the Console.
What you just built
Section titled “What you just built”The lifecycle from the Overview, with every stage now real.
- Sourceagents/support-copilot in your repository.
- Versionsupport-copilot@0.1.0, global, immutable.
- EnablementEvery customer tenant serves 0.1.0.
- Sessionses_7d4f9c, warm-started.
- Runrun_a12bc3, succeeded.
- EvidenceLedger entry and trace, in the Console.
If something goes wrong
| Symptom | Next action |
|---|---|
| Login required or tenant denied | Run tanomis login, then tanomis auth status. An administrator confirms your grant. |
| Lockfile missing or stale | Run uv lock, commit uv.lock, repeat the dry run. |
| Manifest rejected | Restore the generated fields; read Manifest essentials before widening anything. |
| Build fails after a clean dry run | Read the failing phase in the output, fix the dependency or source error, deploy again. |
| First run is slow | The golden was skipped; the version cold-starts and is still usable. |
| A model or tool action is denied | Compare with permitted_models, the approval list, and tenant policy. Refusals are recorded in the run. |