- opening restores 'shared understanding' alongside 'nothing is
silently assumed', and 'Map this as a design tree'
- cluster rationale restated: tight clusters keep each scout aware of
possible adjacencies
- web_search: explicit 'do not delegate to a subagent'
- 'Done' heading -> 'Definition of Done'
Read all 36 upstream skills, then rewrote to their house style per
writing-for-agents' own levers: leading words as tokens (frontier,
brief, ledger, artefact, scout), vocabulary-first and used exactly,
positive phrasing with prohibitions kept only as hard guardrails,
completion criteria sharpened to checkable+exhaustive ('counted before
sending', 'frontier empty and nothing sits blocked'), zero history,
gotchas the environment cannot confess kept inline. All settled
behaviour from the grilling-on-grilling session survives intact.
- drop provenance blockquote and the absorbed-law attribution: the skill
is instructions, not a history
- 'concurrency is capped' replaces the 3-scout figure of one machine
- completion distillate: project's knowledge base or a log markdown file,
not a command-center-specific path (skill travels outside this repo)
Rewritten per grilling-on-grilling (2026-10-18, all branches settled via
ask rounds): ask tool is the default round vehicle (one artefact per
question, recommended:0 = bare-yes semantics, hybrid boundary ask-default
/ prose-exception); todo as visible decision tree (phase=branch, blocked
reasons) + durable local://grilling-state.md ledger surviving the
Esc-aborts-the-run path; scout=environment facts (spawn-before-ask,
exclusive concurrency), web_search=world facts, inline=cheap lookups;
completion gate = summary + one closing ask, then distilled decisions
land in omp-docs/log.md via branch -> PR.
Absorbs managed skill one-decision-per-ask-question (Frank's choice;
reworded: ideas heavily encouraged via own atomic question, ban is on
smuggling into option text only). Managed skill deleted here; heartbeat
drops it from the live tree.
omp's skill scanner ignores agents/*.yaml (Eve/Codex binding metadata
carried along by the skills CLI store). The file kept vanishing from the
live tree to a background sweep; an authored omp skill does not need it.
Refs #16
Retroactive provenance: the 10 pi-era skill snapshots were byte-identical
to upstream. Canonical installs now live in ~/.agents/skills tracked by
~/.agents/.skill-lock.json (mattpocock/skills x38 after grilling removal,
find-skills from vercel-labs/skills).
Repo tier is authored overrides only: clear all 10 tracked upstream
snapshots; omp loads the store directly through the agents provider
(skills.enableAgentsUser, default on). grilling returns as a real
directory — extracted from the store (CLI + lockfile pruned) so Frank can
customize it without skills update resurrecting a twin.
Docs: skill-store-wiring.md (+index). Pre-cutover snapshot of the old
tracked dirs at /tmp/agent-skills-snap-20261018.
Frank's outline restyle: focus-ring red #e01b24 -> #ffb000 -> #ff8c00
(orange), thickness 2 -> 4 in base layout.kdl. The visible ring is
painted by noctalia.kdl, included LAST in config.kdl — its focus-ring
active/urgent colors moved to #ff8c00 too; tab-indicator, insert-hint,
and recent-window highlights deliberately stay red.
noctalia.kdl was hand-written live-only (Oct 14, no repo copy — the
override that silently beat every layout.kdl edit); first durable copy
lands in the zz-blankpad mirror.
Frank veto: DirectoryNotEmpty re-fires on every file event (GUI writes,
wallpaper shuffle) un-debounced -> hundreds of heartbeat spawns/day.
The sweep is cheap (57 ms CPU) but the trigger design was event spam.
Exposure-window fix is an open design question; timer unchanged.
Timer-only heartbeat left GUI dotfiles edits uncommitted for up to 59
minutes; a trunk-sync session clearing the dirty tree on 2026-10-18
destroyed a month of uncommitted noctalia bar layout inside that gap.
live-sync.path (DirectoryNotEmpty on dotfiles/) fires the existing
flock-guarded oneshot within seconds of any repo-side dotfiles write,
shrinking the exposure window from ~1h to ~2s. Timer stays as the
hourly catch-all for the machine tiers.
Documents the 16:46 layout loss (uncommitted GUI state stashed, stash
entry destroyed during trunk sync) and the git-fsck recovery landed in
c87b378. Lesson codified in managed skills.
The rich GUI-built layout (cat/clock/clock-utc/weather start, taskbar
center, capsule groups g1-g4 + control-cheat-sheet end, thickness 36,
font_scale 1.3, opacity 0.9) existed only in the working tree; it was
stashed at 16:46 during the trunk merge and the stash entry was later
destroyed. Recovered from dangling stash commit 7fe3ed8 via git fsck.
This commit is the durable copy the layout never had before.
Uncommitted machine/session edits (live config, models, docs drift) were
blocking the merge of origin/main. Committed as-is to preserve them; the
merge that follows resolves overlapping prose files toward upstream
canonical, with local variants recoverable from this commit. Pre-merge
copies also in .AGENTTRASH/pre-merge-2026-10-18/.
First dogfooding round stamped the build worktree instead of the session's
own working directory (the value the paired session id resolves to). Rule
now says so explicitly. Refs #11
Every agent-opened issue/PR body ends with cwd + omp session id so machine
filed artifacts trace back to the box and session that produced them - the
live-sync daemon and filing agents make 'who/what wrote this' a real
question now. Mirrored in dank/serverAppConfigs by its own PR.
Refs #11
Operator decision at review: 15 min is aggressive for config churn; hourly
keeps the stale-window acceptable (<=1 h) with a fifth of the wakeups.
Timer unit, tier law, and failure-table wording aligned.
The checkout IS the deployment and symlinks make live state (memories,
auto-learned skills, agent config, desktop settings) dirty tracked files
continuously; no commit law covered machine churn, so it accumulated
unpushed for weeks — one disk held the only copy of ~61 managed skills,
a settings fix stayed local-only, and dirty trees refused merges.
scripts/live-sync.sh (systemd user timer, ~15 min) commits ONLY the
allowlisted machine/desktop-live tiers with hooks armed, merges
origin/main, pushes, and reaps wt/* worktrees older than 7 days. Task
dirt outside the allowlist is never staged; conflicts abort and alert
via ntfy; branch guard refuses off main; never --no-verify, never force.
Black-box contract pinned by tests/live-sync.bats (9 tests, suite 36/36).
Refs #11
Trunk-based SDLC gains the delivery habit: xdg-open the PR URL the moment
it's filed (mirrors dank/serverAppConfigs step 6, riding their PR #6).
Changelog entry added.
Single-dev repo: develop bought nothing and cost a back-merge every
release. New law: branch off freshest origin/main per work item, PRs
target main directly, --no-ff merges kept, tags vX.Y.Z straight on main.
No release branches, no back-merges. Changelog entry added.
Census against serverAppConfigs-docs + read-only ssh probes on both boxes
(2026-10-18). Corrections to OURS, flags only for THEIRS:
- Hardware drift: RTX 3090 moved dankserver->dankclaw 2026-09; dankserver
now 2x Radeon AI PRO R9700 (Ryzen 7 7700X stays), 246 GiB RAM, no swap;
dankclaw 121 GiB RAM + 64 GiB swap. Served: frank-archon radiance TP=2
(:7770 dankserver), frank-dragoon halogen NATIVE v2 (:7770 dankclaw
iGPU), frank-zealot llama.cpp PrismML Ternary-Bonsai-2-27B PQ2_0
(:7771 dankclaw, 3090). Kernel 7.0.0-38 both; dankclaw :7770 no auth.
- Gitea: gitea-caddy quadlet retired (fleet Caddy fronts the domain);
data tree moved to /home/dank/Containers/gitea/ (2026-09-01 standard),
/opt/gitea is a do-not-use leftover; LAN IP + live domain.
- pi-era pages (core/settings, pi/models + role tables) demarcated as
ARCHIVE with banners; llama-cpp fleet note modernized.
- AGENTS.md machine-facts table corrected (it still routed prod warnings
at frank-default-large).
Their-side staleness flagged in the changelog entry for the operator,
not edited: OMP Harness thresholdPercent 70 (live is 95), Ubuntu 24.04
OS table, 2026-09-03 stack mapping, superseded pi-KB backlink.
Refs #5
Full-source re-verification of pi/statusline.md against dist/cli.js plus a
live screenshot matrix. False and corrected: claude's top rule is NOT the
context meter (meter is box/band only; rule elsewhere is a session-accent
filler); 'Tern-only' composer-bar claim (real knob: composer.tokenRate);
segmentOptions gated to preset custom (they merge under every preset - only
the arrays are gated); mode segment yolo (states are Plan/Prewalk/Goal/
Vibe/Loop). Expanded: 7-preset defaults table, per-shape statusAttachment/
bottomBar model incl. plugin shape registry, contextLine per-value behavior,
27-segment catalog with triggers and options, segmentOptions schema, full
statusLine.*/composer.* knob registry. Changelog entry added.
Refs #5
Left group keeps the where-am-I identity (host, path, git, pr); the right
cluster carries what's-running (model) plus cost and elapsed time, painted
in array order. context_pct verified to hoist into the inline meter spacer
regardless of array position. Docs + changelog updated.
Band merges the segment groups into one row above the editor and paints
the labeled inline context meter (60% - 200K); the session title rides
the working row. Cumulative token totals live in /session - off the bar.
Docs and changelog updated to the band final state.
stripWorkPrefix true: worktree sessions show projectName/worktreeName with
the worktree glyph instead of the on-disk cwd; matches the live bar tuned
and screenshot-approved 2026-10-18.
Named presets silently ignore leftSegments/rightSegments - the nerd
preset's baked arrays were what we saw, and the configured arrays were
dead. preset: custom with explicit arrays: chip (right) = token_in,
token_out, cost, context_pct, time_spent; strip (left) = session_name,
vim, mode, hostname, model, path, git (branch text off - worktree
branches are autogenerated; dirty badges kept), pr. Cut tok/s duplicate,
clock, cache trio, context_total, subagents, session hash. Composer
shape stays claude after live box/band/rule trials. models.yml display
name frank-archon drops the (dankserver) suffix; id untouched.
Docs: pi/statusline.md records the preset-vs-custom trap, shape->segment
routing, and the context-meter truth.
Mod+R now cycles 1/4 <-> 1/2 only, matching the quarter-based
preset-window-heights; verified live (840px quarter / 1696px half on the
3440px panel). Mod+F still maximizes a column.
- set-column-width / set-window-height nudges 10% -> 5% (Mod+-/= and
Mod+Shift+-/=).
- New preset-window-heights { 1/4, 1/2 } in layout.kdl; Mod+Ctrl+Shift+R
no longer falls back to the width-preset ladder.
- Mod+Ctrl+Left/Right (and H/L) retargeted swap-window-* ->
consume-or-expel-window-*, matching Mod+brackets; swap-window now unbound.
Validated with niri validate; live via hot-reload.