Skip to content

[FEATURE] Support ask_user on the Claude Code harness #2916

Description

@djannot

Disclosure: this issue was drafted by an AI agent (Claude) while testing kagent 1.x on Agent
Substrate, and reviewed by a human before filing.

Summary

On the Claude Code harness an agent cannot ask the user a question through the HITL extension:
there is no ask_user tool. The kagent (Go ADK) runtime and the Codex harness both have one, and
the human-in-the-loop docs describe ask_user as a built-in tool that "is automatically added to
every agent".

What happens

As a user I ask an agent on the Claude Code harness to use ask_user to let me choose between two
options. The turn completes instead of pausing, and Claude answers:

I don't actually have an `ask_user` tool available in my current toolset. However, I can ask you
directly!

On the kagent and Codex runtimes the same request pauses the task in TASK_STATE_INPUT_REQUIRED
with an ask_user_request in the https://kagent.dev/extensions/hitl/v1 metadata, and the answer
resumes the turn.

Reproduce

On kagent v1.0.0-alpha2 with Agent Substrate and a claude Harness, any AgentTemplate under that
Harness, a client that sends the a2a-extensions: https://kagent.dev/extensions/hitl/v1 header,
and the message Use the ask_user tool to ask me which database I prefer, offering the choices PostgreSQL and MySQL. Then tell me which one I chose.

Ask

Give the Claude Code harness the same ask-user path as the Codex harness, so an agent can pause a
turn to ask the user a question on every runtime.

Where the gap is: only the Codex driver creates ask-user requests

The shared harness runtime already handles ask-user requests end to end
(go/harness/runtime/a2a/executor.go: runtime.AskUserRequest becomes an ask_user_request, and
the answer is validated and passed back as runtime.AskUserResponse). Only the Codex driver
produces them (go/harness/codex/internal/driver/process.go, decodeAskUserRequest, from Codex's
request_user_input). The Claude driver has no such path.

Two possible routes, neither verified:

  • Claude Code has a built-in question tool (AskUserQuestion). The driver restricts built-in tools
    with --tools (bareBuiltinTools = "Bash,Edit,Read,Write,Glob,Grep,WebSearch,WebFetch"), so it
    is not available today; the driver could allow it and translate its calls into ask-user requests.
  • The harness already serves tool approval to Claude Code through an MCP permission-prompt tool
    (--permission-prompt-tool); an ask_user MCP tool served the same way would pause the turn
    through the same broker.
Scope
  • Observed on kind with kagent v1.0.0-alpha2 and Agent Substrate 0.2.0-beta5. Source-confirmed
    on main (2026-09-23).
  • Tool approval (requireApproval) works on the Claude Code harness: approve, deny, and the
    plain-text hint without the extension all behave as on the other runtimes.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions