Cleanup confirms and refreshes; projects switch sessions in place; explain verify.sh, headroom and Mouse-1
This commit is contained in:
87
.pi/memory-vault/packs/paperclip-harness/20-context/omni.md
Normal file
87
.pi/memory-vault/packs/paperclip-harness/20-context/omni.md
Normal file
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
|
||||
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
|
||||
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
|
||||
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
@@ -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 <!-- same-turn-2026-11-11 04:06:03 -->
|
||||
|
||||
- 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]]
|
||||
BIN
bin/harness
BIN
bin/harness
Binary file not shown.
11
docs/NEXT.md
11
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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 <folder> 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 <folder> 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
|
||||
}
|
||||
|
||||
@@ -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"},
|
||||
|
||||
Reference in New Issue
Block a user