Assimilate BORG — task automation

Making "assimilate a capability" a repeatable, harness-legal move — and the board self-maintaining.

Stream: borg-assimilation · closed 2026-07-03

The question

  • The problem was adoption, not capacity: agents should write task state, you read it on the iPad, with near-zero upkeep.
  • And "assimilate X" should be a routine with an anti-duplication spine, not one-off copying.
  • Done = assimilate runs propose-then-approve · board self-nudges stale streams · iPad renders the board.

How we closed it — the assimilate skill

  • BORG (github.com/aplaceforallmystuff/claude-agent-borg) adapted to house law → .claude/skills/assimilate/SKILL.md.
  • One write per run: a proposal note in notes/borg/ (sanctioned), artifact drafted inline; the ping is the gate.
  • Approved artifacts land in a second pass; preflight_guard.py hardened so ANY new skill/hook Write returns ask — the prompt IS the approval.
  • Append-only ledger notes/borg/CHANGELOG-borg.md; BLOCKs are logged too, so a duplication attempt is never re-litigated.

How we closed it — the self-maintaining board

  • board_hygiene_stop.py gained the stale-stream nudge (state: active + updated > 7 d), fires with Obsidian closed.
  • Homepage plugin pins tasks/BOARD.md; Templater folder-template scaffolds new streams.
  • iPad: the 601 MB LFS monorepo never leaves the desk — tasks/ mirrors to a markdown-only subtree repo (panopticon-board), two-way via board_sync.sh.
  • tasks/BOARD.base (2026-07-03) adds a Dataview-independent Bases fallback view.

How we closed it — security + cull

  • All Obsidian PATs revoked; the exposed gitless-sync token was never in git history (verified).
  • .obsidian/plugins/*/data.json gitignored so no future plugin token can commit.
  • Cut kanban, zoottelkeeper, gitless-sync (verified baggage); kept dataview, tasks, templater, plotly, Claudian.

What we learned

  • Propose-then-approve turns the Write-prohibition into a feature: the permission prompt is the approval ceremony.
  • Verify the artifact, not the checkbox — a parallel commit regressed a tick while the code stayed intact (notes/board-checkbox-regressed-by-parallel-commit.md).
  • The iPad blocker was size + LFS, never git itself — a small no-LFS mirror is mobile git's happy path.
  • A pure observer cannot guard: brain0 BLOCKed because deny layers already prevent what it could only watch.

Side effects

  • The ask-gate covers ALL new skills/hooks repo-wide — every future harness file is propose-then-approve.
  • tasks/ went markdown-only for the mirror; non-markdown clutter moved to tasks_local/.
  • Five community targets surveyed on the way out (2026-07-03 batch): 4 BLOCK, 1 EXTEND — proposals in notes/borg/, verdicts pinged.

What comes next

  • Verdict ratification for the 2026-07-03 batch; approved ledger lines land in CHANGELOG-borg.md.
  • Ongoing pickup from notes/borg/targets.md — the daily-automation candidate.
  • Wiki subtree mirrors (research/code) — the board mirror's follow-on, same pattern.
  • Meta Bind stays deferred until iPad YAML editing actually hurts.

Terminology

No term this stream coined has a science citation in notes/terminology.md — by design.

  • BORG and its verdict vocabulary (PROCEED · EXTEND · COMPOSE · ITERATE · BLOCK) cite their source repo, claude-agent-borg.
  • assimilate, panopticon-board, tasks_local/ are infra identifiers, not sourced science terms.

So no term earns a slide (precedent: facade-retirement, research-corpus decks).