From vd
Write a focused engineering journal entry — retrospective on what just shipped or post-mortem on what just broke. Use after vd:ship, vd:cook, or right after an incident while context is fresh. Saves to the injected Journals path (personal dev log, not project docs).
How this skill is triggered — by the user, by Claude, or both
Slash command
/vd:journal [topic] [--incident] [--quick] [--since <ref>][topic] [--incident] [--quick] [--since <ref>]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
| Skill | Question it answers | Output |
| Skill | Question it answers | Output |
|---|---|---|
vd:ship | "Land the branch." | Merged target, PR URL |
vd:cook | "Execute the plan." | Code, tests, plan status |
vd:journal | "What just happened, why, and what should future-me know?" | One markdown file in the injected Journals: path |
Journal records. It does not redesign, retest, or roll back. If writing the entry surfaces a real bug — stop, kick to vd:fix or vd:cook, then come back to journal once the fact pattern stabilises.
| Mode | Voice | Use when |
|---|---|---|
| (default) retro | Calm, structured. What shipped, what was tricky, what's next. | After vd:ship, vd:cook, end of session. |
--incident | Brutal-honest, 2am-developer voice. Root cause without euphemism. | A failure happened — outage, data loss, broken migration, repeated test failure, security finding. |
--quick | 3–5 lines, no formal structure. | Drive-by note — small fix, minor decision, surprising bit of context. Pairs with either voice. |
--incident, not performative. Honesty about root cause is the point — not theatrics. "We shipped without testing the migration" beats both "an oversight occurred" and "this is a fucking disaster".vd:brainstorm or vd:plan.| Flag | Effect |
|---|---|
[topic] | Free-text title hint. If omitted, derived from branch + recent commits. |
--incident | Switch to incident voice + structure. Default is retro. |
--quick | Skip the full structure — write a 3–5 line note instead. |
--since <ref> | Scope change analysis to commits since <ref> (default: last journal entry or branch divergence point). |
--no-subagent | Force inline writing in main context. Default: delegate to journal-writer subagent if available. |
git log --oneline <since>..HEAD — what landedgit diff --stat <since>..HEAD — surface area## Plan Context from the hook injection — if a plan dir exists, scan plan.md for phase status and the most recent phase file--incident: also collect the specific error string, failed test name, log line, or metric that triggered this entryIf <since> isn't given:
1. Look in the injected Journals path for the most recent file → use its date
2. Otherwise, find the merge-base with the default branch
3. Otherwise, last 20 commits
--incident--quick| Condition | Writer |
|---|---|
Default, journal-writer subagent available | Delegate to journal-writer via Agent tool — keeps main context clean |
--no-subagent, or subagent unavailable | Write inline using the templates below |
--quick | Always inline — subagent overhead > entry size |
If delegating, pass: mode, topic hint, <since> ref, plan dir (if any), and the relevant facts already gathered. Do not pass full git output — let the subagent re-gather scoped to what it needs.
Path: write to the injected Journals: path. Filename: journal-{YYYYMMDD-HHMM}-{slug}.md. Use the naming pattern from the session hook (## Naming block) when present.
Journals are a personal dev log — what I learned, decided, or broke — not project documentation.
./docs/is for artifacts shared with the team (architecture, code standards, changelog).
Final handoff must include an openable entry location, such as
[journal-entry.md](/absolute/path/to/journal-entry.md) or
file:///absolute/path/to/journal-entry.md, not just the basename.
plan.md exists, append a one-line link to this entry under a "Journal" section at the bottom of plan.md.CHANGELOG.md — that's vd:ship's job.---
date: YYYY-MM-DD HH:mm
mode: retro
branch: <branch>
pr: <#N or n/a>
plan: <plan-dir or n/a>
---
# {Title — what shipped, in 6 words or less}
## What shipped
- {bullet} ({commit-sha or PR#})
- ...
## Why this shape
{1 short paragraph. The decision and the alternatives rejected. If the plan covered this, link the phase file instead of repeating it.}
## What was harder than expected
- {one or two specific snags — file/error/metric}
## What the next dev should know
- {non-obvious fact, gotcha, or convention introduced}
## Next steps
- {actionable, owned, optional date}
---
date: YYYY-MM-DD HH:mm
mode: incident
severity: critical | high | medium | low
component: <system/feature>
status: ongoing | mitigated | resolved
branch: <branch>
---
# {Title — what broke, in 6 words or less}
## What happened
{Factual, terse. When, where, blast radius.}
## The brutal truth
{Root cause, no euphemism. The mistake, the missed signal, the bad assumption.}
## Technical detail
{The error string. The failed test. The metric. The query. At least one concrete artifact.}
## What we tried
- {attempt} → {why it didn't work}
## Lesson
{One sentence a future dev can change behaviour from. Not "be more careful". Something specific — "add a migration dry-run step before ship", "alert on queue depth > 1k".}
## Next steps
- {action} — {owner} — {by when}
---
date: YYYY-MM-DD HH:mm
mode: quick
---
# {Title}
{3–5 lines. One concrete artifact. Move on.}
journal-writer re-gathers what it needs and writes the file directly.--quick stays inline — subagent round-trip costs more than the entry.git log --oneline and git diff --stat are enough; pull the actual diff only for files the entry will name.--dry-run flag to migrate.sh" passes.Typically follows: vd:ship (auto-invokes this skill in Step 8 — manual run is for skipped or out-of-pipeline cases), vd:cook (end of phase or end of plan), vd:fix (after incident is mitigated).
Terminal skill — no typical successor. The next time you want to make a change, start a new pipeline at vd:scout or vd:plan.
Compares to:
vd:ship Step 8 — same writer, but vd:ship calls it as part of the pipeline. vd:journal is the manual entry point: out-of-band incidents, mid-session reflections, or when ship was run with --skip-journal.Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub vanducng/skills --plugin vd