Hermes Wiki
Logs/system_prompt

๐Ÿชต Logs โ€” Project Instructions

Purpose: The ground-truth, mechanically-recorded layer of the vault โ€” everything that happened, newest first. Three distinct systems live here; don't conflate them. See hermes-harness-spec ยง3 for the full design this file operationalizes.


The Three Systems

Logs/YYYY.md       โ€” raw event log. Newest-first, unbounded, never pruned.
                      This is ground truth: "what exactly happened to file X on date Y."

Logs/memory/*.md    โ€” compacted, three-tier memory hierarchy. Derived FROM the
                      raw log + daily pipeline runs, not a replacement for it.
                      Bounded, self-pruning, built for "what mattered" / "what recurred."

Logs/heartbeat.md   โ€” one line per scheduled run (dispatcher, lint-agent,
                      synthesis-agent). Newest-first, self-pruned to the last
                      90 days. Answers "did last night's cron actually fire
                      and pass" at a glance โ€” not vault content, purely a
                      health check. Written by dispatcher.py and validator.py.

Logs/memory/ โ€” the daily tier is live as of 2026-07-02 (AgentStack/Hermes/dispatcher.py creates Logs/memory/YYYY-MM-DD.md on first run each day). The monthly and yearly tiers are still not implemented โ€” don't scaffold those empty tier files in advance.


Logs/YYYY.md โ€” Raw Event Log

Trigger

Run structural lint

Runs automatically every night at 2:25am via cron โ†’ AgentStack/Hermes/dispatcher.py (frontmatter checks, empty-file checks, missing-Related checks, broken-wikilink checks โ€” the mechanical LINT-AGENT role, deterministic Python, no LLM). Can also be run manually: python3 AgentStack/Hermes/dispatcher.py from the vault root.

Format (established, already in use โ€” follow exactly)

## [YYYY-MM-DD] <Event Type>
### <category>
- [TAG] type: path/or/detail
- [TAG] type: path/or/detail
- <Event Type> complete: YYYY-MM-DD

Currently active tag: [LINT]. New tags ([SYNTH], [SKILL], etc.) get added as the other hermes-harness-spec agent roles come online โ€” don't invent new tags speculatively; add one only when its producing agent actually exists.


Logs/heartbeat.md โ€” Run Confirmation Log

Not vault content and not part of the memory hierarchy โ€” a flat operational health check, one line per scheduled job, so "did cron actually run last night" is answerable without reading Logs/2026.md or a memory file. AgentStack/Hermes/dispatcher.py writes a dispatcher line every run; AgentStack/Hermes/validator.py writes a lint-agent or synthesis-agent line (ok or fail + reason) after each LLM step it validates. Newest-first, self-pruned to the last 90 days on every write โ€” no separate cleanup job needed.

Format

- [YYYY-MM-DD HH:MM UTC] <job>: ok|fail โ€” <detail>

<job> is one of dispatcher, lint-agent, synthesis-agent. A missing entry for a given night is itself the signal โ€” if a job didn't finish, it never reached the line that records success.


Logs/memory/ โ€” Three-Tier Memory Hierarchy

Daily tier is live. Monthly and yearly tiers are not implemented yet. Full design in hermes-harness-spec ยง3.1 โ€” don't redesign it here, go edit the spec if it needs to change:

Logs/memory/YYYY-MM-DD.md   daily / episodic     โ€” keep last 15        โ† LIVE
        โ†“ bi-weekly rollup
Logs/memory/YYYY-MM.md      monthly / short-term โ€” keep last 3 months  โ† not implemented
        โ†“ on-eviction rollup
Logs/memory/YYYY.md         yearly / long-term   โ€” kept forever        โ† not implemented

Daily file โ€” real format, as produced by AgentStack/Hermes/dispatcher.py + lint.md/synthesis.md

---
date: 'YYYY-MM-DD'
tier: local
status: in-progress | complete | failed
---

# Memory โ€” YYYY-MM-DD

## Task Queue
<from Logs/hermes-task-queue.md if present, else a default line>

## LINT-AGENT
- [type: lint] missing-frontmatter: path/to/file.md
- [type: lint] broken-wikilink: path/to/file.md -> [[target]]

## SYNTHESIS-AGENT
- [type: synthesis] ...
- [type: contradiction] ...

## WEEKLY-SYNTHESIS-AGENT
<only present on Sundays, appended by synthesis.md after the nightly run>

## Procedural Signals
- [type: procedural-signal] ...

Each type: tag matches the taxonomy in the spec (lint | skill-candidate | synthesis | contradiction | procedural-signal). AgentStack/Hermes/validator.py checks this file after each LLM step โ€” frontmatter parses, at least one section is non-empty, no leftover TODO/PLACEHOLDER text, and something actually changed in git โ€” and sets status: complete or status: failed accordingly. The dispatcher's own ## LINT-AGENT section is idempotent (safe to re-run same-day without duplicating); Logs/YYYY.md is not โ€” every run prepends a fresh event to the top, by design.

  • Monthly file โ€” storage hygiene only, no graduation authority. Summary + lint trend + carried-forward items + pointer to source daily logs.
  • Yearly file โ€” one condensed paragraph per month + major milestones + archive log.

Compression rubric (what's signal vs. noise at each tier) is still an open question in the spec (ยง8) โ€” do not resolve it unilaterally from this file.


What Counts as a "Procedural Insight"

A repeated behavior, workflow friction point, or recurring pattern noticed across sessions โ€” not a one-off event. One-off events belong in Logs/YYYY.md as plain entries; anything that has recurred belongs in a daily memory file's ## Procedural Signals section once that pipeline exists, and from there is wiki/'s to graduate (see wiki/system_prompt).


Hermes Wiki