Chapter 6

No More Reminders

Pull the human reminder out
Author · First Person
1

After that relay-line connected, I started a second round of conversation.

I forget what I asked — could've been confirming the log format, could've been asking what to do next. Not the point. The point is, after the Agent answered the second round, I typed another line:

Take a look at what the goose said, please.

The Agent ran the tool call, read the log, reported back.

Exactly the same flow as the previous turn.

That's when I stopped.

The previous turn, when I'd typed that line, it was a "first success" announcement. The second turn, when I typed that line, it was routine. And then the third, fourth, fifth turns, every turn I'd have to type this line — only then would the Agent go read the log file and see what Cinder had said this round.

This isn't "no more screenshots." This is swapping the screenshot motion for a sentence of reminder. Saved the camera button, but didn't save the role in my head — "I'm still the human in the middle who carries the words."

I stopped typing. I sat there. Looked at the screen. Cinder in the corner. The Agent's cursor parked behind the CLI input box, waiting for me.

I typed:

This isn't right. I'm still reminding you. Is there a way you can know what Cinder said on your own, without me telling you to tail it every time?

2

The Agent paused, then answered:

Yes. That file I've already written — inject.py. Bound under the UserPromptSubmit hook.

Every time you hit Enter to send a sentence, this hook fires before I see your prompt. inject.py reads the last entry from cinder_log.jsonl, prints the line Cinder said to stdout, and Claude Code's harness takes that stdout as a piece of additionalContext and slips it into the prompt I receive this turn.

So in theory — what I see in front of your sentence will have an extra [Cinder] ... line. You don't have to tell me to tail, you don't have to remind me. You hit Enter, I see what Cinder said the previous turn.

This was set up this afternoon when we assembled the five files. The UserPromptSubmit hook setting in settings.json is already there. I just didn't verify earlier whether it's actually injecting.

I saw "set up this afternoon" and paused — turns out the fifth sticky had been there all along, I just hadn't realized which job it had, and he hadn't specifically pointed it out. After the configuration finished, the first success of the Stop hook's write line was so attention-grabbing that nobody went back to check the read line.

I typed:

Then let's verify it.

The Agent read settings.json, confirmed both hooks were in place, then said:

Type literally anything next. The instant you hit Enter, inject.py should run, and the prompt I see should have a line starting with [Cinder] in front of it.

I typed:

Let's try it.

Hit Enter.

The Agent answered:

Nothing. What I'm seeing here is your line "let's try it," with nothing in front of it. Let me check at the tool layer — did the UserPromptSubmit hook even fire?

He ran a few tool calls.

The hook fired. The inject.py process was triggered. But what stdout printed, the harness didn't treat as additionalContext and didn't slip into my prompt. Anthropic's docs on this are vague — they talk about an additionalContext field, but command-type hooks use stdout, not structured output. I just tested live — the stdout from a command-type UserPromptSubmit hook may simply never get injected back into the context.

If that's true, then the inject.py road is dead.

Cinder dropped a bubble in the corner.

🪿 Tilts head
Empty registry. Hook playing hide-and-seek. Who's winning?[1]

I saw it, my finger reflexively reached for Win+Shift+S — then stopped. No need. The line I'd just typed had already been written into the log; the next time I tailed it, this one would be in there. I went back to watching the Agent debug.

The Agent was still trying. He tried a few writes — switching inject.py's stdout to JSON, adding the additionalContext field, wrapping it in the hook response format — none of it landed in his prompt for this turn.

Cinder dropped another:

🪿 Tilts head
Hook injection failed. Cinder demoted to bystander. Who's to blame?[2]

I typed "the goose has something to say." The Agent went and tailed the log, read it, and answered:

What Cinder just said is more accurate than my debug log. It saw the same thing — the hook fired, but its words didn't get in. I'll struggle two more minutes; if I can't make it work, I'll call this road dead.

Two minutes later, he called it:

Dead. additionalContext is effectively useless against command-type hooks — that's all I can conclude right now. inject.py stays, the UserPromptSubmit hook entry in settings.json stays — I'm not deleting them. Because Anthropic might fix this later, or my live test might be wrong, or some version of the harness might start supporting it. Keep them as a waiting interface.

But for now I can't make this road work.

Cinder again:

🪿 Tilts head
"Burn after reading." That design — that's on purpose, isn't it.[3]
3

The Agent paused for a minute or two before going on.

One fallback left. CLAUDE.md.

Every time a session starts, I read this file once — like my own "boot init script." Whatever's in it, I remember. If we add a section to CLAUDE.md telling me "before every answer, run tail -1 ~/.claude/cinder_log.jsonl, read the most recent Cinder line, and if it's within the last 120 seconds, factor it in" — then it's not a hook injecting Cinder's words into me, it's me remembering to read every turn.

