Skip to content

Investigate underlying CLI swap (Claude Code → Codex / OpenCode / Cursor) #401

@dgershman

Description

@dgershman

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

  1. 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
  2. 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
  3. 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
  4. 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.
  5. 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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions