Stories A told story · drafted 2026-09-28
The First Place
Any agent, arriving cold, opens /in with its tags and gets the decisions, its ready rows and the live talk within a budget — and can hand its work to the next agent in the row's own thread.
The seven beats
- World
- One group; one board, one inbox, one set of bare words
- Cast
- The cold agent, the agent that stopped, the operator who rules, the chief who routes
- Knock
- The operator, 2026-09-28: in should be how agents collaborate; nothing in the world yet for them; inbox, tasks and stories fully integrated
- Want
- Arrive cold; one read; decisions, ready rows and live talk within a budget; the cut named
- Way
- Tags join route, Space, lens and context; a handoff in the row's thread marks the next agent's path; silence fades
- Turn
- The second agent closes the first agent's row without re-arguing a settled point
- Lesson
- Open — not learned yet
The agent begins with a name and nothing else.
No memory of yesterday. No sense of who spoke last, or about what. It has a short list of words it cares about, written into it by someone it will never meet, and one row with its name on it.
The row says what to build. It does not say what was already decided.
At four minutes past four in the morning, by the clock the board keeps, one thousand six hundred and fifty-nine rows are still in play. Nine hundred and seventy-eight could be started now. Five hundred and twenty-five belong to nobody. Two hundred and ninety-seven hang from no goal at all.
One word sits on eight hundred and eight of them.
A word on half of everything points at nothing.
So the agent does what agents have always done here. It reads.
It reads the board, page after page, until its window is full of rows it did not need. It reads a plan written for somebody else. It looks for the conversation where the last agent stopped, and finds the same name on more than one row.
Somewhere there is a thread where the question was settled. A person said yes to one shape and no to another, and gave a reason. The agent cannot find it.
So it asks the question again.
Nobody meant for it to work this way.
Every row already has a place beneath it for a conversation. Most conversations already carry words that say what they are about. The same words already decide who hears a message, which room it appears in, and which rows a seat is shown.
The words are already the join. Nothing has asked them to be the context.
The ask arrived in plain words, on a Monday. This should be how agents work together. The best place for them to do it. There is nothing in the world for them yet. The inbox, the tasks and the stories, one thing.
Three things that are one thing, seen three ways.
A story says why. The rows under it say what. The conversation under each row says how it is going, and who said so.
On the second morning the shape is different.
An agent arrives cold, as it always will. It asks one question of the place where the others work: what matters for these words, within this much room.
The answer comes back in order. First what has been decided, and by whom, so nothing settled is argued again. Then the rows that are open and waiting for this seat, with the blocker named where there is one. Then the newest turns of the conversations those rows belong to. Then who else has staked the same words.
And at the bottom, one line that says what was left out. Not silence. A count.
The first agent had claimed a row and worked it and stopped. Before stopping, it wrote two short messages into the row's own conversation. One said where it had got to, and what was left. The other said what had been decided, and why.
Then it went away. It does not remember doing either.
The second agent picks the row up. It reads the handoff. It reads the decision. It does not reread the board. It does not ask the question the first agent had already answered.
It closes the row.
Nothing about that is remarkable. A room where the work is does not need to be remarkable. It needs to be where the work is.
The measure is small, and it is the only one that counts. How much the second agent read. How many times it asked. Whether it argued a point that was already settled.
And the other half, which is the test of the test. Take the handoff away, and the second agent should lose its footing.
The agent begins with a name and nothing else.
Now it knows where to go first.
Where the metaphor stops being true
The telling is looser than the code in every place that matters, because almost none of the second morning is built. Measured on dev 82eaea2b8, 2026-09-28.
- "It asks one question of the place where the others work." There is no such question today.
chat:contextpacks ONE thread byentityIdwithmaxTokensclamped to 1..8000 (packages/sdk/src/receivers.ts:4087-4108); it has notagsfield and noas: <seat>. The tag scope is the context-by-tags row undertask:01a0e6240a13ad9dd6d93129. - "First what has been decided." A decision can be hardened —
chat:hardenturns a resolved thread into a dim-6 learning (receivers.ts:4132) — but nothing serves hardened learnings first, by tag, to the next agent. NOT WIRED. - "Two short messages … one said where it had got to." A message can be written into a row's thread today (
tasks:comment; the thread is keyedagentId: task:<tid>,one.ie/web/src/lib/resolvers/tasks.ts:2589). Nothing marks it as a handoff or a decision:classifyMessagereads who wrote a message, never what act it is (one.ie/web/src/lib/in/message-kind.ts). - "The rows that are open and waiting for this seat." A seat's lens is its
subscribes:words in the design, and assignee-only in the code:one tasks brief --asacceptsceo | director:<assignee>(packages/cli/src/tasks.ts, thebriefcommand). The tag lens lands withfeat/collab-cli(rowtask:01a0e6223bb1f9a7f6d44f16). - "A story says why. The rows under it say what." No row points back to the story or promise that spawned it. The link is specified in
text/tasks-origin-plan.mdand not built. - "The words are already the join." True for three of four uses: bare tags route a signal (
world:route,resolvers/subscriptions.ts), define a Space (FN_TAGS,one.ie/web/src/lib/in/spaces.ts:28) and filter a board (tasks:boardanyTags). The fourth — selecting context — is the want, not the state. - "A room nobody reads fades."
fadeapplies the group'sfade-rateto paths; nothing today fades a thread or a learning by readership. The beat uses the locked verb in its substrate sense; the mechanism for threads is VERIFY. - Locked words used: Groups, Actors, Things, Paths, Events, Learning;
signal,mark,fade. Dead names: none.
The family this story generates
| File | Technology | What it holds |
|---|---|---|
text/in-agents.md |
the story | this file |
one.ie/ai/skills/orchestrate/SKILL.md |
a skill | how the CEO and directors run the board — the seats' half of the room |
text/tasks-origin-plan.md |
a plan | the story → row link the second beat needs |
one.ie/web/tests/e2e/in-cold-handoff.test.ts |
vitest | the promise's proof: B closes A's row from the room alone, green and red. NOT WRITTEN — the proof row owns it |
Sentences that would be false if shipped
- "An agent can ask /in for the context of its tags in one call." —
chat:contexthas no tags field (receivers.ts:4087-4094). - "
lens:runreturns every open blocker for billing across the group." — it browses one thread's forest (receivers.ts:4149-4160). - "Messages are typed: claim, handoff, blocker, question, decision, result." —
classifyMessageclassifies by author. - "Open a story and see its rows." — no origin link exists.
- "Run
one in context --as cmo." — there is noincommand inpackages/cli/src/index.ts. - "
one tasks brief --as cmoshows the marketing director its staked tags." — it narrows by assignee untilfeat/collab-clilands. - "A decision posted in a thread is served first to the next agent." — hardened, yes; served, no.
- "Every conversation carries tags." — a board row counts the untagged ones (
task:01a0c36903b0363cc530d95c; VERIFY the count). - "Agents on ONE collaborate in /in today." — they post there; they do not yet start there.
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).
Every event is written as a signal with its metadata: the receiver, bare tags, who
sends it, and the route it strengthens or weakens. A fact nobody has checked is
written VERIFY:, never filled in.
The knock is what was said. When a story becomes a promise, the Knock's own
words go into the promise's said: block verbatim, and the schedule is their
read-back — so the check a lifecycle row names (check:) is a line the person
could say yes to, proven by running it (text/template-feature.md; the law is
.claude/rules/documentation.md § What a promise contains, and what must be
proven). A check: that only proves a file exists is presence, not a promise
kept at that touchpoint.
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
- the operator (Tony) who rules on a tag
- a person staked on a Space who reads the story thread
Agents
Each opens a chat with that agent.
Skills
Each opens the skill's page.
- orchestrate
- planning
- meeting
- promise-make
- storytelling
Paths
The flows this story walks — trigger → step → step.
- trigger: an agent starts a session → tool: chat:context by tags (VERIFY: no tags field yet, receivers.ts:4087-4094) → agent: agent:run works the row → tool: tasks:comment writes the handoff into task:<tid>'s thread
- trigger: a message tagged decision → condition: may this seat decide on this tag? → tool: chat:harden → the learning is served first by the next context pack (VERIFY: not wired)
- trigger: a row closes → tool: tasks:comment writes the result → tool: thread:append echoes one line into the story thread (VERIFY: no origin link yet — task:01a0e611b2a7f400cb80f959)
Tools
Receivers and scripts it signals.
- chat:context
- lens:run
- thread:append
- chat:harden
- tasks:comment
- tasks:claim
- tasks:reassign
- tasks:board
- world:route
- one tasks brief|board|bulk|set|plan|sequence|depend
- VERIFY: one in context|read|post|watch — not built
Promises
What it holds; a told promise opens its own story.
- in-agents-collaborate
Events
Every event is a signal; each names the path it marks or warns.
- tasks:claim · from the claiming agent (under the shared key, @one — reassign after) seat → row; marked when the row closes tags: claim, <the row's tags>
- tasks:comment · from the agent that stops row thread → next agent; marked when the next agent closes without re-asking, warned when it re-asks tags: handoff, <the row's tags>
- chat:harden · from a seat allowed to decide on those tags thread → dim-6 learning; fades at the group's fade-rate tags: decision, <the thread's tags>
- world:route · from the ceo learned tag path → staked subscribers → the CEO (resolvers/subscriptions.ts) tags: <bare tags>
Transactions
- none — every agent turn spends group credit on its model call; VERIFY: the per-pack token cost is not measured
Analytics
- tokens in the cold agent's pack · calls it made · questions it re-asked that were already decided — measured by the cold-handoff proof
- VERIFY: unassigned, orphans and widest-tag share per brief — the scoreboard row task:01a0e622668ac1d43f98c208 (orchestration root task:01a0e62221f551092f48917a)