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

@@ -2896,3 +2896,363 @@ Committed as `e02b399`. `docs/SESSIONS.md` explains sessions versus daemons, `do
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-cleanup-now-asks-before-it-closes-anything-an|Rich discovery: cleanup-now-asks-before-it-closes-anything-and-the-three-que 2026-11-11 04:58:08]]
- context: [[packs/paperclip-harness/20-context/cleanup-now-asks-before-it-closes-anything-and-the-three-que|cleanup-now-asks-before-it-closes-anything-and-the-three-que]]
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|cleanup-now-asks-before-it-closes-anything-and-the-three-que repository structure and configuration patterns]]
---
## Update (2026-11-11 05:36:08)
`GET http://192.168.20.13:8787/v1/models` → 200, 486 models (e.g. `auto/best-coding`, `auto/best-reasoning`, `deepseek/…`); `/health` → headroom-proxy healthy v0.24.0. Upstream is `http://192.168.20.13:20129/v1`, which the agents' `omni` provider (api `omni-prompt-tools`) already points at. Pi provider entries in `~/.pi/agent/settings.json` use OpenAI-style config; a `headroom` provider of api `openai-completions` with baseUrl `http://192.168.20.13:8787/v1` and the same key as omni can be added. Agent model field (`headroom/auto/best-coding`) is the finest per-agent granularity; per-project selection is impossible since agents belong to the company. Unknowns: whether proxy passes Pi tool-calling requests unchanged, and compression effects on large tool results — validate with one comparative run. (Do not persist the API keys seen in the turn.)
## Detailed observations 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: Measured, durable environment facts with endpoint/model counts and caveats.; enriched with final-answer detail because persistence should be reusable
---
## Update (2026-11-11 05:36:08)
Mouse-1 is reachable at `POST https://api.mouse.dev/v1/decisions` with key already in the environment (no install required). Cold start is minutes: first call after idle returned `503 engine_timeout` after 30 s; retry returned 200 in 13 s; warm ~489 ms. Stable answers at ~0.98 confidence; it is a classifier, not a writer. Proven uses: 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. Intended integration: a failed run in `Agents>agents` offers `f`, asks one four-option question, writes recommendation/confidence/options onto the task, with UI stating it can take ~30 s and human still decides.
## Detailed observations 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: 90%
- Reason: Measured operational characteristics and design constraints for a planned integration.; enriched with final-answer detail because persistence should be reusable
---
## Update (2026-11-11 05:36:08)
A task is finished by (1) the agent setting the task status (Paperclip model), (2) a reviewer if a review stage is configured, or (3) `ocr` at merge time refusing the change. `bin/merge` runs the project check (`check.sh`) in the task worktree and again on `main`, rolling back on failure — a regression check like CI, not a completion gate.
## Detailed observations 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: Architectural decision clarified in the turn; durable semantics.; enriched with final-answer detail because persistence should be reusable
---
## Update (2026-11-11 05:36:08)
## Structural/configuration observations (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: 82%
- Reason: Captured factual repo structure/configuration patterns 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]]