Systems on Glass is an AI-automation side project of mine. Every episode is generated by Claude (Anthropic's AI, working through Claude Code in my own video studio): the script, the whiteboard and 3D scenes, the edit, and the narration in an AI clone of my voice. I choose the topics, bring the stories from my own work, and review each episode before it goes up. Not affiliated with Anthropic.
My job agent was halfway through submitting an application when it crashed. Did it go through? If it tries again, I might apply twice; if it doesn't, I might not apply at all. Every failed request asks the same question: did the work happen?
The short version
- Once or ten times, the same result. Setting a status to applied is safe to repeat; submitting an application or charging a card is not. And a timeout tells you nothing: the request may have failed, or it worked and only the reply got lost.
- A key for every action. The client sends a unique key and reuses it on every retry; the server remembers it and answers a retry with the saved result. The IETF's Idempotency-Key header got a new draft in October 2026, and Stripe saves the status code and body of the first request for each key.
- Write the intent before the work. My agent writes a row that says
applyingbefore the browser touches the form. If it crashes, the next run sees the intent and checks the job site and its own inbox before it ever tries again. - Key the thing, not the message. One job shows up on five sites with five IDs, so every job gets two keys: the source's ID and a fingerprint of company, title and city.
- The catch: keys don't live forever. Stripe can prune a key after 24 hours, and then the same key is a new request. The draft answers a retry that's still running with 409, and a key reused for a different request with 422.
keys: source:job_id · sha1(company | title | city) · Stripe: keys kept ≥ 24 h · IETF: 409 still running, 422 key reused
The agent is real: the full design, with the three SQLite stores and every failure case, is in First in Line.
Further reading
- First in Line — my job agent, end to end: intent rows, two keys, and what it does after a crash.
- The Idempotency-Key HTTP Header Field — the IETF draft, revision 08 (October 2026).
- Stripe: Idempotent requests — how a payments API saves the first answer and replays it.
Next episode: Stop Babysitting. Previously: Skills. All episodes →