THE INTRO CARD is free — what an AI skill card is and how to use one Download →Lost Lauren, contact us

THE INSTRUMENTS · Nº 961 · EDITION 1 · LAUNCHING SOON

LUND CARDS · THE INSTRUMENTSNº 961 PROPOSED
THE RUNNER CARD — the LSC-1 face
THE CARD AS TEXT · FOR EYES AND FOR MACHINES

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

  1. runner.py roster · the blank, two examples
  2. one line a worker: command, clock, budget
  3. check · reach, gate, clock, disk, names
  4. run --once from a scheduler; or --for
  5. 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.

IN THE BOX SKILL.md · CARD.md · TIN.md · START-HERE.md · LICENSE-NOTE.md · THE-CLAUSES.md · MY-LEDGER.md · WITNESS.md · SELFTEST.md · AUDIT.md · MANIFEST.md · HOSTS.md · scripts/runner.py · references/THE-OPEN-COUNT.md · rules/ (4 doors) · system/ (2 prompts) · mcp/mcp_card.py · card.json · card.svg · card-machine.svg · card.html.

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

THE FACE, FULL SIZE → · THE MACHINE FACE → · card.json →

THE RUNNER CARD

as many working bots as the roster names

ROSTER · CHECK · COUNT · RUN · LEDGER · ALLOW

98LEGENDARYWITNESSEDIN CLAUDEIN LUNDRIN CHATGPT

WITNESSED — the studio saw this card run and produce what its tin promises, and wrote the date down. What the marks mean →

THE SPEC SHEET · READ BEFORE YOU BUY · THE STANDARD EVERY CARD MEETS →

SEAL
98 of 100 · LEGENDARY · WITNESSED
EDITION
E1 · witnessed 2026-10-10
MACHINE
scripts/runner.py · 6 commands · selftest 20/20
RUNS
On your own computer. Standard library only, offline; no account, no key, no telemetry.
HOSTS
Claude · Claude Code · ChatGPT · Gemini · any AI that reads a file (HOSTS.md names each door)
LICENCE
One person, any number of their own AIs and computers · editions replace files · nothing renews · freeze, not loss
PUNCH
8CA20C114D27D3F599047BF8 · sha-256 of SKILL.md · check any file against it →

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 · NOTHING RENEWS ITSELF

OFFLINE · ONE LICENCE · PUNCH-CHECKABLE · THE STANDARD

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.

One email when it is on sale, from the studio; nothing else, ever.

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.

rostera blank roster with two example workers to replace
checkevery worker read: name, command on disk, clock, budget, gate, reach; every fault by name
counthow many working bots the roster holds, how many are held, how many reach out
runthe due workers run, each on a receipt
ledgerthe receipts read back per worker: runs, outcomes, time spent, the holds
allowa person lets a gated worker run once; written on the roster
selftest20 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.

← THE INSTRUMENTS · THE FLOOR →

AT YOUR ELBOW, NEVER THE BOSS · NOT LEGAL, MEDICAL, TAX OR FINANCIAL ADVICE · NOT A PAYMENT CARD · © 2026 LUND STUDIO LLC

PAY BYAmerican Express Apple Pay Diners ClubDiscoverGoogle Pay Mastercard PayPalShop Pay Visa
CART · 0