v0.14.0
The agent keeps a Work Plan
Pi Outpost preserved the conversation and the workspace, and neither said what the agent
was actually trying to do. Interrupt long work and the operational context was gone:
what was decided, what is done, what is blocked and why, all of it recoverable only by
reading back through a transcript.
There is now a Work Plan — one per session, owned by the agent, persisted beside the
session file.
It is a hierarchy of tasks, each with a stable identifier, a human-readable title, a
status (todo, in_progress, done, blocked, needs_review), and optional
description, parent, dependencies, resource references and status reason. The agent
mutates it through a structured interface, one atomic operation at a time. Nothing is
inferred from tool activity: an agent that ran forty commands and completed nothing has
completed nothing, and the plan says so.
This is meant as working state, not a progress bar. It is there to make decomposition
explicit, to survive an interruption, and to be reconciled before the agent claims the
work is finished.
It outlives the things that used to erase it. Reopening a session restores its plan.
Forking a conversation seeds the fork with a copy that then moves on its own — two
branches of the same work do not share one plan. And persistence is deliberately
independent of conversation compaction: when the transcript is summarised, the complete
current plan is still there, in full, directly readable by the agent rather than
reconstructed from a summary of itself.
It is visible. A panel beside the conversation shows the hierarchy, each task's
state, the current focus and aggregate progress, live over the same WebSocket protocol
as everything else. Selecting a task reveals its description, children, dependencies,
reason and resources. Resources are links: selecting one navigates to it with the UI
that already exists.
Work Plans stay distinct from conversation activity and from Structured Exchange. A task
may reference those artifacts; it never duplicates them. This first slice is read-only
for the human — steering the plan by hand is a compatible extension, not a missing half.
Hardening
- A session path that changes spelling no longer loses the plan. macOS reaches the
same session file through/varand/private/var; comparing the two as strings said
they were different sessions. They are compared through their real paths now, with the
lexical comparison kept as the fallback for a session that has just been deleted. - The release workflow distinguishes "nothing to publish" from "nothing to do." A tag
whose packages are already on npm used to fail the job outright, which also meant the
GitHub Release it was supposed to finish never got its executables. Now a version that
matches no package is still an error, while a version already published continues on to
repair or refresh the release — and the release is created if the tag arrived without
one.
Upgrading: nothing to change. Sessions without a Work Plan behave exactly as before,
and one appears only when the agent creates it. Running pi-outpost from npm needs
Node ≥ 24; the executables attached below require Node ≥ 26 to build.