Files
paperclip-harness/docs/NEXT.md

148 lines
7.1 KiB
Markdown

# What is left to build
Written 2026-11-11. The interface has eight workspaces and 23 panels; the work below is what is
still missing or unproven. Order is by usefulness, not by size.
## Done since this list was written
- **`Repair>cleanup`** — session list with pane count and last use, `space` ticks, `x` closes
after asking, protected and attached sessions refused, and a line on screen saying that
`~/.pi/paperclips` is not touched.
- **`t` → `pi sessions` (Yazi) and `t` → `pi resume`** — the two cheapest ways into the history.
- **`v` in `Work>review`** — starts `bin/review <task> --post` and the tab follows its log.
- **`Project>projects`** — the registry `bin/office` writes, listed with folder, machine and
session; a project on another machine is shown and not offered.
- **`Board>needs` → `enter`** now also switches to the Reply workspace.
## 1. Repair>cleanup — the pane you asked for
A fourth tab in `Repair>repair` that lists TUIOS sessions with their pane count and last-active
time, marks the ones that are attached, and kills only what you tick. Two rules it must keep:
- **never touch `~/.pi/paperclips/`** — those are the Pi conversations, and they are the history;
- refuse any session that is attached, and refuse `paperclip-harness` by name.
Measured today: 37 sessions, 21 of them from the closed project's tests (`harness-demo-card-*`,
`office-test-1*`). Nothing has been killed.
## 2. A Pi session browser
The cheap version first: a `t` entry that opens `~/.pi/paperclips` in Yazi, and one that runs
`pi --resume`. Then, if that feels like a detour after a week, a read-only transcript tab in
`Agents>agents` that reads the JSONL directly. `GET /api/agents/{id}/task-sessions` maps a task
to its session file, so neither version has to guess.
## Done: Project>projects — switching project
`bin/office` records each adopted project; the tab lists session, machine and folder; `enter`
asks once and switches the client with `tuios call switch-session`, including to a session on
another machine when that machine is in the client's `[hosts]` table. See `docs/SESSIONS.md`.
## 3. Project>projects — switching project
A tab listing every adopted project from a small local registry
(`~/.config/paperclip-harness/projects.toml`: id, folder, host, session), filled by `bin/office`,
with a key to switch. A project on another machine is shown as `on .27` and not offered, because
this terminal cannot open a folder that is not here.
## 4. Run a review from the interface
`Work>review` shows the verdicts already recorded. It should also be able to *start* one:
`v` runs `bin/review <task> --post` in the background and the tab follows its log, the way
`Work>merge` already does.
## 5. The old `office` scaffold
`bin/office` writes `.harness/harness.toml` and builds the panes. The previous project also
wrote a scaffold: `settings.toml`, one file per role, `verify.sh`, the per-page notes — writing
only what is missing. That is the cheapest remaining gap in the project layer.
## 6. Board>needs: act on a card
The needs-you panel lists what is waiting but the action still happens elsewhere. Each card
should carry its own key: unblock, assign, open in Reply.
## Done: costs as a chart
`Project>costs` draws each task's spend as a bar against the largest, so the shape of the
month is visible without reading numbers. No extra API calls: the figures were already loaded.
```text
task state cents runs share of the largest
AUD-163 done 3 3 ████████████████████████
AUD-164 done 2 2 ████████████████
AUD-159 done 1 1 ████████
```
## Done: the `office` scaffold
`bin/office` now also writes what is missing, never overwriting: `.harness/verify.sh` with a
comment explaining how to replace it, and `.harness/NOTES.md` for the person. Adopting a folder
no longer leaves it without a place to say what "finished" means.
## Done: memory per agent, read-only
`Agents>settings` ends with a line read from the agent's command and the global Pi settings:
```text
memory and extensions
extensions: the global set · memory: pi-memctx
```
It claims only what it has read. A switch is a later decision, after one agent has run both ways.
## 7. Costs as a chart
`Project>overview` already draws a sparkline of runs in Go. Spend-per-day, using the same block
characters or `tuios.dev/plot`, is the natural second chart — no TML, no web view.
## 8. Memory per agent
`engram` is installed and `headroom` is running as a compression proxy, but nothing in the
interface shows which agent uses which. A read-only row in `Agents>settings` is the honest first
step; a switch is only worth adding after one agent has been run both ways and measured.
## 9. MOUSE-1
It is a hosted API, not software: `POST https://api.mouse.dev/v1/decisions` with the key already
in the environment. Measured facts are in `docs/MOUSE-1-NOTES.md` and summarised in
`docs/PLAN-INTERFACE.md`: cold start of minutes, ~490 ms warm, stable answers at high
confidence, and four proven uses — failure routing first among them.
The one place it would earn its keep here: a failed run in `Agents>agents` offers `f`, which
asks "what does this failure need" with four options and records the answer, the confidence and
the options on the task. A person still decides, and it never decides a merge.
## Headroom: a tool, not a provider
The `headroom-bridge` extension gives an agent two tools (`compress_for_agent`,
`check_headroom`). The endpoint answers (`POST /v1/compress` → 200). It needs the `headroom-ai`
npm package for Pi to resolve, which is not installed; then the extensions picker can give it to
one agent. As a *provider* it does not work here: 502 on OpenAI requests, 401 on Anthropic ones.
## Headroom: blocked as a provider
A provider entry was added, tested and removed. Headroom answers `502 proxy_error` to OpenAI
chat requests and `401 invalid x-api-key` to Anthropic ones: its backend is Anthropic and this
machine has no Anthropic credential. It cannot sit in front of the agents until either headroom
accepts the omni router's key, or the agents move to an Anthropic-shaped provider. The detail is
in `docs/PLAN-INTERFACE.md`.
## Done: Mouse-1 triage
`bin/triage <task> [--ask next|failure]` asks Mouse-1 one four-option question about a task and
writes the answer, the confidence and the option meanings onto the task as a comment. Measured
on `AUD-162`: 0.5 s warm, answer `person` at 0.97 confidence. The cold start reproduces: `503`
after 30.5 s, then `200` in 21.7 s, so the command retries exactly once and says so.
## Unproven, and worth a test
- opening a project **on another machine** (`bin/office --host`): written, never exercised;
- clicking a task row with the mouse in `Board>board`: the zones are wired, nobody has clicked;
- `R` with a pane that is not at its expected size;
- a task whose blocker is still open: does the agent stay away until it closes?
## Open Paperclip tasks in this project
One: `AUD-162`, a leftover test task in `todo` from the first day. Everything else is `done`.