Skip to main content

Cade - The CLI Agent from Arcade.dev

Project description

Cade

The CLI agent from Arcade.dev. Coding, research, and everyday automation — driven from a terminal, a single shell pipe, or a long-lived daemon that replies over Telegram.

brew install ArcadeAI/tap/cade   #  or:  uv tool install cade-cli   |   pip install cade-cli
cade login
cade

Highlights

  • Three deployment modes from the same binary. Interactive chat (cade), one-shot or pipe (cade -m "…"), or a headless daemon that replies over messaging (cade serve).
  • Tools from anywhere. Built-in local tools (filesystem / shell / git / search / tasks / channels / memory), Arcade Cloud tools (Slack, GitHub, Gmail, calendars, …), and any MCP server you register — all unified under one tool surface.
  • Bidirectional MCP. Tools can call context.ui.elicit(…) for structured input, context.log.* for live operator logs, and context.progress.report(…) for editable progress UI — routed end-to-end through whichever adapter is active (Telegram inline keyboard, terminal prompt).
  • Personas + per-persona memory. Multiple agent profiles with their own system prompt and an indexed memory store backed by agent-library.
  • Extensibility surface. Hooks (lifecycle events), tasks (file-backed durable work), cron (scheduled prompts), channels (cross-session pub/sub) — all available to the agent as Local_* tools and to you as cade <subcommand>.
  • Bring your own LLM. OpenAI, Anthropic, or any OpenAI-compatible endpoint (Ollama, vLLM, Together, Groq, Fireworks, …). --local-only skips Arcade Cloud entirely.

Install

Source Command
Homebrew brew install ArcadeAI/tap/cade
uv uv tool install cade-cli
pip pip install cade-cli
From source git clone https://github.com/arcadeai-labs/cade.git && cd cade && uv sync

Homebrew installs from a private release feed. Export HOMEBREW_GITHUB_API_TOKEN (a token with read access to arcadeai-labs/cade) before running brew install.

Prerequisites: Python 3.11+, an Arcade account (arcade.dev) for cloud tools, and an LLM provider key (OPENAI_API_KEY or ANTHROPIC_API_KEY). Skip the Arcade account with --local-only or CADE_LOCAL_ONLY=1.

cade login          # Arcade Cloud OAuth (skip with --local-only)
cade --version

Full install and first-run docs: docs/install.md and docs/quickstart.md.


Quick start

cade                                       # interactive chat
cade -m "What changed in HEAD?"            # single message, then exit
cade -m "What went wrong?" < error.log     # prompt + file/stdin
cade -r                                    # resume the most recent thread
cade resume "auth-rewrite"                 # resume a thread by name
cade --persona reviewer                    # use a saved persona's system prompt
cade --voice                               # speak / hear (requires cade-cli[voice])

Top-level options

Flag Description
-r, --resume Resume most recent thread
-m, --message Single-message mode; piped stdin is appended to the prompt
-P, --persona Use a saved persona
-V, --voice Voice mode; install cade-cli[voice] first
-v, --verbose Debug logging
--version Print version

In-chat slash commands

Command Description
/help List commands
/clear Clear screen
/copy Copy last response
/logs Recent log entries
/thread, /history Current thread info
/pin, /unpin Pin reference material into the session
/tasks, /cron, /hooks, /channels, /notify Coordination surfaces (mirrored as cade tasks / cade cron / cade hooks / cade channels)
/usage Context-window status and token usage
/cd, /pwd, /! Shell shortcuts
Ctrl+C Exit

Tools

Tools come from three sources and are addressed uniformly by their registered name:

  • Local_* — built-in: filesystem (ReadFile, WriteFile, Edit, ListFiles), shell (Bash), Search, Git, Task*, AskUserQuestion, RetrieveToolResult, ToolSchema, PinContext, PushNotification, WebFetch, and WebSearch.
  • Memory_* — agent-library backed, per-persona indexed knowledge store.
  • Arcade Cloud + user MCP servers — anything you register.
cade tools list                         # all tools, all sources
cade tools list --source local          # filter by source
cade tools search "send slack"          # keyword search
cade tools info Local_ReadFile          # full schema + description

The full local tool surface (including the bidirectional MCP capabilities and cade serve integration) is documented in docs/mcp.md.

Custom MCP servers

cade mcp add my-server http://localhost:8080
cade mcp add my-server http://… --auth bearer -t <token>
cade mcp authorize my-server                      # OAuth flow (browser)
cade mcp list / status / test / enable / disable / rm

User MCP servers register at ~/.cade/config/contexts/<context>.toml [[mcp]]. Servers with large catalogs are auto-deferred (parameter schemas stripped to keep tool-list bytes down) and fetched on demand via Local_ToolSchema.


Personas + memory

cade persona list / create / get / edit / delete / default   # manage system prompts
cade --persona reviewer                       # use one for a session

cade mem list                                 # sources indexed for the active persona
cade mem add ~/notes                          # index a directory
cade mem search "auth design"                 # semantic search

Memory is persona-scoped — each persona has its own ~/.cade/data/contexts/<context>/memory/<persona>/.librarian/ index, so a reviewer persona's notes never leak into default.


Headless daemon: cade serve

Run Cade as a long-lived daemon that replies through adapters. Telegram is supported for personal bot workflows, and Desktop exposes a local WebSocket for native clients. Each conversation gets its own persistent thread — persona, memory, and tools carry across messages.

