Files
clide/docs/ADRs/0001-cli-first-not-mcp.md
T
jpmschweitzerandClaude Opus 4.7 a782511470 carry forward ADRs, Claude Code config, and changelog discipline
Ports the patterns that crystallized during the short-lived claudian
plugin project (discarded in favour of this Flutter rebuild):

- ADRs 0001-0004 capture decisions that survive the host change —
  CLI-first over MCP, Go for the sidecar, pql as a supporter tool
  that becomes a clide-managed subsystem when present, and the
  ignore-file strategy that wires all file-enumerating surfaces
  through one knob in .pql/config.yaml.
- .claude/settings.json and the git-commit and skill-create skills
  come over with naming updated for clide. The git-commit skill's
  "no Conventional Commits" convention supersedes the Python-era
  clide style under legacy/; the Keep-a-Changelog discipline and
  the project.yaml-version-and-changelog-bumped-together rule
  apply going forward.
- CHANGELOG.md starts fresh at the repo root to track the Flutter
  rebuild. The Python changelog is preserved under legacy/.

.gitignore narrows from `.claude/` to just `.claude/settings.local.json`
so project-level config and skills travel with the repo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 20:38:49 +02:00

1.2 KiB

ADR 0001 — CLI-first, not MCP

Status: accepted Date: 2026-04-20 (ported from the claudian lineage)

Context

Clide exposes capabilities to Claude Code (panes, terminals, git, pql queries, canvas, graph). The two mainstream options for that interface are:

  1. A Model Context Protocol (MCP) server the agent connects to.
  2. A plain Bash CLI the agent calls from its shell, matching the contract pql already follows.

Decision

Claude talks to Clide exclusively via Bash (clide ...). No MCP server. No protocol layer in Claude's face. The CLI uses the same exit-code + stderr-JSON contract as pql.

Consequences

  • Same mental model as pql for the agent — one tool-use pattern covers both.
  • No MCP runtime to host, authenticate, or keep in sync with client versions.
  • User/Claude parity is easier to enforce: every CLI subcommand must have a UI affordance in the Flutter app and vice versa.
  • Claude Code's Bash(clide *) allow rule is the only configuration Clide needs on the agent side.
  • If an MCP-only integration becomes compelling later (e.g. a multi-agent scenario), nothing here precludes adding one that shells out to the same CLI.