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
cade
That is the recommended install — a prebuilt binary from
arcadeagent.dev. No GitHub token, no Python
toolchain. First cade walks you through model setup, Arcade login, and the
Arcade Agent Hub. Re-run the same curl to upgrade.
Highlights
- Three deployment modes from the same binary. Interactive chat (
cade), one-shot or pipe (cade -m "…"), or a headless daemon (cade daemon) that serves MCP hosts and messaging. - 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, andcontext.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 ascade agent hooks/tasks/cron. - Bring your own LLM. OpenAI, Anthropic, or any OpenAI-compatible endpoint (Ollama, vLLM, Together, Groq, Fireworks, …).
--local-onlyskips Arcade Cloud entirely.
Install
Recommended (macOS + Linux)
curl -fsSL https://arcadeagent.dev/install | sh
The script detects your OS/arch, downloads the matching prebuilt binary
(macOS arm64, Linux x64), verifies its checksum, and drops cade in
~/.local/bin. Pin a version or install location:
CADE_VERSION=0.16.9 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.
Alternatives
| Source | Command | When |
|---|---|---|
| uv | uv tool install cade-cli |
Prefer a PyPI-managed tool venv |
| pip | pip install cade-cli |
Windows, or no curl install |
| From source | git clone … && uv sync |
Contributing / hacking on Cade |
(Windows: grab the .zip from the releases page, or pip install cade-cli.)
Prerequisites to run Cade: an LLM provider key (OPENAI_API_KEY or
ANTHROPIC_API_KEY), and an Arcade account (arcade.dev)
for cloud tools. Skip Arcade with --local-only or CADE_LOCAL_ONLY=1. The
curl installer does not require a local Python — Python 3.11+ is only needed
for the uv / pip / from-source paths.
The first run walks you through picking a model provider and key (stored in your
OS keyring); re-run it any time with cade account init.
cade account 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 chat # same
cade chat -r # resume most recent thread
cade chat --resume "auth-rewrite" # resume a named thread
cade -m "What changed in HEAD?" # single message, then exit
cade -m "What went wrong?" < error.log # prompt + file/stdin
cade --voice # speak / hear (requires cade-cli[voice])
cade --help shows: chat, agent, mcp, daemon, account, login,
logout. Tools are under cade agent tools. Older flat names (cade list,
cade mem, cade tools, cade resume, …) still work as hidden aliases.
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 (also cade agent tasks / cron / 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, andWebSearch.Memory_*— agent-library backed, per-agent indexed knowledge store.- Arcade Agent Hub + user MCP servers — Hub for Gmail/Slack/GitHub/… (
cade mcp authorize hub); plus anything else you register.
cade agent tools list # MCP tools (Local_* hidden by default)
cade agent tools list --source local # built-in Local_* tools only
cade agent tools search "send slack" # keyword search
cade agent tools info Local_ReadFile # full schema + description
cade mcp authorize hub # Arcade catalogue (OAuth)
cade mcp install-hosts # register Cade in Cursor / Claude / …
The full local tool surface (including the bidirectional MCP capabilities and cade daemon 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 / 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 agent new reviewer --prompt "You are a meticulous code reviewer."
cade agent list
cade agent use reviewer
cade agent info / cade agent edit reviewer
cade agent mem add ~/Notes # one step: register + index
cade agent mem # status
cade agent mem search "auth design"
Memory is per-agent under
~/.cade/data/agents/<id>/memory/<agent>/.librarian/. Cade keeps the index and
embedder ready (auto-heal empty indexes, warm after add/update, longer first
search timeouts). The model uses Memory_* for notes recall — not Local_*
filesystem tools. Details: docs/agents.md.
Headless daemon: cade daemon
One long-lived supervisor serves all your agents to MCP hosts (Claude Desktop, Cursor) and messaging adapters (Telegram, iMessage). Each conversation gets its own persistent thread — model, memory, and tools carry across messages. See docs/daemon.md.
cade daemon init # mint a token + optional Telegram/iMessage wizard
cade daemon start # foreground (gateway + messaging)
cade daemon start -v # also print message traffic
cade daemon install launchd # macOS LaunchAgent (or: systemd)
cade daemon status / stop # health; SIGTERM
cade daemon token new cursor -e delegate -e resources
Adapter + tool config lives in ~/.cade/config/agents/<name>.toml. Edit and kill -HUP $(cat ~/.cade/run/daemon.pid) to reload without restart.
Security defaults are fail-closed: allowed_senders = [] blocks everyone on messengers; tools are default-deny against [tools].allow. Loopback MCP (stdio shim / local CLI) needs no token; pass cade daemon start --auth or bind off-loopback to require bearer tokens.
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 agent hooks … |
| Tasks | Durable work units that survive turn boundaries | cade agent tasks … |
| Cron | Scheduled prompts the agent runs on a timer | cade agent cron … |
Cross-agent messaging is set up with cade agent link / cade agent channel.
See cade agent --help for the full surface.
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 agent new local-qwen --model qwen3:4b
cade agent 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]], [tools], [adapters.*], hooks) |
data/agents/<id>/ |
Per-agent state: threads/ memory/ tasks/ inbox/ |
run/daemon.pid |
Single gateway-supervisor pidfile |
run/agents/<name>/ |
Per-agent runtime: mcp-services, grants |
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_ATTACH=0 |
Don't attach CLI turns to cade daemon |
CADE_AUTOSTART=0 |
Don't spawn the daemon when attach needs one |
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
- arcade.dev — product
- docs.arcade.dev — API and tool catalog
docs/— quickstart, examples, install, config, MCP, agents, automation, channels, voice, development, and adapters. Browse as a site withmake docs(MkDocs Material)- Issues · Releases
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cade_cli-0.16.12.tar.gz.
File metadata
- Download URL: cade_cli-0.16.12.tar.gz
- Upload date:
- Size: 433.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a38c0433aee1d4201a9f60a8568be31bc09aec00b03f6eb201d532f35c2ca0f2
|
|
| MD5 |
ef280a7685b33c6772ec6000fc5248c1
|
|
| BLAKE2b-256 |
d0ea9348230cd357d42332bcbaec34aad7e2350bdae81ecb640d88e7db06f42c
|
Provenance
The following attestation bundles were made for cade_cli-0.16.12.tar.gz:
Publisher:
release.yml on arcadeai-labs/cade
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cade_cli-0.16.12.tar.gz -
Subject digest:
a38c0433aee1d4201a9f60a8568be31bc09aec00b03f6eb201d532f35c2ca0f2 - Sigstore transparency entry: 2257346634
- Sigstore integration time:
-
Permalink:
arcadeai-labs/cade@cf7ab5bf9fa2fadcf22d68ceefaa6f95593de2a8 -
Branch / Tag:
refs/tags/v0.16.12 - Owner: https://github.com/arcadeai-labs
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cf7ab5bf9fa2fadcf22d68ceefaa6f95593de2a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cade_cli-0.16.12-py3-none-any.whl.
File metadata
- Download URL: cade_cli-0.16.12-py3-none-any.whl
- Upload date:
- Size: 543.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d59ba462337566ba148354ca83af0b2f4aeca4ecfdc58555bdf257c1073c08f0
|
|
| MD5 |
a3f5b8548910c03f5956bf0d6fda9909
|
|
| BLAKE2b-256 |
627e5121a137edaa1c797fe146417f91466210e6086522568cf159acf5d9742f
|
Provenance
The following attestation bundles were made for cade_cli-0.16.12-py3-none-any.whl:
Publisher:
release.yml on arcadeai-labs/cade
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cade_cli-0.16.12-py3-none-any.whl -
Subject digest:
d59ba462337566ba148354ca83af0b2f4aeca4ecfdc58555bdf257c1073c08f0 - Sigstore transparency entry: 2257346640
- Sigstore integration time:
-
Permalink:
arcadeai-labs/cade@cf7ab5bf9fa2fadcf22d68ceefaa6f95593de2a8 -
Branch / Tag:
refs/tags/v0.16.12 - Owner: https://github.com/arcadeai-labs
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cf7ab5bf9fa2fadcf22d68ceefaa6f95593de2a8 -
Trigger Event:
push
-
Statement type: