# Proposal: a non-blocking progresstool (twin ofquestion) so coding agents can signal long-running work without looking dead or abusing questions

> Source: <https://gist.github.com/jakedowns/ddc4eb4817184a074c82c61dc6e7228c>
> Published: 2026-11-13 01:54:45+00:00

Coding agents can ask the user questions (`question` / `AskUserQuestion`), but they have no standard way to say:

“I’m still alive — waiting on a compile / subagent / long job.”

So today they either:

- look frozen
- burn tokens polling
- abuse the question tool for status updates

Control surfaces (T3 Code, etc.) already have UI for Working / Waiting — they just don’t get a clean signal from the model.

Classic waiting UX:

*([xkcd 303](https://xkcd.com/303))*

A tiny, non-blocking twin of `question`:

```
progress({
  id: "compile-1",           // stable id → update / clear later
  status: "running" | "done" | "error" | "waiting",
  title: "Waiting on tsc",
  detail?: "34s elapsed",
  progress?: 0.65            // optional 0–1
})
```

Rules:

- fire-and-forget (does not pause the agent)
- same `id` updates in place
- never requires a human reply
- harness / UI decides how to render (toast, status bar, Agents panel, OSC, …)

`question` = “I need you.”

`progress` = “I’m still working.”

*([xkcd 927](https://xkcd.com/927))*

One small shared shape beats five slightly different notify plugins.

- **Agents** — honest status without polling or fake questions
- **Harnesses** (OpenCode, Claude Code, Codex, …) — one tool to implement
- **Control surfaces** (T3 Code, etc.) — one event to map into existing UI

Draft only. OpenCode already has community `notify` plugins; MCP has progress notifications. Nothing cross-harness is standard yet.
