marketing: FRE-199 first pair of informational pages + pitch shape (drafts)
- agent-done-signal: 'How do you know when your coding agent is done?' — the zero-looks-like-success cluster (1xjb3j0, 1xm09fs, 1xmnz2c, HN fhub/ sadilek); Stop/Notification/StopFailure hooks cited to the agent's own docs, re-read 2026-11-05. No product, no competitor, no price. - agent-waiting-on-permission: 'Why is my coding agent sitting on a permission prompt?' — the 1xhbc71 thread + invisible-permission cluster; permission modes, /permissions, rule syntax, acceptEdits cited to the permissions doc; undo-split attributed to 1xkoz06. - newsletter-postmortem-pitch: item 2's shape, placeholders only; send gated on FRE-202 or a CTO-confirmed direct relay-store read. All drafts: sponsor fact-check moves pending/ -> approved/; nothing publishes itself.
This commit is contained in:
87
marketing/drafts/agent-done-signal/copy.md
Normal file
87
marketing/drafts/agent-done-signal/copy.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# How do you know when your coding agent is done?
|
||||
|
||||
> **Status: draft — not approved, not published.** Sponsors fact-check the claims
|
||||
> table at the bottom; the page moves `pending/` → `approved/` only after that.
|
||||
> This page never names a product of ours and never names a competitor.
|
||||
> Internal target: first page of the FRE-199 pair, Thu 2026-11-06.
|
||||
|
||||
Often, you don't — not from the terminal alone. A coding agent's turn can end in
|
||||
silence: the prompt returns, the cursor blinks, and a finished turn looks exactly
|
||||
like one that stalled, is still running, or is waiting on you. The fix is to stop
|
||||
trusting silence and wire the two moments that matter — *the turn ended* and *the
|
||||
agent needs you* — to something you will actually see.
|
||||
|
||||
## Why silence is the failure mode
|
||||
|
||||
A terminal coding agent ends a turn by printing a prompt. If you are in another
|
||||
window, another room, or running several agents at once, nothing in that output
|
||||
distinguishes "finished" from "blocked on a permission prompt" from "dead". The
|
||||
task being done and you finding out are two different events, and the second one
|
||||
has no default signal.
|
||||
|
||||
Practitioners keep rediscovering this. One operator running a self-hosted queue
|
||||
of autonomous agent sessions described sessions that "finished their work but
|
||||
never sent the done signal, and held their slots for hours" — their fix was to
|
||||
derive "done" from git state plus an idle transcript instead of trusting the
|
||||
agent's own signal. A public service post about a code-review plugin described
|
||||
the mirror image: a green checkmark and "No findings" when the review had not
|
||||
run at all. An empty result and a successful result rendered identically.
|
||||
|
||||
That is the trap in one sentence: **zero looks exactly like success.**
|
||||
|
||||
## What the turn-ending signal actually is
|
||||
|
||||
Claude Code gives you two hooks that bracket the moments worth surfacing:
|
||||
|
||||
- **`Stop`** fires when the agent finishes responding — the end of a turn.
|
||||
- **`Notification`** fires when Claude Code sends a notification. A permission
|
||||
prompt is one of these: the hook's payload carries a `notification_type` of
|
||||
`permission_prompt` and a message like "Claude needs your permission".
|
||||
- **`StopFailure`** fires instead of `Stop` when the turn ends on an API error —
|
||||
rate limits, authentication problems, and the like.
|
||||
|
||||
All three can run a command of your choosing. The hooks reference documents the
|
||||
events and includes a desktop-notification example built on macOS's `osascript`.
|
||||
|
||||
## What to check or do
|
||||
|
||||
1. **Wire turn-end to a notification you will actually notice.** A `Stop` hook
|
||||
that calls `osascript -e 'display notification …'` (or your terminal's
|
||||
notification escape) turns the silent prompt-return into a visible event.
|
||||
A terminal bell is not this — it is mute the moment you switch windows.
|
||||
2. **Route permission waits separately from completions.** The `Notification`
|
||||
hook's payload tells you which kind it is. A permission wait means the agent
|
||||
is *blocked on you*; treating it as "done" hides the one state that costs the
|
||||
most time.
|
||||
3. **Don't trust the exit signal alone.** Check the artifacts: `git status`,
|
||||
`git log`, whether the transcript has gone idle. The queue operator's rule
|
||||
generalises — a "done" that has to name what it is waiting on is a "done"
|
||||
you can act on.
|
||||
4. **Surface the failure path too.** A turn that ends on an API error fires
|
||||
`StopFailure`, not `Stop` — an alert wired to the wrong one misses exactly
|
||||
the runs that need attention.
|
||||
|
||||
One next step: take the agent command you run most often and give its end-of-turn
|
||||
a notification you would notice from across the room. That single wire closes the
|
||||
most expensive silence in the workflow.
|
||||
|
||||
---
|
||||
|
||||
## Fact-check table (not part of the page)
|
||||
|
||||
Every technical claim above, with its primary source. Claims about Claude Code's
|
||||
behaviour come from its own documentation, re-read 2026-11-05.
|
||||
|
||||
| # | Claim in the page | Source |
|
||||
|---|---|---|
|
||||
| 1 | `Stop` fires when the agent finishes responding (end of a turn); hook cadence is "per turn: UserPromptSubmit, Stop, StopFailure" | Claude Code hooks reference — https://docs.anthropic.com/en/docs/claude-code/hooks |
|
||||
| 2 | `Notification` fires "when Claude Code sends a notification"; example payload carries `notification_type: "permission_prompt"`, message "Claude needs your permission" | same hooks reference (Notification event section) |
|
||||
| 3 | `StopFailure` "runs instead of Stop when the turn ends due to an API error" (rate limits, authentication) | same hooks reference (StopFailure section) |
|
||||
| 4 | Hooks run a command of your choosing; a desktop-notification example using `osascript` is in the reference | same hooks reference (desktop notification example) |
|
||||
| 5 | Operator anecdote: sessions that finished work but never signalled done, holding slots for hours; fix = derive done from git + idle transcript | r/ClaudeCode thread 1xjb3j0 ("Are you running a self-hosted queue of autonomous Claude Code sessions?", 2026-10-31), quoted in `drafts/listening.md` Scan 4 addendum. Quoted as one operator's described practice, not a measurement. |
|
||||
| 6 | PSA anecdote: code-review plugin showed green check + "No findings" without running | r/ClaudeCode 1xmnz2c (2026-11-03), logged in `drafts/listening.md` Scan 6. |
|
||||
| 7 | "Zero looks exactly like success" | Verbatim buyer phrasing, three independent instances (1xm09fs, 1xmnz2c, plus HN repeats) in `drafts/listening.md` Scans 5–8. Used as the problem's name, attributed to no one. |
|
||||
|
||||
**Ban compliance:** no product of ours named · no competitor named · no
|
||||
superlatives · no benchmark numbers · no invented testimonials (anecdotes are
|
||||
real threads, described without handles) · no price · no roadmap dates.
|
||||
Reference in New Issue
Block a user