Skip to content

Feature request: expose control-stdin pipe in headless mode for external integrators #186

Description

@zts212653

Context

Cat Café (multi-agent orchestrator) integrates DARE via headless CLI mode. Currently we use --auto-approve to bypass approval prompts, but this prevents us from implementing fine-grained approval control from the orchestrator side.

Request

When running in --headless mode, allow external integrators to write to DARE's stdin using the client-control-stdin.v1 protocol to:

  1. Grant/deny approvals selectively (approvals:grant, approvals:deny) instead of blanket --auto-approve
  2. Query runtime state (status:get, actions:list)
  3. Manage MCP tools at runtime (mcp:reload, mcp:show-tool)
  4. List available skills (skills:list)

Current Behavior

  • --headless mode outputs structured JSON events to stdout (works great)
  • --control-stdin flag exists in the codebase (client/render/control.py) but it's unclear if it's fully wired up for external consumption
  • External integrators currently have no way to send control commands during a headless session

Desired Behavior

# Integrator spawns DARE with stdin pipe
python -m client --adapter openrouter --model zhipu/glm-5 \
  run --task "do something" --headless --control-stdin

# Integrator can write to stdin:
echo '{"schema_version":"client-control-stdin.v1","id":"1","action":"approvals:list","params":{}}' > /proc/$PID/fd/0

Why This Matters

Without stdin control, integrators must choose between:

  • --auto-approve (no safety boundary)
  • No approval at all (task hangs on approval.pending)

The control-stdin protocol would allow orchestrators to implement their own approval policies while preserving DARE's audit trail.

Related

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