Compare commits

..
Author SHA1 Message Date
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
dank 5a3d563a22 Merge pull request 'docs: attribution footer for machine-opened issues and PRs' (#14) from docs/session-trailer-rule into main 2026-10-18 16:46:00 -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
dank 72bcbd989e Merge pull request 'chore: re-sync agent skills to upstream mattpocock/skills' (#13) from chore/skills-upstream-sync into main 2026-10-18 16:30:02 -07:00
dank 964bd06073 Merge pull request 'feat: live-sync heartbeat for machine-written paths' (#12) from feat/11-live-sync into main 2026-10-18 16:28:57 -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 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
11 changed files with 180 additions and 92 deletions

No files matched your search

+5
View File
@@ -36,6 +36,11 @@ with YAML frontmatter, spec at `omp-docs/references/okf-spec.md`).
stay visible in history. **Never merge a PR without an explicit OK from Frank.** stay visible in history. **Never merge a PR without an explicit OK from Frank.**
- **The moment a PR is open, open it in Frank's browser** — `xdg-open <PR-URL>` - **The moment a PR is open, open it in Frank's browser** — `xdg-open <PR-URL>`
lands a tab in his Firefox; never make him hunt for it in Gitea. lands a tab in his Firefox; never make him hunt for it in Gitea.
- **Attribution footer (issues and PRs)** — every issue or PR body you open ends
with a `---` line, then `cwd: <working directory> · session: <omp session id>`
(session id from `/status`; `cwd` is that session's own working directory —
not the build checkout, when they differ). Machine-made artifacts stay attributable to the
box and session that spawned them.
- Releases: tag `vX.Y.Z` straight on `main` after verifying; tags are the deploy - Releases: tag `vX.Y.Z` straight on `main` after verifying; tags are the deploy
markers every other machine pulls to. Hotfixes are ordinary branches off the markers every other machine pulls to. Hotfixes are ordinary branches off the
tag you are fixing forward from. tag you are fixing forward from.
+67 -18
View File
@@ -1,5 +1,6 @@
providers: providers:
openrouterVariant: floor openrouterVariant: online
fetch: auto
modelRoles: modelRoles:
slow: llamacpp (dankclaw)/frank-dragoon:medium slow: llamacpp (dankclaw)/frank-dragoon:medium
vision: llamacpp (dankclaw-3090)/frank-zealot:xhigh vision: llamacpp (dankclaw-3090)/frank-zealot:xhigh
@@ -19,8 +20,9 @@ modelRoles:
symbolPreset: nerd symbolPreset: nerd
composer: composer:
shape: band shape: band
tokenRate: true
theme: theme:
dark: dark-terminal dark: dark-gruvbox
light: light light: light
setupVersion: 2 setupVersion: 2
browser: browser:
@@ -57,8 +59,7 @@ retry:
- openai-codex/gpt-5.5 - openai-codex/gpt-5.5
- xai-oauth/grok-4.5 - xai-oauth/grok-4.5
- web/ollama - web/ollama
speech: speech: []
[]
llamacpp (dankserver)/frank-archon: llamacpp (dankserver)/frank-archon:
- llamacpp (dankclaw)/frank-dragoon - llamacpp (dankclaw)/frank-dragoon
maxRetries: 10 maxRetries: 10
@@ -67,7 +68,7 @@ searxng:
exa: exa:
enabled: false enabled: false
memory: memory:
backend: local backend: sharpshooter
autolearn: autolearn:
enabled: true enabled: true
autoContinue: true autoContinue: true
@@ -75,12 +76,12 @@ compaction:
remoteEndpoint: http://192.168.0.143:7771/v1/chat/completions remoteEndpoint: http://192.168.0.143:7771/v1/chat/completions
methodOrder: methodOrder:
- shake - shake
- snapcompact
- soft - soft
- handoff - handoff
- snapcompact
- remote - remote
idleThresholdTokens: 100000 idleThresholdTokens: 100000
thresholdPercent: 85 thresholdPercent: 95
idleEnabled: true idleEnabled: true
thresholdTokens: -1 thresholdTokens: -1
dropUseless: false dropUseless: false
@@ -90,13 +91,12 @@ compaction:
enabled: true enabled: true
experimentalContextManagement: false experimentalContextManagement: false
interruptMode: immediate interruptMode: immediate
defaultThinkingLevel: medium defaultThinkingLevel: xhigh
hideThinkingBlock: false hideThinkingBlock: false
proseOnlyThinking: true proseOnlyThinking: false
terminal: terminal:
showProgress: true showProgress: true
disabledExtensions: disabledExtensions: []
[]
statusLine: statusLine:
separator: powerline separator: powerline
preset: custom preset: custom
@@ -135,24 +135,31 @@ tui:
codexResetFireworks: false codexResetFireworks: false
hyperlinks: auto hyperlinks: auto
tight: true tight: true
resizeScrollback: rebuild
titleSpinner: pulse
display: display:
shimmer: kitt shimmer: kitt
smoothStreaming: true smoothStreaming: true
showTokenUsage: true showTokenUsage: true
pinnedAgents: collapsed
subagentLivePreview: true
task: task:
showResolvedModelBadge: true showResolvedModelBadge: true
maxConcurrency: 3 maxConcurrency: 3
agentModelOverrides: agentModelOverrides:
designer: llamacpp (dankclaw-3090)/frank-zealot designer: llamacpp (dankclaw-3090)/frank-zealot
librarian: llamacpp (dankclaw-3090)/frank-zealot librarian: llamacpp (dankclaw-3090)/frank-zealot
reviewer: llamacpp (dankclaw-3090)/frank-zealot reviewer: llamacpp (dankserver)/frank-archon
scout: llamacpp (dankclaw-3090)/frank-zealot scout: llamacpp (dankserver)/frank-archon
security-reviewer: llamacpp (dankclaw-3090)/frank-zealot security-reviewer: llamacpp (dankclaw)/frank-dragoon
sonic: llamacpp (dankclaw-3090)/frank-zealot sonic: llamacpp (dankclaw-3090)/frank-zealot
task: llamacpp (dankclaw-3090)/frank-zealot task: llamacpp (dankserver)/frank-archon
eager: default
enableLsp: true
snapcompact: snapcompact:
systemPrompt: none systemPrompt: none
toolResults: false toolResults: false
shape: auto
extendedContext: false extendedContext: false
ttsr: ttsr:
contextMode: discard contextMode: discard
@@ -162,12 +169,12 @@ checkpoint:
enabled: true enabled: true
readLineNumbers: true readLineNumbers: true
startup: startup:
showSplash: false showSplash: true
changelogMode: summary changelogMode: summary
update: update:
channel: stable channel: stable
features: features:
unexpectedStopDetection: smart unexpectedStopDetection: mechanical
stt: stt:
submitTrigger: say-submit submitTrigger: say-submit
enabled: true enabled: true
@@ -186,6 +193,7 @@ images:
- litterbox - litterbox
edit: edit:
mode: hashline mode: hashline
fuzzyThreshold: 0.9
dev: dev:
autoqaConsent: granted autoqaConsent: granted
astGrep: astGrep:
@@ -195,7 +203,7 @@ vault:
tts: tts:
localVoice: bm_george localVoice: bm_george
speech: speech:
enabled: false enabled: true
mode: yield mode: yield
enhanced: true enhanced: true
voice: am_fenrir voice: am_fenrir
@@ -204,6 +212,9 @@ secrets:
read: read:
renderMarkdown: true renderMarkdown: true
toolResultPreview: true toolResultPreview: true
defaultLimit: 1000
summarize:
prose: false
lsp: lsp:
formatOnWrite: true formatOnWrite: true
diagnosticsOnEdit: true diagnosticsOnEdit: true
@@ -214,3 +225,41 @@ live:
voice: vale voice: vale
contextPromotion: contextPromotion:
enabled: true enabled: true
title:
icons: emoji
generator: tiny
followUpMode: one-at-a-time
tools:
approvalMode: yolo
format: auto
marketplace:
autoUpdate: notify
bash:
allowCompoundCommands: true
gitGuard: true
bashInterceptor:
enabled: false
shellMinimizer:
sourceOutlineLevel: default
generate_image:
enabled: false
computer:
enabled: true
display: active
ratchet:
enabled: true
github:
enabled: true
security:
enabled: true
todo:
reminders: true
mcp:
notifications: false
plan:
defaultOnStartup: false
isolation:
backend: auto
worktree:
onStart: create
onExit: keep
+86 -62
View File
@@ -16,9 +16,9 @@ providers:
auth: none auth: none
models: models:
- id: frank-archon - id: frank-archon
# Model id renamed from frank-primary on 2026-10-08 (official # Model id renamed from frank-archon on 2026-10-08 (official
# unit-name scheme; the systemd service, scripts and runbooks keep # unit-name scheme; the systemd service, scripts and runbooks keep
# the frank-primary name — service names are unchanged). # the frank-archon name — service names are unchanged).
# Server-side compaction routes to compaction.remoteEndpoint in # Server-side compaction routes to compaction.remoteEndpoint in
# config.yml (192.168.0.143:7771 — frank-zealot's 3090); the # config.yml (192.168.0.143:7771 — frank-zealot's 3090); the
# compactionModel candidate keeps the wire model id valid there. # compactionModel candidate keeps the wire model id valid there.
@@ -29,12 +29,12 @@ providers:
# radiance (StillDeadcode, Apache-2.0) from the digest-pinned # radiance (StillDeadcode, Apache-2.0) from the digest-pinned
# stilldeadcode/radiance image (index digest sha256:4c3f4845..., 287 # stilldeadcode/radiance image (index digest sha256:4c3f4845..., 287
# MiB, kernels prebuilt for gfx1201), plain `podman run` through # MiB, kernels prebuilt for gfx1201), plain `podman run` through
# scripts/serve-frank-primary.sh, root unit (User=dank, dank's # scripts/serve-frank-archon.sh, root unit (User=dank, dank's
# rootless podman storage). Serving the OFFICIAL # rootless podman storage). Serving the OFFICIAL
# Qwen/Qwen3.8-Flash-Next-FP8 at NATIVE modelopt block-FP8 # Qwen/Qwen3.8-Flash-Next-FP8 at NATIVE modelopt block-FP8
# precision — a rad-convert no-recipe pure copy into # precision — a rad-convert no-recipe pure copy into
# qwen4exp-fp8-native.rad (172.76 GiB measured by plan-only), built by # qwen4exp-fp8-native.rad (172.76 GiB measured by plan-only), built by
# scripts/build-frank-primary-rad.sh against a staging dir whose # scripts/build-frank-archon-rad.sh against a staging dir whose
# config.json drops quantization_config so the shipped qwen4exp # config.json drops quantization_config so the shipped qwen4exp
# plugin's (qwen4exp, "") selection key matches; per-weight # plugin's (qwen4exp, "") selection key matches; per-weight
# encodings are untouched. Experts stream from a 40 GiB/rank # encodings are untouched. Experts stream from a 40 GiB/rank
@@ -44,7 +44,7 @@ providers:
# froggeric's fixed qwen3.8 v22.5 # froggeric's fixed qwen3.8 v22.5
# (scripts/qwen38-froggeric-v22.5.jinja) via # (scripts/qwen38-froggeric-v22.5.jinja) via
# --override-chat-template. Rollback: git tag # --override-chat-template. Rollback: git tag
# frank-primary-freetoken-pr587-20261005 (FreeToken, one card). # frank-archon-freetoken-pr587-20261005 (FreeToken, one card).
contextWindow: 200000 contextWindow: 200000
# maxTokens must survive the harness compaction gap AND the chars/4 # maxTokens must survive the harness compaction gap AND the chars/4
# token-estimate under-run on code-heavy prompts. The clamp is # token-estimate under-run on code-heavy prompts. The clamp is
@@ -96,8 +96,8 @@ providers:
auth: none auth: none
models: models:
- id: frank-dragoon - id: frank-dragoon
# Model id renamed from frank-large on 2026-10-08 (official # Model id renamed from frank-dragoon on 2026-10-08 (official
# unit-name scheme; the service/unit/scripts keep the frank-large # unit-name scheme; the service/unit/scripts keep the frank-dragoon
# name — service names are unchanged). # name — service names are unchanged).
name: "frank-dragoon (dankclaw-gpu)" name: "frank-dragoon (dankclaw-gpu)"
# Server-side compaction runs on the compaction.remoteEndpoint in # Server-side compaction runs on the compaction.remoteEndpoint in
@@ -107,37 +107,45 @@ providers:
compactionModel: llamacpp (dankclaw-3090)/frank-zealot compactionModel: llamacpp (dankclaw-3090)/frank-zealot
# halogen-flash-server 0.16.2 (ghcr.io/peonist-ai/ # halogen-flash-server 0.16.2 (ghcr.io/peonist-ai/
# halogen-flash-server@sha256:0c61bf84, digest-pinned) serving the # halogen-flash-server@sha256:0c61bf84, digest-pinned) serving the
# Quat3rnion ABLITERATED Swift1.5 finetune of peonist's # Quat3rnion NATIVE v2 ABLITERATED conversion of orcarouter's pinned
# Qwen3.8-Flash-Next v2 checkpoint (qwen38-flash-next-v2-swift15- # BF16 Qwen3.8-Flash-Next (qwen38-flash-next-v2-abliterated.hgn,
# abliterated.hgn, ~62 GiB resident, + REQUIRED n-gram table + # ~62 GiB resident, + REQUIRED n-gram table + vision tower, both
# vision tower) on the Strix Halo iGPU: TWO slots at # hardlinked from the swift15 dir) on the Strix Halo iGPU: TWO slots
# HALOGEN_CTX=262144 each with the MTP head ALWAYS ON # over ONE 401,408-position KV pool (= 2 x ctx, raised 2026-10-18) at
# HALOGEN_CTX=200704 (the ceiling lowered from the card's 262,144 on
# 2026-10-17; ~10.8 GiB reserved where 200,704 cost 5.5, 262,144 cost
# 7.2 and 524,288 measured 14.6), with the MTP head ALWAYS ON
# (HALOGEN_SPEC_ADAPT=0 — the default adaptive policy halves # (HALOGEN_SPEC_ADAPT=0 — the default adaptive policy halves
# decode). Card: 53-57 t/s greedy, ~1,640 t/s prefill at 34k, ~72% # decode). Measured 2026-10-17: 50 t/s greedy decode, 1,604 t/s
# fewer thinking tokens than the censored 27B. ABLITERATED base # cold prefill at 59k, NIAH 18/18. ABLITERATED base (no refusals:
# (refusals should not return) and VISION ON (OpenAI image_url # 0/5 on the hostile census) and VISION ON (OpenAI image_url
# parts; >=256 px images or it answers "video"). Runbook: # parts; >=256 px images or it answers "video"). Runbook:
# serverAppConfigs-docs/LLM/frank-large-flash-server-v2-swift15.md. # serverAppConfigs-docs/LLM/frank-dragoon-flash-server-v2-native.md.
# Per-SLOT window the harness may fill — deliberately BELOW the # Window the harness may fill — deliberately BELOW the engine
# engine ceiling (HALOGEN_CTX=262144): the clamp below leaves a # ceiling (HALOGEN_CTX=200704, lowered from 262,144 on 2026-10-17):
# 45k gap that absorbs the estimate error. # the clamp below leaves the 45k gap that absorbs the estimate error.
contextWindow: 217088 # Both slots SHARE one 401,408-position KV pool — exactly two full
# windows — so TWO maximum-length conversations can be resident at the
# same time (at the old pool == ctx 200,704 only two of <=100k could).
# The per-request ceiling is unchanged, so this window is unchanged.
contextWindow: 155648
# The clamp is max_tokens = min(maxTokens, contextWindow − est − # The clamp is max_tokens = min(maxTokens, contextWindow − est −
# 4096); the chars/4 est UNDER-counts the rendered prompt by ~3 % # 4096); the chars/4 est UNDER-counts the rendered prompt by ~3 %
# on code/agent traffic (measured 2026-10-07: est 152,938 -> # on code/agent traffic (measured 2026-10-07: est 152,938 ->
# server 157,388). Worst-case request = ctx − 4096 + 3 % est # server 157,388). Worst-case request = window − 4096 + 3 % est
# error ≈ 219k, inside the 262,144 engine ceiling with ~43k # error ≈ 156.2k, inside the 200,704 engine ceiling with ~44k
# margin (robust to a 10 % under-count). Compaction fires at 85 % # margin (robust to a ~25 % under-count). Compaction fires at 85 %
# of the window = 184,524 est ≈ 190k measured (Frank's 180k # of the window = 132,300 est ≈ 136k measured — the 180k target of
# target) and rides on frank-zealot: input ≈ threshold − # the 262,144 era is unreachable now (the window itself is 155,648)
# keepRecent(20k) ≈ 170k, inside its 200,704 slot. # — and rides on frank-zealot: input ≈ threshold − keepRecent(20k)
# HALOGEN_MAX_TOKENS_CAP in frank-large.env must stay >= this. # ≈ 112k, inside its 200,704 slot.
# HALOGEN_MAX_TOKENS_CAP in frank-dragoon.env must stay >= this.
maxTokens: 45056 maxTokens: 45056
reasoning: true reasoning: true
# VISION ON as of 2026-10-06: the v2 vision tower loads beside the # VISION ON as of 2026-10-06: the v2 vision tower loads beside the
# checkpoint (HALOGEN_VISION_TOWER; red-PNG probe verified on the # checkpoint (HALOGEN_VISION_TOWER; red-PNG probe verified on the
# card). image_url content parts only — the legacy top-level # card). image_url content parts only — the legacy top-level
# images field is the frank-secondary trap, do not repeat it here. # images field is the frank-zealot trap, do not repeat it here.
input: [text, image] input: [text, image]
compat: compat:
# flash-server emits thinking as `reasoning_content` — same # flash-server emits thinking as `reasoning_content` — same
@@ -155,7 +163,7 @@ providers:
max: xhigh max: xhigh
# The card's thinking recipe, on the wire. The flash-server # The card's thinking recipe, on the wire. The flash-server
# engine HAS a server-side sampler (HALOGEN_TEMPERATURE/TOP_P/ # engine HAS a server-side sampler (HALOGEN_TEMPERATURE/TOP_P/
# TOP_K = 1.0 / 0.95 / 20 in frank-large.env) — these match it, # TOP_K = 1.0 / 0.95 / 20 in frank-dragoon.env) — these match it,
# so per-request values are consistent, not load-bearing. # so per-request values are consistent, not load-bearing.
extraBody: extraBody:
temperature: 1.0 temperature: 1.0
@@ -167,35 +175,47 @@ providers:
auth: none auth: none
models: models:
- id: frank-zealot - id: frank-zealot
# Model id renamed from frank-secondary on 2026-10-08 (official # Model id renamed from frank-zealot on 2026-10-08 (official
# unit-name scheme; the service/unit/scripts keep the # unit-name scheme; the service/unit/scripts keep the
# frank-secondary name — service names are unchanged). # frank-zealot name — service names are unchanged).
name: "frank-zealot (dankclaw-3090)" name: "frank-zealot (dankclaw-3090)"
# Server-side compaction routes to compaction.remoteEndpoint in # Server-side compaction routes to compaction.remoteEndpoint in
# config.yml (192.168.0.143:7771 — this endpoint); the # config.yml (192.168.0.143:7771 — this endpoint); the
# compactionModel candidate keeps the wire model id valid there. # compactionModel candidate keeps the wire model id valid there.
compactionModel: llamacpp (dankclaw-3090)/frank-zealot compactionModel: llamacpp (dankclaw-3090)/frank-zealot
# Dankclaw's RTX 3090: llama.cpp (master, CUDA sm_86 build) serving # Dankclaw's RTX 3090: llama.cpp PrismML fork build (vendor 10777,
# HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive at Q6_K # commit e3de71522 — the ONLY loader for this payload's custom tensor
# (7,359,259,008 B) — qwen35 dense hybrid (32 layers: 8 full-attention # type 142 + prism.hadamard.* metadata, and the minimum build that
# + 24 Gated DeltaNet, 4 KV heads x 256 dim, native 262,144), TWO # pairs MTP with a quantized V cache) serving
# conversations (--ctx-size 401408 / --parallel 2) at Frank's 200k cap # prism-ml/Ternary-Bonsai-2-9B-gguf at PQ2_0 (2,675,410,720 B) WITH the
# each. Exact KV: f16 K + f16 V. Vision via the publisher's OWN # MTP head in the file — qwen35 hybrid, 32 layers (8 full-attention +
# BF16 mmproj (921,704,448 B) — the model is natively multimodal. # 24 Gated DeltaNet), 4 KV heads x 256 dim, native 262,144 — in THREE
# **MTP IS OFF** because the file carries no nextn/mtp tensors — # conversations (--ctx-size 786432 / --parallel 3), each slot at the
# SPEC_TYPE=none strips both spec flags. Priced from the MiMo Q6_K # model's TRAINED window.
# boots at this geometry (21,276/2,849 at ubatch 1024; 21,846/2,279 at # KV is q8_0 K + q8_0 V (17 KiB/token over the 8 full layers =
# 2048). 2026-10-07 (late) swap from Gemma4-26B-A4B Q4_K_M (1x200,704). # 13,056 MiB pool, ledger-exact); f16 KV would bill 26,112 MiB and
# Runbook: # cannot boot this card. Boot ledger 17,876 used / 6,249 free. Vision
# serverAppConfigs-docs/LLM/frank-secondary-llama-qwen35-9b-q6k-2x200704.md. # through the publisher's Q8_0 mmproj (624,229,664 B — Q8_0 is the
# contextWindow is the PER-SLOT window (Frank's cap): a longer # publisher's requirement for concurrent image requests), whose
# prompt needs compaction. # worst-case lands outside the engine's fit projection. **MTP OFF —
contextWindow: 200704 # measured, not assumed**: the draft context bills its own f16 KV over
# the WHOLE pool (3,072 MiB) and at ubatch 2048 that squeeze halves
# decode (167.2 → 109.2 t/s); SPEC_TYPE=draft-mtp + UBATCH_SIZE=1024 is
# the 213.5 t/s arm if the card ever has room. 2026-10-18 swap from
# Ternary-Bonsai-2-27B PQ2_0 at 2 × 200,704. Measured: 167.2 t/s
# single-stream greedy decode, 280.2 t/s across three concurrent
# streams, 2,877 t/s prefill at 106,418. Base-alignment: censored base
# lineage; unlike the 27B there is NO CRACK re-export matching this
# file. Runbook:
# serverAppConfigs-docs/LLM/frank-zealot-llama-prism-bonsai9-mtp.md.
# contextWindow is the PER-SLOT window (= the native 262,144): a longer
# prompt needs compaction — llama.cpp answers a 400, never truncates.
contextWindow: 262144
# Prompt + budget must fit inside the slot window; thinking counts # Prompt + budget must fit inside the slot window; thinking counts
# against the budget. Compaction fires at 85 % of the window = # against the budget. Compaction fires at 85 % of the window =
# 170,598 est; worst-case prompt + budget ≈ 170,598 × 1.03 + # 222,822 est; worst-case prompt + budget ≈ 222,822 × 1.03 +
# 16,384 ≈ 192,100 ≤ 200,704 — a longer prompt is a 400 naming # 16,384 ≈ 245,891 ≤ 262,144. This endpoint is the fleet's
# the limit, never a truncation. # compaction hub: the widest window in the fleet.
maxTokens: 16384 maxTokens: 16384
reasoning: true reasoning: true
input: [text, image] input: [text, image]
@@ -204,29 +224,33 @@ providers:
# `reasoning_content` — the same field the MiMo/Ornith eras used; # `reasoning_content` — the same field the MiMo/Ornith eras used;
# harness reads unchanged. # harness reads unchanged.
reasoningContentField: "reasoning_content" reasoningContentField: "reasoning_content"
# The Qwen3.5 chat template has NO reasoning_effort variable (unlike # Bonsai-2's template DOES read reasoning_effort (the Qwen3.5-9B
# the Qwen3.8-template endpoints, where an unmapped level is a hard # template did not — the map used to be inert here): it accepts ONLY
# Jinja raise). llama.cpp passes chat_template_kwargs through to # xhigh (default), medium, low and calls raise_exception on anything
# Jinja, and Jinja ignores variables a template never reads — so the # else, so an unmapped harness level is a hard HTTP 500 on the role's
# map is inert here, kept so role-level overrides resolve identically # first request, naming Jinja and not the model. The fold below is
# across the fleet. # therefore load-bearing, identical to the frank-archon/dragoon law.
# llama.cpp passes chat_template_kwargs through to Jinja.
reasoningEffortMap: reasoningEffortMap:
minimal: low minimal: low
low: low low: low
medium: medium medium: medium
high: xhigh high: xhigh
max: xhigh max: xhigh
# The Qwen3.5 publisher recipe (model card, thinking mode): # The payload's OWN sampling metadata (general.sampling.* in the
# temperature 0.6 / top_p 0.95 / top_k 20 / min_p 0. Non-thinking # GGUF): temperature 1.0 / top_p 0.95 / top_k 20 — thinking-mode
# mode is 0.7/0.8/20/0 — the harness runs thinking mode. # recipe, the same trio the other Qwen3.8-family endpoints carry.
# (The old 0.6 was the Qwen3.5-9B publisher's card, not this file.)
# extraBody is merged last and wins over the harness default. # extraBody is merged last and wins over the harness default.
extraBody: extraBody:
temperature: 0.6 temperature: 1.0
top_p: 0.95 top_p: 0.95
top_k: 20 top_k: 20
min_p: 0.0 min_p: 0.0
presence_penalty: 0.0 presence_penalty: 0.0
chat_template_kwargs: chat_template_kwargs:
enable_thinking: true enable_thinking: true
# (no preserve_thinking: that kwarg belongs to the Qwen3.8 # The template DOES read preserve_thinking: when false it drops
# templates; nothing in this template reads it) # prior assistants' <think> blocks from history. Keep them —
# multi-turn tool traffic on this endpoint is the majority.
preserve_thinking: true
+5 -3
View File
@@ -10,7 +10,7 @@ Two-axis review of the diff between `HEAD` and a fixed point the user supplies:
Both axes run as **parallel sub-agents** so they don't pollute each other's context, then this skill aggregates their findings. Both axes run as **parallel sub-agents** so they don't pollute each other's context, then this skill aggregates their findings.
The issue tracker should have been provided to you. If `docs/agents/issue-tracker.md` is missing, tell the user to run `/setup-matt-pocock-skills`. The issue tracker should have been provided to you. If not, tell the user to run `/setup-matt-pocock-skills`.
## Process ## Process
@@ -26,14 +26,14 @@ Before going further, confirm the fixed point resolves (`git rev-parse <fixed-po
Look for the originating spec, in this order: Look for the originating spec, in this order:
1. Issue references in the commit messages (`#123`, `Closes #45`, GitLab `!67`, etc.), fetched via the workflow in `docs/agents/issue-tracker.md`. 1. Issue references in the commit messages (`#123`, `Closes #45`, GitLab `!67`, etc.), fetched via the workflow in the tracker doc.
2. A path the user passed as an argument. 2. A path the user passed as an argument.
3. A spec file under `docs/`, `specs/`, or `.scratch/` matching the branch name or feature. 3. A spec file under `docs/`, `specs/`, or `.scratch/` matching the branch name or feature.
4. If nothing is found, ask the user where the spec is. If they say there isn't one, the **Spec** sub-agent will skip and report "no spec available". 4. If nothing is found, ask the user where the spec is. If they say there isn't one, the **Spec** sub-agent will skip and report "no spec available".
### 3. Identify the standards sources ### 3. Identify the standards sources
Anything in the repo that documents how code should be written, such as `CODING_STANDARDS.md` or `CONTRIBUTING.md`. Search the repo for every file that documents how code should be written. When `CODING_STANDARDS.md` or `CONTRIBUTING.md` exists, it must be on the list.
On top of whatever the repo documents, the Standards axis always carries the **smell baseline** below: a fixed set of Fowler code smells (_Refactoring_, ch.3) that applies even when a repo documents nothing. Two rules bind it: On top of whatever the repo documents, the Standards axis always carries the **smell baseline** below: a fixed set of Fowler code smells (_Refactoring_, ch.3) that applies even when a repo documents nothing. Two rules bind it:
@@ -57,6 +57,8 @@ Each smell reads *what it is* → *how to fix*; match it against the diff:
### 4. Spawn both sub-agents in parallel ### 4. Spawn both sub-agents in parallel
Issue both sub-agent calls together, in the foreground, and aggregate the reports they return.
**Standards sub-agent prompt** should include: **Standards sub-agent prompt** should include:
- The full diff command and commit list. - The full diff command and commit list.
+2 -2
View File
@@ -7,7 +7,7 @@ description: Diagnosis loop for hard bugs and performance regressions. Use when
A discipline for hard bugs. Skip phases only when explicitly justified. A discipline for hard bugs. Skip phases only when explicitly justified.
When exploring the codebase, read `CONTEXT.md` (if it exists) to get a clear mental model of the relevant modules, and check ADRs in the area you're touching. When exploring the codebase, read `GLOSSARY.md` (if it exists) to get a clear mental model of the relevant modules, and check ADRs in the area you're touching.
## Redact ## Redact
@@ -122,7 +122,7 @@ A correct seam is one where the test exercises the **real bug pattern** as it oc
If a correct seam exists: If a correct seam exists:
1. Turn the minimised repro into a failing test at that seam. 1. Turn the minimised repro into a failing test at that seam.
2. Watch it fail. 2. Watch it fail. If you forced the red by mutating code or a fixture, `diff` against a pristine copy to prove the mutation landed before you trust it.
3. Apply the fix. 3. Apply the fix.
4. Watch it pass. 4. Watch it pass.
5. Re-run the Phase 1 feedback loop against the original (un-minimised) scenario. 5. Re-run the Phase 1 feedback loop against the original (un-minimised) scenario.
+2
View File
@@ -21,6 +21,8 @@ Format a round like so:
➡️ <your recommended answer> ➡️ <your recommended answer>
``` ```
Word each question so "yes" accepts your recommended answer.
Each round the user answers reshapes the tree: settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a _later_ round, not this one. Each round the user answers reshapes the tree: settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a _later_ round, not this one.
Finding _facts_ is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now. The _decisions_ are the user's: put each to them and wait. Finding _facts_ is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now. The _decisions_ are the user's: put each to them and wait.
+1 -1
View File
@@ -5,7 +5,7 @@ argument-hint: "What will the next session be used for?"
disable-model-invocation: true disable-model-invocation: true
--- ---
Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save to the temporary directory of the user's OS - not the current workspace. Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save to the temporary directory of the user's OS (`$TMPDIR`, else `/tmp`; `%TEMP%` on Windows) - not the current workspace.
Include a "suggested skills" section in the document, naming which skills the next agent should call the Skill tool for. Include a "suggested skills" section in the document, naming which skills the next agent should call the Skill tool for.
+4 -2
View File
@@ -6,10 +6,12 @@ disable-model-invocation: true
Implement the work described by the user in the spec or tickets. Implement the work described by the user in the spec or tickets.
Use /tdd where possible, at pre-agreed seams. If the user passes a ticket reference, fetch it from the issue tracker and state its title before starting. If the reference is ambiguous, ask.
Call the Skill tool with "tdd" where possible, at pre-agreed seams.
Run typechecking regularly, single test files regularly, and the full test suite once at the end. Run typechecking regularly, single test files regularly, and the full test suite once at the end.
Once done, use /code-review to review the work. Once done, call the Skill tool with "code-review" to review the work.
Commit your work to the current branch. Commit your work to the current branch.
+2 -2
View File
@@ -7,7 +7,7 @@ description: Test-driven development. Use when the user wants to build features
TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop. Every section applies on every cycle: consult them before and during the loop, not after. TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop. Every section applies on every cycle: consult them before and during the loop, not after.
When exploring the codebase, read `CONTEXT.md` (if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching. When exploring the codebase, read `GLOSSARY.md` (if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching.
## What a good test is ## What a good test is
@@ -21,7 +21,7 @@ A **seam** is the public boundary you test at: the interface where you observe b
**Test only at pre-agreed seams.** Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam. You can't test everything, so agreeing the seams up front is how testing effort lands on the critical paths and complex logic instead of every edge case. **Test only at pre-agreed seams.** Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam. You can't test everything, so agreeing the seams up front is how testing effort lands on the critical paths and complex logic instead of every edge case.
Ask: "What's the public interface, and which seams should we test?" Ask: "What's the public interface, and which seams should we test?" Give each proposed seam a one-line note on what it catches and what it misses.
When the shape of that interface is itself in question (how deep the module is, where the seam belongs, what the interface should expose), call the Skill tool with "codebase-design" for the vocabulary. It is the shared source of the module, interface, depth, seam, adapter, leverage and locality terms, and it is a reference to consult, not a session to run. When the shape of that interface is itself in question (how deep the module is, where the seam belongs, what the interface should expose), call the Skill tool with "codebase-design" for the vocabulary. It is the shared source of the module, interface, depth, seam, adapter, leverage and locality terms, and it is a reference to consult, not a session to run.
+2 -2
View File
@@ -9,7 +9,7 @@ The user has asked you to teach them something. This is a stateful request - the
## Teaching Workspace ## Teaching Workspace
Treat the current directory as a teaching workspace. The state of their learning is captured in this directory in several files: Treat the current directory as a teaching workspace. Workspace paths (`./lessons/` and the rest) resolve from the directory `/teach` was run in; only the `*-FORMAT.md` links resolve from this skill's folder. The state of their learning is captured in this directory in several files:
- `MISSION.md`: A document capturing the _reason_ the user is interested in the topic. This should be used to ground all teaching. Use the format in [MISSION-FORMAT.md](./MISSION-FORMAT.md). - `MISSION.md`: A document capturing the _reason_ the user is interested in the topic. This should be used to ground all teaching. Use the format in [MISSION-FORMAT.md](./MISSION-FORMAT.md).
- `./reference/*.html`: A directory of reference materials. These are the compressed learnings from the lessons - cheat sheets, reference algorithms, syntax, yoga poses, glossaries. They are the raw units of learning. They should be beautiful documents which print out well, and are designed for quick reference. - `./reference/*.html`: A directory of reference materials. These are the compressed learnings from the lessons - cheat sheets, reference algorithms, syntax, yoga poses, glossaries. They are the raw units of learning. They should be beautiful documents which print out well, and are designed for quick reference.
@@ -107,7 +107,7 @@ For skill acquisition, difficulty is the tool. Effortful retrieval is what build
Each of these should be based on a **feedback loop**, where the user receives feedback on their performance. This feedback loop should be as tight as possible, giving feedback immediately - and ideally automatically. Each of these should be based on a **feedback loop**, where the user receives feedback on their performance. This feedback loop should be as tight as possible, giving feedback immediately - and ideally automatically.
For quizzes, each answer should be exactly the same number of words (and characters, if possible). Don't give the user any clues about the answer through formatting. For quizzes, each answer should be exactly the same number of words (and characters, if possible). Vary which position holds the correct answer across questions. Don't give the user any clues about the answer through formatting or order.
## Acquiring Wisdom ## Acquiring Wisdom
+4
View File
@@ -11,6 +11,10 @@ timestamp: 2026-08-28
# Bundle Change Log # Bundle Change Log
## 2026-10-18 — Fleet law: issue/PR attribution footers
Every agent-opened issue and PR body now ends with a `cwd:` + `session:` footer (session id from `/status`), in AGENTS.md of both `dank/command-center` and `dank/serverAppConfigs` (mirrored PRs). Born from the live-sync review: once the machine starts filing and committing on its own, its artifacts must trace back to the box and session that produced them.
## 2026-10-18 — live-sync heartbeat for machine-written paths (Refs #11) ## 2026-10-18 — live-sync heartbeat for machine-written paths (Refs #11)
Root-caused the month of silent divergence in the live checkout (~61 auto-learned skills on one disk only, a stranded `unexpectedStopDetection` fix, merge-refusals from dirty trees): the checkout IS the deployment, symlinks make machine writes dirty tracked files by design, and no commit law covered that churn. Added `scripts/live-sync.sh` + systemd user timer — allowlist tiers (memories, managed-skills, live config, dotfiles) auto-commit with hooks armed, merge `origin/main`, push, and reap stale `wt/*` worktrees; everything outside the allowlist is never staged, conflicts abort-and-alert. Black-box suite `tests/live-sync.bats` (9 tests). Tier law in AGENTS.md § Live-sync tiers; reference page `tools/live-sync.md` registered in the tools index. Root-caused the month of silent divergence in the live checkout (~61 auto-learned skills on one disk only, a stranded `unexpectedStopDetection` fix, merge-refusals from dirty trees): the checkout IS the deployment, symlinks make machine writes dirty tracked files by design, and no commit law covered that churn. Added `scripts/live-sync.sh` + systemd user timer — allowlist tiers (memories, managed-skills, live config, dotfiles) auto-commit with hooks armed, merge `origin/main`, push, and reap stale `wt/*` worktrees; everything outside the allowlist is never staged, conflicts abort-and-alert. Black-box suite `tests/live-sync.bats` (9 tests). Tier law in AGENTS.md § Live-sync tiers; reference page `tools/live-sync.md` registered in the tools index.