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/.
This commit is contained in:
Frank committed 2026-10-18 16:46:57 -07:00
1 parent 8702f3058d
commit 3713339ffc
14 files changed
+378 -217

No files matched your search

+21 -14
View File
@@ -13,26 +13,32 @@ with YAML frontmatter, spec at `omp-docs/references/okf-spec.md`).
(`dank/command-center` on the Dankclaw instance). There is no staging copy: (`dank/command-center` on the Dankclaw instance). There is no staging copy:
**the checkout is the deployment.** Branch switches swap live config files out **the checkout is the deployment.** Branch switches swap live config files out
from under the running agent — keep feature branches short-lived, and never end from under the running agent — keep feature branches short-lived, and never end
a work session checked out on anything but `develop` or `main`. a work session checked out on anything but `main`.
- Contents that belong here: `AGENTS.md`, `omp-docs/` (knowledge base), - Contents that belong here: `AGENTS.md`, `omp-docs/` (knowledge base),
`scripts/` (small system utilities), `agent/` + `plugins/` (harness config and `scripts/` (small system utilities), `agent/` + `plugins/` (harness config and
plugin manifests). Everything else under this directory is runtime state and is plugin manifests). Everything else under this directory is runtime state and is
gitignored on principle — see `.gitignore`. History must mean "the configuration gitignored on principle — see `.gitignore`. History must mean "the configuration
changed", not "the agent breathed". changed", not "the agent breathed".
## Git-flow SDLC (full flow, from day one) ## Trunk-based SDLC (since 2026-10-18; replaces the old git-flow regime)
- `main` is the only long-lived branch. Frank is the only dev; `develop` and the
release-branch ceremony are retired — no `develop`, no back-merges, no
`release/X.Y.Z` branches.
- **Before every work item: fetch and branch off the freshest `origin/main`.**
If main moves under you, merge it into your branch (never rebase — Frank
dislikes the history rewrite).
- Work item = Gitea issue on `dank/command-center` (Gitea at 192.168.0.143:3000, - Work item = Gitea issue on `dank/command-center` (Gitea at 192.168.0.143:3000,
owner `dank`). Small fixes may go straight to a branch; anything with more than owner `dank`). Small fixes may go straight to a branch; anything with more than
one moving part gets an issue first. one moving part gets an issue first.
- Branch naming: `<type>/<issue#>-<slug>`, type ∈ feat|fix|docs|chore. - Branch naming: `<type>/<issue#>-<slug>`, type ∈ feat|fix|docs|chore.
Release cuts: `release/X.Y.Z` from `develop`; hotfixes: `hotfix/<slug>` from `main`. - **Pull requests target `main` directly.** Merge with `--no-ff` so feature arcs
- **Merge, never rebase**, when updating a branch against a moved main — Frank stay visible in history. **Never merge a PR without an explicit OK from Frank.**
dislikes the history rewrite. **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>`
- Merge into `develop` with `--no-ff` so feature arcs stay visible in history. lands a tab in his Firefox; never make him hunt for it in Gitea.
- Releases: cut `release/X.Y.Z` from `develop`, verify, merge to `main`, tag - Releases: tag `vX.Y.Z` straight on `main` after verifying; tags are the deploy
`vX.Y.Z`, back-merge `main` into `develop`. Tags are the deploy markers every markers every other machine pulls to. Hotfixes are ordinary branches off the
other machine pulls to. tag you are fixing forward from.
- Trash convention: never `rm` anything user-authored — move it to `.AGENTTRASH/` - Trash convention: never `rm` anything user-authored — move it to `.AGENTTRASH/`
(gitignored). Deletion is a pruning session with Frank present. (gitignored). Deletion is a pruning session with Frank present.
@@ -71,8 +77,8 @@ secret in every agent's context window on every machine that pulls this repo.
| box | role | GPU | notes | | box | role | GPU | notes |
|-----|------|-----|-------| |-----|------|-----|-------|
| Dev workstation | client box, never runs inference | laptop iGPU + dGPU (non-unified) | mainline llama.cpp at `~/GitPackages/llama.cpp/build/bin/`; this repo lives here at `~/.omp` | | Dev workstation | client box, never runs inference | laptop iGPU + dGPU (non-unified) | mainline llama.cpp at `~/GitPackages/llama.cpp/build/bin/`; this repo lives here at `~/.omp` |
| Dankclaw | bench target, runs the large serving model | Strix Halo APU — **unified memory** | ROCmFPX fork at `~/GitPackages/ROCmFPX/build-qwen38/bin/`; prod service `frank-default-large`, port 7770; ssh: `ssh dankclaw` | | Dankclaw | bench target, secondary models + service stack | Strix Halo APU (**unified memory**) + RTX 3090 (moved over from Dankserver 2026-09) | prod services `frank-dragoon` (halogen-flash-server, :7770, iGPU) and `frank-zealot` (llama.cpp PrismML fork, :7771, 3090); runbooks in the serverAppConfigs vault (`~/Projects/serverAppConfig/serverAppConfigs-docs/LLM/`); ssh: `ssh dankclaw` |
| Dankserver | FreeToken box | RTX 3090 dGPU — non-unified | runs `frank-default-small`; ssh: `ssh dankserver` | | Dankserver | main-model box | 2× Radeon AI PRO R9700 — non-unified (was RTX 3090 until 2026-09) | runs `frank-archon` (radiance, TP=2, :7770) — **this repo's operator session runs on it**; ssh: `ssh dankserver` |
## Environment gotchas ## Environment gotchas
@@ -84,9 +90,10 @@ secret in every agent's context window on every machine that pulls this repo.
- SSH into both servers is BatchMode-capable from here: - SSH into both servers is BatchMode-capable from here:
`ssh -o BatchMode=yes dankclaw '<read-only command>'` — read-only probes are `ssh -o BatchMode=yes dankclaw '<read-only command>'` — read-only probes are
always allowed; state changes on remote boxes are not, without a per-run OK. always allowed; state changes on remote boxes are not, without a per-run OK.
- `frank-default-large` on Dankclaw is a **production service** shared with this - `frank-archon` (Dankserver), `frank-dragoon`, and `frank-zealot` (Dankclaw)
repo's operator: never stop, mask, or restart it (or any production service on are **production services** shared with this repo's operator: never stop,
any box) without an explicit, current, per-run OK from Frank. mask, or restart them (or any production service on any box) without an
explicit, current, per-run OK from Frank.
## File-organization doctrine (why this repo stays readable) ## File-organization doctrine (why this repo stays readable)
+97 -22
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
@@ -18,9 +19,10 @@ modelRoles:
memory: llamacpp (dankclaw-3090)/frank-zealot:medium memory: llamacpp (dankclaw-3090)/frank-zealot:medium
symbolPreset: nerd symbolPreset: nerd
composer: composer:
shape: claude 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,43 +91,75 @@ 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: nerd preset: custom
contextLine: embedded contextLine: embedded
transparent: true transparent: true
compactThinkingLevel: true compactThinkingLevel: true
showHookStatus: true showHookStatus: true
sessionAccent: true
leftSegments:
- session_name
- vim
- mode
- hostname
- path
- git
- pr
rightSegments:
- model
- cost
- context_pct
- time_spent
segmentOptions:
model:
showThinkingLevel: true
path:
abbreviate: true
stripWorkPrefix: true
maxLength: 120
git:
showBranch: false
showStaged: true
showUnstaged: true
showUntracked: true
tui: tui:
textSizing: true textSizing: true
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: 2 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
@@ -136,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
@@ -160,6 +193,7 @@ images:
- litterbox - litterbox
edit: edit:
mode: hashline mode: hashline
fuzzyThreshold: 0.9
dev: dev:
autoqaConsent: granted autoqaConsent: granted
astGrep: astGrep:
@@ -169,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
@@ -178,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
@@ -187,4 +224,42 @@ speechgen:
live: 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
+87 -63
View File
@@ -16,25 +16,25 @@ 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.
compactionModel: llamacpp (dankclaw-3090)/frank-zealot compactionModel: llamacpp (dankclaw-3090)/frank-zealot
name: "frank-archon (dankserver)" name: "frank-archon"
# Dankserver: BOTH Radeon AI PRO R9700s (gfx1201, TP=2 over the # Dankserver: BOTH Radeon AI PRO R9700s (gfx1201, TP=2 over the
# 2026-09-20 board swap's root ports, wht6 wire). Engine: # 2026-09-20 board swap's root ports, wht6 wire). Engine:
# 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
+8 -2
View File
@@ -1,12 +1,18 @@
# Core Documentation # Core Documentation
These files define the structural conventions that govern the pi agent system itself. They are the grammar rules — boring until you break them, then devastating. These files define the structural conventions that govern the agent system itself. They are the grammar rules — boring until you break them, then devastating.
> **Archive note (2026-10-18).** The settings pages (`settings.md`, `settings.json`)
> capture the retired **pi** harness configuration (`frank-default-*` endpoints,
> RTX 3090-era hardware) and are historical records. The live config is
> `agent/config.yml` + `agent/models.yml` in this repo; current fleet endpoints
> are on [System hosts](/system/index.md). The AGENTS.md format pages remain current.
## Concept Files ## Concept Files
* [AGENTS.md Format Specification](agents-md-format.md) — Canonical structure and conventions for the system-level instruction file that governs agent behavior. * [AGENTS.md Format Specification](agents-md-format.md) — Canonical structure and conventions for the system-level instruction file that governs agent behavior.
* [AGENTS.md Index](index-doc.md) — Overview of the cached tool documentation system and how to add new entries. * [AGENTS.md Index](index-doc.md) — Overview of the cached tool documentation system and how to add new entries.
* [Pi Settings System](settings.md) — Current system configuration: providers, models, packages, subagent overrides, and runtime options. * [Pi Settings System](settings.md) — pi-era `settings.json` record (archive): providers, models, packages, subagent overrides.
## Change Tracking ## Change Tracking
+37
View File
@@ -11,6 +11,43 @@ timestamp: 2026-08-28
# Bundle Change Log # Bundle Change Log
## 2026-10-18 — Fleet law: filed PRs open in Frank's browser immediately
Both repos' git rules now require it: the moment a PR is opened, `xdg-open <PR-URL>` drops a Firefox tab on the workstation (AGENTS.md § Trunk-based SDLC here; § Git Workflow step 6 in `dank/serverAppConfigs`, riding their PR #6 branch).
## 2026-10-18 — Trunk law: extension route closed unmerged; direct repo alignment instead
Built and live-verified a cwd-scoped `before_agent_start` extension (quote probes: fires under `~/Projects`, silent elsewhere; kept as `.AGENTTRASH/trunk-law.js`). **Operator closed PR #9 unmerged** in favor of editing each repo's own AGENTS.md. Durable finding from the exploration: every context-file provider (AGENTS.md walk-up, `.omp/` dirs, CLAUDE.md) resolves at or below the repo root — a `~/Projects/AGENTS.md` for ancestor scope can never load; user-level `APPEND_SYSTEM.md` broadcasts to *all* sessions. Second finding: **serverAppConfigs never had git-flow** — its AGENTS.md mandated no branch regime at all (direct commit+push); a trunk + PR law is being added there by PR in that repo, not corrected.
## 2026-10-18 — SDLC switched to trunk-based development
`develop` retired by operator decision (single-dev repo; the branch bought nothing and cost a back-merge every release). New law in AGENTS.md § *Trunk-based SDLC*: branch off the freshest `origin/main` before every work item, PRs target `main` directly, `--no-ff` merges, tags `vX.Y.Z` straight on main. No back-merges, no release branches. The last back-merge (`527596a`) lands with this switch; the managed skill `gitflow-back-merge-plumbing` is now historical.
## 2026-10-18 — Sibling-vault overlap census; system docs realigned to live ground truth
Census of `omp-docs/` against `~/Projects/serverAppConfig/serverAppConfigs-docs/` (subagent + live-ssh verification) found four contradicting pairs; all OURS-side stale pages corrected, THEIRS side flagged only (their repo, their PR flow). Ground truth from read-only probes on both boxes 2026-10-18.
* **Hardware drift corrected** (`system/dankserver.md`, `system/dankclaw.md` rewritten, `AGENTS.md` machine table): RTX 3090 moved Dankserver→Dankclaw 2026-09; dankserver now 2× Radeon AI PRO R9700 (7700X stays — the "board swap" story is false), 246 GiB RAM, no swap; dankclaw 121 GiB RAM + 64 GiB swap. Served models per live units: frank-archon (:7770 dankserver, radiance TP=2 iq4r), frank-dragoon (:7770 dankclaw, halogen NATIVE v2, iGPU), frank-zealot (:7771 dankclaw, llama.cpp PrismML, Ternary-Bonsai-2-27B PQ2_0, 3090). Both kernels 7.0.0-38-generic; dankclaw :7770 needs no auth.
* **Gitea pages corrected** (`tools/gitea/` index + 3 subpages): `gitea-caddy` quadlet retired — fleet Caddy fronts the domain; data tree is `/home/dank/Containers/gitea/{data,postgres,env}` (2026-09-01 standard), `/opt/gitea/` is a do-not-use leftover; LAN IP, live domain, no WAN address.
* **Pi-era pages demarcated as archive** (`pi/index.md`, `core/index.md` banners; `core/index.md` said settings.md was "Current"): `frank-default-small/large` endpoints, role tables, and 3090/4070 hardware rows now read as pi-era records. `tools/llama-cpp/index.md` fleet note modernized to the one remaining llama.cpp endpoint (zealot :7771).
* **Their-side staleness flagged, NOT edited** (for operator clarification): `Agent/OMP Harness.md` still says thresholdPercent 70 — live config is **95** (`agent/config.yml:84`); `index.md:18` says Dankserver Ubuntu 24.04 vs their own specs page 26.04; `Dankclaw/Stack.md` "current mapping (2026-09-03)" predates the ACTIVE dragoon/zealot runbooks it links beside; `index.md:548` links the superseded pi-era KB at `~/.pi/agent/docs/`.
* Consistent duplicates (no action): niri/noctalia desktop pages, Caddy reference. Divergence clarified: their "composer" = OpenWebUI chat box; ours = omp composer shape — unrelated subjects.
## 2026-10-18 — Status line docs truth audit (full-source re-verification)
Exhaustive claim-by-claim re-audit of [OMP Status Line Customization](/pi/statusline.md) against the minified `dist/cli.js` bundle plus a live screenshot matrix (band × {off, percentage, embedded}, claude × off). Page carries an **Audit log** section; four first-pass claims were false and are corrected (see there): claude's rule is *not* the context meter (meter is `box`/`band` only; the "red rule" was the session-accent filler), the "Tern-only" composer-bar claim was bogus (the readout is `composer.tokenRate`, default off), `segmentOptions` are **not** gated to `preset: custom` (only the segment arrays are), and the `mode` segment's states are Plan/Prewalk/Goal/Vibe/Loop (no yolo). Page expanded with: the 7-preset defaults table, per-shape `statusAttachment`/`bottomBar` model (8 built-ins + plugin shape registry), `contextLine` per-value behavior, the 27-segment catalog with triggers/options, `segmentOptions` schema, and the full `statusLine.*`/`composer.*` knob registry. The bundle's own "(box composer only)" knob description for `contextLine` is upstream-wrong — band honors it.
ServerAppConfigs-docs overlap census: flagged separately for the operator (morning report); no doc merged/changed on either side.
## 2026-10-18 — Status line rebuilt on custom segments; frank-archon display name slimmed
Interactive tune-up of the omp status bar (grilling session, live loop: config edit → watcher repaint → niri screenshot verify). New knowledge page: [OMP Status Line Customization](/pi/statusline.md).
* **Mechanics discovered:** `leftSegments`/`rightSegments` are inert unless `preset: custom` (fleet was on `nerd` with dead arrays; `segmentOptions` *do* merge under named presets); `composer.shape` routes them — `band` merges both arrays into one row above the editor (title rides the working row), `claude` splits them into top chip + bottom strip. The context meter exists **only in `box`/`band`** — `contextLine`: `off` plain rule, `embedded` hoists the context segment into the labeled inline meter (`60% ——— × 200K`), `percentage`/`annotated` paint an unlabeled proportional rule meter (all four live-verified); every other shape's rule is a constant session-accent filler. Working row (session title + tok/s readout gated by `composer.tokenRate`, default off) is composer chrome — model/thinking can never join it. Eight composer shapes ship in the bundle; plugins can register more.
* **Final bar (`band`, after a `claude` sojourn):** left = `session_name · vim · mode · hostname · path · git(no branch text) · pr`; right cluster in array order = `model · cost · time_spent` (`context_pct` hoists out of the run to paint the labeled inline meter `60% ——— × 200K` as a flexible spacer between the groups). Cut: tok/s duplicate, clock, cache trio, `context_total`, `subagents`, `session` hash, and `token_in`/`token_out` (cumulative totals live in `/session`). `path`: logical `project/worktree` label (`stripWorkPrefix: true`, kept after a live `false` trial of the full cwd); branch text dropped (worktree branches are autogenerated), dirty badges kept.
* **models.yml:** frank-archon display `name` slimmed to `"frank-archon"` (endpoint suffix dropped; `id` untouched).
* **Out of scope noted:** worktree name generation (`wt-<date>-<hash>`) is omp-internal; possible upstream feature request.
## 2026-10-09 — Blankpad DE redesign: desk profiles, keybind rework, Handy fleet wiring ## 2026-10-09 — Blankpad DE redesign: desk profiles, keybind rework, Handy fleet wiring
Branch `blankpad-de-redesign` (worktree `wt/de-redesign-20261009`). Full sweep + redesign of the niri/noctalia/Handy stack on blankpad. Branch `blankpad-de-redesign` (worktree `wt/de-redesign-20261009`). Full sweep + redesign of the niri/noctalia/Handy stack on blankpad.
+8 -3
View File
@@ -1,13 +1,18 @@
# Pi Configuration # Pi Configuration
Documentation for the pi coding agent installation on ](../system/index.md). > **Archive note (2026-10-18).** Most pages in this directory document the retired
Everything here is configured locally on the workstation; the LLM providers are the > **pi** harness (settings.json / models.json, `frank-default-*` endpoints, verified
two llama.cpp servers (Dankserver, Dankclaw). > 2026-08-28). The live harness is **omp** — its config is `agent/config.yml` +
> `agent/models.yml` in this repo, the current fleet endpoints are on
> [System hosts](/system/index.md), and omp-specific knowledge lands in pages like
> [OMP Status Line Customization](/pi/statusline.md) below. Read pi pages as
> historical records, not current state.
## Configuration Files ## Configuration Files
- [Pi Settings System (settings.json)](/core/settings.md) — Main `settings.json` reference. Providers, models, packages, subagent overrides. - [Pi Settings System (settings.json)](/core/settings.md) — Main `settings.json` reference. Providers, models, packages, subagent overrides.
- [Pi Models Configuration](/pi/models.md) — `models.json` reference. Provider definitions, model specs, endpoints. - [Pi Models Configuration](/pi/models.md) — `models.json` reference. Provider definitions, model specs, endpoints.
- [OMP Status Line Customization](/pi/statusline.md) — How presets, composer shapes, and segment arrays actually interact; the fleet's tuned bar.
## Extensions ## Extensions
+45 -49
View File
@@ -1,83 +1,79 @@
--- ---
type: reference type: reference
title: Dankclaw title: Dankclaw
description: Secondary inference server at 192.168.0.143. Runs llama.cpp (frank-default-large). description: Inference and services box at 192.168.0.143 — frank-dragoon (halogen-flash-server, Strix Halo iGPU, :7770) and frank-zealot (llama.cpp on the RTX 3090, :7771), plus Gitea/Caddy/OpenWebUI services.
tags: tags:
- network - network
- llamacpp - llamacpp
- inference - inference
- server - server
- comfyui - comfyui
- unverified
generated: generated:
by: chief-designer/agent by: chief-designer/agent
at: 2026-08-26T00:00:00Z at: 2026-08-26T00:00:00Z
verified: 2026-08-28 verified: 2026-10-18
--- ---
# Dankclaw # Dankclaw
Secondary llama.cpp inference server for the Frank Program. Serves larger models used by planner, worker, reviewer, oracle, and context-builder subagents. Strix Halo mini-PC carrying the fleet's secondary models and most of the
service stack (Gitea, Caddy, OpenWebUI, SearXNG). Two GPU-class devices: the
Radeon 8060S iGPU with 119 GiB unified memory, and the RTX 3090 moved over
from Dankserver in September 2026.
## Connection Details ## Connection Details
| Property | Value | | Property | Value |
|----------|-------| |----------|-------|
| **Hostname** | dankclaw | | **Hostname** | dankclaw |
| **IP Address** | 192.168.0.143 | | **IP Address** | 192.168.0.143 (LAN) |
| **Port** | 7770 | | **Auth** | none required on :7770 (verified 2026-10-18) |
| **Base URL** | `http://192.168.0.143:7770/v1` |
| **API** | OpenAI-compatible completions |
| **Authentication** | API key configured |
## Models ## Inference Services
| Model ID | Context Window | Reasoning | Input Types | | Model ID | Unit | Endpoint | Engine / weights |
|----------|---------------|-----------|-------------| |----------|------|----------|------------------|
| `frank-default-large` | 262,144 tokens | Yes | Text, *Image* (unverified) | | `frank-dragoon` | `frank-dragoon.service` (root) | `:7770` | halogen-flash-server container — Quat3rnion NATIVE v2 abliterated Qwen3.8-Flash-Next, MTP spec decode, 2 slots over ONE 200,704-position pool, vision ON, **Strix Halo iGPU** (unified memory) |
| `frank-zealot` | `frank-zealot.service` (root) | `:7771` | llama.cpp (PrismML fork, build 10754) — Ternary-Bonsai-2-27B PQ2_0 GGUF (qwen35 hybrid), 2×200,704 slots, q8_0 K+V, mmproj vision, **RTX 3090** |
## Services Harness-side context windows (`agent/models.yml`): dragoon 155,648,
zealot 200,704 per slot. The models.yml display labels "(dankclaw-gpu)" /
### llama.cpp "(dankclaw-3090)" predate naming cleanup; the hardware column above is
current. Subagent roles `scout`, `sonic`, `designer`, `librarian`,
| Property | Value | `security-reviewer` route to frank-zealot; `reviewer`/`task` run on
|----------|-------| frank-archon (Dankserver).
| **Port** | 7770 |
| **Models** | `frank-default-large` |
## Hardware
| Property | Value |
|----------|-------|
| **CPU** | AMD Ryzen AI MAX+ 395 (16C/16T, Strix Halo) |
| **GPU** | Radeon 8060S integrated (gfx1151, amdgpu) |
| **RAM** | 119 GiB |
| **Storage** | Kingston SNV3S1000G NVMe (931.5 GB), ~676 GB free |
| **OS** | Ubuntu 26.04 LTS, kernel 7.0.0-30-generic |
| **ROCm** | 7.2.4 (driver: 7.0.0-30-generic) |
| **Python** | 3.14.4 (system) |
## Usage
Dankclaw handles complex tasks delegated by subagent overrides. The `frank-default-large` model provides extended context. *Multimodal input support is unverified.*
```bash ```bash
# Health check curl http://192.168.0.143:7770/v1/models # dragoon
curl http://192.168.0.143:7770/health curl http://192.168.0.143:7771/v1/models # zealot
# Test with large model
curl http://192.168.0.143:7770/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <key>" \
-d '{"model":"frank-default-large","messages":[{"role":"user","content":"Hello"}],"max_tokens":32}'
``` ```
## Related Knowledge Bases (sibling project on the workstation) ## Hardware (verified live 2026-10-18)
- **serverAppConfigs** — `/home/dank/Projects/serverAppConfigs/` — Podman deployment config for this host (AI, search, development, observability stack, incl. the Hermes compose service) **plus the LLM inference fleet** (frank-default-large, CIRU ROCmFPX llama.cpp, :7770). The former `vllmScripts` repo merged into it on 2026-08-22 (history preserved). Start at `/home/dank/Projects/serverAppConfigs/docs/index.md` (see `dankclaw/compose.yaml` + `docs/Dankclaw/`; LLM fleet at `docs/LLM/index.md`, deploy runbook at `docs/LLM/deployment.md`). | Property | Value |
|----------|-------|
| **CPU/APU** | AMD Ryzen AI MAX+ 395 (Strix Halo, Radeon 8060S, gfx1151) |
| **dGPU** | NVIDIA GeForce RTX 3090 (moved from Dankserver 2026-09) |
| **RAM** | 121 GiB (mostly usable as GPU unified memory) |
| **Swap** | 64 GiB |
| **OS** | Ubuntu 26.04 LTS, kernel 7.0.0-38-generic |
The pre-rename story (`frank-default-large` on ROCmFPX llama.cpp/CIRU,
262,144-token context) was superseded by the 2026-10-08/09 model-id rename
and the dragoon/zealot engine swaps; the 119→121 GiB RAM figure follows the
live `free` reading.
## Related Knowledge Bases (sibling project)
- **serverAppConfigs** — deployment repo + vault, on this workstation at
`~/Projects/serverAppConfig/` (docs vault: `~/Projects/serverAppConfig/serverAppConfigs-docs/`).
Live runbooks: `LLM/frank-dragoon-flash-server-v2-native.md` and
`LLM/frank-zealot-llama-prism-bonsai2-pq20.md` — deploy-side source of
truth for engines, flags, and restart procedures. Service stack docs under
`Dankclaw/`, `Infrastructure/`.
## See Also ## See Also
- [[models|models]] — Provider definitions - [[dankserver|dankserver]] — the main-model box (frank-archon)
- [[dankserver|dankserver]] — Primary server - [/tools/gitea/index.md](/tools/gitea/index.md) — Gitea stack on this host
- [[network|network]] — Network topology - [[network|network]] — Network topology
+36 -22
View File
@@ -1,22 +1,24 @@
--- ---
type: reference type: reference
title: Dankserver title: Dankserver
description: Primary llama.cpp inference server at 192.168.0.235:7770, serving frank-default-small with 163,840-token context window. description: Radiance inference server at 192.168.0.235:7770, serving frank-archon (Qwen3.8-Flash-Next iq4r, 2x R9700 TP=2, 200,000-token context).
tags: tags:
- network - network
- llamacpp - llamacpp
- inference - inference
- server - server
- unverified
generated: generated:
by: chief-designer/agent by: chief-designer/agent
verified: 2026-08-28 verified: 2026-10-18
status: stable status: stable
--- ---
# Dankserver # Dankserver
Primary llama.cpp inference server for the Frank Program. Serves `frank-default-small` — a fast, capable model with image support. Primary inference server for the Frank Program. Serves `frank-archon`, the
main agent model, from a pair of Radeon AI PRO R9700s (tensor-parallel 2).
The RTX 3090 that used to live here was removed 2026-09-15 and now runs on
Dankclaw.
## Connection Details ## Connection Details
@@ -28,19 +30,24 @@ Primary llama.cpp inference server for the Frank Program. Serves `frank-default-
| **Base URL** | `http://192.168.0.235:7770/v1` | | **Base URL** | `http://192.168.0.235:7770/v1` |
| **API** | OpenAI-compatible completions | | **API** | OpenAI-compatible completions |
| **Authentication** | None | | **Authentication** | None |
| **Systemd unit** | `frank-archon.service` (root) |
## Model ## Model
| Property | Value | | Property | Value |
|----------|-------| |----------|-------|
| **Model ID** | `frank-default-small` | | **Model ID** | `frank-archon` (display name `frank-archon`) |
| **Context Window** | 163,840 tokens | | **Weights** | Qwen3.8-Flash-Next, radiance iq4r (publisher build) |
| **Reasoning** | Supported | | **Engine** | radiance, tensor-parallel 2 across both R9700s |
| **Input Types** | Text, *Image* (unverified) | | **Context Window** | 200,000 tokens (harness `models.yml`; served pool may differ — see runbook) |
`frank-medium` (former dual-GPU mid tier) is masked and retired.
## Usage ## Usage
Dankserver serves the small subagent model `frank-default-small`. Small subagent roles route here unless a role override picks a different model. Dankserver carries the main-session model. Subagent role overrides in
`agent/models.yml` route here for `task` and `reviewer`; scout/sonic/designer
route to Dankclaw.
```bash ```bash
# Health check # Health check
@@ -49,27 +56,34 @@ curl http://192.168.0.235:7770/health
# Quick test # Quick test
curl http://192.168.0.235:7770/v1/chat/completions \ curl http://192.168.0.235:7770/v1/chat/completions \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"model":"frank-default-small","messages":[{"role":"user","content":"Hello"}],"max_tokens":32}' -d '{"model":"frank-archon","messages":[{"role":"user","content":"Hello"}],"max_tokens":32}'
``` ```
## Hardware ## Hardware (verified live 2026-10-18)
| Property | Value | | Property | Value |
|----------|-------| |----------|-------|
| **CPU** | AMD Ryzen 7 7700X (8C/16T, Raphael) | | **CPU** | AMD Ryzen 7 7700X (8C/16T, Raphael iGPU on board) |
| **GPU** | NVIDIA GeForce RTX 3090 (24 GiB VRAM, EVGA) | | **GPU** | 2× AMD Radeon AI PRO R9700 (Navi 48, 32 GiB each) |
| **RAM** | 60 GiB | | **RAM** | 246 GiB |
| **Swap** | 64 GiB (/swapfile) | | **Swap** | effectively none (~0.1 GiB) — the 64 GiB swapfile is on Dankclaw, not here |
| **Storage** | Kingston SNV3S1000G NVMe (931.5 GB) + md0 RAID (6×18.2T Toshiba, /mnt/entropy, 91T) | | **Storage** | 7× 18.2 TB HDD + 1.8 TB NVMe (layout owned by the deploy repo) |
| **OS** | Ubuntu 26.04 LTS, kernel 7.0.0-30-generic | | **OS** | Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic |
| **NVIDIA Driver** | 595.84 |
## Related Knowledge Bases (sibling project on the workstation) The old page (verified 2026-08-28) listed an RTX 3090, 60 GiB RAM, and a
64 GiB swapfile here; all three were superseded by the 2026-09 hardware swap.
- **serverAppConfigs** — `/home/dank/Projects/serverAppConfigs/` — Podman deployment config for this host (media and library stack: RomM, Copyparty, Calibre-Web) **plus the LLM inference fleet** (frank-default-small, llama.cpp, :7770). The former `vllmScripts` repo merged into it on 2026-08-22 (history preserved). Start at `/home/dank/Projects/serverAppConfigs/docs/index.md` (see `dankserver/compose.yaml` + `docs/Dankserver/`; LLM fleet at `docs/LLM/index.md`, deploy runbook at `docs/LLM/deployment.md`). ## Related Knowledge Bases (sibling project)
- **serverAppConfigs** — deployment repo + vault, on this workstation at
`~/Projects/serverAppConfig/` (docs vault: `~/Projects/serverAppConfig/serverAppConfigs-docs/`).
Podman/quadlet deploy config for both servers plus the LLM inference fleet.
The live frank-archon runbook (engine flags, KV pool sizing, restart
procedures) is `LLM/frank-archon-radiance-qwen38-iq4r.md` in that vault —
it, not this page, is the deploy-side source of truth.
## See Also ## See Also
- [[models|models]] — Provider definitions - [[dankclaw|dankclaw]] — the other inference box (dragoon + zealot)
- [[dankclaw|dankclaw]] — Secondary server
- [[network|network]] — Network topology - [[network|network]] — Network topology
- [/pi/statusline.md](/pi/statusline.md) — where these models surface in the TUI
+5 -5
View File
@@ -11,8 +11,8 @@ Dankclaw are the inference servers it talks to.
## Network Systems ## Network Systems
- [Dankserver](/system/dankserver.md) — Primary llama.cpp inference server at 192.168.0.235:7770, serving `frank-default-small` (163,840-token context). AMD Ryzen 7 7700X, RTX 3090, Ubuntu 26.04. - [Dankserver](/system/dankserver.md) — Main-model inference server at 192.168.0.235:7770, serving `frank-archon` (radiance Qwen3.8-Flash-Next, 200K ctx). AMD Ryzen 7 7700X, 2× Radeon AI PRO R9700, Ubuntu 26.04.
- [Dankclaw](/system/dankclaw.md) — Secondary inference server at 192.168.0.143:7770, serving `frank-default-large` (262,144-token context). AMD Ryzen AI MAX+ 395 (Strix Halo), Ubuntu 26.04, ROCm. - [Dankclaw](/system/dankclaw.md) — Secondary inference + services box at 192.168.0.143: `frank-dragoon` (:7770, halogen-flash-server on the Strix Halo iGPU) and `frank-zealot` (:7771, llama.cpp on the RTX 3090). AMD Ryzen AI MAX+ 395, Ubuntu 26.04.
## Infrastructure Diagram ## Infrastructure Diagram
@@ -26,8 +26,8 @@ graph TB
end end
subgraph Network[192.168.0.0/24] subgraph Network[192.168.0.0/24]
E[dankserver<br/>192.168.0.235:7770<br/>frank-default-small] E[dankserver<br/>192.168.0.235:7770<br/>frank-archon]
F[dankclaw<br/>192.168.0.143:7770<br/>frank-default-large] F[dankclaw<br/>192.168.0.143:7770 dragoon<br/>:7771 zealot]
end end
D --> E D --> E
@@ -42,7 +42,7 @@ graph TB
The fleet has one sibling OKF knowledge base outside this bundle. Read it for The fleet has one sibling OKF knowledge base outside this bundle. Read it for
deployment and inference details. This bundle links to it from the server pages. deployment and inference details. This bundle links to it from the server pages.
* **serverAppConfigs** — `/home/dank/Projects/serverAppConfigs/` (index: `/home/dank/Projects/serverAppConfigs/docs/index.md`). Podman deployment configuration for both servers: compose files, Caddy reverse proxy, deploy scripts, bats tests, and the Obsidian-vault service docs (Dankclaw, Dankserver, Architecture, Infrastructure) — **plus the LLM inference fleet** (merged from the former `vllmScripts` repo on 2026-08-22, history preserved): llama.cpp on Dankserver (:7770, `frank-default-small`) and CIRU ROCmFPX llama.cpp on Dankclaw (:7770, `frank-default-large`). LLM fleet docs: `docs/LLM/index.md`; deploy runbook: `docs/LLM/deployment.md`. * **serverAppConfigs** — deploy repo + Obsidian vault, on this workstation at `~/Projects/serverAppConfig/` with docs in `~/Projects/serverAppConfig/serverAppConfigs-docs/` (root `index.md` at the vault top — the old `docs/` prefix is gone). Podman deployment configuration for both servers: compose/quadlet files, Caddy reverse proxy, deploy scripts, bats tests, and the vault service docs (Dankclaw, Dankserver, Architecture, Infrastructure) — **plus the LLM inference fleet** (merged from the former `vllmScripts` repo on 2026-08-22, history preserved): radiance frank-archon on Dankserver (:7770), halogen frank-dragoon (:7770) and llama.cpp frank-zealot (:7771) on Dankclaw. The vault's `LLM/` runbooks are the deploy-side source of truth; this bundle documents the agent/harness side.
## Related ## Related
+4 -5
View File
@@ -5,13 +5,12 @@ description: Gitea container architecture, network topology, and Caddy reverse p
tags: tags:
- gitea - gitea
- architecture - architecture
- unverified verified: 2026-10-18
verified: 2026-08-28
--- ---
# Gitea Architecture # Gitea Architecture
Three quadlet-managed containers on a shared private Podman network (rootless, user `dank`). Gitea connects to PostgreSQL via network DNS. Caddy proxies HTTP/S to Gitea. Two quadlet-managed containers (Gitea, PostgreSQL) on a shared private Podman network (rootless, user `dank`). Gitea connects to PostgreSQL via network DNS. The fleet Caddy (separate stack, see [/caddy/index.md](/caddy/index.md)) proxies HTTP/S to Gitea — the old dedicated `gitea-caddy` container is retired.
## Network Topology ## Network Topology
@@ -63,10 +62,10 @@ Key environment variables:
- `DATABASE_HOST=gitea-postgres` (network DNS) - `DATABASE_HOST=gitea-postgres` (network DNS)
- `DATABASE_NAME=gitea` - `DATABASE_NAME=gitea`
- `DATABASE_USER=gitea` - `DATABASE_USER=gitea`
- `DATABASE_PASSWD` from `/opt/gitea/.env` (mode 0600) - `DATABASE_PASSWD` from `/home/dank/Containers/gitea/env` (mode 0600)
- `USER_UID=1000`, `USER_GID=1000` - `USER_UID=1000`, `USER_GID=1000`
Gitea writes `/data/gitea/conf/app.ini` on first start (host: `/opt/gitea/data/gitea-gitea/gitea/conf/app.ini`). The `[database] HOST` and `PASSWD` lines in app.ini override the env vars. When you rename the database container, edit the `HOST` line in app.ini as well. Gitea writes `/data/gitea/conf/app.ini` on first start (host: `/home/dank/Containers/gitea/data/gitea/conf/app.ini`). The `[database] HOST` and `PASSWD` lines in app.ini override the env vars. When you rename the database container, edit the `HOST` line in app.ini as well.
## Ports ## Ports
+9 -10
View File
@@ -1,24 +1,23 @@
--- ---
type: reference type: reference
title: Gitea Data Persistence title: Gitea Data Persistence
description: Gitea data persistence, volume mounts, ownership, and backup strategy on dankclaw. description: Gitea data persistence, volume mounts, ownership, and backup strategy on dankclaw (Containers/gitea layout).
tags: tags:
- gitea - gitea
- data - data
- unverified verified: 2026-10-18
verified: 2026-08-28
--- ---
# Gitea Data Persistence # Gitea Data Persistence
All data lives on host bind mounts under `/opt/gitea/data/`. Containers are ephemeral. Quadlet stops remove the container (`podman run --rm --replace`). The next start recreates it. Data survives. All data lives on host bind mounts under `/home/dank/Containers/gitea/` (fleet storage standard since 2026-09-01; quadlet units re-pointed from the old `/opt/gitea/data/` tree, which lingers on disk as a leftover — never write to it). Containers are ephemeral. Quadlet stops remove the container (`podman run --rm --replace`). The next start recreates it. Data survives.
## Volume Layout ## Volume Layout
| Host Path | Container Mount | Contents | | Host Path | Container Mount | Contents |
|---|---|---| |---|---|---|
| `/opt/gitea/data/gitea-gitea/` | `/data` | Git repositories, avatars, attachments, LFS objects, `app.ini` | | `/home/dank/Containers/gitea/data/` | `/data` (gitea-server) | Git repositories, avatars, attachments, LFS objects, `app.ini` |
| `/opt/gitea/data/gitea-postgres/` | `/var/lib/postgresql/data` | PostgreSQL WAL, tables, indexes | | `/home/dank/Containers/gitea/postgres/` | `/var/lib/postgresql/data` (gitea-postgres) | PostgreSQL WAL, tables, indexes |
## Ownership ## Ownership
@@ -37,7 +36,7 @@ podman exec --user 1000 gitea-server sed -i 's/old/new/' /data/gitea/conf/app.in
Tar the entire data directory. This captures Gitea repos and PostgreSQL data in one archive. Tar the entire data directory. This captures Gitea repos and PostgreSQL data in one archive.
``` ```
tar czf gitea-backup-$(date +%F).tar.gz -C /opt/gitea data/ tar czf gitea-backup-$(date +%F).tar.gz -C /home/dank/Containers/gitea data/ postgres/
``` ```
### PostgreSQL-only backup ### PostgreSQL-only backup
@@ -48,17 +47,17 @@ Use `pg_dump` for a portable SQL dump. Useful for restoring to a different Postg
podman exec -e PGPASSWORD="$GITEA_DB_PASSWORD" gitea-postgres pg_dump -U gitea gitea > gitea-db-$(date +%F).sql podman exec -e PGPASSWORD="$GITEA_DB_PASSWORD" gitea-postgres pg_dump -U gitea gitea > gitea-db-$(date +%F).sql
``` ```
Set `PGPASSWORD` from `/opt/gitea/.env` (mode 0600). Set `PGPASSWORD` from `/home/dank/Containers/gitea/env` (mode 0600, `GITEA_DB_PASSWORD`).
### Restore procedure ### Restore procedure
1. Stop the stack: `systemctl --user stop gitea-server gitea-postgres` 1. Stop the stack: `systemctl --user stop gitea-server gitea-postgres`
2. Restore data: `tar xzf backup.tar.gz -C /opt/gitea/` 2. Restore data: `tar xzf backup.tar.gz -C /home/dank/Containers/gitea/`
3. Start the stack: `systemctl --user start gitea-postgres gitea-server` 3. Start the stack: `systemctl --user start gitea-postgres gitea-server`
## Data Growth ## Data Growth
- Git repositories grow with each commit and push. Monitor with `du -sh /opt/gitea/data/gitea-gitea/git/repositories/`. - Git repositories grow with each commit and push. Monitor with `du -sh /home/dank/Containers/gitea/data/git/repositories/`.
- PostgreSQL WAL files accumulate. VACUUM via `podman exec gitea-postgres psql -U gitea -c "VACUUM;"`. - PostgreSQL WAL files accumulate. VACUUM via `podman exec gitea-postgres psql -U gitea -c "VACUUM;"`.
- Gitea's log files grow with usage. - Gitea's log files grow with usage.
+16 -16
View File
@@ -1,11 +1,11 @@
# Gitea on dankclaw # Gitea on dankclaw
Private Git hosting on dankclaw. Three quadlet-managed containers in the rootless podman session of user `dank`: Gitea, PostgreSQL, Caddy. Private Git hosting on dankclaw. Two quadlet-managed containers in the rootless podman session of user `dank`: Gitea and PostgreSQL, sharing a dedicated network unit. The former `gitea-caddy` container is **retired** — the canonical fleet Caddy (`caddy.service`, see [/caddy/index.md](/caddy/index.md)) fronts `gitea.franksdank.cloud`; do not recreate the retired unit.
**Host:** dankclaw (71.227.227.172) **Host:** dankclaw (192.168.0.143 LAN)
**Config:** `~/.config/containers/systemd/gitea-{postgres,server,caddy}.container` + `gitea.network` **Config:** `~/.config/containers/systemd/gitea-{postgres,server}.container` + `gitea.network`
**Local access:** `http://dankclaw:3000` **Local access:** `http://dankclaw:3000` (verified 2026-10-18)
**Domain:** `https://gitea.franksdank.cloud` (DNS pending) **Domain:** `https://gitea.franksdank.cloud` (live; served by fleet Caddy, DNS-01 TLS)
## Architecture ## Architecture
@@ -13,7 +13,7 @@ Private Git hosting on dankclaw. Three quadlet-managed containers in the rootles
|---|---|---|---| |---|---|---|---|
| `gitea-server` | `gitea-server.service` | 3000 (HTTP), 2222 (SSH) | Git web UI, API, SSH daemon | | `gitea-server` | `gitea-server.service` | 3000 (HTTP), 2222 (SSH) | Git web UI, API, SSH daemon |
| `gitea-postgres` | `gitea-postgres.service` | 5432 (internal) | Database | | `gitea-postgres` | `gitea-postgres.service` | 5432 (internal) | Database |
| `gitea-caddy` | `gitea-caddy.service` | 80, 443 | Reverse proxy, auto-TLS | | (network) | `gitea-network.service` | — | quadlet `gitea.network` bring-up |
The containers share the private network `systemd-gitea` (quadlet `gitea.network`, DNS enabled). The automatic `podman` default network has DNS disabled; do not run the stack on it. The containers share the private network `systemd-gitea` (quadlet `gitea.network`, DNS enabled). The automatic `podman` default network has DNS disabled; do not run the stack on it.
@@ -23,21 +23,21 @@ All commands run as `dank` on dankclaw.
| Action | Command | | Action | Command |
|---|---| |---|---|
| Start all | `systemctl --user start gitea-postgres gitea-server gitea-caddy` | | Start all | `systemctl --user start gitea-postgres gitea-server` |
| Stop all | `systemctl --user stop gitea-caddy gitea-server gitea-postgres` | | Stop all | `systemctl --user stop gitea-server gitea-postgres` |
| Restart Gitea only | `systemctl --user restart gitea-server` | | Restart Gitea only | `systemctl --user restart gitea-server` |
| Follow logs | `podman logs -f gitea-server` or `journalctl --user -u gitea-server -f` | | Follow logs | `podman logs -f gitea-server` or `journalctl --user -u gitea-server -f` |
| Check status | `systemctl --user status gitea-postgres gitea-server gitea-caddy` | | Check status | `systemctl --user status gitea-postgres gitea-server` |
## Data Persistence ## Data Persistence
All data lives on host bind mounts under `/opt/gitea/data/`. Containers are ephemeral. Stopping a quadlet unit removes its container; the next start recreates it. Volumes survive. All data lives on host bind mounts under `/home/dank/Containers/gitea/` (fleet storage standard since 2026-09-01; verified live 2026-10-18). Containers are ephemeral. Stopping a quadlet unit removes its container; the next start recreates it. Volumes survive. The old `/opt/gitea/` tree remains on disk as a leftover — do not use it.
| Volume Path | Container Mount | Contents | | Path | Contents |
|---|---|---| |---|---|
| `/opt/gitea/data/gitea-gitea/` | `/data` | Git repositories, app.ini, attachments | | `/home/dank/Containers/gitea/data/` | Git repositories, app.ini, attachments |
| `/opt/gitea/data/gitea-postgres/` | `/var/lib/postgresql/data` | PostgreSQL data files | | `/home/dank/Containers/gitea/postgres/` | PostgreSQL data files |
| `/opt/gitea/data/caddy/data/` | `/root/.local/share/caddy` | Caddy configuration, TLS certs | | `/home/dank/Containers/gitea/env` | EnvironmentFile (mode 0600; `GITEA_DB_PASSWORD`) |
See [[data-persistence|data-persistence]] for backup and restore. See [[data-persistence|data-persistence]] for backup and restore.
@@ -49,7 +49,7 @@ See [[management|management]] for boot persistence details and troubleshooting.
## Repo Copies ## Repo Copies
The quadlet files, Caddyfile, and `.env.example` are tracked in the `serverAppConfigs` repo under `dankclaw/gitea/`. The live password lives only in `/opt/gitea/.env` on the host (mode 0600). The quadlet files and `.env` templates are tracked in the `serverAppConfigs` deploy repo; the sibling vault page `Infrastructure/Gitea.md` (in `~/Projects/serverAppConfig/serverAppConfigs-docs/`) is the deploy-side source of truth. Secrets live only on the host under `Containers/gitea/` (mode 0600), never in either docs tree.
## See Also ## See Also
+4 -5
View File
@@ -6,8 +6,7 @@ tags:
- gitea - gitea
- management - management
- quadlet - quadlet
- unverified verified: 2026-10-18
verified: 2026-08-28
--- ---
# Gitea Management # Gitea Management
@@ -45,8 +44,8 @@ After editing a quadlet file: run `systemctl --user daemon-reload`, then restart
| File | Path | | File | Path |
|---|---| |---|---|
| Quadlet units | `~/.config/containers/systemd/gitea-*.container`, `gitea.network` | | Quadlet units | `~/.config/containers/systemd/gitea-*.container`, `gitea.network` |
| Secrets | `/opt/gitea/.env` (mode 0600, `GITEA_DB_PASSWORD`) | | Secrets | `/home/dank/Containers/gitea/env` (mode 0600, `GITEA_DB_PASSWORD`) — quadlet `EnvironmentFile` |
| Gitea app config | `/opt/gitea/data/gitea-gitea/gitea/conf/app.ini` (container-owned, UID 100999) | | Gitea app config | `/home/dank/Containers/gitea/data/gitea/conf/app.ini` (container-owned, UID 100999) |
Repo copies: `serverAppConfigs/dankclaw/gitea/` (quadlet files, `.env.example`). Copy edits to the target, then `daemon-reload` + restart. Repo copies: `serverAppConfigs/dankclaw/gitea/` (quadlet files, `.env.example`). Copy edits to the target, then `daemon-reload` + restart.
@@ -62,7 +61,7 @@ Gitea handles database migrations automatically on startup. PostgreSQL version b
### Gitea cannot reach the database ### Gitea cannot reach the database
Check the `[database] HOST` line in `/opt/gitea/data/gitea-gitea/gitea/conf/app.ini`. It must be `gitea-postgres:5432`. app.ini overrides the `DATABASE_HOST` env var. Check the `[database] HOST` line in `/home/dank/Containers/gitea/data/gitea/conf/app.ini`. It must be `gitea-postgres:5432`. app.ini overrides the `DATABASE_HOST` env var.
Then check name resolution from the container: Then check name resolution from the container:
+1 -1
View File
@@ -50,7 +50,7 @@ llama-server -hf ggml-org/gemma-3-1b-it-GGUF
**Defaults**: Listens on `127.0.0.1:8080`. Single slot (one concurrent request). **Defaults**: Listens on `127.0.0.1:8080`. Single slot (one concurrent request).
> **System note:** On this network the Pi inference hosts do not use the default port. Pi serves `frank-default-small` (dankserver) and `frank-default-large` (dankclaw), each on port `7770`. The local Ornith host runs on port `8080`. See [Pi Models Configuration](../../pi/models.md). > **System note:** On this network the fleet inference hosts do not use the default port. As of 2026-10 the only llama.cpp endpoint is `frank-zealot` on dankclaw **:7771** (PrismML fork build); `frank-dragoon` (dankclaw :7770, halogen-flash-server) and `frank-archon` (dankserver :7770, radiance) are different engines — see [System hosts](/system/index.md). The pi-era `frank-default-small`/`frank-default-large` llama.cpp pair (each :7770) is retired; [Pi Models Configuration](../../pi/models.md) is a pi-era archive.
--- ---