Captures durable engineering learnings to the touched module's learnings file (LEARNINGS.md by default, configurable). Use at the end of a substantive session (>30 min with a real problem, decision, or discovery) as a wrap-up, or mid-session when something non-obvious surfaces. Re-reads the target file first, then appends actionable-cold notes; never overwrites and never duplicates.
How this skill is triggered — by the user, by Claude, or both
Slash command
/engineering-paved-path:engineering-insightsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Capture durable engineering learnings so knowledge **compounds** across sessions instead
Capture durable engineering learnings so knowledge compounds across sessions instead
of evaporating when the context window ends. Each learning is appended to the
LEARNINGS.md of the module it is about — so the next session working in that module
reads only its own file and signal stays high.
This is the smallest, foundational skill: it depends only on the per-module LEARNINGS.md
files (plus whatever project docs you already keep, e.g. CLAUDE.md). No business logic.
Double trigger:
This skill is triggered by its description or run manually as /engineering-insights.
Be honest about the limit: trigger-by-description and manual runs are unreliable — "if it
requires a human trigger, it won't happen consistently enough to be useful". For
guaranteed capture, wire it to a Stop hook so it fires at the end of every session.
Before doing any work, once the user has given their prompt:
CLAUDE.md or whatever index your project keeps).LEARNINGS.md (see routing below) and treat it as
high-confidence guidance unless told otherwise.This is also the dedup baseline — you cannot avoid duplicating an insight you never read.
Write to the learnings file of the deepest module that owns the changed files — the
module a future session working in that area would naturally open. The file is
LEARNINGS.md by default; override the name with the INSIGHTS_FILE env var if your
project already keeps a differently named per-module notes file.
Walk up from each changed file to the nearest unit of ownership — a package/module
boundary such as the directory with its own manifest (package.json, pyproject.toml,
go.mod, …) — and write the LEARNINGS.md there. Examples (adapt to your layout):
| Work touched | File |
|---|---|
a frontend package (e.g. web/**, apps/client/**) | web/LEARNINGS.md |
a backend service (e.g. api/**, services/**) | api/LEARNINGS.md |
a shared / core library (e.g. packages/core/**) | packages/core/LEARNINGS.md |
the end-to-end test suite (e.g. e2e/**) | e2e/LEARNINGS.md |
| anything with no deeper owner | the repo-root LEARNINGS.md |
A session that touched several modules appends to each relevant file. If a target file is missing, create it from the section skeleton below.
Every LEARNINGS.md has these sections (never free-form, never omit one):
One record = a single line (or tight bullet):
- YYYY-MM-DD — <concrete, actionable statement>. Evidence: `path/file.ts:line`.
Before appending, every candidate must pass all three:
"Promises can be tricky" / "be careful with async""Promise.all() on the ingest pipeline times out past ~30 items — use Promise.allSettled() in batches of 10""checkout-flow state always goes through Zustand (cartStore.ts) — the cart is shared by 3 components, local state breaks here"LEARNINGS.md first; if the insight
is already there, do not duplicate it. At most add a new dated note when you can
make it materially more precise.When invoked, copy this checklist and work through it:
- [ ] 1. Determine which module(s) the session touched (from the edits / diff)
- [ ] 2. Re-read each target LEARNINGS.md (dedup + context baseline)
- [ ] 3. Identify up to 2–5 concrete, non-obvious learnings from the session,
sweeping each section: What Works / What Doesn't Work / Codebase Patterns /
Decisions / Tool & Library Notes / Recurring Errors & Fixes / Open Questions
- [ ] 4. Drop anything already in the file (dedup) and anything that fails the
substance or anti-banality gate
- [ ] 5. Append each survivor as a dated, evidence-grounded record under its section
(+ a dated Session Notes line) — or write NOTHING if nothing cleared the bar
- [ ] 6. Confirm what was added: report a one-line summary per file (or state that
nothing met the bar)
Default to fewer, higher-signal entries — 2–5 is a ceiling, not a quota. Zero is a valid, common outcome.
README.md, CLAUDE.md, …). LEARNINGS.md holds only durable, non-obvious
learnings.LEARNINGS.md to the repo so everyone benefits; keep it
append-only in PRs (avoids merge conflicts); a maintainer periodically consolidates.LEARNINGS.md is a draft under spot-check, not gospel — a human reviews it
periodically and prunes stale records (stale guidance is worse than none).npx claudepluginhub rostk/my-monkeys --plugin engineering-paved-pathGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.