Skip to content

Claude SDK HITL bridge: live cluster e2e (real AskUserQuestion round-trip) #71

Description

@gbasin

Engineering is DONE + merged; this tracks the one remaining piece — the live kind-cluster e2e for the Claude SDK HITL bridge (deferred to a watched session: it drives the cluster + spends real model calls). Sibling of #58 (harness-resume live e2e); can be run in the same watched session.

What's landed

  • Centaur fork (gbasin/centaur, branch main): services/sandbox/claude-sdk-bridge.mjs (commit c79ebb0) maps the Claude Agent SDK AskUserQuestion / canUseTool path to Atrium/Centaur question_requested frames and answers back, with defer/resume. Wired via the Dockerfile (/usr/local/bin/claude-sdk-bridge) + entrypoint.sh (CENTAUR_CLAUDE_APP_BRIDGE_COMMAND).
  • Atrium (master): product-side HITL already lands question_requestedpendingQuestion → the pane's input banner → POST /api/sessions/:id/answer. The @atrium/centaur-client claudeQuestions.ts mapper carries multiSelect + option previews.
  • Tests: harness-server integration tests use a fake SDK — claude_sdk_bridge_maps_ask_user_question_with_fake_sdk, claude_blocks_mode_uses_sdk_bridge_for_hitl_questions, fake_claude_blocks_mode_relays_sdk_question_answers. No real-SDK / real-cluster validation yet.

E2E to run (no drive-script written yet)

  1. Deploy the fork's api-rs + sandbox images to the kind centaur cluster (just build-one … && just deploy) — same setup as Harness-resume: live cluster e2e (Claude + Codex teardown→resume) #58.
  2. Spawn a Claude session and drive a turn that triggers a real AskUserQuestion (a prompt that makes the agent ask the user to choose between options — ideally one multiSelect and one with option previews).
  3. Confirm the question surfaces in the Atrium session pane (the question_requested banner) with correct options / multiSelect / preview rendering.
  4. Answer via the pane → confirm it round-trips back into the Claude run (updatedInput.answers, keyed by question text) and the agent proceeds with the chosen answer.
  5. Confirm defer/resume: a waiting question survives a sandbox pause/replace (ties into Harness-resume: live cluster e2e (Claude + Codex teardown→resume) #58's resume path).

Pass = a real Claude AskUserQuestion surfaces in the Atrium pane, the human answer round-trips into the SDK run, and multiSelect + previews render correctly.

Refs: ATRIUM_FORK.md (fork surface), notes/claude-sdk-hitl-poc.md (Atrium POC + the "Next Centaur Work", now built). Sibling: #58.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions