Census against serverAppConfigs-docs + read-only ssh probes on both boxes (2026-10-18). Corrections to OURS, flags only for THEIRS: - Hardware drift: RTX 3090 moved dankserver->dankclaw 2026-09; dankserver now 2x Radeon AI PRO R9700 (Ryzen 7 7700X stays), 246 GiB RAM, no swap; dankclaw 121 GiB RAM + 64 GiB swap. Served: frank-archon radiance TP=2 (:7770 dankserver), frank-dragoon halogen NATIVE v2 (:7770 dankclaw iGPU), frank-zealot llama.cpp PrismML Ternary-Bonsai-2-27B PQ2_0 (:7771 dankclaw, 3090). Kernel 7.0.0-38 both; dankclaw :7770 no auth. - Gitea: gitea-caddy quadlet retired (fleet Caddy fronts the domain); data tree moved to /home/dank/Containers/gitea/ (2026-09-01 standard), /opt/gitea is a do-not-use leftover; LAN IP + live domain. - pi-era pages (core/settings, pi/models + role tables) demarcated as ARCHIVE with banners; llama-cpp fleet note modernized. - AGENTS.md machine-facts table corrected (it still routed prod warnings at frank-default-large). Their-side staleness flagged in the changelog entry for the operator, not edited: OMP Harness thresholdPercent 70 (live is 95), Ubuntu 24.04 OS table, 2026-09-03 stack mapping, superseded pi-KB backlink. Refs #5
101 lines
6.1 KiB
Markdown
101 lines
6.1 KiB
Markdown
# AGENTS.md — ~/.omp command center
|
||
|
||
System-configuration command center for Frank's fleet: agent config, knowledge base,
|
||
small system utilities, and (soon) dotfiles. You — the reader — are probably an agent
|
||
running on one of Frank's workstations with this repo as your working directory. Read
|
||
`omp-docs/index.md` before you touch anything. This file is the operating contract;
|
||
`omp-docs/` is the knowledge base (OKF v0.1 format: directory of markdown files
|
||
with YAML frontmatter, spec at `omp-docs/references/okf-spec.md`).
|
||
|
||
## What this repo is
|
||
|
||
- The live agent-config directory AND a git repo pushed to Gitea
|
||
(`dank/command-center` on the Dankclaw instance). There is no staging copy:
|
||
**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
|
||
a work session checked out on anything but `develop` or `main`.
|
||
- Contents that belong here: `AGENTS.md`, `omp-docs/` (knowledge base),
|
||
`scripts/` (small system utilities), `agent/` + `plugins/` (harness config and
|
||
plugin manifests). Everything else under this directory is runtime state and is
|
||
gitignored on principle — see `.gitignore`. History must mean "the configuration
|
||
changed", not "the agent breathed".
|
||
|
||
## Git-flow SDLC (full flow, from day one)
|
||
|
||
- 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
|
||
one moving part gets an issue first.
|
||
- Branch naming: `<type>/<issue#>-<slug>`, type ∈ feat|fix|docs|chore.
|
||
Release cuts: `release/X.Y.Z` from `develop`; hotfixes: `hotfix/<slug>` from `main`.
|
||
- **Merge, never rebase**, when updating a branch against a moved main — Frank
|
||
dislikes the history rewrite. **Never merge a PR without an explicit OK from Frank.**
|
||
- Merge into `develop` with `--no-ff` so feature arcs stay visible in history.
|
||
- Releases: cut `release/X.Y.Z` from `develop`, verify, merge to `main`, tag
|
||
`vX.Y.Z`, back-merge `main` into `develop`. Tags are the deploy markers every
|
||
other machine pulls to.
|
||
- Trash convention: never `rm` anything user-authored — move it to `.AGENTTRASH/`
|
||
(gitignored). Deletion is a pruning session with Frank present.
|
||
|
||
### Commit hygiene (mirrors dank/serverAppConfigs)
|
||
|
||
The law is imported from the serverAppConfigs repo — checkout on the dev box at
|
||
`~/Projects/serverAppConfig`, see its `AGENTS.md` § *Git Workflow* and
|
||
§ *Testing* ("All edits flow through git", "tests are mandatory before
|
||
commit"). Applied here:
|
||
|
||
- `git pull` before starting new work; start from a clean tree. The checkout
|
||
IS the deployment here — a dirty tracked file is a half-deployed config
|
||
serving the live agent.
|
||
- Commit atomically and early: one commit = one complete functional unit,
|
||
never a pile of half-edited files; docs land in the same commit as the
|
||
change they document.
|
||
- `bats tests/` green + the pre-commit secret gate = the commit precondition;
|
||
the full suite runs at pre-push.
|
||
- Push to the local Gitea as soon as a unit is green — every other
|
||
workstation pulls from there. `git * --no-verify` is forbidden (the secret
|
||
gate is the point of the hook).
|
||
- Messages: imperative mood, what + why, `Refs #N` when a Gitea issue exists.
|
||
|
||
## Secret gate (HARD rule)
|
||
|
||
The pre-commit hook (`.githooks/pre-commit`, enabled via
|
||
`git config core.hooksPath .githooks`) scans every staged diff for live-secret
|
||
shapes (`sk-…`, `ghp_…`, `github_pat_…`, `glpat-…`, `xox…`, `AKIA…`, PEM headers,
|
||
JWTs) and blocks the commit. Quarantine list — never tracked, ever: `auth.json`,
|
||
`.env`, `trust.json`, `*.pem`, `*.key`, `identity*`. Deliberate override:
|
||
`ALLOW_SECRETS=1 git commit …`. Remember why: a secret in a tracked file is a
|
||
secret in every agent's context window on every machine that pulls this repo.
|
||
|
||
## Machine facts (verify before trusting)
|
||
|
||
| 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` |
|
||
| 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 | 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
|
||
|
||
- Gitea API needs a token: `GITEA_TOKEN` env (gitignored `.env`). No `tea` CLI
|
||
installed anywhere. Remote URLs embed the token locally in `.git/config` — that
|
||
file is never pushed; it is not a substitute for the secret gate.
|
||
- Passwordless sudo (`sudo -n`) works on Dankclaw and Dankserver for systemctl
|
||
verbs only; user units need no sudo at all.
|
||
- SSH into both servers is BatchMode-capable from here:
|
||
`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.
|
||
- `frank-archon` (Dankserver), `frank-dragoon`, and `frank-zealot` (Dankclaw)
|
||
are **production services** shared with this repo's operator: never stop,
|
||
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)
|
||
|
||
- One concept, one file; directories get an `index.md` listing their contents —
|
||
that's the OKF contract, and it is also the anti-rot mechanism: nothing may
|
||
appear in a directory that its `index.md` doesn't list.
|
||
- Root of the repo is capped: config, docs, scripts, harness dirs. A new
|
||
top-level entry requires a commit message that justifies itself.
|
||
- Runtime state (dbs, logs, caches, sessions) is gitignored on principle — if you
|
||
feel the urge to commit one of those, stop and reread this section.
|