changelog-observer
Track development session events in a daily markdown changelog, including file changes, test results, and key decisions.
View and manage the runtime changelog for observability
$ npx -y skills add claude-world/director-mode-lite --skill changelog --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/changelogContext preview
The summary Claude sees to decide when to auto-load this skill.
View and manage the runtime changelog for observability
name: changelog description: View and manage the runtime changelog for observability user-invocable: true
> **Status: Experimental** — uses Claude Code PostToolUse hooks; the hook interface may change in future versions. If hooks don't fire, events can still be logged manually via auto-loop prompts.
Runtime observability changelog that records every change during a development session, so subagents can understand prior context and sessions can be recovered or debugged.
---
Automatically, via PostToolUse hooks, the changelog:
Events are stored as append-only JSONL at `.director-mode/changelog.jsonl`.
---
/changelog # Recent 10 events /changelog --summary # Statistics /changelog --type test # Filter by event type /changelog --list-archives # Show rotated changelogs /changelog --export log.json /changelog --archive # Manually archive current changelog /changelog --clear # Clear current changelog
# Last 5 events tail -n 5 .director-mode/changelog.jsonl | jq '.' # All file changes grep '"event_type":"file_' .director-mode/changelog.jsonl # Count by type jq -r '.event_type' .director-mode/changelog.jsonl | sort | uniq -c
---
{
"id": "evt_1705142400_12345",
"timestamp": "2025-01-13T10:30:00.000Z",
"event_type": "file_edit",
"agent": "hook",
"iteration": 3,
"summary": "file_edit: Login.tsx",
"files": ["src/components/Login.tsx"]
}| Type | Source | Description | |------|--------|-------------| | `file_write` | Hook (Write) | File written via the Write tool | | `file_edit` | Hook (Edit) | File edited via the Edit tool | | `test_pass` | Hook (Bash) | Tests passing | | `test_fail` | Hook (Bash) | Tests failing | | `test_run` | Hook (Bash) | Tests ran, result undetermined | | `commit` | Hook (Bash) | Git commit made | | `session_start` | auto-loop | Session begins | | `session_end` | auto-loop | Session completes | | `changelog_rotated` | System | Changelog was rotated |
---
Configured in `.claude/settings.local.json` (the shipped template is `hooks/settings-hooks.json`):
{
"hooks": {
"PostToolUse": [
{ "matcher": "Write", "hooks": [{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/log-file-change.sh" }] },
{ "matcher": "Edit", "hooks": [{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/log-file-change.sh" }] },
{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/log-bash-event.sh" }] }
]
}
}> `$CLAUDE_PROJECT_DIR` keeps paths portable (resolved at runtime by Claude Code).
| Script | Trigger | Events Logged | |--------|---------|---------------| | `log-file-change.sh` | Write, Edit | `file_write`, `file_edit` | | `log-bash-event.sh` | Bash | `test_pass`, `test_fail`, `test_run`, `commit` |
Core helpers live in `_lib-changelog.sh`:
log_event "file_write" "Wrote Login.tsx" "hook" '["src/Login.tsx"]' archive_changelog # move current changelog to a timestamped archive clear_changelog # empty the current changelog list_archives # list rotated changelogs
---
Two independent thresholds keep the changelog bounded. They are complementary, not contradictory:
| Trigger | Threshold | Who does it | When | |---------|-----------|-------------|------| | Session-start archive | > 100 lines | `/auto-loop` init | At the start of each auto-loop session, so the new session begins with a fresh log | | Runtime auto-rotation | > 500 lines (`MAX_LINES`) | `_lib-changelog.sh` (`rotate_if_needed`) | Continuously, as events are appended within a session |
On rotation the current file is moved to `changelog.YYYYMMDD_HHMMSS.jsonl`, a fresh `changelog.jsonl` is started, and a `changelog_rotated` event is logged:
.director-mode/ ├── changelog.jsonl ← Current ├── changelog.20250113_103000.jsonl ← Archived └── changelog.20250112_150000.jsonl ← Archived
---
| Aspect | Checkpoint | Changelog | |--------|------------|-----------| | Location | `.auto-loop/checkpoint.json` | `.director-mode/changelog.jsonl` | | Purpose | Current state snapshot ("where am I now?") | Historical event stream ("how did I get here?") | | Used by | Stop hook (continue/stop decision) | Subagents (context) | | Format | Single JSON object | JSONL (append-only) | | Persistence | Overwritten each iteration | Accumulated, then rotated |
Only one auto-loop session runs per project. Starting `/auto-loop` while a session is `in_progress` blocks with a prompt to use `--resume` (continue with the existing checkpoint + changelog) or `--force` (archive the old session, start fresh).
---
---
These legacy observability hooks ship as an explicit automation option. They are absent from the default zero-hook install. After intentionally running `./install.sh --hooks automation`, verify:
ls .claude/hooks/ # _lib-changelog.sh auto-loop-stop.sh log-bash-event.sh log-file-change.sh pre-tool-validator.sh cat .claude/settings.local.json | jq '.hooks'
---
1. Check hooks exist: `ls .claude/hooks/*.sh` 2. Check the live hook config: `cat .claude/settings.local.json | jq '.hooks'` (the shipped template is `hooks/settings-hooks.json`) 3. Check scripts are ex
Use Claude Code like a Director, not a Programmer. MIT toolkit with Auto-Loop, guided setup, 27 commands, 14 agents, and 32 skills.
Track development session events in a daily markdown changelog, including file changes, test results, and key decisions.
Validate custom agent file format and structure. Use after creating or editing an agent, before committing agent changes, or when an agent fails to load.
Generate custom agent from template. Use when creating a new subagent from scratch, or scaffolding an agent file with correct frontmatter.
List all available agents (core, expert, self-evolving). Use when the user asks what agents are available or runs /agents.
TDD-based autonomous development loop with checkpoint recovery and observability changelog
Verify Claude, Codex, and Grok availability plus Director guidance, relay, agents, and skills. Audit optional hooks only when selected. Use after installation…