cade serve init                          # wizard: bot token, allowed senders
cade serve                               # foreground
cade serve --install launchd             # macOS LaunchAgent (or --install systemd)
cade serve status / stop                 # health, uptime; SIGTERM running daemon

Config lives at ~/.cade/config/contexts/<context>.toml [serve]. Edit and kill -HUP $(cat ~/.cade/run/serve.pid) to reload without restart.

Security defaults are fail-closed: allowed_senders = [] blocks everyone; tools are default-deny against [serve.tools].allow (globs / regex / pipe lists supported); deny always wins.

The MCP transport is fully bidirectional, so tools running inside the daemon can elicit structured input, stream live progress, and emit logs through whichever adapter is active. See docs/adapters/ for adapter details, docs/mcp.md for protocol details, and docs/configuration.md for the full daemon config reference.


Extensibility: hooks, tasks, cron, channels

Four primitives the agent uses directly (as Local_* tools) and you can drive from the CLI:

Surface What it is CLI
Hooks Lifecycle event handlers (pre/post tool, user prompt submit) cade hooks list / add / remove / test
Tasks File-backed durable work units that survive turn boundaries cade tasks list / get / create / update / delete
Cron Scheduled prompts the agent runs on a timer cade cron list / add / remove / enable / disable / run-now
Channels JSONL-backed inter-session pub/sub cade channels list / send / recv / clear

See docs/channels.md for the channels protocol; hooks and tasks/cron details live in their respective cade <subcommand> --help outputs.


Bring your own LLM

Cade works with any OpenAI-compatible endpoint. Three ways to wire one in (CLI flag → env → config, first match wins):

# CLI flag for Ollama. Use a model from `ollama list`.
cade chat -L --endpoint http://localhost:11434 --model qwen3:4b

# Environment for one-shot mode
cade context create local-qwen --model qwen3:4b
cade context use local-qwen
export OLLAMA_BASE_URL="http://localhost:11434"
CADE_LOCAL_ONLY=1 cade -m "hello from a local model"

# Config — ~/.cade/config/cade.toml
[model_settings]
host = "http://localhost:8000/v1"
api_key = "ollama"

Skip Arcade Cloud authentication entirely with --local-only or CADE_LOCAL_ONLY=1 when running against local LLMs.


Configuration

All state lives under ~/.cade/. Override the location with CADE_HOME=/path/to/alt.

File Purpose
config/cade.toml Model / provider / UI settings
data/contexts/<context>/history.db Thread + message storage
logs/cade.log Rotating log file
config/contexts/<context>.toml [[mcp]] User MCP server registry
config/contexts/<context>.toml [serve] cade serve daemon config
personas/, memory/, tasks/, channels/ Persona-scoped state

Full layout, env vars, and TOML schema in docs/configuration.md.

Common env vars

Variable Purpose
OPENAI_API_KEY / ANTHROPIC_API_KEY LLM provider keys
OPENAI_BASE_URL Custom OpenAI-compatible endpoint
ARCADE_API_KEY, ARCADE_BASE_URL Arcade Cloud (alternative to OAuth)
CADE_LOCAL_ONLY=1 Skip remote tools entirely
CADE_HOME Override config directory
CADE_PROJECT_ROOT Sandbox Local_* filesystem tools to this root

Contributing

git clone https://github.com/arcadeai-labs/cade.git
cd cade
uv sync --extra dev
uv run pytest
uv run ruff check src/ tests/

Style: Python 3.11+ with modern type hints (dict, list, | None); ruff for lint + format; pytest with asyncio_mode = "auto". Public functions and classes get docstrings.

Build/release docs live in docs/development.md. PRs welcome — open an issue first for anything substantial.


Resources

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cade_cli-0.13.2.tar.gz (299.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cade_cli-0.13.2-py3-none-any.whl (377.9 kB view details)

Uploaded Python 3

File details

Details for the file cade_cli-0.13.2.tar.gz.

File metadata

  • Download URL: cade_cli-0.13.2.tar.gz
  • Upload date:
  • Size: 299.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cade_cli-0.13.2.tar.gz
Algorithm Hash digest
SHA256 7c659317d2771a137361d30a80e94314c4d78c63b3b56e25e30f57bd6a41d81e
MD5 75cb9853b8c05c2c1d88f2a53bbf42b5
BLAKE2b-256 75e06b52809022cf2564748a221eec1c8464667cf94aa9cb53c9da80ffb7eef8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cade_cli-0.13.2.tar.gz:

Publisher: release.yml on arcadeai-labs/cade

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cade_cli-0.13.2-py3-none-any.whl.

File metadata

  • Download URL: cade_cli-0.13.2-py3-none-any.whl
  • Upload date:
  • Size: 377.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cade_cli-0.13.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1bbae7e4a70af73df003bfcd856291387185492b02e3d4e0f6e7495852446fa9
MD5 819bf2267d468293c19b147b86b0f282
BLAKE2b-256 ffa47829c4c5faead90a8ffcb7ace54527059833091dbba8334915fcbc9f4f24

See more details on using hashes here.

Provenance

The following attestation bundles were made for cade_cli-0.13.2-py3-none-any.whl:

Publisher: release.yml on arcadeai-labs/cade

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page