Question
How challenging is it to swap out the underlying CLI driving Crow sessions (i.e. instead of Claude Code, use Codex, OpenCode, or Cursor)? Are the commands an interface somewhere that is hot-swappable, or are they baked in across the codebase?
What to investigate
-
Inventory CLI coupling points. Find every place Crow assumes the CLI is claude:
- Terminal launch commands (
crow new-terminal --command "claude ...")
- The
send command's input format (e.g., trailing newline semantics, slash-command syntax like /crow-workspace, /crow-create-ticket)
- Skill resolution paths (
.claude/skills/..., .claude/CLAUDE.md, .claude/config.json)
- Permission/sandbox model assumptions (e.g.,
dangerouslyDisableSandbox)
- Hook integration points
- Attribution trailers / footers
-
Identify the interface boundary (if any). Is there a single "CLI adapter" type/protocol, or is claude-specific logic scattered across:
- The Swift app (terminal spawning, env, args)
- The setup.sh / preflight scripts
- The slash-command skill files (which only make sense in Claude Code)
- The auto-pickup queue / job runner
-
Compare CLI capabilities. For each candidate (Codex CLI, OpenCode, Cursor CLI/agent), map the equivalent of:
- Non-interactive prompt invocation
- Skill/slash-command equivalents (custom commands, agent modes)
- Hook/automation surface
- Sandbox/permission model
- Memory / persistent context
- Tool-call output format Crow can scrape
-
Define a swap strategy. Output one of:
- Plug-in: small adapter behind a
CLIBackend protocol; skills/commands become per-backend.
- Fork: Crow becomes CLI-specific; another backend means a parallel app.
- Hybrid: core orchestration stays, but Crow's skill library is owned by the user per-backend.
-
Effort estimate. Rough T-shirt sizing (S/M/L/XL) per candidate CLI, and which one is the realistic next backend if we pursue this.
Deliverable
A written analysis (issue comment or short doc under docs/) covering items 1–5 above. No implementation — the goal is to know whether a swap is a weekend hack, a quarter-long project, or architecturally infeasible without a rewrite.
🐦⬛ Created with Crow via Claude Code
Question
How challenging is it to swap out the underlying CLI driving Crow sessions (i.e. instead of Claude Code, use Codex, OpenCode, or Cursor)? Are the commands an interface somewhere that is hot-swappable, or are they baked in across the codebase?
What to investigate
Inventory CLI coupling points. Find every place Crow assumes the CLI is
claude:crow new-terminal --command "claude ...")sendcommand's input format (e.g., trailing newline semantics, slash-command syntax like/crow-workspace,/crow-create-ticket).claude/skills/...,.claude/CLAUDE.md,.claude/config.json)dangerouslyDisableSandbox)Identify the interface boundary (if any). Is there a single "CLI adapter" type/protocol, or is
claude-specific logic scattered across:Compare CLI capabilities. For each candidate (Codex CLI, OpenCode, Cursor CLI/agent), map the equivalent of:
Define a swap strategy. Output one of:
CLIBackendprotocol; skills/commands become per-backend.Effort estimate. Rough T-shirt sizing (S/M/L/XL) per candidate CLI, and which one is the realistic next backend if we pursue this.
Deliverable
A written analysis (issue comment or short doc under
docs/) covering items 1–5 above. No implementation — the goal is to know whether a swap is a weekend hack, a quarter-long project, or architecturally infeasible without a rewrite.🐦⬛ Created with Crow via Claude Code