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

    Fields

    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