Headroom measured and blocked; Mouse-1 triage command built and run

This commit is contained in:
Sam
2026-11-11 18:39:38 +11:00
parent 70e1f55486
commit 7a2d4358d3
10 changed files with 1091 additions and 5 deletions

View File

@@ -957,3 +957,195 @@ Committed as `3ec960e`; `docs/NEXT.md` updated with what is done and what remain
- context: [[packs/paperclip-harness/20-context/config|.config]]
- runbook: [[packs/paperclip-harness/70-runbooks/tmp-deployment-operations|.config deployment operations]]
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|.config repository structure and configuration patterns]]
---
## Update (2026-11-11 05:36:08)
Trigger: want to try Headroom compression for a single agent. Prerequisites: `~/.pi/agent/settings.json` editable. Steps:
1. Once, add provider to `~/.pi/agent/settings.json`: `"headroom": { "baseUrl": "http://192.168.20.13:8787/v1", "apiKey": "<same key the omni provider uses>", "api": "openai-completions" }`.
2. In `Agents>settings`, set that agent's model to `headroom/auto/best-coding`.
3. Validate: run the same task with and without headroom, compare cost, duration, result; watch for tool-calling breakage and compression effects on large tool results.
Rollback: restore the agent's model to the prior provider model; remove the provider entry if unused. Caveat: per-project selection is impossible — agent model is the finest granularity.
## Detailed procedure from completed turn
Four answers.
## 1. The cut-off text
The overlay drew each line and then clipped it to the box width — no wrapping at all. It wraps now, and the box is as wide as the screen allows:
```
╭─ close 1 session? ───────────────────────────────────────────────────────·focus· ╮
│ what happens these TUIOS sessions are closed and their panes end │
│ nothing in ~/.pi/paperclips is deleted; that is your Pi │
│ history │
│ this project's session and attached sessions are never touched │
│ y close them │
│ esc or n do nothing │
│ office-test-1-card-t3-cover-image-1x4e │
╰─────────────────────────────────────────────────────────────────────────────────╯
```
The text was also "cut off in chat" because I had truncated my own output with `sed`; the popup itself was the real fault and is fixed.
## 2. `verify.sh` — you are right, it was a hangover, and it is reframed
I had been describing it as "the thing that decides a task is finished". That is wrong, and it is exactly the wrongness you smelled. What actually decides a task is finished:
1. **the agent**, by setting the task's status — Paperclip's own model;
2. **a reviewer**, if a review stage is configured on the task;
3. **`ocr`**, at merge time, which can refuse the change.
A project-wide script cannot overrule any of those. So its honest job is a **regression check**, the same job a CI pipeline does: after a task's work is applied, does the project still build and pass its tests? `bin/merge` runs it in the task's worktree and again on `main`, and rolls the merge back if it fails.
Renamed accordingly: `bin/office` now writes **`.harness/check.sh`**, and the old `.harness/verify.sh` is still honoured so an adopted folder keeps working. The merge dialog now says `project check: …` or `no project check: the review decides`.
## 3. Headroom — the concrete version
Measured just now:
```
GET http://192.168.20.13:8787/v1/models → 200, 486 models (auto/best-coding, deepseek/…)
GET http://192.168.20.13:8787/health → healthy, compression on, memory off
upstream → http://192.168.20.13:20129/v1
```
The agents' `omni` provider already points at that same upstream, so headroom can sit in front of it. To use it for one agent, two steps, only the second per agent:
1. once, in `~/.pi/agent/settings.json`, add a provider:
```json
"headroom": { "baseUrl": "http://192.168.20.13:8787/v1",
"apiKey": "<the key the omni provider already uses>",
"api": "openai-completions" }
```
2. in `Agents>settings`, set **that agent's model** to `headroom/auto/best-coding`.
**Would it work.** The endpoint answers the OpenAI-style API that Pi's provider type speaks and lists the model ids Pi would ask for, so the pieces line up. It remains a hypothesis until one run goes through it: the unknowns are whether the proxy passes Pi's tool-calling requests unchanged, and what compression does to a prompt with large tool results. The measurement is one run, comparing cost, duration and result for the same task with and without.
**Per project is not possible.** The provider is chosen by the agent's model, and agents belong to the company, not a project. One agent is the finest granularity — which is what the model field already gives you.
## 4. Mouse-1 notes, read
They are precise and I have folded the facts into `docs/PLAN-INTERFACE.md`. The ones that shape the design:
- `POST https://api.mouse.dev/v1/decisions`, key already in the environment — no software to install, I was wrong about that.
- **Cold start is minutes**: first call after idle returned `503 engine_timeout` after 30 s; retry 200 in 13 s; warm ~489 ms.
- Stable answers at ~0.98 confidence. A classifier, not a writer.
- Proven useful for **failure routing** (redo / stronger model / environment / person), unblock triage, intake clarity, task sizing.
- Ruled out for the merge decision, judging test results, anything on a keystroke path, and as the only record of a decision.
The one place it earns its keep here: a failed run in `Agents>agents` offers `f`, asks one four-option question, and writes the recommendation, confidence and options onto the task — with the screen saying "asking, this can take half a minute", and a person still deciding.
Committed as `70e1f55`.
## Evidence
- Confidence: 85%
- Reason: Concrete repeatable procedure with rollback and validation.; enriched with final-answer detail because persistence should be reusable
---
## Update (2026-11-11 05:36:08)
## Deployment/runbook details discovered (2026-11-11 05:36:08)
Four answers.
## 1. The cut-off text
The overlay drew each line and then clipped it to the box width — no wrapping at all. It wraps now, and the box is as wide as the screen allows:
```
╭─ close 1 session? ───────────────────────────────────────────────────────·focus· ╮
│ what happens these TUIOS sessions are closed and their panes end │
│ nothing in ~/.pi/paperclips is deleted; that is your Pi │
│ history │
│ this project's session and attached sessions are never touched │
│ y close them │
│ esc or n do nothing │
│ office-test-1-card-t3-cover-image-1x4e │
╰─────────────────────────────────────────────────────────────────────────────────╯
```
The text was also "cut off in chat" because I had truncated my own output with `sed`; the popup itself was the real fault and is fixed.
## 2. `verify.sh` — you are right, it was a hangover, and it is reframed
I had been describing it as "the thing that decides a task is finished". That is wrong, and it is exactly the wrongness you smelled. What actually decides a task is finished:
1. **the agent**, by setting the task's status — Paperclip's own model;
2. **a reviewer**, if a review stage is configured on the task;
3. **`ocr`**, at merge time, which can refuse the change.
A project-wide script cannot overrule any of those. So its honest job is a **regression check**, the same job a CI pipeline does: after a task's work is applied, does the project still build and pass its tests? `bin/merge` runs it in the task's worktree and again on `main`, and rolls the merge back if it fails.
Renamed accordingly: `bin/office` now writes **`.harness/check.sh`**, and the old `.harness/verify.sh` is still honoured so an adopted folder keeps working. The merge dialog now says `project check: …` or `no project check: the review decides`.
## 3. Headroom — the concrete version
Measured just now:
```
GET http://192.168.20.13:8787/v1/models → 200, 486 models (auto/best-coding, deepseek/…)
GET http://192.168.20.13:8787/health → healthy, compression on, memory off
upstream → http://192.168.20.13:20129/v1
```
The agents' `omni` provider already points at that same upstream, so headroom can sit in front of it. To use it for one agent, two steps, only the second per agent:
1. once, in `~/.pi/agent/settings.json`, add a provider:
```json
"headroom": { "baseUrl": "http://192.168.20.13:8787/v1",
"apiKey": "<the key the omni provider already uses>",
"api": "openai-completions" }
```
2. in `Agents>settings`, set **that agent's model** to `headroom/auto/best-coding`.
**Would it work.** The endpoint answers the OpenAI-style API that Pi's provider type speaks and lists the model ids Pi would ask for, so the pieces line up. It remains a hypothesis until one run goes through it: the unknowns are whether the proxy passes Pi's tool-calling requests unchanged, and what compression does to a prompt with large tool results. The measurement is one run, comparing cost, duration and result for the same task with and without.
**Per project is not possible.** The provider is chosen by the agent's model, and agents belong to the company, not a project. One agent is the finest granularity — which is what the model field already gives you.
## 4. Mouse-1 notes, read
They are precise and I have folded the facts into `docs/PLAN-INTERFACE.md`. The ones that shape the design:
- `POST https://api.mouse.dev/v1/decisions`, key already in the environment — no software to install, I was wrong about that.
- **Cold start is minutes**: first call after idle returned `503 engine_timeout` after 30 s; retry 200 in 13 s; warm ~489 ms.
- Stable answers at ~0.98 confidence. A classifier, not a writer.
- Proven useful for **failure routing** (redo / stronger model / environment / person), unblock triage, intake clarity, task sizing.
- Ruled out for the merge decision, judging test results, anything on a keystroke path, and as the only record of a decision.
The one place it earns its keep here: a failed run in `Agents>agents` offers `f`, asks one four-option question, and writes the recommendation, confidence and options onto the task — with the screen saying "asking, this can take half a minute", and a person still deciding.
Committed as `70e1f55`.
## Source paths observed
- `examples/extensions/custom-provider-anthropic`
- `../examples/extensions/custom-provider-anthropic`
- `8787/v1/models`
- `.pi/agent/settings.json`
- `headroom/auto/best-coding`
- `api.mouse.dev/v1/decisions`
## Evidence
- Confidence: 83%
- Reason: Extracted repeatable deploy/configuration procedure from rich discovery
## Related learned memories <!-- same-turn-2026-11-11 05:36:08 -->
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|Headroom proxy endpoint facts (192.168.20.13:8787)]]
- runbook: [[packs/paperclip-harness/70-runbooks/tmp-deployment-operations|Enable Headroom for one agent in paperclip-harness]]
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|overlay wrap fix, check.sh rename, headroom/mouse notes commit 70e1f55]]
- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-discovery-snapshot-overlay-check-sh-headro|paperclip-harness discovery snapshot: overlay, check.sh, headroom, mouse-1]]
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-8787-2026-11-11-05-36-08|Rich discovery: 8787 2026-11-11 05:36:08]]
- context: [[packs/paperclip-harness/20-context/omni|8787]]