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.

curl -fsSL https://arcadeagent.dev/install | sh   #  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 / 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).
  • Agents + per-agent memory. Multiple agents, each with their own model, system prompt, tools, and an indexed memory store backed by agent-library.
  • Extensibility surface. Hooks (lifecycle events), tasks (durable work), cron (scheduled prompts) — 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
Install script (recommended) curl -fsSL https://arcadeagent.dev/install | sh
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

The install script detects your OS/arch, downloads the matching prebuilt binary (macOS arm64, Linux x64), verifies its checksum, and drops cade in ~/.local/bin — no GitHub token required. Pin a version or install location:

CADE_VERSION=0.15.5 CADE_INSTALL_DIR=/usr/local/bin \
  sh -c "$(curl -fsSL https://arcadeagent.dev/install)"

On Linux the installer auto-picks a cpu or gpu build (GPU when nvidia-smi detects a card; the GPU build bundles the CUDA stack and is a much larger download). Force it with CADE_VARIANT=cpu or CADE_VARIANT=gpu.

(Windows: grab the .zip from the releases page, or pip install cade-cli.)

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.

The first run walks you through picking a model provider and key (stored in your OS keyring); re-run it any time with cade init.

cade init           # pick provider + model (runs automatically on first launch)
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 resume                                # resume the most recent thread
cade resume "auth-rewrite"                 # resume a thread by name
cade use reviewer                          # switch the current agent
cade --voice                               # speak / hear (requires cade-cli[voice])

Top-level options

Flag Description
-m, --message Single-message mode; piped stdin is appended to the prompt
--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, /notify Coordination surfaces (mirrored as cade tasks / cade cron / cade hooks)
/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-agent 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 on the agent's ~/.cade/config/agents/<name>.toml [[mcp]] list (with cade.toml [agent_defaults].mcp as the shared default). Servers with large catalogs are auto-deferred (parameter schemas stripped to keep tool-list bytes down) and fetched on demand via Local_ToolSchema.


Agents + memory

Each agent bundles a model, system prompt, tools, and memory. The current agent is ambient — most commands act on it.

cade new reviewer --prompt "You are a meticulous code reviewer."  # create + switch
cade list                                     # all agents
cade use reviewer                             # switch the current agent
cade info / cade edit reviewer                # inspect / change config

cade mem                                      # the current agent's memory (status)
cade mem add ~/notes                          # index a directory
cade mem search "auth design"                 # semantic search
cade mem warm                                 # pre-load the semantic memory model

Memory is per-agent — each agent has its own ~/.cade/data/agents/<id>/memory/.librarian/ index, so a reviewer agent's notes never leak into another. Cade advertises Memory_* tools without starting the memory server; the first actual memory call starts it and keeps it warm for later calls. Use cade mem warm when you want to pay that semantic-search warmup before a conversation.


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 — model, memory, and tools carry across messages.

cade serve init                          # wizard: bot token, allowed senders
cade serve                               # foreground (current agent)
cade serve --agent ops                   # serve a specific agent (one daemon per agent)
cade serve list                          # agents with a running daemon
cade serve --install launchd             # macOS LaunchAgent (or --install systemd)
cade serve status / stop                 # health, uptime; SIGTERM running daemon

Each agent's serve config lives in ~/.cade/config/agents/<name>.toml [serve]. Edit and kill -HUP $(cat ~/.cade/run/agents/<name>/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

Three 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 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

Cross-agent messaging is set up with cade link / cade channel (an agent can only reach another it's been linked to). 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

# Or create a dedicated agent for the local model
cade new local-qwen --model qwen3:4b
cade 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 Global settings + [agent_defaults] (model, provider, UI, …)
config/agents/<name>.toml Per-agent config (model, prompt, [[mcp]], [serve], hooks)
data/agents/<id>/ Per-agent state: threads/ memory/ tasks/ inbox/
run/agents/<name>/ Per-agent daemon runtime: serve.pid, mcp-services, cron lease
logs/cade.log Rotating log file

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.15.9.tar.gz (356.7 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.15.9-py3-none-any.whl (441.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cade_cli-0.15.9.tar.gz
  • Upload date:
  • Size: 356.7 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.15.9.tar.gz
Algorithm Hash digest
SHA256 090abb7610560b04cf45eeb9f38244a09bbd556ad427b53eca63db074e3bc547
MD5 57de33c654472309675edfd1782abaa4
BLAKE2b-256 8b84fbbb2f54fbe633f8de16a5852ff3bf18ee60a96a0ba020913b358d8dab02

See more details on using hashes here.

Provenance

The following attestation bundles were made for cade_cli-0.15.9.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.15.9-py3-none-any.whl.

File metadata

  • Download URL: cade_cli-0.15.9-py3-none-any.whl
  • Upload date:
  • Size: 441.1 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.15.9-py3-none-any.whl
Algorithm Hash digest
SHA256 dd0a86178611ce44acaf257b2ce14f58c90ca00dc4481eb6a508866348335a2b
MD5 bde3b744f32e8051758cc749b0aed1ca
BLAKE2b-256 743790c0d8582b0ba2156dcaef89a80fa27bc951e60d4d52c5fb6300c21e4417

See more details on using hashes here.

Provenance

The following attestation bundles were made for cade_cli-0.15.9-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