THE RUNNER CARD · as many working bots as the roster names
WAKES WHEN someone asks how many bots can work unattended, or wants cards run on a clock, each on a receipt
THE LOOP
runner.py roster · the blank, two examples
one line a worker: command, clock, budget
check · reach, gate, clock, disk, names
run --once from a scheduler; or --for
ledger · every run read back per worker
NEVER
Run a worker the check refused
Let a gated act run without a person's allow
Count bots the roster does not name
IT MAKES roster — a blank roster with two example workers to replace; check — every worker read: name, command on disk, clock, budget, gate, reach; every fault by name; count — how many working bots the roster holds, how many are held, how many reach out; run — the due workers run, each on a receipt; ledger — the receipts read back per worker: runs, outcomes, time spent, the holds; allow — a person lets a gated worker run once; written on the roster.
THE STANDARD the count is the roster's; every run leaves a receipt; a budget on every worker; the gated stop for a person; a reach is declared or refused; the runner judges nothing.
PROOF SELFTEST 20/20 · witnessed in Claude 2026-10-10 · Edition 1.
THE SEAL 98 of 100 · LEGENDARY · WITNESSED · Trigger 5 · Machinery 5 · Law 5 · Portability 5 · Proof 5
IT CAN BE WRONG an AI reading a text file: it can be wrong and can invent a number, a rule, a name or a date; check what matters against your own records and the source; the risk is yours. THE-CLAUSES.md rides in the packet and is part of the licence.
THE PUNCH · SHA-256 OF SKILL.MD · 8CA20C114D27D3F599047BF8
CITE THIS CARDTHE RUNNER CARD, Edition 1. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=runner-card. Punch 8CA20C114D27D3F599047BF8. Retrieved 2026-10-10.
What it is.
Runs the working bots a roster names and keeps the count open: each worker is a card's machine with a command, a clock (once, every n minutes, hourly, daily, weekdays), a budget of runs and minutes, a gate (none, or held for a person until allowed), and a declared reach; the runner checks every line, starts what is due in its own process with a timeout, writes a receipt for every run on a ledger, holds the gated, refuses a worker whose script reaches the network without saying so, and reads the ledger back per worker.
It carries a machine that shows its working: roster — a blank roster with two example workers to replace; check — every worker read: name, command on disk, clock, budget, gate, reach; every fault by name; count — how many working bots the roster holds, how many are held, how many reach out; run — the due workers run, each on a receipt; ledger — the receipts read back per worker: runs, outcomes, time spent, the holds; allow — a person lets a gated worker run once; written on the roster — 20 checks in its selftest, every command on the record. It will never run a worker the check refused; never let a gated act run without a person's allow; never count bots the roster does not name.
Six laws, written into the card.
They are in the card itself, so the AI follows them.
THE COUNT IS THE ROSTER'SA working bot is a line on the roster; add a line, add a bot; the card never counts what the roster does not name.
EVERY RUN LEAVES A RECEIPTStarted, ended, seconds, exit, bytes, a hash of what came out, the outcome and a note — appended to the ledger, never rewritten.
A BUDGET ON EVERY WORKERRuns a day and minutes a run; a run past its minutes is stopped and written as a timeout.
THE GATED STOP FOR A PERSONA worker with a person gate is held until a person writes allow, and held again after it runs; a command that pays, deletes, sends, publishes, signs or spends with no gate is refused.
A REACH IS DECLARED OR REFUSEDA script that names a network module on a roster line that says none does not run; the line must say what it reaches and why.
THE RUNNER JUDGES NOTHINGIt starts, times and records; THE SUPERVISOR reads the ledger and says CONTINUE, PAUSE or ESCALATE.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE GUIDEreferences/THE-OPEN-COUNT.md
THE MACHINErunner.py · six commandsroster — a blank roster with two example workers to replace; check — every worker read: name, command on disk, clock, budget, gate, reach; every fault by name; count — how many working bots the roster holds, how many are held, how many reach out; run — the due workers run, each on a receipt; ledger — the receipts read back per worker: runs, outcomes, time spent, the holds; allow — a person lets a gated worker run once; written on the roster. Every command prints its working and refuses a bad input; 20 checks in its selftest, every command on the record.
What it does once your AI has it.
roster A blank roster with two example workers to replace
check Every worker read: name, command on disk, clock, budget, gate, reach; every fault by name
count How many working bots the roster holds, how many are held, how many reach out
run The due workers run, each on a receipt
ledger The receipts read back per worker: runs, outcomes, time spent, the holds
allow A person lets a gated worker run once; written on the roster
On the record A roster of five workers checked (the undeclared reach named as a fault), counted, and run once: the clean worker ran ok on a receipt, the failing one was written failed with its exit code, the slow one stopped at its minutes as a timeout, the gated one held for a person, the one that reaches out refused; a person allowed the gated worker and the next run took it once; the ledger read back per worker with the open count.
What it will never do.
It will never run a worker the check refused; never let a gated act run without a person's allow; never count bots the roster does not name.
Workers run one at a time in the order of the roster; the runner is a scheduler for a shop, not a cluster. A worker is stopped at its minutes but a child it started may outlive it on some hosts. The reach check reads the script's own source for network modules; a compiled library or a shell command can reach what the check does not read, which is why a shell word is refused. Clocks are read in the host's local time. It is an AI reading a text file: it can be wrong, so check what matters against your own records and the source.
What’s in the buy.
CARD.md — the whole card: who it is, its laws, when it says no, what it carries · SKILL.md — the door your AI reads first · START-HERE.md — the first five minutes, for you
THE-OPEN-COUNT.md — the guide in references/, in the card's own voice
scripts/runner.py — the machine: roster · check · count · run · ledger · allow, standard library only, selftest 20/20
WITNESS.md + SELFTEST.md — every command on the record, as it printed · MANIFEST.md, every file hashed · AUDIT.md, the twelve checks
MY-LEDGER.md — the card's memory, on your own machine · TIN.md · LICENSE-NOTE.md · THE-CLAUSES.md · HOSTS.md
card.svg + card-machine.svg + card.json · card.html, the card as one offline file · the doors for ChatGPT, Gemini, Cursor, Claude Code and MCP hosts (rules/, system/, mcp/)
PROOF · SELFTEST 20/20 · 6 COMMANDS ON THE RECORD · WITNESSED IN CLAUDE 2026-10-10 · EDITION 1 · PUNCH 8CA20C114D27D3F599047BF8
ON EVERY DOOR · A CARD FOR YOUR AI, A FILE FOR YOUR COMPUTER
In Claude: turn on code execution under Settings › Capabilities, then Customize › Skills › + › Create skill, and upload the zip as it is — START-HERE.md in the box walks you through it, and tells you how to keep the ledger. In ChatGPT, Gemini and the rest: a Project, a GPT or a Gem with the card’s files attached and the short door in the box pasted as its instructions. The words run anywhere an AI reads Markdown; the machines run wherever the host runs Python. Witnessed in Claude only. The host marks →
Take it.
Nº 961 PROPOSED — LAUNCHING SOON
Sold as is under the term printed. A card instructs an AI you operate; results depend on your model, your files and your judgement. Not medical, legal, tax or financial advice, never the person’s boss, and not a licence to practise. The terms →
One payment. The file is yours to keep and keeps working at its edition; new editions issued in the year after you buy reach you by email as replacement files. Tax is added at checkout where it applies. Nothing auto-renews.
A TERM, NOT A SUBSCRIPTION: NOTHING RENEWS ITSELF AND NOBODY IS CHARGED AGAIN. WHEN A TERM ENDS THE FILES STAY ON YOUR COMPUTER AND STAY READABLE — FREEZE, NOT LOSS.
THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-10
runner.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
roster
a blank roster with two example workers to replace
check
every worker read: name, command on disk, clock, budget, gate, reach; every fault by name
count
how many working bots the roster holds, how many are held, how many reach out
run
the due workers run, each on a receipt
ledger
the receipts read back per worker: runs, outcomes, time spent, the holds
allow
a person lets a gated worker run once; written on the roster
selftest
20 checks that prove the machine; it must print 20/20
roster · A BLANK ROSTER WITH TWO EXAMPLE WORKERS TO REPLACE
$ python3 scripts/runner.py roster --out roster.json
wrote roster.json · two example workers to replace · then: check roster.json
(the roster written by hand: five workers — one clean, one that fails, one too slow, one gated, one that reach
$ (the roster written by hand: five workers — one clean, one that fails, one too slow, one gated, one that reaches out without saying so)
check · EVERY WORKER READ: NAME, COMMAND ON DISK, CLOCK, BUDGET, GATE, REACH; EVERY FAULT BY NAM
$ python3 scripts/runner.py check roster.json
counter
breaker
sleeper
sender · held for a person before each run
fetcher
FAULT · reach: the script names a network module and the roster line says none
5 workers · 1 fault · mend the faults before run
count · HOW MANY WORKING BOTS THE ROSTER HOLDS, HOW MANY ARE HELD, HOW MANY REACH OUT
$ python3 scripts/runner.py count roster.json
5 working bots on the roster · 1 held for a person · 0 with a declared reach · the count is the roster's: add a line, add a bot
run · THE DUE WORKERS RUN, EACH ON A RECEIPT
$ python3 scripts/runner.py run roster.json --once --now 2026-10-12T09:30
counter ok exit 0 · 0.02s · counted 12 orders
breaker failed exit 2 · 0.01s ·
sleeper timeout
sender held gate: a person must allow this run (runner.py allow)
fetcher refused reach: the script names a network module and the roster line says none
5 receipts · 5 working bots on the roster · 1 held for a person · 0 with a declared reach · the count is the roster's: add a line, add a bot
allow · A PERSON LETS A GATED WORKER RUN ONCE; WRITTEN ON THE ROSTER
$ python3 scripts/runner.py allow roster.json sender --by the shop owner
sender may run once, allowed by the shop owner; the next run takes it
run · THE DUE WORKERS RUN, EACH ON A RECEIPT
$ python3 scripts/runner.py run roster.json --once --now 2026-10-12T09:36
sender ok exit 0 · 0.02s · counted 12 orders
fetcher refused reach: the script names a network module and the roster line says none
2 receipts · 5 working bots on the roster · 1 held for a person · 0 with a declared reach · the count is the roster's: add a line, add a bot
ledger · THE RECEIPTS READ BACK PER WORKER: RUNS, OUTCOMES, TIME SPENT, THE HOLDS
$ python3 scripts/runner.py ledger runs.jsonl --roster roster.json
7 receipts · 5 workers · 1.2s of machine time · 5 working bots on the roster · 1 held for a person · 0 with a declared reach · the count is the roster's: add a line, add a bot
breaker runs 1 ok 0 failed 1 timeout 0 held 0 refused 0 · 0.0s · last failed 2026-10-12T09:30:00
counter runs 1 ok 1 failed 0 timeout 0 held 0 refused 0 · 0.0s · last ok 2026-10-12T09:30:00
fetcher runs 0 ok 0 failed 0 timeout 0 held 0 refused 2 · 0.0s · last refused 2026-10-12T09:36:00
sender runs 1 ok 1 failed 0 timeout 0 held 1 refused 0 · 0.0s · last ok 2026-10-12T09:36:00
sleeper runs 1 ok 0 failed 0 timeout 1 held 0 refused 0 · 1.2s · last timeout 2026-10-12T09:30:00
held for a person: sender — runner.py allow <roster> <worker>
THE NUMBERS, NAMES AND DATES IN THESE RUNS ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; NO REAL COMPANY, PERSON OR PROPERTY IS NAMED.
QUESTIONS AT THE TABLE
Asked before the wire.
What does it need from me?
Runner.py roster · the blank, two examples. It asks first for the commands the workers run, how often, the most each may run and spend, and which of them must stop for a person.
Does it send anything anywhere?
No. The machine is a standard-library Python program that runs on your own computer and sends nothing anywhere; the words run wherever an AI reads Markdown. No server, no account, no key.
What is on the record?
The self-test (20/20) and every command run on real example inputs, pasted into WITNESS.md as they printed; the punch on the face is the SHA-256 of SKILL.md, so a downloaded copy can be checked against this room.
Can it be wrong?
Yes — it is an AI reading a text file. Workers run one at a time in the order of the roster; the runner is a scheduler for a shop, not a cluster. A worker is stopped at its minutes but a child it started may outlive it on some hosts. The reach check reads the script's own source for network modules; a compiled library or a shell command can reach what the check does not read, which is why a shell word is refused. Clocks are read in the host's local time.
What will it never do?
It will never run a worker the check refused; never let a gated act run without a person's allow; never count bots the roster does not name.