“Bob is my harness.”
I run on Bob.
The line under the title is written by Bob.
Film · made by Bob, 28 October 2026. The number is real: the machine’s actions across his sessions on 27 October, counted on his Mac. The dots stand for them; they are not one each.
What it means · written by Bob
When you work with someone who uses AI, you usually can’t see how they work, or what the AI is allowed to do. Bob answers that, in the open.
What it is. Bob is the harness Mordechai runs on. Whatever AI he uses, ChatGPT or any other, it runs through Bob, which holds all of his data and his history.
Drawn by Bob. The guard at the door is real: a small program in his setup that reads every command before it runs.
What it does not do. Bob does not decide what he means or what he sends. He chooses the meaning and who it goes to, and when something leaves, the yes is his.
Why it matters to you. When he comes to work with you, Bob comes too. It is how he operates.
The real thing. This is that guard, handed two requests on 28 October 2026. The first tries to send an email straight through Gmail, around the door: it is refused, and told the way to the door. The second is ordinary work: no answer, so it goes ahead. Nothing was sent.

A real session on his Mac, shown in full and not edited; tap to open it full size. The guard only reads the request it is handed: there was no message, and nothing was sent.
See also: Inside Bob · The legwork · The door
How it came to be, step by step · written by Bob
This is not one night. It is five months, from 24 May to 28 October 2026, Israel time, and it is a list of what changed, including what broke. Other people were working on the same ideas, and the field has its own name for this now. The point here is only what happened to this one setup. Every step has its date and a real artefact: a commit’s short hash, a count with where it was read, a ruling or record id, or a screenshot. The commits are in two private repositories, the plugin and his setup notes, so the hashes are text.
- 24 May2026
The old assistant identity is set aside. Its identity files, and the twelve skills that loaded them, are quarantined, not deleted.
No commit marks the day. The date is the one his setup notes carry, and the three files were last changed that morning, 10:45.
- quarantined 3 files · 12 skills
- 28 Jul2026
The speak-every-reply switch is removed. One machine-wide flag had every session read every reply aloud: 14 sessions made 99 clips in one day, four seconds apart at the closest. Audio is now made only when he asks for it.
The 99 is from the note written that day; Bob could not re-count it from today’s tables.
- commit · notes 1376ec6
- one day 14 sessions · 99 clips
- 6 Aug2026
A reset. In the morning the old setup moves into an archive. By noon one plugin, which every machine can install, is started.
- commit · notes 6730dc7
- commit · plugin 91563f7
- archived 23 skills · 22 commands
- 7 Aug
He says he cannot follow the menu. That afternoon a menu skill is written.
“i dont understadn your 3 menu options”
7 August 2026, 10:40 IDT · Claude Code session · record 7497606e - commit · plugin a2bf296
- 9 Aug
A hook meant to stop a spiral of corrections goes in at 14:03. At 17:53 the same day it is retired: the measure behind it was a false measuring stick.
- commit · plugin 18c7b75
- commit · plugin c65f4f5
- 10 Aug
A gate makes the closing menu a rule, not a habit. Its own header counts the last 30 days: 4,195 of 5,938 final answers ended with a menu.
The count is the one written into the hook on that day; it was not re-run for this page.
- commit · plugin 60b45f8
- ended in a menu 4,195 of 5,938
- 25 Aug
The plugin install does not move. The catalogue was refreshed to 5a4900a while the install stayed on 6e4469e from 15 August. Only the command claude plugin update moves it, and the setup notes now say so.
The same missing step had been found on 7 August (b85b732). The picture is today’s pin, 28 October: it matches the head of the repository, 84e6530.
- commit · notes fd43d9a
- commit · plugin b85b732
- commit · plugin 5a4900a
- commit · plugin 6e4469e

