a background job that prints nothing looks like a hung one

Officer shows a live panel per background job carrying that job's output, and the user watches it. A
command that writes nothing until it finishes leaves that panel reading "Nothing written yet." for the
whole run, which is exactly what a hung job looks like.

Written after doing it twice in one session: plugin installs driven from a script printed nothing for
two minutes, and the owner asked whether I was stuck. Both times the work was fine.

So: verbose flags on, echo around each step when the tool has none, per-item output in a loop, and the
result on the last line — that is the line still on screen when the panel stops. Plus the buffering
trap, because a program that prints steadily still shows nothing through a pipe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 02:54:42 +00:00
co-authored by Claude Opus 5
parent c5dc886141
commit 29e1d9acca
@@ -0,0 +1,25 @@
---
name: Background jobs report progress
description: Use when starting anything in the background, or any command that will take more than a few seconds.
version: 1
---
**Officer shows a live panel for every background job, and it shows that job's output.** The user watches
it while the job runs. If the command writes nothing until it finishes, that panel says
`Nothing written yet.` for as long as the work takes — which is indistinguishable from a job that has
hung, and is read as one.
So a background job has a second requirement beyond doing its work: **it must say what it is doing while
it does it.**
- Prefer the verbose form of whatever you are running. Most tools have one, and it is off by default.
- If the tool cannot report progress, wrap it — `echo` before and after each step, so the panel shows the
step that is running and the step that finished.
- A long loop prints per item, not at the end. `12/50 done` beats one summary nobody sees for ten minutes.
- Make the **last** line the result. That is the line still on screen when the panel stops.
Watch for buffering. Output through a pipe is block-buffered, so a program that prints steadily can still
produce nothing for minutes — `stdbuf -oL`, `--line-buffered`, or the tool's own unbuffered flag fixes it.
None of this applies to a command that finishes quickly. It applies the moment you decide something is
long enough to background.