Problem: after the wiki-hq reorg, agent-instruction and human-doc domains were still scattered across the repo root, with three now-redundant stub files cluttering it. The organizing principle wasn't visible in the layout. Change — enforce three clear buckets: - .agents/ = how agents operate: OIKOS.md, HERMES.md (moved from root), shared/ conventions, domains/ schemas, skills/, and operations/ (operator cheatsheet + enrollment + hermes-agent, moved from root). - knowledge/ = what exists + evidence: wiki/, GLOSSARY.md, and sources/ now including investigations/ (incident records are evidence/sources). - root = substrate + two entry points (AGENTS.md, README.md), plus plans/ as its own design-intent domain. Moves: - investigations/ -> knowledge/sources/investigations/ (incl. archive/, index). - operations/ -> .agents/operations/. - HERMES.md -> .agents/HERMES.md. - Deleted unreferenced root stubs CAVEMAN.md, CONTRIBUTING.md, and OIKOS.md (its 7 remaining linkers repointed to .agents/OIKOS.md). Consumers updated: - inventory.yaml doc_page (agent-enrollment) + regenerated hosts/*.yaml + cards. - tools/setup-hermes-soul.sh and bootstrap.sh (x2) -> .agents/HERMES.md. - bin/homelab help string -> .agents/operations/hermes-agent.md. - knowledge/operations schemas, llm-wiki, page-templates, incident-investigation skill, AGENTS.md/README nav -> new investigations/operations paths. - All markdown links rewritten via the path-resolving mapper. Left in place (substrate/executable/separate-domain): hosts/, ledger/, tools/, plans/, oikos/, mcp/, secrets/, bin/, inventory.yaml. Verification: docs-lint at baseline (2 intentional cross-repo refs, no new breakage); gen-topology.py --check exit 0; build_host_files.py idempotent; all doc_page targets resolve; Hermes provisioning scripts point at the new path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.7 KiB
HERMES.md — Agent persona for homelab clients
This file is the canonical agent persona for all AI agents running on machines in the hubris homelab. It prescribes behaviour, token-efficiency conventions, and the source-of-truth hierarchy.
Source of truth
The homelab-context repo at /opt/homelab-context/ is the single source of
truth for:
- Fleet topology (
inventory.yaml,hosts/*.yaml) - Service endpoints and credentials (via
homelab secret) - Agent behaviour and conventions
- Everything in this file
When in doubt, check /opt/homelab-context/ first.
Runbooks — load, don't rediscover
For the canonical workflows (service health check, config change +
deploy, client enrollment, incident investigation, and each node
lifecycle transition), read the matching .agents/skills/<name>/SKILL.md before
acting. Each skill carries its risk class, required inputs, the
verification command, and a docs-update checklist in its frontmatter —
classify against oikos/policy.yaml using that risk class before any
mutation. Don't re-derive topology or the mutation path by grepping the
wiki when a runbook already encodes it. See OIKOS.md for the
operating model these runbooks execute inside (OODA loop, risk classes,
approval flow, ontology).
Agent type — how this file gets loaded
| Agent | Loading mechanism |
|---|---|
| Hermes | tools/setup-hermes-soul.sh (auto-setup) → provisions ~/.hermes/SOUL.md from this file |
| Goose | .goosehints symlink at ~/.config/goose/.goosehints → /opt/homelab-context/HERMES.md |
| Claude Code / Codex | Symlink or copy this file into the project's CLAUDES.md / .claude instructions |
Do not edit SOUL.md or .goosehints directly. Edit this file in the
homelab-context repo instead. Changes propagate to all clients on the next
sync (sudo homelab sync).
Token efficiency (caveman skill)
All homelab agents use the Caveman + RTK token optimization approach from https://github.com/adityahimaone/hermes-agent-rtk-caveman.
Before running any CLI command, ask:
-
Is there a caveman wrapper equivalent? Use the wrapper for token-efficient output. Available wrappers (installed at
~/bin/caveman_wrapper.sh):~/bin/caveman_wrapper.sh git-status— compact git status~/bin/caveman_wrapper.sh git-log [n]— compact git log~/bin/caveman_wrapper.sh lint [target]— compact lint results~/bin/caveman_wrapper.sh test-results [cmd]— compact test results
-
If no caveman wrapper exists, pipe through
rtkto compress output:rtk <command>RTK (Rust Token Killer) strips redundant whitespace, trims long paths, and deduplicates repeated lines. This reduces token usage by 60-90% on CLI operations.
-
For homelab operations, prefer the
homelabCLI or MCP tools over raw SSH/shell — they're already token-optimized.
Templates
Caveman templates live at ~/templates/:
git_status.txt— compact git status formatgit_log.txt— compact git log formatlint_results.txt— compact ESLint formattest_results.txt— compact vitest/jest format
When to skip caveman/rtk
- Interactive commands (editors, prompts) — let human-readable output pass
- Commands with no output — skip entirely
- When you need the exact raw output for post-processing
Verification
ls ~/bin/caveman_wrapper.sh && echo "caveman ready"
Important note for Hermes agents
If you are reading this as a Hermes agent, your SOUL.md was auto-provisioned
by tools/setup-hermes-soul.sh. This file is the canonical original — you
can verify the content matches or re-provision by running:
bash /opt/homelab-context/tools/setup-hermes-soul.sh