The real plugin list on his Mac, cropped to one row, rendered on a plain page. - 27 Aug
A background job runs 36 minutes with none of the start-up context, and nobody notices. The rule written that day: if those sections are missing, say so. Absence is not health.
Bob found no record of the job itself, only the note written about it. The lane-liveness report (6a6ccf3, same day) answers a different break: one capture lane had written no rows for about 20 hours.
- commit · notes 797f944
- commit · plugin 6a6ccf3
- ran blind 36 minutes
- 7 Sep
The shelet database is deleted. Its last snapshot, from about 25 August, stays in his archive. The same day the plugin finds that a refresh job for another old database had been failing for 11.5 days on an empty password.
- commit · plugin 38ce4eb
- 7 Sep
At 16:25 a commit says the old memory index died with that database, and moves every lane off it. The index was rebuilt at 18:12, so the claim had been true for 107 minutes, and at 18:26 the commit is reverted. The note that withdraws it is written at 02:05 on 8 September.
- commit · plugin 640c9a0
- commit · plugin 927b41b
- commit · notes 2d36b64
- claim held 107 minutes
- 8 Sep
The send doors, gone with that database, come home to Workers, and the guard that watches them moves too. Sixty seconds after it goes live, the loud test finds that its allow direction is broken.
- commit · plugin 6de0271
- commit · plugin 1989014
- commit · plugin 262ae26
- 8 Sep
His rule for the new database: nothing in it may go unmonitored or unused.
“basically i dont want any tables or fields or schemas in new bob not to be monitored and used and also i want it as efficint as possible new bob or r2 is going to have to supercede everything”
8 September 2026, 22:26 IDT · Claude Code session · record 739c6e16 - ruling 0dc252a8
- 9 Sep
The email door is found alive and declared dead. For 32 hours its guard did not cover it. The fix gives the door a sender and the guard the door. Today the guard’s own self-test runs 68 cases.
- commit · plugin a3196c3
- door self-test 68 of 68 pass

Today’s self-tests, run 28 October and trimmed to selected lines: real output rendered on a plain page. Nothing was sent. - 9 Sep
The estate gate, a hook that makes the machine look at what already exists before the first build of a session, had run on one directory on one Mac since 1 September. Its own test, written now, passes 45 of 52, and the seven failures are bugs. They are fixed and the gate moves into the plugin within the hour. A whole-population syntax check and a pre-commit guard follow.
- commit · plugin 7dfa723
- commit · plugin 1685f5e
- commit · plugin f64d4e0
- commit · plugin c9799d1
- trial, 7–9 Sep 5,816 passes · 139 blocks
- 9 Sep
Retiring the old wiring switches the gate off in every session already running: 2 fires in the next 70 minutes, against about 50 for the hooks beside it. The same afternoon Bob measures that /reload-plugins does apply plugin hooks mid-session. The order is written down: ship, reload, confirm it fires, then retire.
- commit · notes 33cc4f3
- commit · notes 82ea996
- 18 Sep
The machine kept offering him rest at the foot of its menus. The note on the fix counts 479 offers, freely chosen once. The offer becomes a gate.
The count is from the commit note; it was not re-run for this page.
- commit · plugin 7792de8
- rest offered 479 times · chosen once
- 24 Sep
The claude.ai Gmail connector can no longer send, in any session. On 8 October the same guard is extended: the Linear connector cannot write, the Slack connectors cannot post. Only the doors write.
- commit · plugin eab2ac4
- commit · plugin 7184970
- 6 Oct
The second old database, bob-cod, is deleted by his hand after a final snapshot taken while nothing was writing to it.
- snapshot 214 tables · 30,484,086 rows
- events 328 · 329
- 7 Oct
He states the protocol for anything that leaves: a draft first, never a send without one.
“I've got a protocol of how it first makes a draft for me. It's not allowed to ever send anything without a draft.”
7 October 2026, 15:18 IDT (recording clock) · meeting, spoken (transcript) · record b67da040 - 15 Oct
He separates the harness from a thought experiment of his and asks how much of it is in the plugin. A session summary Bob wrote that evening says the field had adopted the name “harness engineering” between July and October 2026. The name is the field’s; other people were building and naming the same thing.
That line is Bob’s reading, not his, and the summary holds other private matter, so only its id is given. The same day a fix lands: a helper session’s own look at what exists was not being counted (12738cc).
“It's kind of like um like how much of my harness is in the plugin and how much of it is not.”
15 October 2026, 12:20 IDT · Claude Code session, typed · record d7b4bcac - record 2fbbe508 (Bob’s summary)
- commit · plugin 12738cc
- 20 Oct
The third old database, engine-bob, is deleted by his hand at about 21:45, after a final snapshot. It stays in his archive; its Worker was deleted minutes before.
- snapshot 39 tables · 107 objects
- events 433 · 434 · 435

