📄 STRUCTURED-LOGGING-v1.md 4,343 bytes Apr 23, 2026 📋 Raw

Structured Activity Logging — Protocol v1.0

Adopted: 2026-04-23
Applies To: All HoffDesk Agents (Wadsworth, Socrates, Daedalus)
Mandatory: Effective immediately


Purpose

Standardize activity logging across all agents for queryability, metrics, and cross-agent visibility.


Quick Reference

Run ID Format

YYYYMMDD_AGENT_SEQ

Examples:
- 20260423_wv_001  (Wadsworth, run 1)
- 20260423_sc_002  (Socrates, run 2)
- 20260423_dd_001  (Daedalus, run 1)
Agent Code
Wadsworth wv
Socrates sc
Daedalus dd

Entry Template

- <!-- {"type": "task.started", "run_id": "20260423_CODE_001", "title": "Brief headline", "agent": "AGENT_NAME", "time": "2026-04-23TXX:XX:00Z", "state": "working"} --> Description of what you're doing

Required Fields

Field Value Example
type task.started, task.progress, task.completed, task.failed task.started
run_id YYYYMMDD_CODE_SEQ 20260423_sc_001
title ≤80 char headline Fix auth middleware bug
agent Agent name socrates
time ISO8601 UTC 2026-04-23T14:30:00Z

Optional Fields

Field Use When
state thinking, working, idle, done, error
detail Additional context needed
tokens Approximate tokens used
duration_ms Task took significant time
tool Tool name invoked
tool_input Brief summary (≤200 chars)
tool_output Brief result (≤200 chars)
progress 0-100 for multi-step tasks

Full Examples

Starting Work

Socrates:

- <!-- {"type": "task.started", "run_id": "20260423_sc_001", "title": "Implement rate limiting middleware", "agent": "socrates", "time": "2026-04-23T10:00:00Z", "state": "working"} --> Starting rate limiter for content API

Daedalus:

- <!-- {"type": "task.started", "run_id": "20260423_dd_001", "title": "Design mobile nav component", "agent": "daedalus", "time": "2026-04-23T11:00:00Z", "state": "thinking"} --> Exploring hamburger vs tab bar for mobile

Progress Update

- <!-- {"type": "task.progress", "run_id": "20260423_sc_001", "title": "Rate limiter 50% complete", "agent": "socrates", "time": "2026-04-23T11:30:00Z", "progress": 50, "tool": "pytest", "tool_output": "12/24 tests passing"} --> Core logic implemented, tests in progress

Completion

- <!-- {"type": "task.completed", "run_id": "20260423_sc_001", "title": "Rate limiter shipped", "agent": "socrates", "time": "2026-04-23T14:00:00Z", "state": "done", "duration_ms": 14400000} --> ✅ All tests passing, middleware mounted

Failure

- <!-- {"type": "task.failed", "run_id": "20260423_dd_001", "title": "Mobile nav prototype rejected", "agent": "daedalus", "time": "2026-04-23T13:00:00Z", "state": "error", "detail": "A11y audit found 3 critical issues with tab order"} --> ❌ Back to design, escalating to Matt

Migration

Phase 1: New Entries Only (Active Now)

  • All new log entries use structured format
  • Legacy entries remain untouched
  • Both formats coexist in same file

Phase 2: Tooling (Deferred)

  • Helper functions for your language/framework
  • Query CLI for searching logs
  • Duration analytics

Phase 2 trigger: After 7 days of usage or when query pain becomes acute.


File Locations

Agent Daily Log
Wadsworth workspace/memory/YYYY-MM-DD.md
Socrates workspace-socrates/memory/YYYY-MM-DD.md
Daedalus workspace-daedalus/memory/YYYY-MM-DD.md

Shared spec reference: shared/project-docs/protocols/STRUCTURED-LOGGING-v1.md


Query Examples

# Find all your runs today
grep -o '"run_id": "[^"]*"' memory/2026-04-23.md | sort | uniq

# Find specific run
grep "20260423_sc_001" memory/2026-04-23.md

# Find completions
grep '"type": "task.completed"' memory/2026-04-23.md

# Find failures
grep '"type": "task.failed"' memory/2026-04-23.md

Questions?

  • Check full spec: shared/project-docs/logging/LOGGING.md
  • Ask in Boardroom (@mention Wadsworth)
  • Or read Wadsworth's memory/2026-04-23.md for examples

Version: 1.0
Last Updated: 2026-04-23 02:26 UTC