chore(skills): promote runbook skills to managed-skills; drop superseded SKILL.md

- 31 new managed skills (anubis/arr/authentik/hermes/freetoken/podman/llm-swap
  runbooks etc.) now tracked.
- Removed superseded skills: omp_harness_config, peon_ping_integration
  (replaced by user-authored peon-ping-* managed skills),
  rocmfp4-strix-benchmark-orchestration.
- New memory-root skills: niri_compositor_ops, omp_git_workflow,
  omp_model_config, quadlet-media-migration, homelab-service-triage,
  hermes-dankclaw-ops, frank-default-large-ops, caddy-auth-dns-playbook.
This commit is contained in:
Frank committed 2026-09-09 16:20:28 -07:00
1 parent 7be39d60dd
commit 9bfa0be85d
48 files changed
+1361 -42

No files matched your search

@@ -0,0 +1 @@
Provides operational playbook for niri Wayland compositor. Covers cursor/Browser XDG defaults, SIGUSR1 hot-reload workflow, and nvidia-modeset semaphore deadlock recovery via modprobe config and force-reboot.
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Hot-reload niri without killing session
if pgrep -x niri > /dev/null; then
niri-msg reload
# Fallback signal method
kill -SIGUSR1 $(pgrep niri)
fi
@@ -0,0 +1,3 @@
# /etc/modprobe.d/nvidia-workarounds.conf
# Resolves nvidia-modeset semaphore deadlock freezing niri options nvidia-modeset disable_vga=1
options nvidia-modeset modeset=1
@@ -0,0 +1 @@
Git operations tailored for OMP environment. Addresses dirty `agent/memories/` tracking pitfalls, implements stash-before-checkout protocol, and standardizes PR creation in dank/command-center.
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
# Safely checkout main in OMP
if [ -n "$(git status -s agent/memories/)" ]; then
git stash
echo "Stashed dirty agent/memories/ files."
fi
git checkout main
git pull origin main
@@ -0,0 +1,5 @@
# PR Branch Convention
- Branch: pr/fix-models
- Target: main
- Strategy: Single commit, clean history
- Workflow: Feature -> PR -> Squash/Merge
@@ -1,20 +0,0 @@
# OMP Harness & Migration Playbook
## Environment Setup
- Home: /home/dank/
- Config: ~/.omp/agent/APPEND_SYSTEM.md (replaces Pi's SYSTEM.md)
- Prompt Behavior: APPEND renders after default harness prompt. Use `omp config set personality none` to clear built-in personality while preserving custom APPEND.
- Skills: Auto-discovered from ~/.claude/skills. Trigger via /skill:<name>.
## Tool Migration (Pi → OMP)
| Pi | OMP | Notes |
|---|---|---|
| subagent | task | Direct replacement |
| concurrency: N | Dropped | Harness auto-queues excess |
| context: "fresh"/"fork" | Dropped | Subagents start blank/self-contained |
| async: true | Dropped | Use local:// unique paths if needed |
## Prompt Maintenance
- Remove hardcoded dates (OMP injects real time).
- Keep persona constraints in APPEND_SYSTEM.md.
- Reference omp:// docs for extensions/hooks/mcp-config.
@@ -0,0 +1 @@
Handles dual config synchronization, Ki-style context sizing, and validation for Frank's OMP model definitions. Covers lock-step editing of models.json and models.yml, contextWindow/maxTokens mirroring, and FLM WebP constraints.
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Validates model config sync
jq -e '.providers."llamacpp (dankserver)".models[0] | .contextWindow, .maxTokens' ~/.pi/agent/models.json
python3 -c "import yaml; d=yaml.safe_load(open('/home/dank/.omp/agent/models.yml')); m=d['providers']['llamacpp (dankserver)']['models'][0]; print(m['id'], m['contextWindow'], m['maxTokens'])"
@@ -0,0 +1,4 @@
{
"contextWindow": 204800,
"maxTokens": 204800
}
@@ -1,21 +0,0 @@
# Peon-Ping Skill Integration
## Available Skills
- peon-ping-config
- peon-ping-log
- peon-ping-toggle
- peon-ping-use
## Usage Playbook
1. Locate skills in ~/.claude/skills (shared across agents).
2. Trigger via slash commands: /skill:grilling, /skill:tdd.
3. skills.enableSkillCommands defaults to true.
4. Use appropriate sub-skill based on operation:
- Config: peon-ping-config to set thresholds/paths.
- Monitor: peon-ping-log for status/output.
- Control: peon-ping-toggle to enable/disable.
- Execute: peon-ping-use to run targeted checks.
## Notes
- Skills persist across agent sessions.
- Integrate with OMP task tool for asynchronous monitoring if needed.
@@ -0,0 +1,29 @@
# Caddy, Authentik, Anubis, and split-DNS playbook
Use this when modifying franksdank.cloud routes, DNS records, or auth wrapping.
Architecture:
- Single Caddy container on Dankclaw fronts services on Dankclaw and Dankserver.
- LAN DNS via Pi-hole resolves service names to 192.168.0.143.
- Public DNS via Porkbun points exposed names to WAN IP 71.227.227.172.
- TLS uses Porkbun DNS-01 wildcard certificates; ordinary A-record deletion does not break wildcard renewal.
- Porkbun credentials are machine-local secrets, never tracked.
Caddy rules:
- Keep Caddy admin enabled on 127.0.0.1:2019 inside the container so file watcher hot-reload works.
- Caddy routes by Host header; it does not care whether the name resolved via Pi-hole or Porkbun.
DNS changes:
1. If a service should be LAN-only, it is usually safe to remove its ordinary Porkbun A record while keeping Pi-hole local DNS.
2. Removing public DNS does not remove router port forwards or block direct IP access.
3. Do not casually remove public DNS for auth.franksdank.cloud; external login flows may need it.
4. Be cautious with gitea.franksdank.cloud because external git smart-HTTP use may depend on public DNS.
Auth wrapping:
- Protected via Authentik forward_auth: homepage, SearXNG, Hermes, Prometheus, RomM, Copyparty.
- Usually bypass forward_auth because they have native auth: Grafana, Gitea, OpenWebUI, Jellyfin, *arr, Pi-hole.
Verification pitfalls:
- Curl or bot-like clients may get Anubis JS challenge page with HTTP 200. That does not prove the app or outpost succeeded.
- Authentik outpost provider matching depends on exact Host header. Missing/wrong Host in CLI probes can produce misleading 404s.
- Verify end-to-end login in a real browser after solving Anubis. Use logs to debug outpost 404/provider host-match failures.
@@ -0,0 +1,36 @@
# frank-default-large operations
Use this when changing or troubleshooting the large model service on Dankclaw.
Current durable model/runtime:
- Host: Dankclaw, Strix Halo gfx1151 unified memory.
- Alias: frank-default-large.
- Endpoint: http://192.168.0.143:7770/v1, health on port 7770.
- Repo files: scripts/serve-frank-large.sh and scripts/frank-default-large.env under /home/dank/Projects/serverAppConfigs.
- Runtime: /home/dank/GitPackages/kingjones-ROCmFPX/build/bin/llama-server.
- Model: kingjones777/Qwen3.8-Flash-Next-ROCmFP4-STRIX-GGUF.
- Local GGUF: /home/dank/models/kingjones-Qwen3.8-Flash-Next-ROCmFP4-STRIX/Qwen3.8-Flash-Next-Q4_0-ROCmFP4-STRIX.gguf.
Hard constraints:
- Keep --fit off unless the qwen4exp hyper-connection auto-fit segfault is proven fixed.
- Keep PLE table mmap/page-cache streamed. Do not add --no-mmap and do not force the PLE table into GPU memory.
- Avoid bare env vars TEMP, HOST, and GPU_MAX_HEAP_SIZE. HIP/ROCm can read them unexpectedly.
- Do not enable MTP/speculative decoding casually. Prior MTP heads failed because blk.0.hc_attn_norm.weight was missing. Latest durable state has SPEC_TYPE=none.
- Stock llama.cpp cannot load this model; qwen4exp architecture support and ROCmFP4 tensor support must coexist in the same runtime tree.
- If flash-attn graph build fails on QSA mask, port scripts/patches/qwen4exp-qsa-f32-mask.patch into the active runtime tree and rebuild.
Before edits:
1. cd /home/dank/Projects/serverAppConfigs
2. git status --short
3. Inspect current scripts/frank-default-large.env and scripts/serve-frank-large.sh; do not rely on old memory for exact tunables.
After edits:
1. Run repo tests appropriate to the change.
2. Deploy/restart using the current repo workflow.
3. Verify health: curl -s http://192.168.0.143:7770/health or via localhost on Dankclaw.
4. Watch logs during model load; 113+ GiB mmap/model load can take significant time.
Benchmarking notes:
- Separate prefill/TTFT from decode tok/s.
- For decode sweeps, an 8K prompt and 256 generated tokens is sufficient unless testing long-run thermal/stability.
- Prior decode sweep found THREAD_BATCH=16 best, but current repo env always wins.
@@ -0,0 +1,31 @@
# Hermes on Dankclaw operations
Use this when Hermes, Hermes WebUI, dashboard, Signal, or Gemma/FLM auxiliary routing is involved.
Facts:
- Host: Dankclaw 192.168.0.143.
- Live data: /home/dank/hermes-data mounted as /data.
- HERMES_DATA_DIR and HERMES_HOME must point to /data.
- Repo config.yaml.example is sanitized only; preserve live secrets and generated state.
- WebUI has listened on port 8787. Dashboard uses 9119. Chrome DevTools Protocol binds to 127.0.0.1:9222.
- Signal HTTP adapter expects signal-cli-daemon on 127.0.0.1:8080.
Health/status check:
- ssh dankclaw 'for u in hermes hermes-webui hermes-dashboard signal-cli-daemon; do printf "%-22s %s %s\n" "$u" "$(systemctl --user is-active $u.service 2>/dev/null)" "$(systemctl --user is-enabled $u.service 2>/dev/null)"; done; podman ps -a --format "{{.Names}} {{.Status}} nets=[{{.Networks}}]" | grep -Ei "hermes|signal|chrome"; ss -lntp 2>/dev/null | grep -wE "8080|8787|9119|9222" | tr -s " "'
If WebUI is up but Signal/Hermes transport errors appear:
1. Check signal-cli-daemon first:
- ssh dankclaw 'systemctl --user status signal-cli-daemon.service --no-pager; journalctl --user -u signal-cli-daemon.service -n 120 --no-pager'
2. Only if appropriate, start/enable:
- ssh dankclaw 'systemctl --user enable --now signal-cli-daemon.service'
3. Verify:
- ssh dankclaw 'systemctl --user is-active signal-cli-daemon.service; ss -lntp | grep -w 8080'
Config edit caution:
- Do not replace /home/dank/hermes-data/config.yaml wholesale with repo example.
- Live /data/config.yaml ownership may require sudo-safe edit flow.
- After live config edits, restart the appropriate Hermes unit/container and verify health.
Model routing memory:
- Main model: frank-default-large via dankclaw-large at http://192.168.0.143:7770/v1.
- Vision auxiliary: gemma4-it:e4b at http://192.168.0.143:7771/v1 via provider/custom endpoint.
@@ -0,0 +1,30 @@
# Homelab service triage
Use this when checking service state across Dankclaw/Dankserver from Dankware or another controller.
1. Start from the repo and trust current repo state over memory:
- cd /home/dank/Projects/serverAppConfigs
- git status --short
- find . -path ./.git -prune -o -name '*.container' -print | sort
2. Identify host and unit style:
- Dankclaw: 192.168.0.143
- Dankserver: 192.168.0.235
- Most services are rootless Quadlet user units: systemctl --user <action> <name>.service
- Some model services may be system units or custom scripts; inspect repo before acting.
3. Inventory a host:
- ssh HOST 'systemctl --user list-units --type=service; podman ps -a --format "{{.Names}} {{.Status}} nets=[{{.Networks}}]"'
- For a suspected unit: ssh HOST 'systemctl --user status UNIT.service --no-pager; journalctl --user -u UNIT.service -n 120 --no-pager'
4. For port/listener issues:
- ssh HOST 'ss -lntp 2>/dev/null | tr -s " "'
- Match published ports to Quadlet PublishPort and podman ps networks.
5. For deploy issues:
- Review scripts/deploy.sh behavior in current repo.
- Confirm target checkout is clean or intentionally stashed by deploy workflow.
- Do not hand-edit generated systemd output; fix Quadlet/source files.
- After Quadlet changes run daemon reload via deployer or systemctl --user daemon-reload, then inspect generated unit with systemctl --user cat.
6. Do not commit secrets. Machine-local env files are the source for Caddy/Porkbun, app passwords, API keys, OAuth creds, phone numbers, sessions, and live generated state.
@@ -0,0 +1,31 @@
# Quadlet media migration notes
Use this when migrating or repairing media services on Dankserver or standardizing remaining compose services.
General rules:
- Prefer Quadlet .container units for boot persistence.
- Use bind mounts only for durable state.
- Linux data root standard: /home/dank/Containers/<svc>, unless a service intentionally uses an in-place legacy root.
- Use UserNS=host in Quadlet when host UID/GID behavior matters; do not use compose-style UsernsMode=.
- Stop/mask old native units or disable old snaps only after verifying rollback path.
Plex/Tautulli known-good design:
- Plex image: lscr.io/linuxserver/plex:1.43.3.10896-cb3ebc72d-ls322.
- Tautulli image: lscr.io/linuxserver/tautulli:v2.18.1-ls242.
- Network: dankserver_appnet, aliases plex and tautulli.
- Ports: Plex 32400:32400, Tautulli 8181:8181.
- Plex volumes: /var/lib/plexmediaserver:/config rw and /mnt/entropy:/mnt/entropy:ro.
- Tautulli volume: /home/dank/Containers/tautulli:/config.
- Plex rootless mapping: UserNS=host, PUID=0, PGID=0, data root chowned to 1000:1000. Rollback chown is 997:984.
- Tautulli: PUID=1000, PGID=1000.
- Tautulli seed: PMS_Web_Host=plex, PMS_Web_Port=32400, PMS_Secure=0.
- Plex health gate should be generous, around 600 seconds, because large DB migrations can cold-load slowly.
Copyparty/Jellyfin caution:
- User directive after verification: stop touching Jellyfin/Copyparty unless explicitly asked.
- Jellyfin mount verified: /mnt/entropy:/data:ro. DB table is BaseItems.
- Copyparty must be read-only for broad web/LAN access. Bare A in copyparty means everyone full access. Read-only permission shape is r for anonymous and ra,dank for admin browsing, without write/move/delete perms.
Before decommission:
- Do not apt purge plexmediaserver or snap remove tautulli without explicit sign-off.
- Keep rollback steps documented before deleting old service data or packages.
@@ -1 +0,0 @@
Orchestrate llama.cpp benchmarking on Dankclaw (gfx1151) using frank-default-large. Follow strict env constraints, health-check polling patterns, and resource isolation. SSH from controller, use frank-default-small as driver, poll health endpoints with 5+ checks at ~5s intervals, and apply env file tunings before starting throughput tests.