Append a structured journal entry after completing work. Use at the end of any task, feature, bug fix, or session to record what was done, what went wrong, and what was learned.
From agent-journalnpx claudepluginhub brewpirate/zen-flow --plugin agent-journalThis skill is limited to using the following tools:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Configures VPN and dedicated connections like Direct Connect, ExpressRoute, Interconnect for secure on-premises to AWS, Azure, GCP, OCI hybrid networking.
Append a structured entry to the project's agent journal. One JSONL file per project, one line per entry. Every entry captures what happened, not just what was built.
Announce at start: "Writing a journal entry."
The journal lives at .claude/journal.jsonl in the project root. Create it if it doesn't exist.
Why .claude/: Keeps agent artifacts together. The file is gitignored or committed per team preference — both work. JSONL is append-only, so merge conflicts are rare even when committed.
Each entry is a single JSON line:
{
"timestamp": "2026-03-27T14:30:00.000Z",
"workedOn": "plan: resources/plans/245-notifications.md | issue: #123 | description of work",
"branch": "current git branch name",
"type": "work | bug-fix | refactor | audit | exploration | review | reflection | context-refresh",
"origin": "primary | delegated",
"skill": "zenflow:dispatch",
"outcome": "completed | partial | blocked | abandoned",
"summary": "One sentence: what was accomplished",
"details": {
"filesModified": ["path/to/file1.ts", "path/to/file2.ts"],
"filesCreated": ["path/to/new-file.ts"],
"testsAdded": 3,
"testsModified": 1
},
"issues": "Problems encountered (empty string if none)",
"blockers": "What stopped progress (empty string if none)",
"workarounds": "Temporary solutions used (empty string if none)",
"insights": "What worked well, surprising discoveries, useful patterns",
"wouldDoDifferently": "Hindsight improvements for next time",
"feedback": "Observations about the workflow, tools, or process that could improve future sessions",
"duration": "approximate time spent (e.g., '45 min', '2 hours')"
}
| Field | Type | Description |
|---|---|---|
timestamp | string | ISO 8601 timestamp |
workedOn | string | What this entry is about — a plan file path, issue number, or freeform description |
type | string | Entry type: work, bug-fix, refactor, audit, exploration, review, reflection |
summary | string | One sentence describing what was accomplished |
| Field | Type | Description |
|---|---|---|
branch | string | Git branch name |
origin | string | primary (user's session) or delegated (spawned by another agent) |
skill | string | Which zen skill was active (e.g., zenflow:dispatch, zenflow:collab) |
outcome | string | completed, partial, blocked, or abandoned |
feedback | string | Observations about the workflow, tools, or process — meta-level improvements |
All other fields are optional. Include what's relevant — a quick exploration doesn't need filesModified, a bug fix doesn't need duration. The schema is flexible; the only hard rule is one JSON object per line.
Projects can add custom fields. The schema is open — any valid JSON key-value pair is accepted. This lets teams track project-specific data (e.g., issueId, prNumber, deployTarget) without modifying the plugin.
Gather context — review what changed in this session:
git diff --stat for files modifiedTaskList for tasks completedWrite the entry — construct the JSON object with relevant fields
Append to journal — write a single line to .claude/journal.jsonl:
echo '{...}' >> .claude/journal.jsonl
Confirm — announce: "Journal entry written for: {summary}"
Don't write entries for trivial work — if it took 2 minutes and changed 1 line, it doesn't need a journal entry.
zenflow:check-work Gate 5 should invoke this skill instead of writing its own journal entry:
agent-journal:write with type work