Commit Graph
100 Commits
Author SHA1 Message Date
Frank 3fa0242f56 style(grilling): rewrite in the mattpocock corpus voice (Refs #20)
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.
2026-10-18 19:15:14 -07:00
Frank fe039a0b73 fix(grilling): strip history and box-specific prose per review (Refs #20)
- 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)
2026-10-18 19:09:04 -07:00
Frank cedef97c99 feat(grilling): omp-aware interview redesign, absorb ask-etiquette law
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.
2026-10-18 18:58:23 -07:00
Frank 0ee08bc368 live: heartbeat sync 2026-10-18T18:51:41-07:00 (Refs #11) 2026-10-18 18:51:41 -07:00
Frank fcc7226c3b chore(skills): drop Eve-only agents/openai.yaml from authored grilling
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
2026-10-18 18:31:37 -07:00
Frank 08f90c6df3 chore(skills): move upstream skills to the CLI global store, keep authored tier
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.
2026-10-18 18:28:34 -07:00
Frank 57e255f930 live: heartbeat sync 2026-10-18T17:49:00-07:00 (Refs #11) 2026-10-18 17:49:00 -07:00
Frank b3d3df4bdb feat(niri): amber-orange focus-ring, width 4 (ff8c00)
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.
2026-10-18 17:37:27 -07:00
Frank b353fa9075 revert(live-sync): drop path-activation unit
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.
2026-10-18 17:23:58 -07:00
Frank c300f8b49c feat(live-sync): path-activate heartbeat on dotfiles writes (Refs #11)
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.
2026-10-18 17:20:17 -07:00
Frank bde10f8948 docs: work-log entry for noctalia bar clobber + dangling-stash recovery
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.
2026-10-18 17:16:49 -07:00
Frank c87b378475 fix(noctalia): restore bar layout clobbered by 16:46 trunk-sync stash
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.
2026-10-18 17:12:20 -07:00
Frank 979e9ef711 live: heartbeat sync 2026-10-18T16:47:59-07:00 (Refs #11) 2026-10-18 16:47:59 -07:00
Frank a550db6027 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	AGENTS.md
#	agent/config.yml
#	omp-docs/log.md
2026-10-18 16:47:37 -07:00
Frank 3713339ffc chore: adopt pre-existing working-tree state before trunk merge
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/.
2026-10-18 16:46:57 -07:00
Frank 942787f0f2 docs: pin cwd meaning in attribution footer
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
2026-10-18 16:40:14 -07:00
Frank 8fb357b483 docs: attribution footer for machine-opened issues and PRs
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
2026-10-18 16:32:48 -07:00
Frank 54f5555470 chore: run live-sync heartbeat hourly
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.
2026-10-18 16:28:50 -07:00
Frank 0edae3323d chore: re-sync agent skills to upstream mattpocock/skills
Local snapshots dated 2026-09-16; upstream has moved on since. Refreshes
7 SKILL.md files (code-review, diagnosing-bugs, implement, tdd, grilling,
handoff, teach): tracker-doc references generalized, CONTEXT.md renamed
GLOSSARY.md, implement gains ticket-fetch step + Skill-tool invocation,
grilling question wording rule, handoff names the OS temp dir, teach
workspace-path resolution + quiz answer-position rules, tdd seam notes.
find-skills (vercel-labs) and prototype already current. Skill updates
take effect next session (discovery runs at startup).
2026-10-18 16:14:29 -07:00
Frank e52aa6a4a3 feat: live-sync heartbeat commits machine-written paths
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
2026-10-18 16:13:59 -07:00
Frank 7a0062e9e8 Docs: filed PRs must be opened in Frank's browser immediately
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.
2026-10-18 15:41:27 -07:00
Frank 8702f3058d chore: re-sync agent skills to upstream mattpocock/skills
Local snapshots dated 2026-09-16; upstream has moved on since. Refreshes
7 SKILL.md files (code-review, diagnosing-bugs, implement, tdd, grilling,
handoff, teach): tracker-doc references generalized, CONTEXT.md renamed
GLOSSARY.md, implement gains ticket-fetch step + Skill-tool invocation,
grilling question wording rule, handoff names the OS temp dir, teach
workspace-path resolution + quiz answer-position rules, tdd seam notes.
find-skills (vercel-labs) and prototype already current. Skill updates
take effect next session (discovery runs at startup).
2026-10-18 14:57:20 -07:00
Frank 8089693e58 Chore: switch SDLC to trunk-based; retire develop
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.
2026-10-18 13:18:31 -07:00
Frank ae82aa00e4 Docs: system pages realigned to live ground truth; sibling-vault overlap census
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
2026-10-18 03:39:56 -07:00
Frank 72a3dbbe08 Docs: status line page truth-audited against bundle; four claims corrected
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
2026-10-18 02:30:39 -07:00
Frank 43c19ae74c Task: raise subagent maxConcurrency 2 -> 3
Operator request 2026-10-18: one more concurrent subagent slot.
2026-10-18 01:35:26 -07:00
Frank a2b1b6d9c6 back-merge: main -> develop after PR #5 (status line custom segments) 2026-10-18 01:10:08 -07:00
Frank c2d855b33d Status line: move model segment to the right cluster (model, cost, time)
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.
2026-10-18 01:08:26 -07:00
Frank 246189f054 Status line: band shape, drop token_in/token_out segments
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.
2026-10-18 00:58:21 -07:00
Frank 04d3628c94 Docs: path segment two-mode stripWorkPrefix behavior; changelog matches shipped true 2026-10-18 00:51:12 -07:00
Frank e0920dc067 Status line: path segment keeps logical project/worktree label
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.
2026-10-18 00:50:57 -07:00
Frank e044700ef7 Status line: custom segments tuned for fleet bars; slim frank-archon label
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.
2026-10-18 00:39:11 -07:00
Frank 7b7dbf55c2 Add 1/3 to niri Mod+R width presets
Cycle is now 1/4 -> 1/3 -> 1/2, ascending; heights unchanged.
2026-10-17 18:31:54 -07:00
Frank a4218361e2 Switch niri width presets from fifths ladder to 1/4 + 1/2
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.
2026-10-17 18:30:50 -07:00
Frank c6fa584d0a Merge branch 'main' of http://192.168.0.143:3000/dank/command-center 2026-10-17 18:15:04 -07:00
Frank 541f27f316 Simplify niri size controls: 5% nudges, quarter/half height presets, Ctrl+arrows consume-or-expel
- 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.
2026-10-17 18:15:02 -07:00
Frank ae426434bc niri: retire flameshot binds, absolute script paths in spawn-sh
Refs the 2026-10-14 screenshot saga; see commit body.
2026-10-14 17:53:11 -07:00
Frank d767348cfd niri: retire flameshot binds, absolute script paths in spawn-sh
Live census 2026-10-14: every flameshot mode on this box captures via
xdg-desktop-portal-gnome → niri's single-output API (niri#4313) — full
AND screen hang ~15 s and error docked (verified: exit 124, no file).
Replace all six flameshot binds with niri-native equivalents:
all-monitors script (Print/Ctrl+Shift+1/Mod+Shift+S), screenshot-screen
(Alt+Print/Ctrl+Shift+2), interactive screenshot UI (Ctrl+Print/
Ctrl+Shift+3). Absolute script paths everywhere: niri's spawn-sh PATH
is system-only, ~/.local/bin absent — the bare screenshot-desk.sh and
desk.sh binds were silently dead. bats 27/27.
2026-10-14 17:53:09 -07:00
Frank ae12063de9 niri: fix screenshots on 2+ outputs — Mod+Shift+S captures all monitors
flameshot full's portal path hits niri's screenshot_all_outputs
ensure!(outputs.len()==1) (niri#4313); add scripts/screenshot-desk.sh
(per-monitor focus + screenshot-screen), bind Mod+Shift+S, noctalia
settings to Mod+Shift+O, restore screenshot-path. bats 27/27.
2026-10-14 17:35:38 -07:00
Frank 8da6cdc9cd niri: fix screenshots on 2+ outputs — Mod+Shift+S captures all monitors
flameshot full dies docked: its portal path hits niri's
screenshot_all_outputs ensure!(outputs.len()==1) (upstream niri#4313,
niri 26.04), so every Print press on the home desk produces error
bubbles. niri's built-in screenshot UI selects only one output, so add
scripts/screenshot-desk.sh: per-monitor focus + screenshot-screen with
explicit --path, focus restored, one PNG per monitor in
~/Pictures/Screenshots. Bind Mod+Shift+S (Frank's call); noctalia
settings moves to Mod+Shift+O. Restore screenshot-path (was null, now
root-level as config.screenshot_path requires) for UI saves. Live-
verified docked: valid 1920x1080 PNGs for eDP-1 + DP-2, focus restored;
bats 27/27 incl. niri validate on both desk profiles.
2026-10-14 17:21:10 -07:00
Frank 9217ed83f8 niri: move laptop panel (eDP-1) left of ultrawide in home desk profile
Sceptre left edge x=1581 minus laptop width 1920 -> x=-339;
y=-240 bottom-aligns the 1080 panel to the 1440 panel.
2026-10-13 19:49:38 -07:00
Frank 27083f75f1 niri: simplify preset-column-widths to 1/2, 1/5, 2/5, 3/5 2026-10-09 19:35:12 -07:00
Frank 5a1cb81bb9 chore(agent): capture noctalia-bar-layout-edit managed skill 2026-10-09 16:37:46 -07:00
Frank 4d2b024116 chore(agent): capture noctalia/gate/niri memory lessons + secret-audit and system-prompt-retrieval managed skills
learned.md: noctalia v5 bar layering + hot-reload loop; secret-gate self-match convention (quoted literals redacted per the convention the line itself states); niri 26.04 event-stream has no hotplug event. New managed skills: git-repo-secret-audit, omp-system-prompt-retrieval.
2026-10-09 16:37:43 -07:00
Frank 989196f664 chore(gitignore): ignore webcache/ harness web-fetch cache (runtime state) 2026-10-09 16:37:41 -07:00
Frank 0ccdd46a97 docs(agents): add commit hygiene section mirroring serverAppConfigs
Imports the Git Workflow / Testing law from dank/serverAppConfigs: pull+clean tree, atomic early commits, bats+secret gate as commit precondition, push on green, imperative messages with Refs #N.
2026-10-09 16:36:32 -07:00
Frank 9255a8b865 fix(noctalia): move taskbar widget to left section beside workspaces
Bar start = launcher, wallpaper, workspaces, taskbar; center keeps only the cat plugin widget. settings.toml is the GUI-override layer, symlinked from this repo.
2026-10-09 16:36:32 -07:00
Frank 8a68c58078 chore(memory): record faillock sudo-lockout law + mint recovery skill
redact gate pattern literals in the audit prose — the pre-commit gate
self-matches its own documented patterns when quoted verbatim
2026-10-09 15:09:09 -07:00
Frank abb8a2a9d0 fix(autoswitch): WorkspacesChanged output-set diff; unit paths; deploy symlinks
- niri 26.04 has no hotplug event: OutputConfigChanged is only an ACK
  (niri-ipc). Watch WorkspacesChanged, diff sorted output set, apply on
  change. Proven live: eDP-1 off/on -> 3 output-set transitions, each
  matched + applied + reloaded.
- unit: %h/.local/bin/desk-autoswitch.sh, quoted Environment, drop
  User/Group (user unit); add desk-autoswitch.sh bin symlink
- desk.sh: silence validate/load-config/notify stdout
- deploy.sh: deploy repo symlinks (find -type l), so .local/bin links land
- docs: event semantics corrected (displays diagram, log)
2026-10-09 14:46:17 -07:00
Frank 286340e786 fix(deploy): skip .AGENTTRASH in packages; deploy repo symlinks (desk.sh); retire base display.kdl
desk.sh: silence niri validate / load-config-file stdout (was leaking 'ok')
2026-10-09 14:43:05 -07:00
Frank 4874d103d7 refactor(niri): retire base display.kdl — runtime display.kdl is desk.sh-owned (symlink to active desk-*.kdl); the include is optional 2026-10-09 14:42:45 -07:00
Frank b441cfda56 docs(DE): full redesign sweep — desk profiles, keybinds, noctalia v5, handy fleet wiring, incident log
- niri: index/config-tree rework, displays.md desk-profile rewrite,
  tips/action-reference/default-bindings refresh (26.04),
  generated keybindings.md (119 bindings)
- noctalia-shell.md: settings.toml lives in ~/.local/state, taskbar
  widget, v5 keybind table (Mod+D/Mod+V/Alt+Tab)
- handy.md: NEW; live nested store shape, fleet endpoint, known
  thinking-model empty-content breaker + verified cure
- log.md: DE redesign entry + pam_faillock sudo-lockout incident
2026-10-09 14:42:08 -07:00
Frank 37554b0fb0 feat(handy): correct store template to nested {settings} shape; fleet wiring patch + apply recipe
live store wired 2026-10-09: provider custom -> frank-secondary @
192.168.0.143:7771, prompt default_improve_transcriptions,
post_process on, self-autostart off (niri owns it)
2026-10-09 14:42:08 -07:00
Frank 4c562d7ed4 feat(noctalia): taskbar widget in bar center (settings.toml) 2026-10-09 14:42:08 -07:00
Frank f63d11de85 feat(blankpad): desk.sh profile switcher, hotplug autoswitch daemon, keybinds doc generator + bats suite
- desk.sh: list/current/switch/cycle/match/capture over cfg/desk-*.kdl
  profiles; apply = relink display.kdl, niri validate (rollback on fail),
  load-config-file, noctalia notification; match scores // requires: lines
  (EDID long names) against live niri msg outputs
- desk-autoswitch.sh: watch niri msg --json event-stream for
  OutputsChanged, debounced desk.sh match --apply, reconnect loop
- blankpad-desk-autoswitch.service: ConditionHost=blankpad user unit
- gen-keybinds.sh: keybinds.kdl -> markdown cheat sheet (sections from
  // --- headers, hotkey-overlay-title preferred over action)
- tests/: 27 bats cases, all green (desk 16, gen-keybinds 6,
  niri-config 5 incl. real niri validate on the assembled tree with
  each desk profile active)
2026-10-09 14:40:26 -07:00
Frank 4ec47a5b7e niri(blankpad): desk-profile system, keybind rework, lid handler, noctalia config tracked
- config.kdl: display include optional=true (desk profiles link it per-desk),
  new optional switch-events.kdl include (per-host, blankpad-only)
- keybinds: swap-window-left/right on Mod+CTRL+H/L+arrows (join/exit columns
  on pass), move-column demoted to Mod+CTRL+Alt+chords; Print trio -> flameshot
  full/gui/screen (CTRL+Shift trio kept); launcher Mod+CTRL+Return -> Mod+D;
  Alt+Tab noctalia window-switcher; Mod+V clipboard panel; Mod+Shift+Space
  handy post-process; Mod+Shift+D desk cycle
- layout: preset column widths 12.5/25/33/50/67/75/87.5%
- desk-1-home.kdl: EDID-identity-keyed positions (M34 + eDP long names; PM1601
  connector placeholder pending EDID capture), focus-at-startup M34-first
- desk-2-portable.kdl: skeleton, EDID capture TODO
- switch-events: lid-close -> noctalia session lock-and-suspend
- autostart: handy --start-hidden (replaces Handy self-autostart)
- noctalia config.toml + settings.toml now tracked
- zz-blankpad display.kdl retired to .AGENTTRASH (superseded by desk-1-home)
niri validate: pass (assembled blankpad layout)
2026-10-09 14:17:21 -07:00
Frank 1d32829428 docs(log): record the full-repo secret audit (clean at 79e780f)
Five layers: live-value match across all 77 revs / 765 reachable blobs; the whole
object store including the 2 dangling blobs (one synthetic sk-shaped fixture,
never committed on any ref); 21 provider shapes with every hit triaged; an
entropy scan of HEAD; all 23 git-lfs payloads (81 MiB) scanned as bytes.
Gate gap noted: hf_/npm_/pypi-/AIza/basic-auth-URL shapes are absent from
.githooks/pre-commit. Quoting the fixture literal in this commit message was
rejected by the gate, so it is described instead.

Also chmod 600 ~/.config/secrets/hf_token_write (was world-readable).
2026-10-09 13:26:04 -07:00
Frank 79e780f280 chore(skills): mint gitea-token-out-of-remote-url + record the store-format law
git 2.56 credential-store parses one URL per line (port included), not the
key=value block shape the man page shows for ~/.git-credentials; a block-format
file yields a silent empty get and git dies at askpass.
2026-10-09 13:21:48 -07:00
Frank 07fda88b1d chore(skills): mint omp-model-id-rename-cutover + record the callsign rename law
Captured from this session's cutover: reference-grep list, the YAML
cross-check regex (the provider label contains a space and parentheses, so a
whitespace split yields false unresolved hits), the per-endpoint 4-token probe
that proves a harness-side id rename is wire-safe, the fit check against the
served window, and the commit shape.
2026-10-09 13:21:37 -07:00
Frank cfed6ef7bb docs(gitea): document client token handling; move the token out of remote URLs
New tools/gitea/client-access.md: the credential file (~/.config/secrets/gitea,
0600) behind a global 'store --file' helper, the git 2.56 credential-store trap
(the key=value block shape parses to an empty get; the file must be one
http://user:token@host:port URL per line), the GIT_TERMINAL_PROMPT=0
verification loop, the lfs.locksverify key that silences the URL echo, and the
rotation procedure. Cross-linked from the gitea index and management pages.

Both workstation remotes are now bare URLs; the token lives in one file.
2026-10-09 13:21:34 -07:00
Frank 69e4cd0c8f chore(gitignore): ignore harness diagnostic report bundles
reports/*.tar.gz bundles logs and session state; pushing them to Gitea would
publish raw transcript material.
2026-10-09 13:19:27 -07:00
Frank a172513a95 docs(log): record the 2026-10-09 working-tree reconciliation
Callsign renames verified against the live endpoints (all three accept the
new request ids and return reasoning_content), compaction endpoint moved and
22 model references checked for integrity, runtime scratch quarantined in
.gitignore, skill libraries shown to be renames with history intact at
12c5e88.
2026-10-09 13:19:19 -07:00
Frank 5b08896e4e chore(memory): snapshot auto-learned memory and renamed workstation skills
--home-blank-.omp--: MEMORY.md +140 / learned.md / memory_summary.md /
raw_memories.md +1002 rewritten by auto-learn after the model rename,
frank-medium split-balance and bottleneck studies. Skills renamed to
single-topic buckets: dotfile-git-workflow -> ghostty-text-aa +
niri-display-rotation + noctalia-theme, handy-service-mgmt ->
handy-flm-inference, inference-runtime -> llama-cpp-parallelism.

--home-blank-Projects-serverAppConfig--: 38 new rollout summaries,
raw_memories.md/MEMORY.md refreshed, skills re-bucketed (bench-protocol,
llm-fleet-model-swap, rootless-quadlet-log-retrieval, orchestration-quadlet).

Per-worktree bucket (wt-20261006-122204) is now gitignored, not committed.
2026-10-09 13:17:53 -07:00
Frank a34322aeb0 refactor(skills): consolidate managed skill library 94 -> 25
The managed-skill library was regenerated: 94 narrow per-incident skills
replaced by 25 broader ones (radiance-*, llamacpp-*, homepage-*, fleet/
endpoint ops). Git renders this as mass delete + mass add because whole
directories changed name; old content stays in history at 12c5e88.

Surface check: the 25 on disk are exactly the skills the harness advertises
this session.
2026-10-09 13:17:48 -07:00
Frank 94c71a016f fix(zsh): source KAGI_API_KEY and HF_TOKEN from 600-perm secret files
Keys live in ~/.config/secrets/{kagi_api_key,hf_token}; .zshrc only reads
them, so the literals leave the shell rc that this repo publishes to Gitea.
2026-10-09 13:17:45 -07:00
Frank 40c37bb9fa niri(blankpad): DP-2 back to landscape ultrawide, HDMI-A-1 bezel flipped
DP-2: transform 90 -> normal with mode 3440x1440@239.999 pinned, moved
(0,0) -> (1581,-600). HDMI-A-1: transform 270 -> 90 (portrait kept, top bezel
now on the left). eDP-1 re-pinned (2400,840) -> (5021,-240) to sit rightmost.
All three positions stay pinned so niri's auto-layout cannot reflow them.
2026-10-09 13:17:45 -07:00
Frank 4e288b518e feat(omp): repoint roles at the renamed models, move compaction to Dankclaw
Role map follows the callsign rename; scout/reviewer/librarian/sonic/task/
security-reviewer/designer all pinned to frank-zealot (was the @smol alias).
New roles: web -> web/searxng, speech -> local/kokoro, judge ->
openrouter/~typesafe/jev-latest:auto, dictation -> local/parakeet-tdt-0.6b-v3,
memory -> frank-zealot.

webSearchOrder (flat list) replaced by the per-role providers.web fallback
chain, kagi first; openrouterVariant: floor added.

Server-side compaction moves off dankserver:7770 to the Dankclaw 3090
endpoint 192.168.0.143:7771, thresholdPercent 70 -> 85, remoteStreamingV2
+ async on, idleTimeoutSeconds 120, maxRetries 10.

TUI: tight, contextLine embedded, splash off, changelogMode summary,
theme dark-terminal/light, read.renderMarkdown + toolResultPreview.
Extensions on: astGrep, vault, secrets, lsp (formatOnWrite,
diagnosticsOnEdit), speechgen, live, contextPromotion, tts/speech voices.
headless: true, autoResume: false.
2026-10-09 13:17:43 -07:00
Frank 0cb002123b refactor(omp): rename fleet models to unit-name callsigns and refit windows
frank-medium -> frank-archon (dankserver), frank-large -> frank-dragoon
(dankclaw-gpu), frank-small -> frank-zealot (dankclaw-3090). The Dankclaw
service/unit names keep the old frank-large spelling; only the OMP model ids
move, per the comments at each entry.

Windows refit to the served context minus the compaction headroom:
  archon  196608 -> 200000 ctx, 32768 -> 16384 maxTokens
  dragoon 200192 -> 217088 ctx, 57344 -> 45056 maxTokens, input +image
  zealot  262144 -> 200704 ctx, 32768 -> 16384 maxTokens
All three now carry compactionModel frank-zealot, reasoningContentField
reasoning_content, and Qwen-recommended sampling in compat.extraBody
(merged last, so it beats the global -1 sampler settings).
2026-10-09 13:17:40 -07:00
Frank 40c7d3c752 chore(gitignore): quarantine agent runtime scratch and per-worktree memory buckets
autoresearch/ runs, agent/predict/ ngram models, local/ artifact dumps, wt/
worktrees and memories/--home-blank-.omp-wt-* buckets are runtime state keyed
on ephemeral paths; none were tracked, so the rules are purely additive.
2026-10-09 13:17:23 -07:00
Frank 12c5e885f1 docs: purge the retired workstation from auto-learned memory and the backup snapshot
Finishes the purge. These two surfaces were left out of the earlier commit
because the memory store is auto-generated, but both are read back into every
future session, so the name was still reaching the agent.

58 sites across 16 files: hostname, both LAN addresses, the SSID. Special-cased
the compound names a blind token swap breaks ('dank@the workstation/dankclaw',
'on the workstation/Dankclaw/Dankserver') and reworded the four that came out
ungrammatical. Facts kept: the hardware inventory of the box, the noctalia
architecture history, and today's own purge lessons all survive intact — only
the identifiers are gone.

Non-memory: the tracked .pre-pull-backup snapshot of a managed skill, whose
live counterpart was already clean.
2026-09-28 16:57:00 -07:00
Frank 689228e60d docs: purge the retired workstation from the knowledge base
Second half of the purge (the first covered the persona, AGENTS.md, README.md,
and the distillation of the per-host pages). Every remaining identifier is
gone: hostname, both LAN addresses, and the Wi-Fi SSID.

34 count-checked substitutions across 22 files — indexes, tool/research pages,
the inventory census, the changelog, one generated HTML report, and five
managed skills. Facts kept, names dropped: a history entry keeps its four-page
listing as a nameless summary, the syslog excerpts keep every timestamp and
line, and the census keeps the .zcompdump rows (the zsh version stamps are the
useful part, the hostname was not).

Deliberately unchanged: install.sh's --host case list and the
packages/<hostname>.pkgs filename, where the hostname is the lookup key.

Left out of scope by Frank's call: agent/memories/** — past-session records the
learn pipeline rewrites.

kb-lint: 0 violations. Residual grep for the hostname, its two IPs, and the
SSID across omp-docs/ and agent/managed-skills/: no hits.
2026-09-28 16:37:38 -07:00
Frank f1e0b6583d docs: distill the retired workstation's KB pages into general pages
Frank's call: no per-host graveyard. The four /system/dankware/ pages carried
two pieces of knowledge that outlive the box, and one that does not.

Distilled:
- omp-docs/system/network.md (new) — LAN topology plus the multi-link resolver
  law: a client with two +DefaultRoute links flaps its DNS, and the fix is a
  static per-connection resolver, not resolved.conf. Keeps the
  flush-caches-loop verification, because one successful dig proves nothing.
- omp-docs/tools/niri/displays.md (new) — the multi-monitor rig: portrait
  transforms, absolute positions, auto-placed third panel, the iGPU
  render-node pin, and the three failure modes (duplicate output blocks,
  positions that do not reflow, a mode the panel cannot drive).

Dropped: the machine's own spec sheet (CPU/GPU/PCI/NVMe inventory for a box
Frank sold) and its quick-facts table. The OS and userspace facts it repeated
already live in tools/cachyos.md.

omp-docs/system/dankware/ moved to .AGENTTRASH/20260928-retired-workstation/
(not deleted; git history holds it too). system/index.md and the niri index
repoint; niri's [[displays]] wikilink now resolves to the new page instead of
the trashed one. kb-lint: 0 violations.
2026-09-28 16:15:57 -07:00
Frank 4e3d4d20e9 docs: drop the retired workstation's name from the command-center contract
AGENTS.md: the reader-preamble and the machine-facts table row no longer name
the sold client box; the row survives as the 'Dev workstation' class with its
two load-bearing facts (mainline llama.cpp build path, repo at ~/.omp).

README.md: same for the fleet table row and the 'primary host' sentence.

Deliberately untouched, because the name is load-bearing in both:
- scripts/install.sh:97 — the '--host' case list; --host <name> must still
  accept this hostname.
- packages/dankware.pkgs:1 — install.sh resolves packages/$HOST.pkgs from
  $(hostname) (line 25/44), so the manifest FILENAME is the lookup key.
  Renaming it breaks package provisioning on this host.
2026-09-28 15:25:46 -07:00
Frank 8fbb3e8b54 fix(persona): drop the retired workstation from the agent identity line
APPEND_SYSTEM.md line 16 named the sold client box twice (as a fleet server
and as the host I operate from) and, while doing it, mis-listed the fleet as
'Dankware and Dankclaw' -- Dankserver was already missing.

Now: servers Dankclaw and Dankserver, plus several client workstations, and
the identity no longer claims a fixed host. Committed on main rather than a
feature branch because this checkout IS the live deployment (branch switches
swap live config under the running agent) and the tree already carries
in-flight WIP; only this file is staged.

Takes effect in NEW sessions -- the running one keeps its process-start
prompt snapshot.
2026-09-28 15:23:22 -07:00
Frank 03c043d620 niri: column join/expel keybinds (Mod+[ ] , .)
consume-or-expel-window-left/right on Mod+[ and Mod+],
consume-window-into-column on Mod+, expel-window-from-column on
Mod+.. Moving a window into the next column joins (splits) that
column deterministically instead of relying on the hardcoded
drag-insert heuristic, which spawns a new column first.
2026-09-17 21:50:55 -07:00
Frank c3f30bdbd0 kb: retire pi-installation association (OMP is the primary harness)
Purge live-state claims that ~/.pi is our harness; keep general
pi documentation in omp-docs/ and dated historical records.

- README.md: single config source; Legacy Notes reworded
- AGENTS.md: drop 'like ~/.pi did' framing
- APPEND_SYSTEM.md: okf-spec -> omp-docs/references/okf-spec.md
- dotfiles/zsh/.zshrc: systemprompt alias -> APPEND_SYSTEM.md
- managed skill llm-fleet-model-swap + model_config_sync skill:
  single-source models.yml; validation script YAML-only
- memories (MEMORY.md, memory_summary.md, learned.md): single source
- omp-docs: .okf root -> ~/.omp/omp-docs; de-live pi-era claims in
  pi/index.md, pi-web-access.md, engineering/agents-files.md
2026-09-17 19:24:02 -07:00
Frank eebcfbf5ac omp: scout on @smol, cap active subagents at 2, frank-medium remote compaction
- task.agentModelOverrides.scout: "@smol" (frank-small, xhigh thinking)
- task.maxConcurrency: 2 (semaphore on ACTIVE subagents; total
  instantiations uncapped)
- compaction.remoteEndpoint -> frank-medium /v1/chat/completions
  (192.168.0.235:7770), methodOrder remote-first; compactionModel:
  frank-medium on every model so the wire model id is always valid
- models.yml header: single source of truth (pi-era import retired)

Verified: omp config get on all keys; omp -p startup probe passed;
live POST in the remote-compaction wire format answered.
2026-09-17 19:24:02 -07:00
Frank 368caadbe8 ghostty: render errors in terminal green (ANSI red -> green)
Remap palette indices 1 and 9 to green so error output renders in
terminal green. Explicit palette entries override the generated
noctalia theme (palette-generate = true).
2026-09-17 19:24:02 -07:00
Frank 135bb2194d agent: repoint roles to frank-medium/dankclaw-3090; sync niri tweaks, memories, managed skills
- config.yml: default/commit -> frank-medium (dankserver); task/tiny/smol/vision -> frank-small (dankclaw-3090); vision xhigh
- models.yml: add llamacpp (dankclaw-3090) provider; frank-large preserve_thinking + context notes
- niri: focus-ring/border/shadow layout, hot-corners off, re-add noctalia.kdl include; blankpad eDP-1 scale 1.0
- memories: flush rollouts; retire frank_large + marreta_authentik skills; add auth-chain/kv-pool/quadlet-log skills
- managed-skills: 40+ new fleet runbook skills
- agent/skills: import built-in skill set
2026-09-17 12:27:08 -07:00
Frank 83c9c92b3f blankpad(niri): move rotated PM1601 panels left of eDP-1 (DP-2@0, HDMI-A-1@1200, eDP-1@2400) 2026-09-15 19:43:01 -07:00
Frank 97a0b21b40 blankpad(niri): 180-degree flip of both external panels
DP-2 270->90, HDMI-A-1 90->270. In portrait, 180 is the 90<->270 swap.
2026-09-15 17:36:29 -07:00
Frank 922165bde2 blankpad(niri): flip DP-2 to transform 270
DP-2 top bezel faces right; HDMI-A-1 stays at 90 (top bezel left).
2026-09-15 17:35:56 -07:00
Frank 2baf0c083d blankpad(niri): pin outputs; run both PM1601 externals portrait (transform 90)
- DP-2 at 1536,0 and HDMI-A-1 at 2736,0, both 1200x1920 portrait, scale 1
- eDP-1 pinned at 0,0 with explicit scale 1.25 (output blocks reset unspecified props)
- niri transform is counter-clockwise: 90 = top bezel left, 270 = top bezel right
2026-09-15 17:30:41 -07:00
Frank 970ceed554 niri: drop untracked noctalia.kdl include; sync memory skills
- remove 'include noctalia.kdl' from shared config.kdl: the file is a
  per-host noctalia template render (colors from local palette), was
  never committed, and made every config load fail hard on hosts where
  it was absent — niri 26.04 falls back to DEFAULT config on parse
  error, silently killing keybinds/rules/layout/autostart
- theme integration now only via keybinds (noctalia msg verbs) + the
  host-local rendered files (see managed skill noctalia-template-offline-render)
- sync agent memories: delete retired memory-store skills, add new ones
2026-09-14 17:46:31 -07:00
Frank fc049ce7fb agent: local role repoint + compaction 70%/-1; sync memories and managed skills 2026-09-14 14:32:16 -07:00
Frank 872e86399a agent: repoint FLM-NPU model roles off the retired provider; sync memory/skills
config.yml: vision -> llamacpp (dankclaw)/frank-large:auto,
tiny -> llamacpp (dankserver)/frank-small:off,
task -> llamacpp (dankclaw)/frank-large:medium (was flm dankclaw-npu),
matching the flm (dankclaw-npu) provider removal in models.yml.

Memories/managed skills: rollouts and learned notes from the frank-large
KV-pool + sampler work and the noctalia recolor; merged the duplicate
noctalia-palette-recolor skill into noctalia-custom-palette-recolor (adds
the dotfiles-tracking step and the +show-config delta gotcha) and dropped
the superseded legacy memory skills whose ghostty USR1 reload recipe is
wrong for this fleet.
2026-09-13 23:51:43 -07:00
Frank c32584e093 dotfiles: ghostty 12px + monochrome freetype rendering
Captures the live ghostty config state: font-size 14 -> 12 and
freetype-load-flags hinting,light -> hinting,monochrome (1-bit, AA off).
2026-09-13 23:51:22 -07:00
Frank 93bd4737f3 dotfiles: recolor noctalia theme yellow to red
Adds custom palette "Gruber Red" (live at
~/.config/noctalia/palettes/Gruber Red.json, symlinked into this repo's
noctalia package). Derived from community "Gruber Darker" with jq:
dark mPrimary/terminal yellow/terminal foreground -> #f43841 (bright
yellow -> #ff4f58), light-mode yellows -> the light error reds. Custom
source, so the community-palette md5 sync cannot revert it.

gtk-3/gtk-4 noctalia.css are regenerated artifacts of templates-apply
(accent_* now red) committed so every host renders the same recolor.
2026-09-13 23:51:11 -07:00
Frank 60dc0bba92 models: set frank-large contextWindow to 200000
Also carries previously-uncommitted edits already in the working file:
maxTokens 262144 -> 65536 (HALOGEN_MAX_TOKENS_CAP) with the KV-pool
admission note, and removal of the flm (dankclaw-npu) provider block.

Live check: halogen /health reports context=262144, so 200000 is inside
the served window; 200000 + 65536 = 265536 against a 401408-position pool.
2026-09-13 23:14:21 -07:00
Frank 4b82f35354 Add blankpad-host auto-learn skills and memory store
Tracked the harness artifacts accumulated on blankpad (blank@), matching
the existing convention for the --home-dank-* memory stores and the 36
already-tracked managed-skills.

managed-skills (9): authentik-proxy-provider-app-link,
dankclaw-guard-chain-layer-diagnosis, e2e-arr-rawip-reachability-triage,
halogen-kv-pool-fit, lan-client-split-dns-fix, noctalia-reference,
rootless-quadlet-log-retrieval, ssh-key-bootstrap-no-sshpass,
swapfile-resize-safe-ordering.

memories (2 stores): --home-blank-.omp-- (dotfiles_git, handy_lifecycle,
input_permissions) and --home-blank-Projects-serverAppConfig--
(frank_large_quadlet).

Secret sweep before staging: no PEM blocks, no credential literals.
Content is fleet topology/IPs only, same class as the tracked dank stores.
2026-09-13 00:25:29 -07:00
Frank b60e95158c frank-large: pin Qwen3.8-Flash-Next sampler settings + preserve_thinking
halogen-flash-server has no server-side sampler defaults (temperature absent
or 0 = greedy), so the endpoint decoded greedy for OMP, whose global
sampling settings default to -1 (not sent).

compat.extraBody merges these top-level into every request body after the
compat policy, so they win:
  temperature=1.0 top_p=0.95 top_k=20 min_p=0.0
  presence_penalty=0.0 repetition_penalty=1.0 preserve_thinking=true

Verified against the live dankclaw endpoint: preserve_thinking is honoured
(350 vs 75 prompt tokens for a replayed reasoning turn), and the exact
body shape returns 200.
2026-09-12 23:58:38 -07:00
Frank ccf72a2a3e Fix Ghostty: font-hinting -> freetype-load-flags = hinting,light 2026-09-11 00:36:11 -07:00
Frank 268dcbdea4 Fix Ghostty: font-hinting = hinting (flag-based, not light value) 2026-09-11 00:34:54 -07:00
Frank df3331026d Ghostty: switch font-hinting from no-hinting to light 2026-09-11 00:33:25 -07:00
Frank 4c84f028c5 Fix Ghostty: font-hinting = no-hinting (not font-subpixel-render) 2026-09-11 00:31:55 -07:00
Frank 5ad39bdfea Ghostty: disable font subpixel antialiasing 2026-09-11 00:28:53 -07:00
Frank 49afdfeda4 Noctalia theme migration: Niri IPC, GTK palette, alacritty import
- Switch Niri keybinds from qs-wrapped IPC calls to direct 'noctalia msg'
- Add noctalia.kdl include to niri config
- Replace alacritty theme with import of noctalia.toml
- Ghostty: Retro Legends → noctalia theme
- GTK3/4: accent palette shift from lavender (#bfc2ff) to purple (#b267e4)
- systemd swayidle-lock.service updated
2026-09-11 00:26:56 -07:00
Frank d0c90fccbd fix(install): replace set-diff membership with per-package pacman -Qq --quiet query (deterministic) 2026-09-10 21:01:55 -07:00
Frank c8cac879e6 fix(deploy): managed symlinks changing owners relink silently; quarantine reserved for genuine divergence 2026-09-10 20:41:14 -07:00
Frank 0883ae5660 fix(packages): amd-u-code is not a pkgbase; real name is amd-ucode 2026-09-10 20:32:41 -07:00