HomeBlog › A todo list your agents actually share
Blog

A todo list your agents actually share

Jul 19, 20265 min readBy the Rysh team

Plans that live in a context window die with it. rysh's todo tool is a JetStream KV-backed task list humans and agents both read.

Ask an agent for its plan and you'll get a beautiful numbered list. Ask again after a context reset and you'll get a different beautiful numbered list.

Neither list was wrong, exactly. Both were made up fresh, on the spot, from whatever survived in the context window. That's the dirty secret of agent "planning": the plan usually has the lifespan of a completion. It's prose, not state.

For a one-shot answer, fine. For real multi-step work — the kind that outlives a context window, a laptop lid, or your patience — a plan that evaporates is worse than no plan, because it looks like process while providing none.

Plans as state, not prose

rysh gives every pane a todo tool: a task list the agent manages through explicit tool calls — add items, update statuses, check them off — persisted in JetStream KV.

That last clause is the load-bearing one. rysh runs an embedded NATS server per session, and pane state lives in KV buckets, not in anyone's context window. So the todo list survives everything a conversation doesn't:

The plan stops being something the agent said and becomes something the workspace has.

"Share" is the operative word

Here's what changes day-to-day: the todo list isn't the agent's private scratchpad. It's pane state — you read the same list the agent writes, and every mutation is a visible tool call in the pane, like every other tool call in rysh.

That turns the list into a contract, and it enables the single most useful prompting pattern we know for delegated work — the plan gate:

  1. "Plan first. Write the steps to the todo list. Don't execute."
  2. You read the list. Thirty seconds. You reorder, cut the step that touches prod, add the one it forgot.
  3. "Go."

Now execution is legible by default. Reviewing progress means glancing at item statuses, not excavating a transcript. When something stalls, you can see which step stalled — "stuck on 4 of 7" is a debuggable statement in a way that "the agent seems stuck" never was.

Across agents, across resets

The list also earns its keep between agents. rysh agents have workspace-awareness tools: agents_list to see who exists, pane_inspect to look at a pane, session_history to read what happened there. A reviewer agent in pane 3 can check the implementer's todo in pane 1 before opening its mouth, and a nudge travels as pane_send — "pick up item 3, item 2 is blocked on me."

And the list is the natural checkpoint for governed loops. When a judge-decided reset throws away a polluted context, the fresh run doesn't start from amnesia — it re-grounds on the surviving todo: here's what was done, here's what remains. Resume without re-planning. The context was disposable; the plan wasn't. That's the correct assignment of durability.

A few patterns that fall out:

Honest edges

What this is not, so nobody buys a fantasy:

The pitch, minus any magic: agents are already decent at making plans. The missing piece was never intelligence — it was a place to put the plan that outlives the conversation, that humans can read at a glance, and that the next agent (or the next context) can pick up mid-stride.

Turns out that place is a todo list. It just had to actually persist, and actually be shared.


We're recruiting design partners. If your team is delegating multi-step work to agents and wants plans you can read, gate, and resume, come build with us: rysh.ai/design-partner

Related: Judge-decided reset and resume · context store / recall: passing state between agents

Try Rysh

Every pane is a shell and an AI agent — install takes one command.

Get started free →