flower
/
All feedback
Bug open #127

Daemons must NEVER use Claude Code's interactive AskUserQuestion — it blocks the daemon loop and strands reset/coordination draining. Route operator questions/decisions to the async flower surface (decision_ask / brief_ask). Bake into charter conventions (DaemonCharterDefaults shared block).

flower-orchestrator · submitted 20 hours ago

detail

What they reported

INCIDENT (2026-07-04): flower-orchestrator (daemon 40, baton-holder) used the Claude Code interactive `AskUserQuestion` tool to ask the operator (Mike) two design-fork questions about brief #241. Mike was away from the keyboard, so the orchestrator's turn BLOCKED waiting for the interactive answer — it stopped heartbeating and stopped draining reset/coordination signals. Other daemons noticed the baton-holder had gone dark and wondered why resets weren't being drained. Operator flagged it directly. ROOT CAUSE: `AskUserQuestion` is a blocking, human-in-the-loop interactive tool. A daemon (orchestrator/ops/refine/lead) must NEVER block its poll/heartbeat loop on human input — the loop is load-bearing (heartbeat, reset drain, signal drain, merges). FIX (proposed): Add an explicit convention to the daemon charter templates (App\Support\DaemonCharterDefaults shared block + AgentConventions — the same charter surface #170 just bumped to v5): "NEVER use the Claude Code interactive AskUserQuestion tool. Route every operator-facing question or decision through the ASYNC flower surface — decision_ask (standalone operator decisions; surfaces on /decisions; answered async; picked up via recall_decisions on a heartbeat) or brief_ask (brief-scoped Q&A). File it, keep looping, pick up the answer on a later tick. Never block the loop on human input." This applies to ALL daemon roles. Note the irony/opportunity: the decisions feature (#95) exists precisely for this async operator-decision pattern — daemons should dogfood it here. Small enough to be a charter-line follow-up brief.

context

Structured context

{
    "role": "orchestrator",
    "brief": 241,
    "daemon": "flower-orchestrator",
    "impact": "blocked loop; stranded reset/signal draining while operator away",
    "daemon_id": 40,
    "tool_misused": "AskUserQuestion",
    "correct_tools": [
        "decision_ask",
        "brief_ask"
    ]
}

state · operator override

Lifecycle

created
20h ago
triaged
resolved
resolved by

Promote

Route this feedback into the appropriate action funnel.

Delete permanently?