Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a550db6027 | ||
|
|
3713339ffc | ||
|
|
5a3d563a22 | ||
|
|
942787f0f2 | ||
|
|
8fb357b483 | ||
|
|
72bcbd989e | ||
|
|
964bd06073 | ||
|
|
0edae3323d | ||
|
|
8702f3058d |
No files matched your search
@@ -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.**
|
||||
- **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.
|
||||
- **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
|
||||
markers every other machine pulls to. Hotfixes are ordinary branches off the
|
||||
tag you are fixing forward from.
|
||||
|
||||
+68
-19
@@ -1,5 +1,6 @@
|
||||
providers:
|
||||
openrouterVariant: floor
|
||||
openrouterVariant: online
|
||||
fetch: auto
|
||||
modelRoles:
|
||||
slow: llamacpp (dankclaw)/frank-dragoon:medium
|
||||
vision: llamacpp (dankclaw-3090)/frank-zealot:xhigh
|
||||
@@ -19,8 +20,9 @@ modelRoles:
|
||||
symbolPreset: nerd
|
||||
composer:
|
||||
shape: band
|
||||
tokenRate: true
|
||||
theme:
|
||||
dark: dark-terminal
|
||||
dark: dark-gruvbox
|
||||
light: light
|
||||
setupVersion: 2
|
||||
browser:
|
||||
@@ -57,8 +59,7 @@ retry:
|
||||
- openai-codex/gpt-5.5
|
||||
- xai-oauth/grok-4.5
|
||||
- web/ollama
|
||||
speech:
|
||||
[]
|
||||
speech: []
|
||||
llamacpp (dankserver)/frank-archon:
|
||||
- llamacpp (dankclaw)/frank-dragoon
|
||||
maxRetries: 10
|
||||
@@ -67,7 +68,7 @@ searxng:
|
||||
exa:
|
||||
enabled: false
|
||||
memory:
|
||||
backend: local
|
||||
backend: sharpshooter
|
||||
autolearn:
|
||||
enabled: true
|
||||
autoContinue: true
|
||||
@@ -75,12 +76,12 @@ compaction:
|
||||
remoteEndpoint: http://192.168.0.143:7771/v1/chat/completions
|
||||
methodOrder:
|
||||
- shake
|
||||
- snapcompact
|
||||
- soft
|
||||
- handoff
|
||||
- snapcompact
|
||||
- remote
|
||||
idleThresholdTokens: 100000
|
||||
thresholdPercent: 85
|
||||
thresholdPercent: 95
|
||||
idleEnabled: true
|
||||
thresholdTokens: -1
|
||||
dropUseless: false
|
||||
@@ -90,13 +91,12 @@ compaction:
|
||||
enabled: true
|
||||
experimentalContextManagement: false
|
||||
interruptMode: immediate
|
||||
defaultThinkingLevel: medium
|
||||
defaultThinkingLevel: xhigh
|
||||
hideThinkingBlock: false
|
||||
proseOnlyThinking: true
|
||||
proseOnlyThinking: false
|
||||
terminal:
|
||||
showProgress: true
|
||||
disabledExtensions:
|
||||
[]
|
||||
disabledExtensions: []
|
||||
statusLine:
|
||||
separator: powerline
|
||||
preset: custom
|
||||
@@ -135,24 +135,31 @@ tui:
|
||||
codexResetFireworks: false
|
||||
hyperlinks: auto
|
||||
tight: true
|
||||
resizeScrollback: rebuild
|
||||
titleSpinner: pulse
|
||||
display:
|
||||
shimmer: kitt
|
||||
smoothStreaming: true
|
||||
showTokenUsage: true
|
||||
pinnedAgents: collapsed
|
||||
subagentLivePreview: true
|
||||
task:
|
||||
showResolvedModelBadge: true
|
||||
maxConcurrency: 3
|
||||
agentModelOverrides:
|
||||
designer: llamacpp (dankclaw-3090)/frank-zealot
|
||||
librarian: llamacpp (dankclaw-3090)/frank-zealot
|
||||
reviewer: llamacpp (dankclaw-3090)/frank-zealot
|
||||
scout: llamacpp (dankclaw-3090)/frank-zealot
|
||||
security-reviewer: llamacpp (dankclaw-3090)/frank-zealot
|
||||
reviewer: llamacpp (dankserver)/frank-archon
|
||||
scout: llamacpp (dankserver)/frank-archon
|
||||
security-reviewer: llamacpp (dankclaw)/frank-dragoon
|
||||
sonic: llamacpp (dankclaw-3090)/frank-zealot
|
||||
task: llamacpp (dankclaw-3090)/frank-zealot
|
||||
task: llamacpp (dankserver)/frank-archon
|
||||
eager: default
|
||||
enableLsp: true
|
||||
snapcompact:
|
||||
systemPrompt: none
|
||||
toolResults: false
|
||||
shape: auto
|
||||
extendedContext: false
|
||||
ttsr:
|
||||
contextMode: discard
|
||||
@@ -162,12 +169,12 @@ checkpoint:
|
||||
enabled: true
|
||||
readLineNumbers: true
|
||||
startup:
|
||||
showSplash: false
|
||||
showSplash: true
|
||||
changelogMode: summary
|
||||
update:
|
||||
channel: stable
|
||||
features:
|
||||
unexpectedStopDetection: smart
|
||||
unexpectedStopDetection: mechanical
|
||||
stt:
|
||||
submitTrigger: say-submit
|
||||
enabled: true
|
||||
@@ -186,6 +193,7 @@ images:
|
||||
- litterbox
|
||||
edit:
|
||||
mode: hashline
|
||||
fuzzyThreshold: 0.9
|
||||
dev:
|
||||
autoqaConsent: granted
|
||||
astGrep:
|
||||
@@ -195,7 +203,7 @@ vault:
|
||||
tts:
|
||||
localVoice: bm_george
|
||||
speech:
|
||||
enabled: false
|
||||
enabled: true
|
||||
mode: yield
|
||||
enhanced: true
|
||||
voice: am_fenrir
|
||||
@@ -204,6 +212,9 @@ secrets:
|
||||
read:
|
||||
renderMarkdown: true
|
||||
toolResultPreview: true
|
||||
defaultLimit: 1000
|
||||
summarize:
|
||||
prose: false
|
||||
lsp:
|
||||
formatOnWrite: true
|
||||
diagnosticsOnEdit: true
|
||||
@@ -213,4 +224,42 @@ speechgen:
|
||||
live:
|
||||
voice: vale
|
||||
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
@@ -16,9 +16,9 @@ providers:
|
||||
auth: none
|
||||
models:
|
||||
- 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
|
||||
# the frank-primary name — service names are unchanged).
|
||||
# the frank-archon name — service names are unchanged).
|
||||
# Server-side compaction routes to compaction.remoteEndpoint in
|
||||
# config.yml (192.168.0.143:7771 — frank-zealot's 3090); the
|
||||
# compactionModel candidate keeps the wire model id valid there.
|
||||
@@ -29,12 +29,12 @@ providers:
|
||||
# radiance (StillDeadcode, Apache-2.0) from the digest-pinned
|
||||
# stilldeadcode/radiance image (index digest sha256:4c3f4845..., 287
|
||||
# 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
|
||||
# Qwen/Qwen3.8-Flash-Next-FP8 at NATIVE modelopt block-FP8
|
||||
# precision — a rad-convert no-recipe pure copy into
|
||||
# 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
|
||||
# plugin's (qwen4exp, "") selection key matches; per-weight
|
||||
# encodings are untouched. Experts stream from a 40 GiB/rank
|
||||
@@ -44,7 +44,7 @@ providers:
|
||||
# froggeric's fixed qwen3.8 v22.5
|
||||
# (scripts/qwen38-froggeric-v22.5.jinja) via
|
||||
# --override-chat-template. Rollback: git tag
|
||||
# frank-primary-freetoken-pr587-20261005 (FreeToken, one card).
|
||||
# frank-archon-freetoken-pr587-20261005 (FreeToken, one card).
|
||||
contextWindow: 200000
|
||||
# maxTokens must survive the harness compaction gap AND the chars/4
|
||||
# token-estimate under-run on code-heavy prompts. The clamp is
|
||||
@@ -96,8 +96,8 @@ providers:
|
||||
auth: none
|
||||
models:
|
||||
- id: frank-dragoon
|
||||
# Model id renamed from frank-large on 2026-10-08 (official
|
||||
# unit-name scheme; the service/unit/scripts keep the frank-large
|
||||
# Model id renamed from frank-dragoon on 2026-10-08 (official
|
||||
# unit-name scheme; the service/unit/scripts keep the frank-dragoon
|
||||
# name — service names are unchanged).
|
||||
name: "frank-dragoon (dankclaw-gpu)"
|
||||
# Server-side compaction runs on the compaction.remoteEndpoint in
|
||||
@@ -107,37 +107,45 @@ providers:
|
||||
compactionModel: llamacpp (dankclaw-3090)/frank-zealot
|
||||
# halogen-flash-server 0.16.2 (ghcr.io/peonist-ai/
|
||||
# halogen-flash-server@sha256:0c61bf84, digest-pinned) serving the
|
||||
# Quat3rnion ABLITERATED Swift1.5 finetune of peonist's
|
||||
# Qwen3.8-Flash-Next v2 checkpoint (qwen38-flash-next-v2-swift15-
|
||||
# abliterated.hgn, ~62 GiB resident, + REQUIRED n-gram table +
|
||||
# vision tower) on the Strix Halo iGPU: TWO slots at
|
||||
# HALOGEN_CTX=262144 each with the MTP head ALWAYS ON
|
||||
# Quat3rnion NATIVE v2 ABLITERATED conversion of orcarouter's pinned
|
||||
# BF16 Qwen3.8-Flash-Next (qwen38-flash-next-v2-abliterated.hgn,
|
||||
# ~62 GiB resident, + REQUIRED n-gram table + vision tower, both
|
||||
# hardlinked from the swift15 dir) on the Strix Halo iGPU: TWO slots
|
||||
# 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
|
||||
# decode). Card: 53-57 t/s greedy, ~1,640 t/s prefill at 34k, ~72%
|
||||
# fewer thinking tokens than the censored 27B. ABLITERATED base
|
||||
# (refusals should not return) and VISION ON (OpenAI image_url
|
||||
# decode). Measured 2026-10-17: 50 t/s greedy decode, 1,604 t/s
|
||||
# cold prefill at 59k, NIAH 18/18. ABLITERATED base (no refusals:
|
||||
# 0/5 on the hostile census) and VISION ON (OpenAI image_url
|
||||
# parts; >=256 px images or it answers "video"). Runbook:
|
||||
# serverAppConfigs-docs/LLM/frank-large-flash-server-v2-swift15.md.
|
||||
# Per-SLOT window the harness may fill — deliberately BELOW the
|
||||
# engine ceiling (HALOGEN_CTX=262144): the clamp below leaves a
|
||||
# 45k gap that absorbs the estimate error.
|
||||
contextWindow: 217088
|
||||
# serverAppConfigs-docs/LLM/frank-dragoon-flash-server-v2-native.md.
|
||||
# Window the harness may fill — deliberately BELOW the engine
|
||||
# ceiling (HALOGEN_CTX=200704, lowered from 262,144 on 2026-10-17):
|
||||
# the clamp below leaves the 45k gap that absorbs the estimate error.
|
||||
# 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 −
|
||||
# 4096); the chars/4 est UNDER-counts the rendered prompt by ~3 %
|
||||
# on code/agent traffic (measured 2026-10-07: est 152,938 ->
|
||||
# server 157,388). Worst-case request = ctx − 4096 + 3 % est
|
||||
# error ≈ 219k, inside the 262,144 engine ceiling with ~43k
|
||||
# margin (robust to a 10 % under-count). Compaction fires at 85 %
|
||||
# of the window = 184,524 est ≈ 190k measured (Frank's 180k
|
||||
# target) and rides on frank-zealot: input ≈ threshold −
|
||||
# keepRecent(20k) ≈ 170k, inside its 200,704 slot.
|
||||
# HALOGEN_MAX_TOKENS_CAP in frank-large.env must stay >= this.
|
||||
# server 157,388). Worst-case request = window − 4096 + 3 % est
|
||||
# error ≈ 156.2k, inside the 200,704 engine ceiling with ~44k
|
||||
# margin (robust to a ~25 % under-count). Compaction fires at 85 %
|
||||
# of the window = 132,300 est ≈ 136k measured — the 180k target of
|
||||
# the 262,144 era is unreachable now (the window itself is 155,648)
|
||||
# — and rides on frank-zealot: input ≈ threshold − keepRecent(20k)
|
||||
# ≈ 112k, inside its 200,704 slot.
|
||||
# HALOGEN_MAX_TOKENS_CAP in frank-dragoon.env must stay >= this.
|
||||
maxTokens: 45056
|
||||
reasoning: true
|
||||
# VISION ON as of 2026-10-06: the v2 vision tower loads beside the
|
||||
# checkpoint (HALOGEN_VISION_TOWER; red-PNG probe verified on the
|
||||
# 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]
|
||||
compat:
|
||||
# flash-server emits thinking as `reasoning_content` — same
|
||||
@@ -155,7 +163,7 @@ providers:
|
||||
max: xhigh
|
||||
# The card's thinking recipe, on the wire. The flash-server
|
||||
# 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.
|
||||
extraBody:
|
||||
temperature: 1.0
|
||||
@@ -167,35 +175,47 @@ providers:
|
||||
auth: none
|
||||
models:
|
||||
- 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
|
||||
# frank-secondary name — service names are unchanged).
|
||||
# frank-zealot name — service names are unchanged).
|
||||
name: "frank-zealot (dankclaw-3090)"
|
||||
# Server-side compaction routes to compaction.remoteEndpoint in
|
||||
# config.yml (192.168.0.143:7771 — this endpoint); the
|
||||
# compactionModel candidate keeps the wire model id valid there.
|
||||
compactionModel: llamacpp (dankclaw-3090)/frank-zealot
|
||||
# Dankclaw's RTX 3090: llama.cpp (master, CUDA sm_86 build) serving
|
||||
# HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive at Q6_K
|
||||
# (7,359,259,008 B) — qwen35 dense hybrid (32 layers: 8 full-attention
|
||||
# + 24 Gated DeltaNet, 4 KV heads x 256 dim, native 262,144), TWO
|
||||
# conversations (--ctx-size 401408 / --parallel 2) at Frank's 200k cap
|
||||
# each. Exact KV: f16 K + f16 V. Vision via the publisher's OWN
|
||||
# BF16 mmproj (921,704,448 B) — the model is natively multimodal.
|
||||
# **MTP IS OFF** because the file carries no nextn/mtp tensors —
|
||||
# SPEC_TYPE=none strips both spec flags. Priced from the MiMo Q6_K
|
||||
# boots at this geometry (21,276/2,849 at ubatch 1024; 21,846/2,279 at
|
||||
# 2048). 2026-10-07 (late) swap from Gemma4-26B-A4B Q4_K_M (1x200,704).
|
||||
# Runbook:
|
||||
# serverAppConfigs-docs/LLM/frank-secondary-llama-qwen35-9b-q6k-2x200704.md.
|
||||
# contextWindow is the PER-SLOT window (Frank's cap): a longer
|
||||
# prompt needs compaction.
|
||||
contextWindow: 200704
|
||||
# Dankclaw's RTX 3090: llama.cpp PrismML fork build (vendor 10777,
|
||||
# commit e3de71522 — the ONLY loader for this payload's custom tensor
|
||||
# type 142 + prism.hadamard.* metadata, and the minimum build that
|
||||
# pairs MTP with a quantized V cache) serving
|
||||
# prism-ml/Ternary-Bonsai-2-9B-gguf at PQ2_0 (2,675,410,720 B) WITH the
|
||||
# MTP head in the file — qwen35 hybrid, 32 layers (8 full-attention +
|
||||
# 24 Gated DeltaNet), 4 KV heads x 256 dim, native 262,144 — in THREE
|
||||
# conversations (--ctx-size 786432 / --parallel 3), each slot at the
|
||||
# model's TRAINED window.
|
||||
# KV is q8_0 K + q8_0 V (17 KiB/token over the 8 full layers =
|
||||
# 13,056 MiB pool, ledger-exact); f16 KV would bill 26,112 MiB and
|
||||
# cannot boot this card. Boot ledger 17,876 used / 6,249 free. Vision
|
||||
# through the publisher's Q8_0 mmproj (624,229,664 B — Q8_0 is the
|
||||
# publisher's requirement for concurrent image requests), whose
|
||||
# worst-case lands outside the engine's fit projection. **MTP OFF —
|
||||
# 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
|
||||
# against the budget. Compaction fires at 85 % of the window =
|
||||
# 170,598 est; worst-case prompt + budget ≈ 170,598 × 1.03 +
|
||||
# 16,384 ≈ 192,100 ≤ 200,704 — a longer prompt is a 400 naming
|
||||
# the limit, never a truncation.
|
||||
# 222,822 est; worst-case prompt + budget ≈ 222,822 × 1.03 +
|
||||
# 16,384 ≈ 245,891 ≤ 262,144. This endpoint is the fleet's
|
||||
# compaction hub: the widest window in the fleet.
|
||||
maxTokens: 16384
|
||||
reasoning: true
|
||||
input: [text, image]
|
||||
@@ -204,29 +224,33 @@ providers:
|
||||
# `reasoning_content` — the same field the MiMo/Ornith eras used;
|
||||
# harness reads unchanged.
|
||||
reasoningContentField: "reasoning_content"
|
||||
# The Qwen3.5 chat template has NO reasoning_effort variable (unlike
|
||||
# the Qwen3.8-template endpoints, where an unmapped level is a hard
|
||||
# Jinja raise). llama.cpp passes chat_template_kwargs through to
|
||||
# Jinja, and Jinja ignores variables a template never reads — so the
|
||||
# map is inert here, kept so role-level overrides resolve identically
|
||||
# across the fleet.
|
||||
# Bonsai-2's template DOES read reasoning_effort (the Qwen3.5-9B
|
||||
# template did not — the map used to be inert here): it accepts ONLY
|
||||
# xhigh (default), medium, low and calls raise_exception on anything
|
||||
# else, so an unmapped harness level is a hard HTTP 500 on the role's
|
||||
# first request, naming Jinja and not the model. The fold below is
|
||||
# therefore load-bearing, identical to the frank-archon/dragoon law.
|
||||
# llama.cpp passes chat_template_kwargs through to Jinja.
|
||||
reasoningEffortMap:
|
||||
minimal: low
|
||||
low: low
|
||||
medium: medium
|
||||
high: xhigh
|
||||
max: xhigh
|
||||
# The Qwen3.5 publisher recipe (model card, thinking mode):
|
||||
# temperature 0.6 / top_p 0.95 / top_k 20 / min_p 0. Non-thinking
|
||||
# mode is 0.7/0.8/20/0 — the harness runs thinking mode.
|
||||
# The payload's OWN sampling metadata (general.sampling.* in the
|
||||
# GGUF): temperature 1.0 / top_p 0.95 / top_k 20 — 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:
|
||||
temperature: 0.6
|
||||
temperature: 1.0
|
||||
top_p: 0.95
|
||||
top_k: 20
|
||||
min_p: 0.0
|
||||
presence_penalty: 0.0
|
||||
chat_template_kwargs:
|
||||
enable_thinking: true
|
||||
# (no preserve_thinking: that kwarg belongs to the Qwen3.8
|
||||
# templates; nothing in this template reads it)
|
||||
# The template DOES read preserve_thinking: when false it drops
|
||||
# prior assistants' <think> blocks from history. Keep them —
|
||||
# multi-turn tool traffic on this endpoint is the majority.
|
||||
preserve_thinking: true
|
||||
@@ -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.
|
||||
|
||||
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
|
||||
|
||||
@@ -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:
|
||||
|
||||
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.
|
||||
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".
|
||||
|
||||
### 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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Issue both sub-agent calls together, in the foreground, and aggregate the reports they return.
|
||||
|
||||
**Standards sub-agent prompt** should include:
|
||||
|
||||
- The full diff command and commit list.
|
||||
|
||||
@@ -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.
|
||||
|
||||
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
|
||||
|
||||
@@ -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:
|
||||
|
||||
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.
|
||||
4. Watch it pass.
|
||||
5. Re-run the Phase 1 feedback loop against the original (un-minimised) scenario.
|
||||
|
||||
@@ -21,6 +21,8 @@ Format a round like so:
|
||||
➡️ <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.
|
||||
|
||||
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.
|
||||
|
||||
@@ -5,7 +5,7 @@ argument-hint: "What will the next session be used for?"
|
||||
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.
|
||||
|
||||
|
||||
@@ -6,10 +6,12 @@ disable-model-invocation: true
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
@@ -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.
|
||||
|
||||
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
|
||||
|
||||
@@ -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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ The user has asked you to teach them something. This is a stateful request - the
|
||||
|
||||
## 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).
|
||||
- `./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.
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -11,6 +11,10 @@ timestamp: 2026-08-28
|
||||
|
||||
# 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)
|
||||
|
||||
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.
|
||||
|
||||
Reference in new issue
Block a user