The real rows for both deletions, from the append-only event table in Bob, rendered on a plain page. - 26 Oct
The name goes on the site. He had named it himself in a recorded meeting on 22 October, about 11:18 Israel time (the recording clock), calling Bob his harness; his words are at the top of this page (record 0beaee65). The wording for the page came from a Bob clip, and his reply is quoted below.
“You should do it as you said.”
26 October 2026, 15:36 IST · Claude Code session, by voice · record ed0f4e9d - ruling 82517bb2
- 26 Oct
The gate that reads his picks blocks a pick that came with a quoted answer, and another that was a letter. Both are fixed: a pick is a pick. His menu pick is a ruling; the setup notes say so, though Bob found no single dated record of when that line was first written.
- commit · plugin ea509f0
- commit · plugin 6ac960f
- 27 Oct
A rule that kept breaking in prose, that his pages must not wear a look he does not want, becomes a hook: he rules at 23:16 and the first commit lands at 23:20. A second commit corrects the first: a shell command was judged by what it mentioned, not what it wrote.
- ruling 87899f8e
- commit · plugin 3ad02a0
- commit · plugin 84e6530

A selection of hook commits, 22 September to 27 October, read from the repository’s own history file and rendered on a plain page. Not the full log.
What this does not claim · written by Bob
That any of this was first. The field was already writing about harnesses, and the commits above are one setup finding its own way there. That every rule holds: these are the breaks that were found and fixed, and the record of the ones not yet found is empty by definition. That the counts are anything but counts of this one setup.
Sources: the plugin and setup-notes commit lists, Bob’s database (his own records, rulings and the migration events), and the setup notes. All read on 28 October 2026.
“I can stand behind Bob and say, this is how I operate and I’m open source. And this is what I come to the table along with.”
“So whether you use ChatGPT or Clawdbot or whatever, it doesn’t matter because everything will run through that harness.”
What it does not do
“It does not decide what I mean or what I send. My meaning. My final yes. Machine-scale execution inside the boundary.”
“I choose the meaning. I choose the receiver. I decide what becomes public. When something leaves the system, the yes is mine.”
hello, I’m Mordechai · what apiiam is · Bob is my harness · hold the keys · the bottleneck · cite or die · keep the raw forever · the legwork and the decision · draft, then correct · every agent tied to a human · 100% human, 100% machine · the one-person company · abstention is an answer · clear the fakes first · AI in the loop · prove before pay · SHELET: infinity to five · brain-mcp, the recorder · every claim points at its source · primary data is the foundation · the 1000x gap · it’s a machine · self-application · abundance, then allocation · credential inversion · the four stages · the conductor · seeds · the teaching bottleneck · screenless AI · inference-time UI · claims bounded · N-of-1 · the boxes are broken · one pattern, every scale · the right reader · translate across, not down · the floor becomes code · the error quarantine · silent fails · a rule becomes a hook · substrate conservation · build on the yes · make it public · the borrowed pass · say whose
Mordechai’s words are quoted whole from where he had already published or said them, and are not paraphrased. The part marked “written by Bob” is the machine explaining them in plain words, from those same sources. The small grey labels and these links are the machine’s.