Metadata-Version: 2.4
Name: cade-cli
Version: 0.20.2
Summary: Cade - The CLI Agent from Arcade.dev (install: curl -fsSL https://arcadeagent.dev/install | sh)
Project-URL: Homepage, https://arcade.dev
Project-URL: Documentation, https://arcadeagent.dev/docs
Project-URL: Install, https://arcadeagent.dev/install
Project-URL: Repository, https://github.com/arcadeai-labs/cade
Project-URL: Issues, https://github.com/arcadeai-labs/cade/issues
Project-URL: Changelog, https://github.com/arcadeai-labs/cade/releases
Author-email: "Arcade AI Inc." <dev@arcade.dev>
License: MIT License
        
        Copyright (c) 2024 Arcade AI Inc.
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: agent,ai,arcade,cli,coding-assistant,llm,mcp
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Code Generators
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: agent-library<1.0.0,>=0.14.3
Requires-Dist: anthropic<1.0.0,>=0.34.0
Requires-Dist: arcade-core<5.0.0,>=4.7.0
Requires-Dist: arcade-mcp-server<2.0.0,>=1.22.0
Requires-Dist: arcade-tdk<4.0.0,>=3.8.0
Requires-Dist: arcadepy<2.0.0,>=1.10.0
Requires-Dist: authlib<2.0.0,>=1.6.0
Requires-Dist: croniter<4.0.0,>=2.0.0
Requires-Dist: filelock<4.0.0,>=3.0.0
Requires-Dist: html2text>=2024.2.26
Requires-Dist: httpx<1.0.0,>=0.27.0
Requires-Dist: keyring<26.0,>=24.0
Requires-Dist: openai<2.0.0,>=1.0.0
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
Requires-Dist: pydantic[email]<3.0.0,>=2.0.0
Requires-Dist: python-telegram-bot<22.0,>=21.0
Requires-Dist: rich<14.0.0,>=13.0.0
Requires-Dist: toml<1.0.0,>=0.10.0
Requires-Dist: typer>0.10.0
Requires-Dist: ulid==1.1
Provides-Extra: build
Requires-Dist: pyinstaller<7.0.0,>=6.16.0; extra == 'build'
Provides-Extra: dev
Requires-Dist: mypy<2.0.0,>=1.10.0; extra == 'dev'
Requires-Dist: pytest-asyncio<1.0.0,>=0.24.0; extra == 'dev'
Requires-Dist: pytest-cov<5.0.0,>=4.0.0; extra == 'dev'
Requires-Dist: pytest-mock<4.0.0,>=3.11.0; extra == 'dev'
Requires-Dist: pytest<9.0.0,>=8.0.0; extra == 'dev'
Requires-Dist: ruff<1.0.0,>=0.5.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material<10.0.0,>=9.5.0; extra == 'docs'
Requires-Dist: mkdocs<2.0.0,>=1.6.0; extra == 'docs'
Provides-Extra: otel
Requires-Dist: opentelemetry-api<2.0.0,>=1.27.0; extra == 'otel'
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.27.0; extra == 'otel'
Requires-Dist: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.27.0; extra == 'otel'
Requires-Dist: opentelemetry-sdk<2.0.0,>=1.27.0; extra == 'otel'
Provides-Extra: training
Requires-Dist: accelerate>=0.27.0; extra == 'training'
Requires-Dist: safetensors>=0.4.2; extra == 'training'
Requires-Dist: torch>=2.1.0; extra == 'training'
Requires-Dist: transformers>=4.38.0; extra == 'training'
Provides-Extra: voice
Requires-Dist: mlx-audio<0.4.0,>=0.2.0; extra == 'voice'
Requires-Dist: mlx-whisper>=0.1.0; extra == 'voice'
Requires-Dist: numpy>=1.24.0; extra == 'voice'
Requires-Dist: sounddevice<1.0.0,>=0.5.5; extra == 'voice'
Requires-Dist: webrtcvad>=2.0.10; extra == 'voice'
Description-Content-Type: text/markdown

# Cade

The CLI agent from [Arcade.dev](https://arcade.dev). Coding, research, and everyday automation — driven from a terminal, a single shell pipe, or a long-lived daemon that replies over Telegram, iMessage, or an editor like Cursor.

```bash
curl -fsSL https://arcadeagent.dev/install | sh
cade
```

That is the **recommended install** — a prebuilt binary from
[arcadeagent.dev](https://arcadeagent.dev/install). No GitHub token, no Python
toolchain. First `cade` walks you through model setup, Arcade login, and
Arcade cloud tools. Re-run the same curl to upgrade.

New here? The [Quickstart](docs/quickstart.md) is the shortest path to a
working session; [Connect Cade to your AI app](docs/use-in-cursor.md) is the same thing
without a terminal. Everything else is in [docs/](docs/index.md).

---

## Highlights

- **Three ways to run it, one binary.** Interactive chat (`cade`), one-shot or pipe (`cade -m "…"`), or a background daemon (`cade daemon`) that serves editors and messaging when no terminal is open.
- **Tools from anywhere.** Built-in local tools (filesystem / shell / git / search / tasks / memory), [Arcade Cloud](https://arcade.dev) tools (Slack, GitHub, Gmail, calendars, …), and any [MCP](https://modelcontextprotocol.io/) 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](https://pypi.org/project/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 agent hooks` / `tasks` / `cron`.
- **Bring your own LLM.** OpenAI, Anthropic, or any OpenAI-compatible endpoint (Ollama, vLLM, Together, Groq, Fireworks, …). `cade chat -L` skips Arcade Cloud entirely.

---

## Install

### Recommended (macOS + Linux)

```bash
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:

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

On Linux the installer ships the **cpu** build today (gpu release assets are
paused). Force a variant later with `CADE_VARIANT=cpu` or `CADE_VARIANT=gpu`
when gpu builds return.

### 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](https://github.com/arcadeai-labs/cade/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](https://arcade.dev))
for cloud tools. Skip Arcade with `cade chat -L` 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`.

```bash
cade account init   # pick provider + model (runs automatically on first launch)
cade login          # Arcade Cloud OAuth (skip it to stay local-only)
cade --version
```

Full install and first-run docs: [`docs/install.md`](./docs/install.md) and
[`docs/quickstart.md`](./docs/quickstart.md).

---

## Quick start

```bash
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 |
| `/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`, `PushNotification`, `WebFetch`, and `WebSearch`.
- **`Memory_*`** — agent-library backed, per-agent indexed knowledge store.
- **Arcade cloud tools + user MCP servers** — Gmail/Slack/GitHub/… via
  `cade mcp authorize arcade`; plus anything else you register.

```bash
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 arcade               # 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`](./docs/mcp.md).

### Custom MCP servers

```bash
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.

```bash
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`](./docs/agents.md#memory).

---

## 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`](./docs/daemon.md).

```bash
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                      # LaunchAgent/systemd unit for this platform
cade daemon status / stop / restart      # health; SIGTERM; reload boot settings
cade daemon token new cursor -e delegate -e resources
```

Adapter + tool config lives in `~/.cade/config/agents/<name>.toml`. The daemon reads adapters and cron at boot, so run `cade daemon restart` after editing them.

**Security defaults are fail-closed:** `allowed_senders = []` blocks everyone on messengers, and the seeded tool policy denies `Local_Bash`. Loopback MCP (hosts / 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):

```bash
# 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 `cade chat -L`, or set `CADE_LOCAL_ONLY=1` to make it the default.

---

## 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`](./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

```bash
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`](./docs/development.md). PRs
welcome — open an issue first for anything substantial.

---

## Resources

- [arcade.dev](https://arcade.dev) — product
- [docs.arcade.dev](https://docs.arcade.dev) — API and tool catalog
- [`docs/`](./docs/) — quickstart, examples, install, config, MCP, agents, automation, channels, voice, development, and adapters. Browse as a site with `make docs` (MkDocs Material)
- [Issues](https://github.com/arcadeai-labs/cade/issues) · [Releases](https://github.com/arcadeai-labs/cade/releases)

## License

MIT
