dari validates, packages, and publishes agent projects to Agent Host.
Full docs: https://docs.dari.dev
brew install mupt-ai/tap/dariOr download a release archive from Releases.
Most commands require dari auth login first. The CLI talks to https://api.dari.dev.
Set DARI_API_KEY to bypass browser login. When set, the CLI uses it as the
bearer for every request and skips cached state entirely.
export DARI_API_KEY=dari_...Create a key from a logged-in shell via dari api-keys create --name ci.
What works under DARI_API_KEY:
dari deploydari agent list/dari agent deletedari session create|get|send|events
What does not work today (server currently enforces Supabase user JWT on these routes):
dari auth login|logout(by design — no login needed)dari org list|create|switch|members|invitedari api-keys list|create|revokedari credentials list|add|remove
For those, run an interactive dari auth login first.
dari auth login # browser login, caches org key locally
dari auth logout # clear local login state
dari auth status # show current login and orgdari org list
dari org create <name>
dari org switch <organization> # slug or id
dari org members
dari org invite <email> [--role owner|admin|member] # default: memberdari deploy [repo_root]Packages the checkout and publishes a new agent version.
| Flag | Description |
|---|---|
--api-key |
Override the cached org key |
--agent-id |
Publish to a specific agent instead of resolving by name |
--dry-run |
Validate and package without uploading |
--quiet |
Suppress per-stage progress on stderr |
dari api-keys list
dari api-keys create --name <name> # plaintext key returned once
dari api-keys revoke <key_id>Stored secrets referenced by name from dari.yml (e.g. llm.api_key_secret: OPENROUTER_API_KEY).
dari credentials list
dari credentials add <name> [value] # prompts if value omitted
dari credentials add <name> --value-stdin < secret.txt
dari credentials remove <name>dari agent list # list deployed agents
dari agent delete <agent_id> [--yes] # soft-deletedari session create --agent <agent_id>
dari session get <session_id>
dari session send <session_id> <text> # or --stdin < message.txt
dari session events <session_id> [--limit N]The repo root must contain:
dari.yml- any prompt files referenced by
instructions - custom tools under
tools/<name>/tool.yml Dockerfileonly ifdari.ymlsets aruntime:block; otherwise the default E2B base image is used.
Supported harness values: pi.
Minimal dari.yml:
name: support-agent
harness: pi
instructions:
system: prompts/system.md
sandbox:
provider: e2b
provider_api_key_secret: E2B_API_KEY
llm:
model: anthropic/claude-sonnet-4.6
base_url: https://openrouter.ai/api/v1
api_key_secret: OPENROUTER_API_KEYFull schema: https://docs.dari.dev/manifest.
go test ./...
go build ./cmd/dariSee CONTRIBUTING.md.