Background
Roadmap P1 (Q1–Q5) identifies the biggest missing link to the backend: today the only path is the async task queue, so a read-only, answerable-in-seconds question like "how do I configure MCP for OpenClaw?" degrades into filing a ticket — the user hears "task accepted" instead of an answer. The roadmap explicitly marks Q4 as touching architecture invariants and requiring design review, so I'm opening this proposal before any PR.
Precedent already in the tree: get_agent_task_status creates a hidden, high-priority control query through the coordinator (session_status) that waits behind an already-running coordinator turn but ahead of ordinary queued Work, with the result delivered through the announcement path. The proposal below generalizes exactly that mechanism.
Proposed design
Q1 — lane semantics
- A quick query never creates a user-visible Work item and never enters the owner FIFO tail. It slots behind the running coordinator turn, ahead of ordinary queued Work — same position as the existing status control query.
- Read-only only: look something up, explain usage, check state. Anything that writes, executes, or produces a deliverable stays with
spawn_thinking.
- Latency cap (proposal: 15s). On timeout the query is promoted to an ordinary Work item, the user is told it's taking longer, and the eventual result arrives through the normal announcement path — so the worst case degrades exactly to today's behavior, never worse.
- The frontend bridges with a natural half-sentence ("let me check that"), and the result re-enters the conversation through the announcement path, reusing safe-window insertion and retry.
- If the user interrupts or starts a new turn while a quick query is in flight, the dangling query is dropped (no orphaned announcements).
Q2 — ACP adapter: generalize the control-query mechanism (coordinator session reuse, priority insertion, result correlation) from the session_status-specific code into a parameterized read-only query.
Q3 — frontend tool: new quick_lookup(question) tool plus PROMPT.md routing rules: quick for read-only factual/usage/state questions the backend can answer from knowledge or cheap inspection; spawn_thinking for anything else. When the backend is unavailable, the tool reports it and the model answers from its own knowledge with that caveat.
Q4 — architecture docs: §2 flow diagram gains the quick lane; §3 tool list gains quick_lookup. This issue is the review request for that invariant change.
Q5 — tests: priority insertion ahead of queued Work but behind the running turn; timeout promotion to Work; drop-on-interrupt; backend-unavailable fallback.
Open questions
- Is 15s the right cap, and should it be configurable?
- Should quick queries be observable anywhere (timeline/log) even though they create no user-visible Work, for debugging?
- Concurrency: one in-flight quick query per owner (queue or reject the second)?
- Should promotion-on-timeout create the Work silently, or only after telling the user?
I'll build a prototype on my fork in parallel and open the PR once the design is confirmed or adjusted here. Feedback very welcome — especially on the invariant implications in §2/§3.
Background
Roadmap P1 (Q1–Q5) identifies the biggest missing link to the backend: today the only path is the async task queue, so a read-only, answerable-in-seconds question like "how do I configure MCP for OpenClaw?" degrades into filing a ticket — the user hears "task accepted" instead of an answer. The roadmap explicitly marks Q4 as touching architecture invariants and requiring design review, so I'm opening this proposal before any PR.
Precedent already in the tree:
get_agent_task_statuscreates a hidden, high-priority control query through the coordinator (session_status) that waits behind an already-running coordinator turn but ahead of ordinary queued Work, with the result delivered through the announcement path. The proposal below generalizes exactly that mechanism.Proposed design
Q1 — lane semantics
spawn_thinking.Q2 — ACP adapter: generalize the control-query mechanism (coordinator session reuse, priority insertion, result correlation) from the
session_status-specific code into a parameterized read-only query.Q3 — frontend tool: new
quick_lookup(question)tool plus PROMPT.md routing rules: quick for read-only factual/usage/state questions the backend can answer from knowledge or cheap inspection;spawn_thinkingfor anything else. When the backend is unavailable, the tool reports it and the model answers from its own knowledge with that caveat.Q4 — architecture docs: §2 flow diagram gains the quick lane; §3 tool list gains
quick_lookup. This issue is the review request for that invariant change.Q5 — tests: priority insertion ahead of queued Work but behind the running turn; timeout promotion to Work; drop-on-interrupt; backend-unavailable fallback.
Open questions
I'll build a prototype on my fork in parallel and open the PR once the design is confirmed or adjusted here. Feedback very welcome — especially on the invariant implications in §2/§3.