Project>project overview from the dashboard endpoint; tools chooser drawn in Board>board; docs for Shell and t
This commit is contained in:
@@ -101,3 +101,305 @@ Committed as `7b12b45`. Say go and I run that list end to end and report each re
|
||||
- context: [[packs/paperclip-harness/20-context/tmp|tmp]]
|
||||
- runbook: [[packs/paperclip-harness/70-runbooks/tmp-deployment-operations|tmp deployment operations]]
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|tmp repository structure and configuration patterns]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-10 10:01:16)
|
||||
|
||||
Trigger: bringing an existing git repo or folder into the TUIOS harness.
|
||||
|
||||
Procedure (`office <dir> [--session <name>] [--dry]`):
|
||||
1. Resolve host: read/write `<dir>/.harness/host`; mkdir `<dir>/.harness` if missing (dry-run prints planned actions and exits).
|
||||
2. Detect whether project is 'adopting (writing what is missing)' vs 'already a harness project'.
|
||||
3. Ensure TUIOS session exists: `timeout 20 tuios list-sessions` (strip ANSI, parse column 2) must contain the session. If absent, office prints `tuios new <session>` and exits 2 — TUIOS cannot create sessions non-interactively in this build ('Standard output is not a terminal').
|
||||
4. Run `board` with HARNESS_REPO and HARNESS_SESSION set to build/repair pages.
|
||||
5. Print attach commands: `tuios-gpui attach <session>`, `tuios attach <session>`, remote `tuios-gpui attach --host <hostname> <session>`.
|
||||
|
||||
Known gap: old office also ran `new-project` to write scaffold (settings.toml, one file per role, verify.sh, per-screen notes) only when missing; current office skips this. Safe: office/new-project never overwrite existing files. Troubleshooting: 'office: new-project failed' or 'office: board failed' indicate the respective step; re-run is idempotent.
|
||||
|
||||
## Detailed procedure from completed turn
|
||||
|
||||
Explored all of it. Recorded in `docs/PLAN-INTERFACE.md`; the short version:
|
||||
|
||||
## Skills per agent — Paperclip already models it
|
||||
|
||||
`GET /api/agents/{id}/skills` returns a desired set, a managed set and a state per skill. On `Builder` today:
|
||||
|
||||
```
|
||||
desired: ["paperclipai/paperclip/paperclip"]
|
||||
company/<id>/obsidian-cli desired: false managed: true state: "stale"
|
||||
```
|
||||
|
||||
`POST /api/agents/{id}/skills/sync` takes `add`, `remove` or **`replace`** — `replace` is exactly "this agent gets these and nothing else", which is how a sub-agent's context stays small. There is also a company skill catalog, versions, audit, and `GET/PUT /api/companies/{id}/skill-policy` with an `evaluate` call.
|
||||
|
||||
Proposal: two rows in `Agents>agents` settings — **skills** (the desired set, read-only first, add/remove later) and **skill source**. A full browser is a later screen, not a panel. Also: `obsidian-cli` sitting `stale` on Builder is worth fixing.
|
||||
|
||||
## Memory — three different things
|
||||
|
||||
| | state here | what it is |
|
||||
|---|---|---|
|
||||
| **engram** | installed, v1.16.1, MCP mode, **not** registered in `~/.pi/agent/mcp.json` (only `codebase-memory`, `graphify-vault`) | persistent memory |
|
||||
| **headroom** | running, v0.24.0, healthy at `192.168.20.13:8787`, memory backend **disabled**, compression on | a prompt-compression proxy, not a store |
|
||||
| **pi memctx** | in use now | injects notes into a prompt |
|
||||
|
||||
They are complementary. Paperclip's only per-agent lever is `adapterConfig` and `runtimeConfig`, so memory is set per agent by pointing that agent at the proxy or store it should use. Proposal: a **memory** row in `Agents>agents` settings showing which of the three that agent uses, and nothing more until one agent has run both ways and been measured.
|
||||
|
||||
## MOUSE-1
|
||||
|
||||
`MOUSE_API_KEY` is set (checked the name only, never the value). `JEV_API_KEY` too. No `mouse`, `mouse1`, `jev` or `switch` binary is installed.
|
||||
|
||||
There **are** notes, and they are good ones — in the old project's plan documents:
|
||||
|
||||
> MOUSE-1 is *"triage only: label, score, route, escalate. Never a gate, never a permit"* — explicitly ruled out for deciding a merge or allowing a tool call, because a cheap classifier that fails open on a network error makes a green run a lie.
|
||||
|
||||
I would adopt that policy unchanged. Its place, if added: ordering `Board>board`'s needs-you list, or pre-sorting findings in `Work>review`. Never the merge, never an approval.
|
||||
|
||||
## Lazygit
|
||||
|
||||
Already wired: `t` in `Board>board` or `Work>work`, choose Lazygit. Verified opening in the right workspace and closing with `q`.
|
||||
|
||||
## The old `office` — and what ours lacks
|
||||
|
||||
The previous `office` did four things: remember the host; run `new-project` to write the scaffold (`settings.toml`, a file per role, `verify.sh`, the per-screen notes) writing **only what is missing**; refuse if the session does not exist and print the exact `tuios new` line; then build the pages.
|
||||
|
||||
Ours does the host, the refusal and the pages — but **no scaffold**. No per-role files, no `verify.sh`, no page notes. That is the cheapest real gap in the whole plan.
|
||||
|
||||
## Dashboard — the API answers it in one call
|
||||
|
||||
`GET /api/companies/{id}/dashboard`, 1.8 KB:
|
||||
|
||||
```
|
||||
agents {active 6, running 0, paused 0, error 0}
|
||||
tasks {open 8, inProgress 0, blocked 4, done 147}
|
||||
costs {monthSpendCents 11, monthBudgetCents 0, utilization 0}
|
||||
runActivity [14 entries]
|
||||
```
|
||||
|
||||
Proposal: a `Project>overview` panel with those blocks and a sparkline drawn in Go with `tuios.dev/plot`, rather than embedding the web dashboard in a pane.
|
||||
|
||||
## Not doing
|
||||
|
||||
Artifacts — dropped as instructed.
|
||||
|
||||
I am ready for the task you are about to deliver; nothing in the tree is half-changed, the eight workspaces are running, and the last commit is `3d31243`.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 85%
|
||||
- Reason: Repeatable procedure with prerequisites, exit codes, safe behavior, and the known-scaffold caveat.; enriched with final-answer detail because persistence should be reusable
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-10 10:01:16)
|
||||
|
||||
Trigger: desired skill set for an agent changed, or a skill shows `stale`.
|
||||
|
||||
1. Inspect: `GET /api/agents/{id}/skills` — read desiredSkills, desiredSkillEntries, and entries[] (desired, managed, state, runtimeName, sourcePath, targetPath).
|
||||
2. Decide mode: `POST /api/agents/{id}/skills/sync` with add / remove, or `replace` for an exclusive set (recommended for sub-agents to keep context small).
|
||||
3. For company-level operations use `/api/companies/{companyId}/skills/...` (import, install-catalog, scan-projects, versions, audit, fork, install-update). Policy checks: `GET/PUT /api/companies/{companyId}/skill-policy` and `POST .../skill-policy/evaluate`.
|
||||
4. Verify after sync that entries show desired=true and state not `stale`.
|
||||
|
||||
Caveats: managed skills materialize from /home/sam/.paperclip/instances/default/skills/<companyId>/ into /home/sam/.pi/agent/skills/; a `stale` managed skill (e.g. obsidian-cli on Builder) needs reset/install-update, not just add. Avoid `replace` on the top-level orchestrator agent, which intentionally carries the `paperclipai/paperclip/paperclip` skill.
|
||||
|
||||
## Detailed procedure from completed turn
|
||||
|
||||
Explored all of it. Recorded in `docs/PLAN-INTERFACE.md`; the short version:
|
||||
|
||||
## Skills per agent — Paperclip already models it
|
||||
|
||||
`GET /api/agents/{id}/skills` returns a desired set, a managed set and a state per skill. On `Builder` today:
|
||||
|
||||
```
|
||||
desired: ["paperclipai/paperclip/paperclip"]
|
||||
company/<id>/obsidian-cli desired: false managed: true state: "stale"
|
||||
```
|
||||
|
||||
`POST /api/agents/{id}/skills/sync` takes `add`, `remove` or **`replace`** — `replace` is exactly "this agent gets these and nothing else", which is how a sub-agent's context stays small. There is also a company skill catalog, versions, audit, and `GET/PUT /api/companies/{id}/skill-policy` with an `evaluate` call.
|
||||
|
||||
Proposal: two rows in `Agents>agents` settings — **skills** (the desired set, read-only first, add/remove later) and **skill source**. A full browser is a later screen, not a panel. Also: `obsidian-cli` sitting `stale` on Builder is worth fixing.
|
||||
|
||||
## Memory — three different things
|
||||
|
||||
| | state here | what it is |
|
||||
|---|---|---|
|
||||
| **engram** | installed, v1.16.1, MCP mode, **not** registered in `~/.pi/agent/mcp.json` (only `codebase-memory`, `graphify-vault`) | persistent memory |
|
||||
| **headroom** | running, v0.24.0, healthy at `192.168.20.13:8787`, memory backend **disabled**, compression on | a prompt-compression proxy, not a store |
|
||||
| **pi memctx** | in use now | injects notes into a prompt |
|
||||
|
||||
They are complementary. Paperclip's only per-agent lever is `adapterConfig` and `runtimeConfig`, so memory is set per agent by pointing that agent at the proxy or store it should use. Proposal: a **memory** row in `Agents>agents` settings showing which of the three that agent uses, and nothing more until one agent has run both ways and been measured.
|
||||
|
||||
## MOUSE-1
|
||||
|
||||
`MOUSE_API_KEY` is set (checked the name only, never the value). `JEV_API_KEY` too. No `mouse`, `mouse1`, `jev` or `switch` binary is installed.
|
||||
|
||||
There **are** notes, and they are good ones — in the old project's plan documents:
|
||||
|
||||
> MOUSE-1 is *"triage only: label, score, route, escalate. Never a gate, never a permit"* — explicitly ruled out for deciding a merge or allowing a tool call, because a cheap classifier that fails open on a network error makes a green run a lie.
|
||||
|
||||
I would adopt that policy unchanged. Its place, if added: ordering `Board>board`'s needs-you list, or pre-sorting findings in `Work>review`. Never the merge, never an approval.
|
||||
|
||||
## Lazygit
|
||||
|
||||
Already wired: `t` in `Board>board` or `Work>work`, choose Lazygit. Verified opening in the right workspace and closing with `q`.
|
||||
|
||||
## The old `office` — and what ours lacks
|
||||
|
||||
The previous `office` did four things: remember the host; run `new-project` to write the scaffold (`settings.toml`, a file per role, `verify.sh`, the per-screen notes) writing **only what is missing**; refuse if the session does not exist and print the exact `tuios new` line; then build the pages.
|
||||
|
||||
Ours does the host, the refusal and the pages — but **no scaffold**. No per-role files, no `verify.sh`, no page notes. That is the cheapest real gap in the whole plan.
|
||||
|
||||
## Dashboard — the API answers it in one call
|
||||
|
||||
`GET /api/companies/{id}/dashboard`, 1.8 KB:
|
||||
|
||||
```
|
||||
agents {active 6, running 0, paused 0, error 0}
|
||||
tasks {open 8, inProgress 0, blocked 4, done 147}
|
||||
costs {monthSpendCents 11, monthBudgetCents 0, utilization 0}
|
||||
runActivity [14 entries]
|
||||
```
|
||||
|
||||
Proposal: a `Project>overview` panel with those blocks and a sparkline drawn in Go with `tuios.dev/plot`, rather than embedding the web dashboard in a pane.
|
||||
|
||||
## Not doing
|
||||
|
||||
Artifacts — dropped as instructed.
|
||||
|
||||
I am ready for the task you are about to deliver; nothing in the tree is half-changed, the eight workspaces are running, and the last commit is `3d31243`.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 80%
|
||||
- Reason: Actionable procedure derived from concrete API behavior and observed stale state.; enriched with final-answer detail because persistence should be reusable
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-10 10:01:16)
|
||||
|
||||
## Deployment/runbook details discovered (2026-11-10 10:01:16)
|
||||
|
||||
Explored all of it. Recorded in `docs/PLAN-INTERFACE.md`; the short version:
|
||||
|
||||
## Skills per agent — Paperclip already models it
|
||||
|
||||
`GET /api/agents/{id}/skills` returns a desired set, a managed set and a state per skill. On `Builder` today:
|
||||
|
||||
```
|
||||
desired: ["paperclipai/paperclip/paperclip"]
|
||||
company/<id>/obsidian-cli desired: false managed: true state: "stale"
|
||||
```
|
||||
|
||||
`POST /api/agents/{id}/skills/sync` takes `add`, `remove` or **`replace`** — `replace` is exactly "this agent gets these and nothing else", which is how a sub-agent's context stays small. There is also a company skill catalog, versions, audit, and `GET/PUT /api/companies/{id}/skill-policy` with an `evaluate` call.
|
||||
|
||||
Proposal: two rows in `Agents>agents` settings — **skills** (the desired set, read-only first, add/remove later) and **skill source**. A full browser is a later screen, not a panel. Also: `obsidian-cli` sitting `stale` on Builder is worth fixing.
|
||||
|
||||
## Memory — three different things
|
||||
|
||||
| | state here | what it is |
|
||||
|---|---|---|
|
||||
| **engram** | installed, v1.16.1, MCP mode, **not** registered in `~/.pi/agent/mcp.json` (only `codebase-memory`, `graphify-vault`) | persistent memory |
|
||||
| **headroom** | running, v0.24.0, healthy at `192.168.20.13:8787`, memory backend **disabled**, compression on | a prompt-compression proxy, not a store |
|
||||
| **pi memctx** | in use now | injects notes into a prompt |
|
||||
|
||||
They are complementary. Paperclip's only per-agent lever is `adapterConfig` and `runtimeConfig`, so memory is set per agent by pointing that agent at the proxy or store it should use. Proposal: a **memory** row in `Agents>agents` settings showing which of the three that agent uses, and nothing more until one agent has run both ways and been measured.
|
||||
|
||||
## MOUSE-1
|
||||
|
||||
`MOUSE_API_KEY` is set (checked the name only, never the value). `JEV_API_KEY` too. No `mouse`, `mouse1`, `jev` or `switch` binary is installed.
|
||||
|
||||
There **are** notes, and they are good ones — in the old project's plan documents:
|
||||
|
||||
> MOUSE-1 is *"triage only: label, score, route, escalate. Never a gate, never a permit"* — explicitly ruled out for deciding a merge or allowing a tool call, because a cheap classifier that fails open on a network error makes a green run a lie.
|
||||
|
||||
I would adopt that policy unchanged. Its place, if added: ordering `Board>board`'s needs-you list, or pre-sorting findings in `Work>review`. Never the merge, never an approval.
|
||||
|
||||
## Lazygit
|
||||
|
||||
Already wired: `t` in `Board>board` or `Work>work`, choose Lazygit. Verified opening in the right workspace and closing with `q`.
|
||||
|
||||
## The old `office` — and what ours lacks
|
||||
|
||||
The previous `office` did four things: remember the host; run `new-project` to write the scaffold (`settings.toml`, a file per role, `verify.sh`, the per-screen notes) writing **only what is missing**; refuse if the session does not exist and print the exact `tuios new` line; then build the pages.
|
||||
|
||||
Ours does the host, the refusal and the pages — but **no scaffold**. No per-role files, no `verify.sh`, no page notes. That is the cheapest real gap in the whole plan.
|
||||
|
||||
## Dashboard — the API answers it in one call
|
||||
|
||||
`GET /api/companies/{id}/dashboard`, 1.8 KB:
|
||||
|
||||
```
|
||||
agents {active 6, running 0, paused 0, error 0}
|
||||
tasks {open 8, inProgress 0, blocked 4, done 147}
|
||||
costs {monthSpendCents 11, monthBudgetCents 0, utilization 0}
|
||||
runActivity [14 entries]
|
||||
```
|
||||
|
||||
Proposal: a `Project>overview` panel with those blocks and a sparkline drawn in Go with `tuios.dev/plot`, rather than embedding the web dashboard in a pane.
|
||||
|
||||
## Not doing
|
||||
|
||||
Artifacts — dropped as instructed.
|
||||
|
||||
I am ready for the task you are about to deliver; nothing in the tree is half-changed, the eight workspaces are running, and the last commit is `3d31243`.
|
||||
|
||||
## Source paths observed
|
||||
|
||||
- `home/sam/.local/bin/engram`
|
||||
- `home/sam/.config/environment.d/10-secrets.conf`
|
||||
- `home/sam/paseo/projects/paperclip-harness/.pi/memory-vault/packs/paperclip-harness/80-sessions/paperclip-harness-reverted-pane-split-interface-gap-discover.md`
|
||||
- `home/sam/paseo/projects/paperclip-harness/.pi/memory-vault/packs/paperclip-harness/80-sessions/rich-discovery-tmp-2026-11-10-07-35-38.md`
|
||||
- `home/sam/paseo/projects/paperclip-harness/.pi/memory-vault/packs/paperclip-harness/80-sessions/rich-discovery-home-2026-11-10-05-41-48.md`
|
||||
- `home/sam/paseo/projects/paperclip-harness/.pi/memory-vault/packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups.md`
|
||||
- `home/sam/paseo/projects/paperclip-harness/.pi/memory-vault/packs/paperclip-harness/20-context/home.md`
|
||||
- `github.com/Gentleman-Programming/engram/cmd/engram`
|
||||
- `api/skills/available`
|
||||
- `api/skills/catalog`
|
||||
- `api/skills/index`
|
||||
- `paperclipai/paperclip/paperclip`
|
||||
- `company/d4921013-e5da-4d88-8016-57d5746e2d03/obsidian-cli`
|
||||
- `home/sam/.paperclip/instances/default/skills/d4921013-e5da-4d88-8016-57d5746e2d03/obsidian-cli`
|
||||
- `home/sam/.pi/agent/skills/obsidian-`
|
||||
- `dir/.harness/host`
|
||||
- `home/sam/paseo/projects/tuios_coding_harness/plan/82-control-room.md`
|
||||
- `home/sam/paseo/projects/tuios_coding_harness/plan/83-interface.md`
|
||||
- `home/sam/paseo/projects/tuios_coding_harness/plan/80-forked-plan.md`
|
||||
- `home/sam/paseo/projects/tuios_coding_harness/plan/91-paperclip-or-oma.md`
|
||||
- `home/sam/paseo/projects/tuios_coding_harness/plan/50-open-work.md`
|
||||
- `home/sam/.pi/agent/git/gitea.lab.audasmedia.com.au/sam/pi-config/skills/graphify/SKILL.md`
|
||||
- `home/sam/.pi/agent/git/gitea.lab.audasmedia.com.au/sam/pi-config/skills/system-architect/SKILL.md`
|
||||
- `home/sam/.pi/agent/git/gitea.lab.audasmedia.com.au/sam/pi-config/extensions/pi-graphify/skills/graphify/SKILL.md`
|
||||
- `home/sam/.pi/agent/git/gitea.lab.audasmedia.com.au/sam/pi-config/node_modules`
|
||||
- `google/genai/dist/node/index.cjs`
|
||||
- `google/genai/dist/node/node.d.ts`
|
||||
- `home/sam/.config/systemd/user/lan-mouse.service`
|
||||
- `home/sam/.config/lan-mouse`
|
||||
- `home/sam/.config/lan-mouse/lan-mouse.pem`
|
||||
- `home/sam/.cache/lan-mouse`
|
||||
- `home/sam/.local/bin/lan-mouse-011`
|
||||
- `home/sam/.pi/agent/auth.json`
|
||||
- `home/sam/.pi/agent/mcp-cache.json`
|
||||
- `home/sam/.pi/agent/mcp.json`
|
||||
- `home/sam/.pi/agent/models.json`
|
||||
- `home/sam/.pi/agent/models-store.json`
|
||||
- `home/sam/.pi/agent/settings.json`
|
||||
- `home/sam/.pi/agent/trust.json`
|
||||
- `home/sam/.local/bin/codebase-memory-mcp`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 83%
|
||||
- Reason: Extracted repeatable deploy/configuration procedure from rich discovery
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-10 10:01:16 -->
|
||||
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|Paperclip per-agent skills state and sync semantics]]
|
||||
- runbook: [[packs/paperclip-harness/70-runbooks/tmp-deployment-operations|Adopt an existing folder into the harness with `office` (and its known scaffold gap)]]
|
||||
- decision: [[packs/paperclip-harness/50-decisions/mouse-1-restricted-to-triage-never-a-gate-or-permit|MOUSE-1 restricted to triage; never a gate or permit]]
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Recorded interface plan for Paperclip + TUIOS harness in docs/PLAN-INTERFACE.md]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-tuios-interface-discovery-skills-api-memory-stack-|Paperclip-TUIOS interface discovery: skills API, memory stack, MOUSE-1, dashboard, old office scaffold]]
|
||||
- context: [[packs/paperclip-harness/20-context/paperclip-tuios-harness-sam-s-coding-harness-office-board-wo|Paperclip-TUIOS harness (sam's coding harness: office/board/work screens)]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-paperclipai-2026-11-10-10-01-16|Rich discovery: paperclipai 2026-11-10 10:01:16]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|paperclipai]]
|
||||
|
||||
Reference in New Issue
Block a user