Principles
Principles
candidate
Principles need activation fields
Context: Use when deciding whether a session lesson is ready for durable storage, a report, a skill patch, or no save.
Rule: A principle is not complete until it has context, rule, failure test, evidence, proposed home, activation, and reason.
Failure test: The extraction can be rendered, but BB or a future agent still has to infer why it matters or what protected write it implies.
Reason: Makes the report actionable without auto-writing protected context.
Proposed home: 90-System/Schemas/session-learning-extraction.schema.json
Activation: renderer
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- A principle needs context, rule, failure test, evidence, and activation route.
schemaactivationquality-gate
Principles
candidate
Useful context beats principle labels
Context: Use when extracting reusable lessons from BB and Hermes sessions. A short label is only useful if the future agent can tell when to apply it.
Rule: Capture the operating context with the lesson. Include when it applies, what to do, what failure looks like, evidence, proposed home, activation route, and reason.
Failure test: A future agent can read the title but still cannot tell when to use it, what behaviour changes, or where it should be activated.
Reason: Prevents durable learning from turning into vague slogans that do not change future behaviour.
Proposed home: 20-Knowledge/Frameworks/Session-Learning-Extraction.md
Activation: vault
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Useful context beats principle labels.
session-learningprinciplesextraction
Principles
candidate
Keep building until the real gate is proven
Context: Use when BB tells Hermes to keep going, says it keeps stopping, or asks what Hermes is waiting on during an active build/project thread.
Rule: Do not stop at a status narration when there is still safe project work available. Continue through the next verifiable artifact, then name the actual gate as agent, tool, access, config, or user. Only call it user-waiting after checking the local/project prerequisites that would let the work continue.
Failure test: Hermes says it is waiting on BB while unchecked project files, tool availability, or local install/access discovery could have moved the task forward.
Reason: This directly targets BB's repeated frustration with agents stopping early and turns it into an operational gate test, not a vibe.
Proposed home: 20-Knowledge/Frameworks/Autonomous-Progress-Gates.md
Activation: SOP
Evidence
- session_id
- 20260629_204006_81e801
- message_id
- 103096
- quote
- What I’m waiting on - A real WP/Directorist target: WP admin URL/login, or a LocalWP/site path I’m allowed to use/create for P-002. I checked locally: no P-002 WordPress install found; no Directorist plugin found.
autonomyproject-deliverygates
Principles
candidate
Subagent output is untrusted until source constraints pass
Context: Use when workers collect, transform, or overwrite project data under hard source restrictions or compliance constraints.
Rule: Treat worker artifacts as proposed output until a deterministic review checks source constraints, forbidden-source leakage, row counts, and canonical file preservation. Preserve rejected worker output as audit evidence instead of silently deleting it.
Failure test: A worker overwrites a canonical sample with data from a forbidden source, and Hermes continues as if the file is valid because the worker said it was done.
Reason: Hard source restrictions are brittle. A single unchecked worker overwrite can poison a project dataset.
Proposed home: 20-Knowledge/Frameworks/Subagent-Output-Review.md
Activation: skill
Evidence
- session_id
- 20260629_204006_81e801
- message_id
- 102998
- quote
- Resolved issue where a worker overwrote the canonical 50-row IAA sample with a 30-row alternate containing forbidden sources (Law Society mentions). Preserved worker output as rejected audit files. Restored canonical clean sample from raw capture.
subagentsdata-qualitysource-constraints
Principles
candidate
Verification claims must match the freshness of the evidence
Context: Use after code edits when Hermes hooks or runtime checks say no canonical test/lint/build command was detected, or when only a focused verifier was run.
Rule: If the evidence is an ad-hoc focused verifier, say that plainly and do not claim full suite green. When hooks require current-turn proof, create a temporary hermes-verify-* script, run it against the changed behavior, clean it up when possible, and report the exact scope.
Failure test: Hermes says done and verified, but the only proof is stale, from a previous turn, or narrower than the claim.
Reason: Keeps verification language honest and prevents false confidence after code edits.
Proposed home: 20-Knowledge/SOPs/code-verification-evidence.md
Activation: SOP
Evidence
- session_id
- 20260629_151207_8c3702
- message_id
- 102130
- quote
- Ad-hoc focused verification, not full suite green.
verificationhookscode
Principles
candidate
Claude wrapper status needs child-PID proof
Context: Use when Hermes runs Claude/Codex/background reviewer lanes and the wrapper reports exited, failed, or exit_code null while a real CLI process or output file may still exist.
Rule: Do not trust wrapper status alone. Check the real child PID, process tree, output file size/mtime, and diff before spawning another lane or declaring the worker failed. If the child process is alive but silent, monitor once, then stop and re-spec rather than stacking duplicates.
Failure test: Hermes starts a duplicate Claude lane or reports failure while the original Claude PID is still alive, holding locks, writing files, or about to produce output.
Reason: This failure can waste quota, corrupt review evidence, and create duplicate worker lanes from a false terminal status.
Proposed home: 20-Knowledge/SOPs/claude-worker-lifecycle-triage.md
Activation: SOP
Evidence
- session_id
- 20260630_125643_86f7875d
- message_id
- 105317
- quote
- Hermes process wrapper says exited, but the real Claude PID `138` is still running. Same tracking bug. I’ll monitor PID directly and give it time instead of spawning another duplicate.
claudeworker-lanesprocess-lifecycleverification
Principles
candidate
Closeout means stop unless a concrete defect appears
Context: Use after a broad vault/system cleanup reaches verified zero queues, zero missing targets, or zero active stale references.
Rule: Once closeout verifies no migration review queue remains, stop broad migration work. Future work should be concrete missing-file fixes, stale-reference fixes, or an explicit new user request, not another sweep for the sake of sweeping.
Failure test: Hermes restarts inventories or keeps migrating after the closeout says no review queue remains, creating churn instead of value.
Reason: Useful lesson captured in JSONL; no activation needed because the obsidian-vault skill already carries the closeout pattern and this run should not mutate skills.
Proposed home: 20-Knowledge/Frameworks/Vault-OS-Closeout.md
Activation: none
Evidence
- session_id
- 20260701_172713_3f612a
- message_id
- 109012
- quote
- State now: no migration review queue remains. Next work should only be concrete stale-reference/missing-file fixes, or we stop touching this thing.
closeoutvault-osscope-control
Presentation Rules
Presentation Rules
candidate
Reports should be data-first
Context: Use when building recurring Hermes reports or update surfaces that will be regenerated many times.
Rule: Start with schema and JSONL, then build a deterministic renderer, then generate HTML. Do not hand-author future report HTML after the renderer exists.
Failure test: The report looks good once, but later updates require manual HTML edits and drift away from the data model.
Reason: Keeps report updates repeatable, verifiable, and less dependent on LLM layout choices.
Proposed home: 90-System/Hermes/Session-Learning-Extraction/scripts/render_report.py
Activation: renderer
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Reports should be data-first: schema/JSON first, renderer second, HTML last.
reportsrendererjsonl
Presentation Rules
candidate
Simple version stays visible
Context: Use when reports contain detail cards, accordions, evidence, or expanded sections.
Rule: Keep the plain-English meaning and action state visible without requiring BB to expand every item.
Failure test: BB has to open each detail block just to know whether something matters, needs approval, or is safe to ignore.
Reason: Preserves scanability when a report becomes detailed.
Proposed home: renderer template and future report design rules
Activation: renderer
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Simple versions must stay visible when reports get detailed.
report-uiscanabilitybb-facing
Presentation Rules
candidate
Telegram tables are a hostile surface
Context: Use for Telegram progress reports, project summaries, issue summaries, and any BB-facing mobile message where formatting needs to survive Telegram rendering.
Rule: Avoid Markdown tables in Telegram. Use short bullets or grouped headings unless the deliverable is an HTML report or vault/technical markdown where tables will render reliably.
Failure test: BB receives a Telegram reply where a table becomes visually messy, hard to scan, or triggers a follow-up issue about rich text formatting.
Reason: Prevents correct information from being delivered in a format BB cannot read quickly on mobile.
Proposed home: 90-System/Schemas/telegram-report-formatting.md
Activation: renderer
Evidence
- session_id
- 20260629_204006_81e801
- message_id
- 102998
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/80-Logs/Hermes-Issues/issues-log.md
- quote
- Logged issue H-I-002: Telegram rich text tables render badly for BB.
telegramformattingpresentation
Presentation Rules
candidate
Deliver the artifact, not a useless local path
Context: Use when producing HTML memos, reports, decision briefs, or anything BB is expected to open from Telegram or continue in another topic.
Rule: If BB asked for an HTML artifact or mobile-usable deliverable, attach or publish the artifact when the channel supports it. A local file path is only supporting evidence, not delivery. Also write a handoff prompt when the work must continue in another topic.
Failure test: BB replies that a file path is useless, asks why the HTML was not attached, or has to manually hunt for the artifact before continuing the work.
Reason: The work can be correct and still fail if the deliverable is not delivered in a usable form.
Proposed home: 90-System/Schemas/artifact-delivery-contract.md
Activation: renderer
Evidence
- session_id
- 20260630_165133_f1bbfb
- message_id
- 105601
- quote
- did you finish creating it? if so why didn't you attach it as an html? giving me a file path is useless!
deliverableshtmltelegramhandoff
Presentation Rules
candidate
Explain what the material is before naming paths
Context: Use in vault migrations, corpus audits, and BB-facing handoffs where many files are being classified or moved.
Rule: Start with the operational meaning: what the material is, why it matters, and how it will be used. Paths come after that as evidence or navigation, not as the main explanation.
Failure test: BB has to decode a list of file paths to understand whether the thing is a course, source evidence, project derivative, archive junk, or reusable knowledge.
Reason: This is a reusable BB-facing presentation rule for vault work. The obsidian-vault skill already contains this shape, so this is an update/check candidate rather than a new file.
Proposed home: ~/.hermes/skills/note-taking/obsidian-vault
Activation: skill
Evidence
- session_id
- 20260701_153804_4b4a8d
- message_id
- 108460
- path
- 80-Logs/Audits/Vault-Ops/fresh-chat-handoff-vault-os-migration-2026-07-01.md
- quote
- Do not explain migrations as path soup. Explain what the material *is* first.
presentationvault-osbb-facing
SOP Candidates
SOP Candidates
candidate
File client evidence with the active canonical project before perfect migration purity
Context: Use when filing client emails, PDFs, screenshots, or source evidence while the new Vault OS says client work belongs under 30-Clients but the live project trail still exists under 40-Projects.
Rule: Preserve retrieval continuity by filing into the active canonical project home, then leave a routing note if the Vault OS ideal home differs. Save original, extracted text, clean source note, per-source nuggets-of-wisdom.md, and extracted evidence images when useful.
Failure test: Evidence is split into a new theoretically-correct folder while the active project remains elsewhere, so future project work cannot find the source trail.
Reason: This is a repeatable migration-era filing rule that protects evidence retrieval while Vault OS is still settling.
Proposed home: 20-Knowledge/SOPs/client-email-attachment-filing.md
Activation: SOP
Evidence
- session_id
- 20260629_140530_47298f3f
- message_id
- 101725
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/Symon/sources/emails/2026-06-29__update-on-web-search-ai-search/
- quote
- New Vault OS would ideally put client work under 30-Clients, but Symon’s active canonical project is still 40-Projects/Symon, so I kept it with the live project rather than splitting the trail.
vault-osclient-evidencefiling
SOP Candidates
candidate
Course-backed projects need an artifact-chain gate
Context: Use when a project is based on a course, training, blueprint, or creator workflow and Hermes starts substituting generic execution for the course's named steps.
Rule: Before implementation is treated as launch-ready, extract the course phase map, list the required artifacts, and mark each one as done, substituted, skipped, or waived with evidence. Missing course artifacts must become an explicit catch-up gate or an explicit BB waiver, not silent drift.
Failure test: A project has useful local artifacts, but no saved evidence for the course's required outputs, and Hermes cannot explain whether the steps were completed, intentionally substituted, or accidentally skipped.
Reason: P-002 had useful work, but the Bigfoot artifact chain was not provably followed. This is exactly how course-backed projects become impressive-looking drift.
Proposed home: 20-Knowledge/SOPs/course-training-compliance-gate.md
Activation: SOP
Evidence
- session_id
- 20260630_165133_f1bbfb
- message_id
- 105801
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/80-Logs/Hermes-Issues/issues-log.md
- quote
- Create a lightweight “course/training compliance gate” pattern: extract the course phase map, list required artifacts, mark each as done/substituted/skipped/waived, and require explicit BB sign-off before moving from planning/data to implementation.
course-workflowsp-002sopartifact-chain
SOP Candidates
candidate
Third-party installers need an inspect-first path
Context: Use when BB asks for help installing an external repo, especially one with one-line installers, shell config edits, daemon setup, secrets, or files copied into existing tool homes like ~/.claude.
Rule: Do not run pipe-to-interpreter installers. Fetch the install script and docs, inspect side effects, identify backups/config writes/daemon registration/secrets, then give BB a safe staged path. Prefer isolated clone and explicit commands over global overwrite.
Failure test: Hermes follows a README installer directly and later discovers it edited shell config, installed runtimes, registered launchd services, overwrote ~/.claude, or asked for secrets without a preflight explanation.
Reason: The LifeOS case is the exact shape where convenience installers can mutate a personal AI setup faster than BB can see what changed.
Proposed home: ~/.hermes/skills/software-development/avoid-pipe-to-interpreter
Activation: skill
Evidence
- session_id
- 20260630_200746_0ed8c7f9
- message_id
- 105990
- path
- /tmp/lifeos-install.sh
- quote
- LifeOS install docs recommend `curl -sSL https://ourpai.ai/install.sh | bash`; inspected installer also pipes Bun installer at line 135 and writes shell PATH config at lines 181-189.
installerssecurityclaude-codesupply-chain
SOP Candidates
candidate
Courses need a file index so downloads can be matched later
Context: Use when course/source material is saved under 15-Courses or when future course downloads may arrive with renamed or duplicate files.
Rule: Each course root should carry a COURSE-FILE-INDEX.md listing file path, kind, size, and short description/heading. Update it whenever new source files are downloaded so future agents can spot duplicates, renamed files, and project-specific derivatives.
Failure test: A future download arrives and Hermes cannot tell whether it is new, renamed, duplicate, source material, or a project-specific working file without rereading the whole course pile.
Reason: This solves a repeatable course-ingestion problem and prevents source-course files from being confused with project derivatives.
Proposed home: 20-Knowledge/SOPs/course-source-file-indexing.md
Activation: SOP
Evidence
- session_id
- 20260701_153804_4b4a8d
- message_id
- 108450
- path
- 15-Courses/perry-belcher__bigfoot-blueprint/COURSE-FILE-INDEX.md
- quote
- Each has: file path; kind; size; short description / heading. So future downloads can be matched even if filenames drift.
coursesvault-ossource-managementsop
SOP Candidates
candidate
Vault migrations need bounded bites, not one giant shove
Context: Use when migrating deprecated Obsidian homes, mixed corpora, source piles, or old project material under Vault OS.
Rule: Handle one corpus bite at a time: classify read-only first, explain what the material is before paths, copy-migrate with pointer stubs, patch live references only, preserve historical provenance, verify counts/collisions/missing targets, then update the handoff and closeout state before moving on.
Failure test: Hermes bulk-moves files because the destination looks obvious, then cannot prove what changed, whether live references broke, or whether old-path mentions were historical evidence versus active routing.
Reason: The Vault OS run only became safe once the work was chopped into inspect-classify-copy-verify-closeout loops. That pattern is reusable and should not live only in a long audit trail.
Proposed home: 20-Knowledge/SOPs/vault-os-corpus-migration.md
Activation: SOP
Evidence
- session_id
- 20260701_172713_3f612a
- message_id
- 109012
- path
- 80-Logs/Audits/Vault-Ops/parked-ambiguous-resource-migration-execution-2026-07-01.md
- quote
- CHANGED 18; COLLISIONS 0; SKIPPED 0; MISSING_TARGETS 0; BACKUP_EXISTS True; NO_DELETES True
vault-osmigrationverificationsop
Activation Queue
Presentation Rules
candidate
Reports should be data-first
Context: Use when building recurring Hermes reports or update surfaces that will be regenerated many times.
Rule: Start with schema and JSONL, then build a deterministic renderer, then generate HTML. Do not hand-author future report HTML after the renderer exists.
Failure test: The report looks good once, but later updates require manual HTML edits and drift away from the data model.
Reason: Keeps report updates repeatable, verifiable, and less dependent on LLM layout choices.
Proposed home: 90-System/Hermes/Session-Learning-Extraction/scripts/render_report.py
Activation: renderer
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Reports should be data-first: schema/JSON first, renderer second, HTML last.
reportsrendererjsonl
Presentation Rules
candidate
Simple version stays visible
Context: Use when reports contain detail cards, accordions, evidence, or expanded sections.
Rule: Keep the plain-English meaning and action state visible without requiring BB to expand every item.
Failure test: BB has to open each detail block just to know whether something matters, needs approval, or is safe to ignore.
Reason: Preserves scanability when a report becomes detailed.
Proposed home: renderer template and future report design rules
Activation: renderer
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Simple versions must stay visible when reports get detailed.
report-uiscanabilitybb-facing
Principles
candidate
Principles need activation fields
Context: Use when deciding whether a session lesson is ready for durable storage, a report, a skill patch, or no save.
Rule: A principle is not complete until it has context, rule, failure test, evidence, proposed home, activation, and reason.
Failure test: The extraction can be rendered, but BB or a future agent still has to infer why it matters or what protected write it implies.
Reason: Makes the report actionable without auto-writing protected context.
Proposed home: 90-System/Schemas/session-learning-extraction.schema.json
Activation: renderer
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- A principle needs context, rule, failure test, evidence, and activation route.
schemaactivationquality-gate
Principles
candidate
Useful context beats principle labels
Context: Use when extracting reusable lessons from BB and Hermes sessions. A short label is only useful if the future agent can tell when to apply it.
Rule: Capture the operating context with the lesson. Include when it applies, what to do, what failure looks like, evidence, proposed home, activation route, and reason.
Failure test: A future agent can read the title but still cannot tell when to use it, what behaviour changes, or where it should be activated.
Reason: Prevents durable learning from turning into vague slogans that do not change future behaviour.
Proposed home: 20-Knowledge/Frameworks/Session-Learning-Extraction.md
Activation: vault
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Useful context beats principle labels.
session-learningprinciplesextraction
Systems
candidate
Cursor backfill prevents silent data loss
Context: Use in cron jobs that process session windows where provider, laptop, delivery, or network failure can interrupt a run.
Rule: Advance last_successful_processed_at only after durable outputs are written. Failed runs leave the cursor unchanged and next run backfills from the last success with safety overlap.
Failure test: A cron run fails before writing data, but the next run starts after the failed window and skipped sessions are never reconsidered.
Reason: Protects extraction coverage when scheduled jobs fail or delivery breaks.
Proposed home: 90-System/Hermes/Session-Learning-Extraction/state.json
Activation: cron
Evidence
- source
- Current Telegram Session Learning Extraction project conversation, 2026-06-28
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/session-learning-extraction/PLAN.md
- quote
- Cursor/backfill must prevent silent data loss after failed cron runs.
croncursorbackfill
Presentation Rules
candidate
Telegram tables are a hostile surface
Context: Use for Telegram progress reports, project summaries, issue summaries, and any BB-facing mobile message where formatting needs to survive Telegram rendering.
Rule: Avoid Markdown tables in Telegram. Use short bullets or grouped headings unless the deliverable is an HTML report or vault/technical markdown where tables will render reliably.
Failure test: BB receives a Telegram reply where a table becomes visually messy, hard to scan, or triggers a follow-up issue about rich text formatting.
Reason: Prevents correct information from being delivered in a format BB cannot read quickly on mobile.
Proposed home: 90-System/Schemas/telegram-report-formatting.md
Activation: renderer
Evidence
- session_id
- 20260629_204006_81e801
- message_id
- 102998
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/80-Logs/Hermes-Issues/issues-log.md
- quote
- Logged issue H-I-002: Telegram rich text tables render badly for BB.
telegramformattingpresentation
Principles
candidate
Keep building until the real gate is proven
Context: Use when BB tells Hermes to keep going, says it keeps stopping, or asks what Hermes is waiting on during an active build/project thread.
Rule: Do not stop at a status narration when there is still safe project work available. Continue through the next verifiable artifact, then name the actual gate as agent, tool, access, config, or user. Only call it user-waiting after checking the local/project prerequisites that would let the work continue.
Failure test: Hermes says it is waiting on BB while unchecked project files, tool availability, or local install/access discovery could have moved the task forward.
Reason: This directly targets BB's repeated frustration with agents stopping early and turns it into an operational gate test, not a vibe.
Proposed home: 20-Knowledge/Frameworks/Autonomous-Progress-Gates.md
Activation: SOP
Evidence
- session_id
- 20260629_204006_81e801
- message_id
- 103096
- quote
- What I’m waiting on - A real WP/Directorist target: WP admin URL/login, or a LocalWP/site path I’m allowed to use/create for P-002. I checked locally: no P-002 WordPress install found; no Directorist plugin found.
autonomyproject-deliverygates
Principles
candidate
Subagent output is untrusted until source constraints pass
Context: Use when workers collect, transform, or overwrite project data under hard source restrictions or compliance constraints.
Rule: Treat worker artifacts as proposed output until a deterministic review checks source constraints, forbidden-source leakage, row counts, and canonical file preservation. Preserve rejected worker output as audit evidence instead of silently deleting it.
Failure test: A worker overwrites a canonical sample with data from a forbidden source, and Hermes continues as if the file is valid because the worker said it was done.
Reason: Hard source restrictions are brittle. A single unchecked worker overwrite can poison a project dataset.
Proposed home: 20-Knowledge/Frameworks/Subagent-Output-Review.md
Activation: skill
Evidence
- session_id
- 20260629_204006_81e801
- message_id
- 102998
- quote
- Resolved issue where a worker overwrote the canonical 50-row IAA sample with a 30-row alternate containing forbidden sources (Law Society mentions). Preserved worker output as rejected audit files. Restored canonical clean sample from raw capture.
subagentsdata-qualitysource-constraints
Principles
candidate
Verification claims must match the freshness of the evidence
Context: Use after code edits when Hermes hooks or runtime checks say no canonical test/lint/build command was detected, or when only a focused verifier was run.
Rule: If the evidence is an ad-hoc focused verifier, say that plainly and do not claim full suite green. When hooks require current-turn proof, create a temporary hermes-verify-* script, run it against the changed behavior, clean it up when possible, and report the exact scope.
Failure test: Hermes says done and verified, but the only proof is stale, from a previous turn, or narrower than the claim.
Reason: Keeps verification language honest and prevents false confidence after code edits.
Proposed home: 20-Knowledge/SOPs/code-verification-evidence.md
Activation: SOP
Evidence
- session_id
- 20260629_151207_8c3702
- message_id
- 102130
- quote
- Ad-hoc focused verification, not full suite green.
verificationhookscode
SOP Candidates
candidate
File client evidence with the active canonical project before perfect migration purity
Context: Use when filing client emails, PDFs, screenshots, or source evidence while the new Vault OS says client work belongs under 30-Clients but the live project trail still exists under 40-Projects.
Rule: Preserve retrieval continuity by filing into the active canonical project home, then leave a routing note if the Vault OS ideal home differs. Save original, extracted text, clean source note, per-source nuggets-of-wisdom.md, and extracted evidence images when useful.
Failure test: Evidence is split into a new theoretically-correct folder while the active project remains elsewhere, so future project work cannot find the source trail.
Reason: This is a repeatable migration-era filing rule that protects evidence retrieval while Vault OS is still settling.
Proposed home: 20-Knowledge/SOPs/client-email-attachment-filing.md
Activation: SOP
Evidence
- session_id
- 20260629_140530_47298f3f
- message_id
- 101725
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/40-Projects/Symon/sources/emails/2026-06-29__update-on-web-search-ai-search/
- quote
- New Vault OS would ideally put client work under 30-Clients, but Symon’s active canonical project is still 40-Projects/Symon, so I kept it with the live project rather than splitting the trail.
vault-osclient-evidencefiling
Systems
candidate
Issue logging must include closeout evidence, not just corpses
Context: Use whenever BB says log an issue, bug, problem, help desk item, agent behaviour failure, or workflow friction that needs tracking across sessions.
Rule: Route issue tickets to the canonical ledger or project issues file, and require date resolved, RCA, fix applied, verification evidence, prevention/follow-up, resolved by, and resolution summary before status becomes resolved.
Failure test: An issue is marked resolved with no root cause, no fix evidence, or no prevention note, leaving future Hermes unable to tell whether it was actually fixed.
Reason: BB explicitly wants a persistent help-desk style system so issues do not disappear between sessions.
Proposed home: 20-Knowledge/SOPs/issue-logging.md
Activation: SOP
Evidence
- session_id
- 20260629_183318_35b698fe
- message_id
- 102892
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/80-Logs/Hermes-Issues/issues-log.md
- quote
- No issue is resolved until the fix + evidence + RCA are logged.
issuesrcaverification
Presentation Rules
candidate
Deliver the artifact, not a useless local path
Context: Use when producing HTML memos, reports, decision briefs, or anything BB is expected to open from Telegram or continue in another topic.
Rule: If BB asked for an HTML artifact or mobile-usable deliverable, attach or publish the artifact when the channel supports it. A local file path is only supporting evidence, not delivery. Also write a handoff prompt when the work must continue in another topic.
Failure test: BB replies that a file path is useless, asks why the HTML was not attached, or has to manually hunt for the artifact before continuing the work.
Reason: The work can be correct and still fail if the deliverable is not delivered in a usable form.
Proposed home: 90-System/Schemas/artifact-delivery-contract.md
Activation: renderer
Evidence
- session_id
- 20260630_165133_f1bbfb
- message_id
- 105601
- quote
- did you finish creating it? if so why didn't you attach it as an html? giving me a file path is useless!
deliverableshtmltelegramhandoff
Principles
candidate
Claude wrapper status needs child-PID proof
Context: Use when Hermes runs Claude/Codex/background reviewer lanes and the wrapper reports exited, failed, or exit_code null while a real CLI process or output file may still exist.
Rule: Do not trust wrapper status alone. Check the real child PID, process tree, output file size/mtime, and diff before spawning another lane or declaring the worker failed. If the child process is alive but silent, monitor once, then stop and re-spec rather than stacking duplicates.
Failure test: Hermes starts a duplicate Claude lane or reports failure while the original Claude PID is still alive, holding locks, writing files, or about to produce output.
Reason: This failure can waste quota, corrupt review evidence, and create duplicate worker lanes from a false terminal status.
Proposed home: 20-Knowledge/SOPs/claude-worker-lifecycle-triage.md
Activation: SOP
Evidence
- session_id
- 20260630_125643_86f7875d
- message_id
- 105317
- quote
- Hermes process wrapper says exited, but the real Claude PID `138` is still running. Same tracking bug. I’ll monitor PID directly and give it time instead of spawning another duplicate.
claudeworker-lanesprocess-lifecycleverification
SOP Candidates
candidate
Course-backed projects need an artifact-chain gate
Context: Use when a project is based on a course, training, blueprint, or creator workflow and Hermes starts substituting generic execution for the course's named steps.
Rule: Before implementation is treated as launch-ready, extract the course phase map, list the required artifacts, and mark each one as done, substituted, skipped, or waived with evidence. Missing course artifacts must become an explicit catch-up gate or an explicit BB waiver, not silent drift.
Failure test: A project has useful local artifacts, but no saved evidence for the course's required outputs, and Hermes cannot explain whether the steps were completed, intentionally substituted, or accidentally skipped.
Reason: P-002 had useful work, but the Bigfoot artifact chain was not provably followed. This is exactly how course-backed projects become impressive-looking drift.
Proposed home: 20-Knowledge/SOPs/course-training-compliance-gate.md
Activation: SOP
Evidence
- session_id
- 20260630_165133_f1bbfb
- message_id
- 105801
- path
- /Users/boydbowker/Library/Mobile Documents/iCloud~md~obsidian/Documents/Primary/80-Logs/Hermes-Issues/issues-log.md
- quote
- Create a lightweight “course/training compliance gate” pattern: extract the course phase map, list required artifacts, mark each as done/substituted/skipped/waived, and require explicit BB sign-off before moving from planning/data to implementation.
course-workflowsp-002sopartifact-chain
SOP Candidates
candidate
Third-party installers need an inspect-first path
Context: Use when BB asks for help installing an external repo, especially one with one-line installers, shell config edits, daemon setup, secrets, or files copied into existing tool homes like ~/.claude.
Rule: Do not run pipe-to-interpreter installers. Fetch the install script and docs, inspect side effects, identify backups/config writes/daemon registration/secrets, then give BB a safe staged path. Prefer isolated clone and explicit commands over global overwrite.
Failure test: Hermes follows a README installer directly and later discovers it edited shell config, installed runtimes, registered launchd services, overwrote ~/.claude, or asked for secrets without a preflight explanation.
Reason: The LifeOS case is the exact shape where convenience installers can mutate a personal AI setup faster than BB can see what changed.
Proposed home: ~/.hermes/skills/software-development/avoid-pipe-to-interpreter
Activation: skill
Evidence
- session_id
- 20260630_200746_0ed8c7f9
- message_id
- 105990
- path
- /tmp/lifeos-install.sh
- quote
- LifeOS install docs recommend `curl -sSL https://ourpai.ai/install.sh | bash`; inspected installer also pipes Bun installer at line 135 and writes shell PATH config at lines 181-189.
installerssecurityclaude-codesupply-chain
Systems
candidate
Skill rebuilds need a feature ledger and validator
Context: Use when repairing or rebuilding a stale skill, agent spec, CLAUDE.md, or behaviour file that contains old ceremony mixed with useful rules.
Rule: Define the win, audit the old artifact as evidence not boss, preserve useful intentions, demote or remove stale ceremony, record the feature-change ledger, and add deterministic validation for the rules that must stay true.
Failure test: A cleanup deletes useful behaviour because it looked old, or preserves stale ritual because nobody recorded what was intentionally kept, demoted, or cut.
Reason: This turns skill cleanup into controlled refactoring instead of archaeological roulette with a chainsaw.
Proposed home: ~/.hermes/skills/software-development/agent-spec-pipeline
Activation: skill
Evidence
- session_id
- 20260630_125643_86f7875d
- message_id
- 105303
- quote
- Rebuild using preserved strengths. Current skill is too heavy, too Hermes/Mikey-specific, and partly stale. It encodes an old gold-standard ritual, not today's operating model.
skillsrefactorvalidationfeature-ledger
Presentation Rules
candidate
Explain what the material is before naming paths
Context: Use in vault migrations, corpus audits, and BB-facing handoffs where many files are being classified or moved.
Rule: Start with the operational meaning: what the material is, why it matters, and how it will be used. Paths come after that as evidence or navigation, not as the main explanation.
Failure test: BB has to decode a list of file paths to understand whether the thing is a course, source evidence, project derivative, archive junk, or reusable knowledge.
Reason: This is a reusable BB-facing presentation rule for vault work. The obsidian-vault skill already contains this shape, so this is an update/check candidate rather than a new file.
Proposed home: ~/.hermes/skills/note-taking/obsidian-vault
Activation: skill
Evidence
- session_id
- 20260701_153804_4b4a8d
- message_id
- 108460
- path
- 80-Logs/Audits/Vault-Ops/fresh-chat-handoff-vault-os-migration-2026-07-01.md
- quote
- Do not explain migrations as path soup. Explain what the material *is* first.
presentationvault-osbb-facing
SOP Candidates
candidate
Courses need a file index so downloads can be matched later
Context: Use when course/source material is saved under 15-Courses or when future course downloads may arrive with renamed or duplicate files.
Rule: Each course root should carry a COURSE-FILE-INDEX.md listing file path, kind, size, and short description/heading. Update it whenever new source files are downloaded so future agents can spot duplicates, renamed files, and project-specific derivatives.
Failure test: A future download arrives and Hermes cannot tell whether it is new, renamed, duplicate, source material, or a project-specific working file without rereading the whole course pile.
Reason: This solves a repeatable course-ingestion problem and prevents source-course files from being confused with project derivatives.
Proposed home: 20-Knowledge/SOPs/course-source-file-indexing.md
Activation: SOP
Evidence
- session_id
- 20260701_153804_4b4a8d
- message_id
- 108450
- path
- 15-Courses/perry-belcher__bigfoot-blueprint/COURSE-FILE-INDEX.md
- quote
- Each has: file path; kind; size; short description / heading. So future downloads can be matched even if filenames drift.
coursesvault-ossource-managementsop
SOP Candidates
candidate
Vault migrations need bounded bites, not one giant shove
Context: Use when migrating deprecated Obsidian homes, mixed corpora, source piles, or old project material under Vault OS.
Rule: Handle one corpus bite at a time: classify read-only first, explain what the material is before paths, copy-migrate with pointer stubs, patch live references only, preserve historical provenance, verify counts/collisions/missing targets, then update the handoff and closeout state before moving on.
Failure test: Hermes bulk-moves files because the destination looks obvious, then cannot prove what changed, whether live references broke, or whether old-path mentions were historical evidence versus active routing.
Reason: The Vault OS run only became safe once the work was chopped into inspect-classify-copy-verify-closeout loops. That pattern is reusable and should not live only in a long audit trail.
Proposed home: 20-Knowledge/SOPs/vault-os-corpus-migration.md
Activation: SOP
Evidence
- session_id
- 20260701_172713_3f612a
- message_id
- 109012
- path
- 80-Logs/Audits/Vault-Ops/parked-ambiguous-resource-migration-execution-2026-07-01.md
- quote
- CHANGED 18; COLLISIONS 0; SKIPPED 0; MISSING_TARGETS 0; BACKUP_EXISTS True; NO_DELETES True
vault-osmigrationverificationsop