Summary
Phase A of the agent-abstraction work scoped by #150. Introduce a CodingAgent protocol and route all Claude Code call sites through it — zero user-visible change, zero new features. Lays the foundation for Phases B and C.
Context
Full design in docs/agent-abstraction-spec.md §12 Phase A. Non-trivially informed by Codex CLI research and an audit of ~435 claude references across the codebase.
The existing Packages/CrowClaude/ is already a Claude-specific Swift package containing ClaudeLauncher. It's the natural home for ClaudeCodeAgent.
Checklist
Non-goals
- No Codex code
- No user-visible UI change
- No
Session model change (that's Phase B)
Parent: #150
Summary
Phase A of the agent-abstraction work scoped by #150. Introduce a
CodingAgentprotocol and route all Claude Code call sites through it — zero user-visible change, zero new features. Lays the foundation for Phases B and C.Context
Full design in
docs/agent-abstraction-spec.md§12 Phase A. Non-trivially informed by Codex CLI research and an audit of ~435claudereferences across the codebase.The existing
Packages/CrowClaude/is already a Claude-specific Swift package containingClaudeLauncher. It's the natural home forClaudeCodeAgent.Checklist
CodingAgent,AgentKind,AgentRegistry,StateSignalSource,AgentStateTransition,HookConfigWriterprotocols inCrowCore(or a newCrowAgentpackage)ClaudeCodeAgentinPackages/CrowClaude/; register it inAgentRegistryClaudeState→AgentActivityState;.claudeLaunched→.agentLaunched;onLaunchClaude→onLaunchAgentTerminalReadinessTestsfor the renameHookConfigGeneratorfromSources/Crow/App/intoPackages/CrowClaude/asClaudeHookConfigWriterAppDelegate.hook-eventinto aClaudeHookSignalSourceinCrowClaude;AppDelegateconsumesAgentStateTransitionvaluesClaudeLauncher.generatePrompt/launchCommandbehindClaudeCodeAgentswift testpasses across every package; launching a session looks identical; hook state transitions unchangedNon-goals
Sessionmodel change (that's Phase B)Parent: #150