From 0f2f484790d33b154fc8dd63142f7aa7c6b79ba4 Mon Sep 17 00:00:00 2001 From: Sam Rolfe Date: Wed, 11 Nov 2026 21:21:30 +1100 Subject: [PATCH] sam-4screen-desktop 2026-11-11:21:21:30 --- .obsidian/workspace.json | 21 ++++++--- 010 inbox/Paperclip Harness.md | 85 ++++++++++++++++++++++++++++++++++ 010 inbox/_sort log.md | 3 ++ 3 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 010 inbox/Paperclip Harness.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index cde3ab2..294e12b 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -55,7 +55,7 @@ "state": { "type": "search", "state": { - "query": "etched", + "query": "", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -76,8 +76,7 @@ "title": "Bookmarks" } } - ], - "currentTab": 1 + ] } ], "direction": "horizontal", @@ -189,9 +188,19 @@ "icon": "lucide-info", "title": "File properties" } + }, + { + "id": "4ff7f4742c983ab1", + "type": "leaf", + "state": { + "type": "SC-custom-variables-view", + "state": {}, + "icon": "code-glyph", + "title": "Shell commands: Custom variables" + } } ], - "currentTab": 6 + "currentTab": 7 } ], "direction": "horizontal", @@ -211,8 +220,9 @@ "templater-obsidian:Templater": false } }, - "active": "26813e16e829b798", + "active": "7066c9273c6fb936", "lastOpenFiles": [ + "010 inbox/Paperclip Harness.md", "300 areas/360 Dev-Ops Network Computers/Docker Containers.md", "200 projects/Tools Software WebUI/Internet Use Control — Kids' Screen Time Limits.md", "300 areas/350 AI Pi Coding Agent/AI tool to try and implement - MOUSE-1.md", @@ -239,7 +249,6 @@ "010 inbox/Email & DNS Setup — Domains, Mailboxes & Records.md", "300 areas/360 Dev-Ops Network Computers/Email & DNS Setup — Domains, Mailboxes & Records.md", "010 inbox/Family Holiday Camping Wilsons Prom.md", - "400 Personal Family/470 Holidays Travel/Family Holiday Camping Wilsons Prom.md", "010 inbox/Family Holiday Camping Wilsons Prom.md~", "010 inbox/_WATCHER", "300 areas/355 AI Research and Techniques", diff --git a/010 inbox/Paperclip Harness.md b/010 inbox/Paperclip Harness.md new file mode 100644 index 0000000..d7b103f --- /dev/null +++ b/010 inbox/Paperclip Harness.md @@ -0,0 +1,85 @@ +--- +type: note +proposed_folder: 300 areas/350 AI Pi Coding Agent +proposed_toc: "100 Table of Contents/Areas.md → AI & Coding Agent" +proposed_tags: + - ai-agents + - go + - paperclip + - tuios + - terminal +confidence: 0.71 +approved: false +proposed_for: 82881ca0332c +created: "2026-11-11 19:30" +tags: + - paperclip + - tuios + - go + - agents + - terminal +aliases: + - Paperclip Harness +modified: "2026-11-11 19:30" +--- + +# [[Paperclip Harness]] + +A terminal control room for an AI coding factory. Paperclip runs the work; this is the surface a +person uses to see it, direct it, and decide what lands. + +## What it is, simply + +Paperclip is a control plane for AI agents: it keeps tasks, blockers, comments, approvals, runs, +cost and a git worktree for every task. It has a web dashboard. This project is the same work, +on a terminal, inside TUIOS: eight workspaces, each one pane, each pane a small Go program. + +You look at the board, choose a task, and read it in four places: what it is, what the agent did, +what changed, and what was said. You can reply to the agent, change its model or budget, give one +agent a skill no other agent has, merge its work after a review, or press one key to rebuild the +layout when TUIOS loses it. + +## Why it looks like this + +```mermaid +flowchart TB + P["The person on .27 or .51"] --> T["TUIOS panes on .13"] + T --> PC["Paperclip API"] + PC --> DB[("tasks, blockers, runs, cost")] + PC --> AG["Pi agents"] + AG --> WT["a git worktree per task"] + AG --> PI["one Pi session per run"] +``` + +Three rules shaped it: + +1. **One owner per fact.** Paperclip owns the tasks, the cost, the worktrees. The interface keeps + nothing of its own except a small file saying which folder is on which machine. +2. **A task is finished when the agent says so.** A reviewer or `ocr` can refuse the change. A + project check exists only as a regression check at merge time. +3. **Merging is a decision.** It asks first, shows the branch and the checks, takes a lock, and + rolls back if the checks fail after the merge. + +## What was hard, and what that shows + +- **The API hides things.** The task list does not carry blockers, so a tree that trusts it lies. + The fix was to ask per task, and to write that down so nobody trusts the list again. +- **Permissions are part of the design.** An agent key cannot write outside a run; the person's + key can. Mixing them up looked like a broken API for an afternoon. +- **Another program owns the keyboard.** TUIOS keeps `h j k l z n` and also `[ ] Tab , . = ;`. + Tabs are switched with `(` `)`, and a pane that stops responding is in TUIOS's window mode. +- **A stale size looks like a broken interface.** The panes re-ask the terminal for its size on + every refresh; that fixed every "broken border" report. + +## What it demonstrates + +Integration of a dozen systems without duplicating any of them; a single source of truth enforced +in code; failure-aware design (locks, refusals, rollback, three-state health checks); terminal +interface work under another program's keymap; and reporting where every claim names the command +that proved it. + +## Where things are + +- Repository: `gitea.lab.audasmedia.com.au/sam/paperclip-harness` +- Local: `~/paseo/projects/paperclip-harness` +- Runs in: TUIOS session `paperclip-harness` on `.13` diff --git a/010 inbox/_sort log.md b/010 inbox/_sort log.md index 408a143..10643e0 100644 --- a/010 inbox/_sort log.md +++ b/010 inbox/_sort log.md @@ -20189,3 +20189,6 @@ What the watcher did, newest last. - **proposed** `TUIOS Coding Harness.md` → `300 areas/350 AI Pi Coding Agent` (confidence 0.59) - - JEV was torn: bucket 'project' but folder implies 'area' — review before applying - - JEV suggests a NEW folder may be needed (not auto-created) + +### 2026-11-11 21:12:20 +- **proposed** `Paperclip Harness.md` → `300 areas/350 AI Pi Coding Agent` (confidence 0.71)