Stories A told story · drafted 2026-09-24
A Picture on the Row It Explains
Any person or agent can draw a diagram in the terminal and put it on the task row it explains, whole or not at all.
The seven beats
- World
- the one group, where every plan is a row on the board and every row has a thread
- Cast
- Tony, who asked; the agents who plan and build; a person elsewhere who wrote the small drawing editor and gave it away
- Knock
- one line on 2026-09-24: add lazy draw to our cli
- Want
- a diagram that lives on the row it explains, instead of box art typed by hand into a note and left to drift
- Way
- draw in the terminal, export it as plain characters, post it to the row's thread; the thread keeps 4000 bytes, so a picture that does not fit is refused whole, never cut
- Turn
- the first picture landed, and the check called it cut: 483 bytes sent, 482 kept. The door had trimmed a newline. Then a failed post came back reading ok. The drawing was easy; the receipt was the work
- Lesson
- Open — a Lesson is learned by someone, and this one is not written yet
A note on a board row, eleven lines long, three of them boxes drawn with plus signs and bars.
Nobody had checked the boxes since the day they were typed.
That is how pictures lived here. A plan was a row, and a row had notes, and when a plan needed a shape someone typed the shape by hand. The corners never met twice the same way. When the plan changed, the words changed and the boxes did not.
On a morning in September one line arrived. Add the drawing tool to the command line.
The tool already existed. A person far away had written a small editor that draws in the terminal, with a mouse, in plain characters, and had given it away. It ran on a different engine from the command line. So it was not taken in. It was called, the way a neighbour is called over the fence, and it kept its own house.
The want was not the drawing. The want was the picture sitting on the row it explained, in the row's own thread, where the next reader would already be looking.
The thread keeps four thousand bytes. A picture larger than that has two honest answers and one dishonest one. It can go whole. It can be refused whole, with both numbers named. Or it can be cut at the edge and reported as sent. The third answer is the one this board has been burned by before.
The first picture went up. The check that guarded it said it had been cut. Four hundred and eighty-three bytes sent, four hundred and eighty-two kept.
Nothing had been lost. The door trims a newline before it counts. The measurement had lied before the thing it measured did.
Then the door went quiet upstream, and a post that never landed came back reading ok, because one small word inside the answer had overwritten a larger one outside it.
The drawing had taken minutes. The receipt took the morning.
Now the door's own count decides what was kept, and a failure says whether it landed.
A picture on the row, eleven lines long, and every byte of it where it was sent.
Where the metaphor stops being true
- "Called, the way a neighbour is called" — the editor is spawned as a child process by
packages/cli/src/draw.ts(resolveRunner):lazydrawon PATH, elsebun x lazydraw@0.1.1. It is not a dependency of@oneie/cli, whose runtime deps staycommander+@oneie/sdk. - "The door trims a newline before it counts" —
resolvers/tasks.ts:bodyRaw.trim()thencommentByteLen.draw.tstherefore readssubmittedBytes/storedBytes/truncatedfrom the response and never compares against its own byte count. - "One small word overwrote a larger one" —
{ ok: false, ...inner }let an inner body'sokreplace the failed outcome. Fixed to{ ...inner, ok: false }. The same spread shape exists inpackages/cli/src/media.tsunwrap(); there it is guarded by'ok' in inner, but it was not audited here. - Locked words used: group (the
onegroup), people and agents, signal (the knock), the board's rows are Things. No dead names. - NOT WIRED: no agent prompt names
one draw; an attach marks no path; nothing counts attaches.
The family this story generates
| File | Technology | What it holds |
|---|---|---|
text/lazydraw.md |
the story | this file |
packages/cli/src/draw.ts |
TypeScript | the verb — spawn, export, attach, the refusal |
packages/cli/tests/draw.test.ts |
vitest | runner order, the byte cap in bytes not characters, registration |
packages/cli/README.md · packages/cli/CLAUDE.md |
reference | the command, one block and one row |
Sentences that would be false if shipped
- "Agents attach their diagrams to the rows they file." — no agent prompt or skill names
one drawyet. - "Attaches are counted." — nothing counts them.
- "
one drawworks anywhereoneworks." — it needs Bun ≥ 1.3; without it the verb refuses on one line. - "Diagrams of any size go on the board." — the thread keeps 4000 bytes; larger ones are refused whole.
The story shape — the chain, and the three rules
The fourteen parts walk one chain, from what is wanted to what was learned:
goal states the Want plainly
│
story tells the seven beats
│
plan sets the path from the story to the work
│
tasks the rows /do executes, tagged on the board
│
promise what was agreed, its accepts frozen
│
stakes what changes if it is kept or missed
│
events signals — each one marks or warns a route
│
proof the &&-join of the accepts, run as written
│
payment money moves only where a person consents
│
learning a path or a status changes, so the next
pick is not the last one
Three rules hold for every lifecycle, for people and for agents:
- Promises at every touchpoint. Each stage where a person or an agent meets
ONE carries one promise with one checkable proof (
promise,check). - Agents help people move forward. Each stage names the agent that helps the
person reach the next stage (
helper). - Agents hand tasks to people. Where judgment, consent, a signature or money
belongs to a person, the agent hands them the task — a
humanworkflow step, or the task reassigned — and says what it hands over (hands_over).
Connected to
Every link here was checked against the repo when the page was built. 3 names the story uses could not be found and are shown without a link.
People
- tony
Agents
Each opens a chat with that agent.
Skills
Each opens the skill's page.
- cli
Paths
The flows this story walks — trigger → step → step.
- trigger: a person or agent needs a diagram → tool: one draw <name> (the editor, a human at the keys) → tool: one draw attach <name> --task <tid> → tasks:comment
Tools
Receivers and scripts it signals.
- packages/cli/src/draw.ts — one draw · list · export · attach
- lazydraw 0.1.1 (github.com/mpospirit/lazydraw, MIT) — spawned: on PATH, else bun x; never a dependency
- tasks:comment — the thread door, 4000-byte cap, reports submittedBytes/storedBytes/truncated
Events
Every event is a signal; each names the path it marks or warns.
- tasks:comment · from the person or agent running one draw attach VERIFY: a comment marks nothing today; the thread is the record tags: draw, diagrams
Transactions
- none — the editor is free and MIT; no credit moves
Analytics
- VERIFY: attaches are not counted anywhere; the task thread is the only record