Skip to content
On this page

Entry Schema

Each entry in .claude/journal.jsonl is a JSON object on a single line. The schema is open — you can add custom fields — but the fields below define the standard structure.

Full example

json
{
  "timestamp": "2026-03-27T14:30:00.000Z",
  "workedOn": "plan: resources/plans/245-notifications.md",
  "branch": "feature/notifications",
  "type": "work",
  "origin": "primary",
  "skill": "zenflow:dispatch",
  "outcome": "completed",
  "summary": "Added real-time SSE notifications for issue state changes",
  "details": {
    "filesModified": ["src/routes/sse.ts", "src/types/events.ts"],
    "filesCreated": ["src/lib/sse-client.ts"],
    "testsAdded": 8,
    "testsModified": 0
  },
  "issues": "",
  "blockers": "",
  "workarounds": "",
  "insights": "Two-stage review caught a missing reconnection handler",
  "wouldDoDifferently": "Check Bun OTel compatibility before starting",
  "feedback": "Worktree delegation kept context clean during side fix",
  "duration": "4 hours"
}

Required fields

FieldTypeDescription
timestampstringISO 8601 timestamp
workedOnstringWhat this entry is about — plan path, issue number, or freeform description
typestringEntry type (see values below)
summarystringOne sentence describing what was accomplished

type values

ValueWhen to use
workStandard implementation work
bug-fixA bug was diagnosed and fixed
refactorCode was refactored
auditA code audit was run
explorationExploratory research or ideation
reviewA code review was done
reflectionEnd-of-session retrospective (written by reflect)

Optional fields

FieldTypeDescription
branchstringGit branch name
originstringprimary (user's session) or delegated (spawned subagent)
skillstringWhich zenflow skill was active, e.g. zenflow:dispatch
outcomestringcompleted, partial, blocked, or abandoned
detailsobjectFiles modified/created, tests added — structure is freeform
issuesstringWhat went wrong or was harder than expected
blockersstringWhat is preventing progress (for blocked outcomes)
workaroundsstringHow blockers were worked around
insightsstringSomething learned that's worth remembering
wouldDoDifferentlystringRetrospective notes for next time
feedbackstringMeta-level observations about the process
durationstringRough time spent (freeform, e.g. "2 hours", "45 min")

How reflect uses the schema

/field-notes:reflect reads recent entries, constructs a session timeline, and then writes a new entry with type: "reflection". The reflection entry's summary captures key takeaways, and the insights and wouldDoDifferently fields contain actionable notes.

Custom fields

The schema is open. Any additional fields you include are stored and surfaced by read and summary. For example, you might add a prNumber field to link entries to pull requests.

Experimental — APIs and behavior may change without notice.