Architect: DockerExecClaudeAgent chat relay #1132
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/agent-hooks#1132
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
As the operator, I want architect chat turns relayed through
docker execinto the persistent container so that the Claude SDK runs inside the container rather than in the host service process.Depends on the container being provisioned (architect container + reconciliation issue).
Spec:
specs/architect-dockerize.mdAcceptance criteria
DockerExecClaudeAgent
DockerExecClaudeAgentclass implementsClaudeAgentPortby runningdocker exec -i architect-default <claude invocation>and piping stdin/stdout through.AsyncIterable<TaskEvent>interface asSdkClaudeAgent.runArchitectTurnusesDockerExecClaudeAgentin production via the existingclaudeAgent?: ClaudeAgentPortinjection point (no interface change; tests keep injecting fakes without Docker).Session continuity
POST /architect/chatrequests:claude_session_idstored in SQLite is passed to the exec invocation and the SDK resumes correctly./claude-configpath.Abort and steer
POST /architect/abort/:task_idkills the runningdocker execprocess cleanly; the abort event propagates to the SDK andrunArchitectTurnreturnsstatus: "cancelled".POST /architect/steer/:task_idcontinues to work viasteerInputIterator— no change to the steer channel wiring.Tool policy
buildArchitectRunRequesttool policy blocksReadandBashpaths under/claude-config(prevent the agent from reading its own mounted token).touchesHostSecret(or equivalent) is updated to include/claude-configin its deny list.Tests
architect.test.tstests pass — the fakeClaudeAgentPortinjection keeps them Docker-free.DockerExecClaudeAgentemits correctly-shapedTaskEvents when the mockeddocker execsubprocess writes valid SDK output to stdout.just qapasses.Out of scope
isLocalFS branch — that is a follow-up cleanup issue once this relay is confirmed working in production./architect/*HTTP surface or workspace UI.References
specs/architect-dockerize.md— "Chat relay" and "Tool policy adjustments" sectionsapps/server/src/domain/agent/architect.ts—runArchitectTurn,buildArchitectRunRequestapps/server/src/infrastructure/agent/sdk-adapter.ts—SdkClaudeAgent(reference implementation)