diff --git a/.pi/memory-vault/packs/paperclip-harness/20-context/omni.md b/.pi/memory-vault/packs/paperclip-harness/20-context/omni.md new file mode 100644 index 0000000..bd0280b --- /dev/null +++ b/.pi/memory-vault/packs/paperclip-harness/20-context/omni.md @@ -0,0 +1,87 @@ +--- +type: context +id: context.paperclip-harness.omni +title: omni +status: active +source_of_truth: false +freshness: current +last_reviewed: 2026-11-11 +tags: + - pack/paperclip-harness + - agent-memory/context + - autolearn + - rich-discovery + - repo/omni +--- + +# omni + +## Rich discovery update (2026-11-11 04:06:03) + +The cleanup column navigates now, and the remaining list is finished except the one item that needs a decision from you. + +## Cleanup navigation + +The bug was that `↑`/`↓` scrolled the body, never the selection. They now move through the list, the chosen row shows `▸`, and a ticked row shows `*`: + +``` +session panes last used state +▸ paperclip-harness 10 11 Nov 15:04 this project's session + tuios coding harness 4 11 Nov 15:03 attached, or on another machine +* office-test-1 26 10 Nov 11:24 ticked for closing +``` + +`space` ticks, `x` closes the ticked ones after asking, and protected or attached sessions are refused with a line saying why. + +## The rest of the list + +**7. Costs as a chart** — `Project>costs` now draws each task's spend against the largest, using the figures already loaded, so no extra API calls: + +``` +task state cents runs share of the largest +AUD-163 done 3 3 ████████████████████████ +AUD-164 done 2 2 ████████████████ +AUD-159 done 1 1 ████████ +``` + +**5. The `office` scaffold** — `bin/office` now writes what is missing, never overwriting: `.harness/verify.sh` (with a comment explaining how to replace it, and what happens if you do not) and `.harness/NOTES.md` for the person. Adopting a folder no longer leaves it without a place to say what "finished" means. + +**8. Memory per agent, read-only** — `Agents>settings` ends with a line read from the agent's command and the global Pi settings: + +``` +memory and extensions + extensions: the global set · memory: pi-memctx +``` + +It states only what it has read. When you want to decide which agent uses engram or headroom, that line is where the answer will go — but the switch itself needs your input on what "using headroom" should mean for an agent that runs for ninety seconds. + +## What is left, honestly + +- **MOUSE-1** — key present, software not installed. Policy from the old project stands: triage only, never a gate. It needs the software before it needs a screen. +- **Switching projects** — the list is there; actually switching means tearing down these panes and building another project's, and a project on `.27` cannot be opened from `.13` at all. That is a design decision for you, not a missing key. +- **Memory switches** — awaiting your call on what they control. + +Everything else in `docs/NEXT.md` is now marked done. Committed as `36abdc1`; the eight workspaces were rebuilt and are running on the new build. + +## Source paths observed + +- `omni/deepseek/deepseek-v4-flash` + +## Evidence + +- Confidence: 84% +- Reason: Update component/repository context with detailed discovered structure and configuration + +## Related + +- [[packs/paperclip-harness/00-system/pi-agent/memory-manifest|Memory Manifest]] + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/.pi/memory-vault/packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups.md b/.pi/memory-vault/packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups.md index ab84ad3..85771f1 100644 --- a/.pi/memory-vault/packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups.md +++ b/.pi/memory-vault/packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups.md @@ -667,3 +667,35 @@ Remaining in `docs/NEXT.md`: spend chart, the `office` scaffold, memory per agen - 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 04:06:03) + +Deliverable: finished remaining docs/NEXT.md items for paperclip-harness except blocked/design-decision items. + +Key artifacts/changes: +- Cleanup list UI: ↑/↓ now move selection (▸) rather than scroll; space ticks (*); x closes ticked after confirmation; protected/attached sessions refused with a reason line. +- Project>costs: bar chart of each task's spend relative to the largest, reusing loaded figures (no extra API calls). +- bin/office: writes only missing .harness/verify.sh (with replacement/comments guidance) and .harness/NOTES.md; never overwrites. +- Agents>settings: appends read-only 'memory and extensions' line read from agent command and global Pi settings (e.g. extensions: the global set · memory: pi-memctx). + +Validation/result: verified via build=0, syntax ok, screens exercised in tuios panes (project/agents/repair windows). Eight workspaces rebuilt and running on new build. Committed as 36abdc1. + +Follow-ups: MOUSE-1 (triage-only, needs software), project switching design (.27 vs .13 boundary), memory switch semantics pending user input. + +## Evidence + +- Confidence: 90% +- Reason: Completed work with commit, artifacts, and validation results. + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/.pi/memory-vault/packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li.md b/.pi/memory-vault/packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li.md index 08dcc44..e90c4c1 100644 --- a/.pi/memory-vault/packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li.md +++ b/.pi/memory-vault/packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li.md @@ -213,3 +213,76 @@ Decision: In the paperclip-harness TUI, pressing `m` on a task no longer merges - session: [[packs/paperclip-harness/80-sessions/rich-discovery-tmp-2026-11-11-01-58-59|Rich discovery: tmp 2026-11-11 01:58:59]] - context: [[packs/paperclip-harness/20-context/tmp|tmp]] - observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|tmp repository structure and configuration patterns]] + + +--- + +## Update (2026-11-11 04:06:03) + +Decision: keep Agents>settings memory line read-only for now; do not implement a per-agent memory backend switch (engram vs headroom) until the user defines what 'using headroom' means for an agent that runs ~90 seconds. + +Context: memory read-out shows 'memory: pi-memctx' from Pi global settings. Switching projects also deferred: list exists but actual switching requires tearing down panes and building another project's; projects on .27 cannot be opened from .13 — a design decision for the user. + +Consequences: docs/NEXT.md otherwise complete at commit 36abdc1. MOUSE-1 remains triage-only, never a gate, and needs software installed. + +## Detailed decision context from completed turn + +The cleanup column navigates now, and the remaining list is finished except the one item that needs a decision from you. + +## Cleanup navigation + +The bug was that `↑`/`↓` scrolled the body, never the selection. They now move through the list, the chosen row shows `▸`, and a ticked row shows `*`: + +``` +session panes last used state +▸ paperclip-harness 10 11 Nov 15:04 this project's session + tuios coding harness 4 11 Nov 15:03 attached, or on another machine +* office-test-1 26 10 Nov 11:24 ticked for closing +``` + +`space` ticks, `x` closes the ticked ones after asking, and protected or attached sessions are refused with a line saying why. + +## The rest of the list + +**7. Costs as a chart** — `Project>costs` now draws each task's spend against the largest, using the figures already loaded, so no extra API calls: + +``` +task state cents runs share of the largest +AUD-163 done 3 3 ████████████████████████ +AUD-164 done 2 2 ████████████████ +AUD-159 done 1 1 ████████ +``` + +**5. The `office` scaffold** — `bin/office` now writes what is missing, never overwriting: `.harness/verify.sh` (with a comment explaining how to replace it, and what happens if you do not) and `.harness/NOTES.md` for the person. Adopting a folder no longer leaves it without a place to say what "finished" means. + +**8. Memory per agent, read-only** — `Agents>settings` ends with a line read from the agent's command and the global Pi settings: + +``` +memory and extensions + extensions: the global set · memory: pi-memctx +``` + +It states only what it has read. When you want to decide which agent uses engram or headroom, that line is where the answer will go — but the switch itself needs your input on what "using headroom" should mean for an agent that runs for ninety seconds. + +## What is left, honestly + +- **MOUSE-1** — key present, software not installed. Policy from the old project stands: triage only, never a gate. It needs the software before it needs a screen. +- **Switching projects** — the list is there; actually switching means tearing down these panes and building another project's, and a project on `.27` cannot be opened from `.13` at all. That is a design decision for you, not a missing key. +- **Memory switches** — awaiting your call on what they control. + +Everything else in `docs/NEXT.md` is now marked done. Committed as `36abdc1`; the eight workspaces were rebuilt and are running on the new build. + +## Evidence + +- Confidence: 80% +- Reason: Explicit deferral and rationale for design decisions.; enriched with final-answer detail because persistence should be reusable + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/.pi/memory-vault/packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions.md b/.pi/memory-vault/packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions.md new file mode 100644 index 0000000..91e43aa --- /dev/null +++ b/.pi/memory-vault/packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions.md @@ -0,0 +1,92 @@ +--- +type: observation +id: observation.paperclip-harness.paperclip-harness-cleanup-navigation-and-ui-conventions +title: paperclip-harness cleanup/navigation and UI conventions +status: active +source_of_truth: false +freshness: current +last_reviewed: 2026-11-11 +tags: + - pack/paperclip-harness + - agent-memory/observation + - paperclip-harness + - ui-conventions + - safety + - office +--- + +# paperclip-harness cleanup/navigation and UI conventions + +paperclip-harness tabular list conventions (from cleanup column and costs work): +- List selection is rendered with '▸' on the current row; ticked/selected-for-action rows show '*'. +- Navigation keys ↑/↓ move list selection, not body scroll; space toggles tick; x acts (closes ticked items after confirmation). +- Destructive actions must refuse protected sessions and attached/on-another-machine sessions, printing an explanatory line rather than failing silently. +- Cost bars scale to the largest spender and reuse already-fetched numbers; avoid new API calls for display-only features. +- bin/office adoption semantics: only create missing files (.harness/verify.sh, .harness/NOTES.md); never overwrite existing ones. +- Agents>settings should only state what it has read (extensions + memory from agent command/global Pi settings), not infer choices. + +## Detailed observations from completed turn + +The cleanup column navigates now, and the remaining list is finished except the one item that needs a decision from you. + +## Cleanup navigation + +The bug was that `↑`/`↓` scrolled the body, never the selection. They now move through the list, the chosen row shows `▸`, and a ticked row shows `*`: + +``` +session panes last used state +▸ paperclip-harness 10 11 Nov 15:04 this project's session + tuios coding harness 4 11 Nov 15:03 attached, or on another machine +* office-test-1 26 10 Nov 11:24 ticked for closing +``` + +`space` ticks, `x` closes the ticked ones after asking, and protected or attached sessions are refused with a line saying why. + +## The rest of the list + +**7. Costs as a chart** — `Project>costs` now draws each task's spend against the largest, using the figures already loaded, so no extra API calls: + +``` +task state cents runs share of the largest +AUD-163 done 3 3 ████████████████████████ +AUD-164 done 2 2 ████████████████ +AUD-159 done 1 1 ████████ +``` + +**5. The `office` scaffold** — `bin/office` now writes what is missing, never overwriting: `.harness/verify.sh` (with a comment explaining how to replace it, and what happens if you do not) and `.harness/NOTES.md` for the person. Adopting a folder no longer leaves it without a place to say what "finished" means. + +**8. Memory per agent, read-only** — `Agents>settings` ends with a line read from the agent's command and the global Pi settings: + +``` +memory and extensions + extensions: the global set · memory: pi-memctx +``` + +It states only what it has read. When you want to decide which agent uses engram or headroom, that line is where the answer will go — but the switch itself needs your input on what "using headroom" should mean for an agent that runs for ninety seconds. + +## What is left, honestly + +- **MOUSE-1** — key present, software not installed. Policy from the old project stands: triage only, never a gate. It needs the software before it needs a screen. +- **Switching projects** — the list is there; actually switching means tearing down these panes and building another project's, and a project on `.27` cannot be opened from `.13` at all. That is a design decision for you, not a missing key. +- **Memory switches** — awaiting your call on what they control. + +Everything else in `docs/NEXT.md` is now marked done. Committed as `36abdc1`; the eight workspaces were rebuilt and are running on the new build. + +## Evidence + +- Confidence: 85% +- Reason: Durable UI and safety conventions evidenced by the implemented behavior.; enriched with final-answer detail because persistence should be reusable + +## Related + +- [[packs/paperclip-harness/00-system/pi-agent/memory-manifest|Memory Manifest]] + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/.pi/memory-vault/packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns.md b/.pi/memory-vault/packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns.md index a11940f..92a3d34 100644 --- a/.pi/memory-vault/packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns.md +++ b/.pi/memory-vault/packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns.md @@ -2746,3 +2746,74 @@ 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 04:06:03) + +## Structural/configuration observations (2026-11-11 04:06:03) + +The cleanup column navigates now, and the remaining list is finished except the one item that needs a decision from you. + +## Cleanup navigation + +The bug was that `↑`/`↓` scrolled the body, never the selection. They now move through the list, the chosen row shows `▸`, and a ticked row shows `*`: + +``` +session panes last used state +▸ paperclip-harness 10 11 Nov 15:04 this project's session + tuios coding harness 4 11 Nov 15:03 attached, or on another machine +* office-test-1 26 10 Nov 11:24 ticked for closing +``` + +`space` ticks, `x` closes the ticked ones after asking, and protected or attached sessions are refused with a line saying why. + +## The rest of the list + +**7. Costs as a chart** — `Project>costs` now draws each task's spend against the largest, using the figures already loaded, so no extra API calls: + +``` +task state cents runs share of the largest +AUD-163 done 3 3 ████████████████████████ +AUD-164 done 2 2 ████████████████ +AUD-159 done 1 1 ████████ +``` + +**5. The `office` scaffold** — `bin/office` now writes what is missing, never overwriting: `.harness/verify.sh` (with a comment explaining how to replace it, and what happens if you do not) and `.harness/NOTES.md` for the person. Adopting a folder no longer leaves it without a place to say what "finished" means. + +**8. Memory per agent, read-only** — `Agents>settings` ends with a line read from the agent's command and the global Pi settings: + +``` +memory and extensions + extensions: the global set · memory: pi-memctx +``` + +It states only what it has read. When you want to decide which agent uses engram or headroom, that line is where the answer will go — but the switch itself needs your input on what "using headroom" should mean for an agent that runs for ninety seconds. + +## What is left, honestly + +- **MOUSE-1** — key present, software not installed. Policy from the old project stands: triage only, never a gate. It needs the software before it needs a screen. +- **Switching projects** — the list is there; actually switching means tearing down these panes and building another project's, and a project on `.27` cannot be opened from `.13` at all. That is a design decision for you, not a missing key. +- **Memory switches** — awaiting your call on what they control. + +Everything else in `docs/NEXT.md` is now marked done. Committed as `36abdc1`; the eight workspaces were rebuilt and are running on the new build. + +## Source paths observed + +- `omni/deepseek/deepseek-v4-flash` + +## Evidence + +- Confidence: 82% +- Reason: Captured factual repo structure/configuration patterns from rich discovery + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/.pi/memory-vault/packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of.md b/.pi/memory-vault/packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of.md new file mode 100644 index 0000000..40cdd07 --- /dev/null +++ b/.pi/memory-vault/packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of.md @@ -0,0 +1,55 @@ +--- +type: session +id: session.paperclip-harness.paperclip-harness-cleanup-column-navigation-fix-cost-bars-of +title: paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line +status: active +source_of_truth: false +freshness: current +last_reviewed: 2026-11-11 +tags: + - pack/paperclip-harness + - agent-memory/session + - paperclip-harness + - cleanup + - costs + - office-scaffold + - agent-memory + - session +--- + +# paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line + +Session snapshot for the paperclip-harness project (git commit 36abdc1, message: 'Cleanup list navigates; spend bars; office writes the missing scaffold; memory read-out per agent'). + +Completed in this turn: +1. Cleanup-column navigation bug fixed: ↑/↓ previously scrolled the body instead of moving selection. Now they move through the list; selected row shows '▸', ticked row shows '*'. Space ticks a row; x closes ticked sessions after confirmation. Protected or attached sessions are refused with an explanatory line. +2. Project>costs now renders per-task spend as horizontal bars scaled to the largest spender, using already-loaded figures (no extra API calls). +3. bin/office scaffold now writes missing files only, never overwriting: .harness/verify.sh (with comment on how to replace it and consequences of not doing so) and .harness/NOTES.md for the human owner. Adopted folders therefore always have a place to define what 'finished' means. +4. Agents>settings now shows a read-only line at the end derived from the agent's command plus global Pi settings, e.g. 'extensions: the global set · memory: pi-memctx'. + +Rebuilt and running: eight workspaces (Reply, New task, Project, Repair, plus existing) on window ids including project 7404ce0b, agents a53f999b, repair 4f1230ff. + +Honest remaining items: +- MOUSE-1: key present but software not installed; policy from old project is triage-only, never a gate. +- Switching projects: list exists, but actual switching requires tearing down current panes and building another project's; a project on .27 cannot be opened from .13 — design decision pending for user. +- Memory switches (engram vs headroom choice per agent): awaiting user's definition of what the switch should mean, especially for short-lived (~90s) agents. +All other items in docs/NEXT.md marked done. + +## Evidence + +- Confidence: 90% +- Reason: Rich sanitized discovery/implementation snapshot with concrete artifacts, commit, and open decisions. + +## Related + +- [[packs/paperclip-harness/00-system/pi-agent/memory-manifest|Memory Manifest]] + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/.pi/memory-vault/packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03.md b/.pi/memory-vault/packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03.md new file mode 100644 index 0000000..c30e647 --- /dev/null +++ b/.pi/memory-vault/packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03.md @@ -0,0 +1,90 @@ +--- +type: session +id: session.paperclip-harness.rich-discovery-omni-2026-11-11-04-06-03 +title: Rich discovery: omni 2026-11-11 04:06:03 +status: active +source_of_truth: false +freshness: current +last_reviewed: 2026-11-11 +tags: + - pack/paperclip-harness + - agent-memory/session + - autolearn + - rich-discovery + - repo/omni +--- + +# Rich discovery: omni 2026-11-11 04:06:03 + +Sanitized rich discovery snapshot captured automatically from the completed turn. + + +## Source paths observed + +- `omni/deepseek/deepseek-v4-flash` + +## Final answer snapshot + +The cleanup column navigates now, and the remaining list is finished except the one item that needs a decision from you. + +## Cleanup navigation + +The bug was that `↑`/`↓` scrolled the body, never the selection. They now move through the list, the chosen row shows `▸`, and a ticked row shows `*`: + +``` +session panes last used state +▸ paperclip-harness 10 11 Nov 15:04 this project's session + tuios coding harness 4 11 Nov 15:03 attached, or on another machine +* office-test-1 26 10 Nov 11:24 ticked for closing +``` + +`space` ticks, `x` closes the ticked ones after asking, and protected or attached sessions are refused with a line saying why. + +## The rest of the list + +**7. Costs as a chart** — `Project>costs` now draws each task's spend against the largest, using the figures already loaded, so no extra API calls: + +``` +task state cents runs share of the largest +AUD-163 done 3 3 ████████████████████████ +AUD-164 done 2 2 ████████████████ +AUD-159 done 1 1 ████████ +``` + +**5. The `office` scaffold** — `bin/office` now writes what is missing, never overwriting: `.harness/verify.sh` (with a comment explaining how to replace it, and what happens if you do not) and `.harness/NOTES.md` for the person. Adopting a folder no longer leaves it without a place to say what "finished" means. + +**8. Memory per agent, read-only** — `Agents>settings` ends with a line read from the agent's command and the global Pi settings: + +``` +memory and extensions + extensions: the global set · memory: pi-memctx +``` + +It states only what it has read. When you want to decide which agent uses engram or headroom, that line is where the answer will go — but the switch itself needs your input on what "using headroom" should mean for an agent that runs for ninety seconds. + +## What is left, honestly + +- **MOUSE-1** — key present, software not installed. Policy from the old project stands: triage only, never a gate. It needs the software before it needs a screen. +- **Switching projects** — the list is there; actually switching means tearing down these panes and building another project's, and a project on `.27` cannot be opened from `.13` at all. That is a design decision for you, not a missing key. +- **Memory switches** — awaiting your call on what they control. + +Everything else in `docs/NEXT.md` is now marked done. Committed as `36abdc1`; the eight workspaces were rebuilt and are running on the new build. + +## Evidence + +- Confidence: 86% +- Reason: Preserve full sanitized discovery detail from a rich investigation turn + +## Related + +- [[packs/paperclip-harness/00-system/pi-agent/memory-manifest|Memory Manifest]] + +## Related learned memories + +- observation: [[packs/paperclip-harness/60-observations/paperclip-harness-cleanup-navigation-and-ui-conventions|paperclip-harness cleanup/navigation and UI conventions]] +- decision: [[packs/paperclip-harness/50-decisions/paperclip-harness-ui-six-workspaces-spec-first-four-panel-li|Deferred agent memory switch (engram vs headroom) pending user definition]] +- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Implemented cleanup navigation, cost bars, office scaffold, and per-agent memory read-out (commit 36abdc1)]] +- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-cleanup-column-navigation-fix-cost-bars-of|paperclip-harness: cleanup-column navigation fix, cost bars, office scaffold, per-agent memory line]] +- session: [[packs/paperclip-harness/80-sessions/rich-discovery-omni-2026-11-11-04-06-03|Rich discovery: omni 2026-11-11 04:06:03]] +- context: [[packs/paperclip-harness/20-context/omni|omni]] +- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|omni repository structure and configuration patterns]] diff --git a/bin/harness b/bin/harness index ba4f342..21e2ec2 100755 Binary files a/bin/harness and b/bin/harness differ diff --git a/docs/NEXT.md b/docs/NEXT.md index c866498..1191080 100644 --- a/docs/NEXT.md +++ b/docs/NEXT.md @@ -32,6 +32,12 @@ The cheap version first: a `t` entry that opens `~/.pi/paperclips` in Yazi, and `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 @@ -98,8 +104,9 @@ step; a switch is only worth adding after one agent has been run both ways and m ## 9. MOUSE-1 -The key is in the environment; the software is not installed. The old project's policy stands: -triage only, never a gate, never a permit. It would order `Board>needs`, never decide a merge. +Corrected: Mouse-1 is a hosted API, not software to install. `MOUSE_API_KEY` is present; what is +missing is a client call from our side. The old project's policy stands: triage only, never a +gate, never a permit — it could order `Board>needs`, never decide a merge. ## Unproven, and worth a test diff --git a/docs/PLAN-INTERFACE.md b/docs/PLAN-INTERFACE.md index e3235ca..8649c5a 100644 --- a/docs/PLAN-INTERFACE.md +++ b/docs/PLAN-INTERFACE.md @@ -575,3 +575,53 @@ minutes of work and neither invents anything. A transcript tab inside `Agents>agents` is the integration option: read the JSONL, draw the messages, no second process. Worth doing only if the file browser feels like a detour after a week of use. Recommendation: do the cheap one now, decide later. + +## verify.sh, plainly + +`.harness/verify.sh` is a shell script in the project folder. Its only job is to answer one +question: **is this project's work finished?** It exits 0 when the answer is yes. + +- It is **not** Paperclip's. Paperclip has no such concept; an agent sets a task's status. +- It is **our** convention, from the old project, and `bin/office` now writes a template: + + ```sh + #!/bin/sh + echo "no verify command agreed for this project" + exit 0 + ``` + + As it stands it says yes to everything, which is honest: there is no agreed check. Replace + the body with the project's real tests when they exist: + + ```sh + exec go test ./... + ``` + +- `bin/merge` runs it in the task's worktree, and again on the base branch after merging. +- A task may carry its own command in its description; that one wins for that task only. + +So: a per-project default, a per-task override, both optional. If neither exists, the merge +says so and lets the `ocr` review decide. + +## Headroom, and whether it is good for a project + +Headroom is a **compression proxy**: requests pass through it and long prompts are shortened +before they reach the model. It is running here at `192.168.20.13:8787` (v0.24.0, healthy, +memory backend disabled, compression on). + +It is good where prompts are long and repetitive — a big repository, a long thread, many tool +results. It is pointless for a small task whose prompt is already short, and it adds a hop and a +failure mode. + +The lever is per **agent**, not per project, because a Paperclip agent's provider is configured +on the agent. `adapterConfig.env` accepts variables, so an agent can be pointed at the proxy +without touching anything else. That is why the interface offers a read-out first: until one +agent has run both ways and you have compared cost and quality, "good for some projects" stays +a hypothesis rather than a setting. + +## Mouse-1, corrected + +Earlier notes in this file said "software is not installed". That was wrong: Mouse-1 is a +**hosted API**, not a program. What exists here is `MOUSE_API_KEY`; what is missing is a client +integration — an HTTP call like any other. No install is needed, and nothing has to run locally. +The old project's policy still applies: triage only, never a gate, never a permit. diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index 7928067..fd0edfc 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -71,3 +71,24 @@ on. - `factory`, `office-test-1` and the `harness-demo-*` sessions have one pane each and are detached — they *are* the junk, but they are indistinguishable from a deliberately parked session by age alone. Hence the pattern, and hence the confirmation. + +## Switching sessions, and what "on another machine" means + +A session lives on a daemon, and a daemon runs on one machine. Where you *sit* does not matter: +a client on `.27` can drive a session whose daemon is on `.13`, and that is exactly what happens +here. So the phrase "a project on another machine" really means "a session on another daemon". + +TUIOS has a verb for moving an attached client: + +``` +tuios call switch-session '{"name":"office","host":"nixos-desktop"}' +``` + +- `name` is the session to show. +- `host` may be omitted for the local daemon, or named for a machine in the client's `[hosts]` + table. A machine that is not in that table cannot be reached this way; attach by hand then. + +`Project>project` → **projects** now uses this. Every adopted project is listed with its +session, machine and folder; `enter` asks once and then switches the client in place. A +project whose session is on a daemon your client does not know is still listed, and the +confirmation says which machine it needs. diff --git a/tui/project.go b/tui/project.go index fa166e0..2a3c315 100644 --- a/tui/project.go +++ b/tui/project.go @@ -6,6 +6,7 @@ package main // to a command with a name, not a keystroke. import ( + "encoding/json" "fmt" "os" "os/exec" @@ -49,8 +50,11 @@ type projectModel struct { err error readAt time.Time - tab int - scroll int + tab int + scroll int + regAt int + regs []registryRow + confirmSwitch bool showHelp bool width, height int @@ -145,6 +149,29 @@ func (m projectModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, tea.Batch(m.load(), tickEvery(10*time.Second)) case tea.KeyMsg: + if m.confirmSwitch { + switch msg.String() { + case "y": + m.confirmSwitch = false + if m.regAt < len(m.regs) { + r := m.regs[m.regAt] + params := map[string]any{"name": r.session} + me, _ := os.Hostname() + if r.host != "" && r.host != me && r.host != strings.Split(me, ".")[0] { + params["host"] = r.host + } + body, _ := json.Marshal(params) + out, err := exec.Command("tuios", "call", "switch-session", string(body)).CombinedOutput() + if err != nil { + m.err = fmt.Errorf("could not switch to %q: %v %s", r.session, err, strings.TrimSpace(string(out))) + } + } + return m, nil + case "esc", "n", "q": + m.confirmSwitch = false + } + return m, nil + } if m.showHelp { m.showHelp = false return m, nil @@ -163,6 +190,14 @@ func (m projectModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, nil } return m, tea.Quit + case "enter": + if m.tab == 4 { + m.regs = readRegistry() + if len(m.regs) > 0 && m.regAt < len(m.regs) { + m.confirmSwitch = true + } + } + return m, nil case "(", "[", "h": if m.tab > 0 { m.tab-- @@ -176,9 +211,15 @@ func (m projectModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } return m, nil case "up", "k": + if m.tab == 4 && m.regAt > 0 { + m.regAt-- + } m.scroll-- return m, nil case "down", "j": + if m.tab == 4 && m.regAt < len(m.regs)-1 { + m.regAt++ + } m.scroll++ return m, nil case "esc": @@ -186,6 +227,8 @@ func (m projectModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } case projectMsg: + m.regs = readRegistry() + m.regAt = min(m.regAt, max(0, len(m.regs)-1)) m.dash = msg.dash m.project = msg.project m.cfg = msg.cfg @@ -207,6 +250,17 @@ func (m projectModel) View() string { fmt.Sprintf("This workspace needs 80 × 24.\nThis panel is %d × %d.", m.width, m.height)) } + if m.confirmSwitch && m.regAt < len(m.regs) { + r := m.regs[m.regAt] + return helpOverlay("switch to "+r.session+"?", [][2]string{ + {"what happens", "your TUIOS client moves to that session"}, + {"session", r.session}, + {"machine", r.host}, + {"folder", r.folder}, + {"y", "switch"}, + {"esc or n", "stay here"}, + }, m.width, m.height) + } if m.showHelp { return helpOverlay("the project", [][2]string{ {"[ ] h l", "facts, costs, settings"}, @@ -497,7 +551,7 @@ func (m projectModel) projectListLines(width int) []string { rows := readRegistry() out := []string{"", dimStyle().Render(fmt.Sprintf(" %-26s %-12s %-14s %s", "project", "machine", "session", "folder"))} me, _ := os.Hostname() - for _, r := range rows { + for i, r := range rows { here := "" if r.host == me || r.host == strings.Split(me, ".")[0] { here = " (this machine)" @@ -505,13 +559,18 @@ func (m projectModel) projectListLines(width int) []string { line := fmt.Sprintf(" %-26s %-12s %-14s %s%s", truncateVisible(r.name, 26), r.host, truncateVisible(r.session, 14), truncateVisible(r.folder, max(10, width-60)), here) + if i == m.regAt { + out = append(out, selectedStyle2().Render(padTo("▸"+line[1:], width))) + continue + } out = append(out, line) } if len(rows) == 0 { out = append(out, " "+mutedStyle2().Render("none adopted yet: bin/office adds one")) } out = append(out, "") - out = append(out, dimStyle().Render(" a project on another machine can be listed here but not opened from this one.")) - out = append(out, dimStyle().Render(" to open one: attach to its session, or run bin/office there.")) + out = append(out, dimStyle().Render(" enter switches your TUIOS client to that project's session.")) + out = append(out, dimStyle().Render(" a session on another machine switches only when that machine is in your")) + out = append(out, dimStyle().Render(" ~/.config/tuios hosts table; otherwise attach to it by hand.")) return out } diff --git a/tui/repair.go b/tui/repair.go index 379ee99..adc6528 100644 --- a/tui/repair.go +++ b/tui/repair.go @@ -345,6 +345,24 @@ func (m repairModel) View() string { fmt.Sprintf("This workspace needs 80 × 24.\nThis panel is %d × %d.", m.width, m.height)) } + if m.confirmKill { + var names []string + for name := range m.ticked { + names = append(names, name) + } + sort.Strings(names) + entries := [][2]string{ + {"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"}, + } + for _, n := range names { + entries = append(entries, [2]string{"", n}) + } + return helpOverlay(fmt.Sprintf("close %s?", fmtCount(len(names), "session", "sessions")), entries, m.width, m.height) + } if m.showHelp { return helpOverlay("repair", [][2]string{ {"[ ] h l", "health, layout, rebuild log"},