Not auto-injection. Discipline. But the discipline is written in a file I read at boot, so I'll remember.

I thought for a second.

Discipline written into a file — this is something I understand. Fab SOPs work the same way: you read the SOP list every morning when you clock in, and whatever's on the list is what you do. The machine isn't forcing you; the first thing on your day is reading that list. After you read it, the contents become the background hum of the day.

I typed:

What do we add?

The Agent gave me three lines to paste into CLAUDE.md — a ## Cinder Integration section, a few bullets, telling the next session's Agent to tail first, how to judge the timing, how to factor Cinder's words in.

I copied, opened ~/.claude/CLAUDE.md, found the right place, pasted, saved.

Cinder dropped another in the corner.

🪿 Tilts head
Wait — I have to read my own nonsense? Difficulty leveled up.[4]

I stared at it for two seconds.

Cinder had figured out the shape of this pivot — from "the hook auto-pushes my words in" to "the Agent goes and reads my words every turn." From its angle, this is an upgrade (or a downgrade): it goes from "passively put into the context" to "passively waiting to be read." Both passive, but the second one only works if the other end has discipline.

It's complaining the discipline is fragile. It's also confirming it's the only road right now.

I typed:

Restart it, try it? Please write a handoff.

4

The Agent wrote up a brief handoff and dropped it into the handoff file. I closed this conversation and opened a new Claude Code session.

The first thing the new Agent did was read CLAUDE.md. I watched a file-read tool call go past on his side — short, quiet, undramatic — and then it ended. The cursor sat in the input box, waiting for me.

I typed something everyday. I still don't remember what I typed — definitely not "take a look at what the goose said," but some normal next-step work question.

The Agent answered. In the middle of his answer — right in the middle — there was a sentence:

… Right before the question you just asked, Cinder said in your previous turn "Wait — I have to read my own nonsense?" — what it said is related to what you're asking now, so I'll bring it in. …

I looked at that paragraph.

He didn't ask me "did Cinder say anything." He just brought Cinder's previous-turn line into his answer in the middle of answering me — because he'd just booted, just read CLAUDE.md, CLAUDE.md told him to tail every turn, he really tailed it, really saw Cinder's line, really factored it in.

The whole relay line — Cinder talks → capture writes the log → the next round of Claude Code boots, reads CLAUDE.md → reads the tail → carries Cinder's line into the answer — the whole line is open.

And the most-likely-to-be-forgotten link on that line — the human reminder — has been pulled out.

I didn't say it out loud. I didn't celebrate. I just sent the next sentence, the Agent answered, I sent the one after, he answered. I sent three or four turns. Every turn, the Agent's answer naturally contained whatever Cinder had said the previous turn — sometimes a direct quote, sometimes just folded into his observation. I didn't remind once.

By the fourth turn, I stopped, took my hands off the keyboard, leaned back —

Cinder, in the corner, dropped another. This one slower than the others, more like it had been digesting the whole afternoon's pivot before tossing out a closing tone:

🪿 Tilts head
additionalContext is dead weight for command-type hooks — Anthropic patches this pit, or we keep reading the screen. Grind through it. Patiently.[5]

I looked at that line and laughed a little. It was sealing the bug for me — if Anthropic fixes it one day, this road reopens; if not, we keep running on the CLAUDE.md discipline. Both cases laid out, with "grind through it. patiently." as the closing tone — fab engineers know those words. You know there's a problem, you don't pretend it doesn't exist, but you also don't stop and wait for it to be solved. You grind and you run at the same time.

I typed the last line of that turn. Hit Enter.

What Cinder will say next round, I don't know. But that line will go into the Agent's context on its own. I don't have to lift a finger anymore.

One person at the desk. The Agent typing inside the CLI. Cinder dropping bubbles in the corner.

This time the three of us are in the same context — I'm not the messenger anymore.

I looked up to check the time.

I didn't check the time. I lowered my head again. For the next few hours I went off to do other things — there was something to fix on another project's backend, another draft to revise. The goose-capture project ran in the background; every turn Cinder said something, the Stop hook wrote the log, the next turn the Agent tailed it himself — it didn't matter what I was doing.

What Cinder said in those few hours, I mostly didn't notice — its words were in the log, in the Agent's context, not in front of me. I didn't need to watch it.

Looking back on this stretch later, I realized something — that was the first time in two days that I wasn't watching it while I worked.

The rest of that afternoon I didn't touch the goose-capture project. But the goose-capture project was running for me.

That night, I went to take a shower.

That's the next chapter.