tavora CLI
The tavora CLI lives in
tavora-cli. It’s
the primary authoring surface for Tavora agents: a local
tavora/ folder is the source of truth, and the CLI’s init /
dev / deploy verbs sync it to the platform. The same binary
also wraps the /api/sdk/* runtime surface for ops, scripting, and
CI gates.
A second binary, tavora-tui, is the interactive
terminal UI for chatting with a configured agent.
Install
Section titled “Install”Pre-built binaries: see the Releases page.
From source:
git clone https://github.com/tavora-ai/tavora-clicd tavora-cligo install ./cmd/tavora # CLIgo install ./cmd/tavora-tui # TUIConfigure
Section titled “Configure”Two paths, both work:
tavora loginPrompts for the Tavora URL and a project-scoped API key, validates the
key against /api/sdk/project, and writes the config to ~/.tavora.yaml.
Subsequent commands pick it up automatically.
export TAVORA_URL=https://api.tavora.aiexport TAVORA_API_KEY=tvr_...
tavora showtavora --url https://api.tavora.ai --api-key tvr_... showPrecedence is flag > env > config file. The CLI never echoes the
key back at you — tavora show confirms the connection by showing
the project metadata.
API keys are project-scoped (one key, one project). To work against multiple
projects from one shell, swap TAVORA_API_KEY per command or pass
--api-key directly.
Global flags
Section titled “Global flags”| Flag | Effect |
|---|---|
--api-key <key> | API key (tvr_…); env: TAVORA_API_KEY. |
--url <url> | Server URL; env: TAVORA_URL. |
--config <path> | Override ~/.tavora.yaml. |
--output text|json | json is structured and pipeable into jq. Default text. |
--quiet / -q | Suppress status messages — emit data only. Pairs well with --output json. |
Subcommand reference
Section titled “Subcommand reference”Every subcommand prints --help; the tables below are the orienting
map.
Code-first authoring
Section titled “Code-first authoring”The authoring loop:
tavora init # scaffold tavora/{tavora.jsonc, agents/...}tavora dev # watch + sync drafts on save (250ms debounce)tavora run <agent> "<input>" # run the local draft; writes .runs/<ts>-<agent>-<sid>.mdtavora deploy # validate + sync + snapshot as an immutable versiontavora deploy --dry-run # validate only — CI gateAgent identity is (project, local_id) from tavora.jsonc and
agent.jsonc. Renames and deletes are explicit:
tavora rename <old-id> <new-id> # keeps the server-side binding stabletavora delete <id> [--yes] # destroys the agent + cascades versions, sessions, evalsResolved-config inspection:
tavora config show <agent> # resolved JSON (post env-var substitution)tavora open <ref> # open the source file backing a config fieldSession forensics
Section titled “Session forensics”Every tavora run writes a self-contained markdown trace to
tavora/.runs/. Browse them offline:
tavora session latest # newest run for any agent in the projecttavora session get <id-prefix> # full markdown for a specific sessiontavora session list # most-recent N sessions in the projectRetention defaults to 50 runs (override via tavora.jsonc → retention.runs). For server-side traces — including SDK-triggered
and scheduled runs — use the session detail view in the browser
(/sessions/:id).
Agents — runtime
Section titled “Agents — runtime”The runtime side of agents (sessions, not configs):
tavora agents list # all sessions in this projecttavora agents create [--system "..."] [--title] # new ad-hoc sessiontavora agents get <session-id>tavora agents run <session-id> "<message>" # stream a turntavora agents interactive <session-id> # one-off REPL — TUI is the richer surfacetavora agents delete <session-id>tavora agents prompt # print the runtime system prompt for this projectSkills
Section titled “Skills”Skills are authored as .js / .md files under
tavora/agents/<id>/skills/ and arrive via tavora dev. The CLI’s
skills verbs are read-only:
tavora skills listtavora skills get <skill-id>tavora skills authoring-guide -o skill-authoring.md # → feed to your editor's LLMtavora skills authoring-guide fetches the live runtime’s authoring
reference — sandbox primitives, reserved names, ES5.1 constraints —
and writes Markdown you can hand to Claude Code / Cursor as context
when drafting skills.
MCP servers
Section titled “MCP servers”MCP servers are declared inline in agent.jsonc → mcp and flow
through tavora dev. There is no tavora mcp subcommand — edit
agent.jsonc, save, and tavora dev syncs and validates the block
(URL reachable, auth refs resolve). See
MCP servers for the JSONC shape.
Documents & search
Section titled “Documents & search”tavora stores listtavora stores create --name "Support docs" --description "..."tavora stores delete <store-id>
tavora documents upload --store <store-id> ./faq.mdtavora documents upload --store <store-id> ./docs/ # whole directorytavora documents wait <doc-id> # block until embeddings readytavora documents list --store <store-id>tavora documents get <doc-id>tavora documents delete <doc-id>
tavora search "what document formats are supported?" --store <store-id> --limit 5Evals (advisory)
Section titled “Evals (advisory)”Eval cases live as JSON files under tavora/agents/<id>/evals/ and
flow through source-sync. The CLI’s evals verbs are read +
trigger:
tavora evals list # cases for the current projecttavora evals run <agent> # advisory eval on the agent's pinned suitetavora evals runs list # recent eval runstavora evals runs get <run-id>tavora evals latest <agent> # last eval run for this agenttavora deploy --run-evals will run the agent’s pinned suite as
part of a deploy. Eval results never block deploy — the Phase-12
promotion gate was removed in the 2026-05-11 slim-down.
RAG eval (CI gates)
Section titled “RAG eval (CI gates)”Two pre-built CI gates over the RAG pipeline, both designed for unattended execution:
tavora rag-eval formats --gate # exit non-zero if any supported format fails to indextavora rag-eval judge --gate --pass-threshold 7 # LLM-as-judge against fixture invoicesrag-eval judge requires GEMINI_API_KEY in env (or the equivalent
provider key for your judge model). Useful as a smoke test after a
schema migration or a chunker tweak.
Scheduled runs
Section titled “Scheduled runs”tavora schedules listtavora schedules create --agent <id> --cron "0 9 * * 1" --message "Weekly brief"tavora schedules get <schedule-id>tavora schedules delete <schedule-id>Prompt templates
Section titled “Prompt templates”tavora templates listtavora templates create --name <name> --body @template.mdtavora templates get <template-id>tavora templates update <template-id> --body @template.mdtavora templates delete <template-id>Project + metrics
Section titled “Project + metrics”tavora show # project metadata + tiertavora metrics # tokens / agent / eval rollup (billing-dashboard shape)Output formats and piping
Section titled “Output formats and piping”Every command honours --output json. Combine with jq for one-line
ops:
# All sessions over the last day that erroredtavora agents list --output json | \ jq '.[] | select(.status=="error") | {id, created_at}'
# Trigger an advisory eval on every code-first agent in the projectfor agent in $(tavora config show --output json | jq -r '.agents[].id'); do tavora evals run "$agent"done--quiet strips the status banner so --output json lands as clean
JSON suitable for piping.
Next steps
Section titled “Next steps”- CI integration —
tavora deploy --dry-runandrag-eval --gatepatterns for GitHub Actions / GitLab CI / arbitrary shells. - Interactive TUI —
tavora-tuifor chatting with an agent from the terminal. - SDK overview — programmatic equivalents in Go and TypeScript.
- Tutorials — step-by-step integrator walkthroughs.