Mature existing ideas
Skill KhurrumMahmood/senior-vibe-engineer/.claude/skills/mature-existing-ideas
Research an existing ledger entry (or a batch of entries carrying the needs-research marker), append research-log notes to the ledger through /track-idea, and optionally clear markers as evidence accumulates. The orchestrator does the research (project doc grep, optional external Web/Context7 lookups, prior-art surveys) and uses track-idea/scripts/track.py for every ledger write. Read .claude/docs/idea-ledger.md when authoring or debugging this skill.From its SKILL.md
npx -y skills add KhurrumMahmood/senior-vibe-engineer --skill mature-existing-ideasAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
17.6 KB, ~3.9k tokens by cl100k_base, as published. Nobody here has run it
/mature-existing-ideas
You are the research and freshness surface for the idea ledger. You take an existing entry (or a batch), do the research that the captor flagged as needed, and write the findings back as note events so the next reader has context.
You do NOT generate new ideas (/brainstorm-ideas). You do NOT
promote to the pattern library; no promotion skill is installed in this
kit. You do NOT change state via transition — surface the
recommendation in the report and let the caller invoke /track-idea event explicitly.
The ledger schema, marker semantics, and the full table of skill ↔
ledger interactions live in .claude/docs/idea-ledger.md. Read that
file before reasoning about non-trivial marker transitions.
How success is judged
- Every researched slug gets at least one
note-kind event with theresearch:prefix appended to the ledger — even when the conclusion is "no new information"; research that lives only in your head is the failure mode this skill exists to prevent. - Markers are cleared only with evidence, per idea — never auto-cleared across a batch; open questions leave the marker in place.
- Sources are cited in the summary so the research path is re-walkable.
- No state transitions executed — recommendations route to
/track-idea event. - Ledger writes are backed by pasted
track.pyoutput. A claim that a note, lesson, adoption, or marker event was appended is invalid unless the command output is shown. Write toward these gates from Stage 0.
Grade only by ledger events, cited source paths/URLs, adversarial verdict artifacts when enabled, and pasted command output. Do not credit private reasoning as research output.
Core beliefs
- Research notes belong on the idea, not just in your head.
Reading external sources and forgetting to write the conclusions
back to the ledger is the most common failure mode. Every research
pass produces at least one
note-kind event withresearch:prefix, even when the conclusion is "no new information." - Marker clearing is a write decision. A
needs-researchmarker stays until the research is materially complete — not just done once. If unanswered questions remain, log the note and leave the marker; surface a suggestion to keep looking. - External sources are honest signal. Cite the sources in the summary (URL, doc title, library name). Future readers should be able to re-walk your research path.
- Spec-conformance is the harder cousin. When the target idea is
subsystem_kind: skill, treat one research pass as a manual surrogate for the open agentic-spec-conformance gap — read the SKILL.md, exercise the skill against representative inputs, log findings as a research note. This is the v0 of theskill-spec-conformance-validationidea; the full skill replaces it when it lands. - The adversarial gate is a second-look with information asymmetry,
not a true cross-model lane. When
--adversarialis set, the batch passes through Stages 1.4 (deterministic enrichment) and 1.5 (LLM judgment by a sub-agent that did NOT see Stage 1's reasoning). Independence comes from (a) the sub-agent not seeing the orchestrator's chain-of-thought and (b) being handed real signals that surface duplicates / wrong-kind / ADR-covered candidates the orchestrator might have missed. Because both agents share the model and context tree, this is not a substitute for the repo's cross-model review lane; it's a calibration step before the batch is written.
Argument parsing
Pick one mode.
Form A — Specific idea
/mature-existing-ideas <slug> [--clear-needs-research]
[--clear-underdeveloped]
[--external-research]
Research one idea by slug. Append a research-log event. Optionally
clear needs-research or underdeveloped markers if the research
warrants.
Form B — All ideas with needs-research
/mature-existing-ideas --all-needs-research [--external-research]
Iterate every idea carrying needs-research. For each, do one pass
and write a research event. Do NOT auto-clear markers across a batch —
clearance is a per-idea judgment call.
Form C — Topic-scoped
/mature-existing-ideas --topic "<topic>" [--external-research]
Find ideas whose title / summary / tags overlap with <topic> and do
a research pass on each. Useful when you've just learned something new
and want to apply it across the ledger.
--external-research permits Web / Context7 lookups during the pass.
Off by default to keep cost predictable; flip on for unfamiliar
domains.
Pipeline
Stage 0 — Setup
Pre: argument parsed. Post: target list resolved.
For Form A, the target list is [slug]. For Form B, read the ledger
and collect every projection with needs-research in
quality_markers. For Form C, run a keyword filter against title /
summary / tags.
.venv/bin/python .claude/skills/track-idea/scripts/track.py list --marker needs-research
If no targets, exit 0 with a message — nothing to mature.
Stage 1 — Research each target
Pre: target list resolved. Post: per-target findings + source list.
For each target:
- Read the projection (state, summary, hypothesis, existing lessons, subsystem_kind).
- Decide research scope:
- Internal: grep the project for related code, docs, prior
ledger entries (
composes_with,lineage_parents,lineage_children). - External (when
--external-research): Web search, Context7 library docs, ADR registry, lessons.md, known-issues.md. - Skill-specific: if
subsystem_kind == skill, read the SKILL.md, scan recent dev-notes, exercise the skill against a fixture or representative input if practical.
- Internal: grep the project for related code, docs, prior
ledger entries (
- Synthesize 1-3 paragraphs:
- What I learned (with citations / paths).
- Whether the original hypothesis still stands.
- Open questions remaining.
- Recommended next action: clear marker, raise a new event, promote to pattern, deprecate, or hold.
Stage 1.4 — Deterministic enrichment (only when --adversarial)
Pre: Stage 1 produced a batch of per-target findings. Post: each entry in the batch carries a signals payload.
This step is cheap and LLM-free. For each entry, compute and attach:
| Signal | Source | Purpose |
|---|---|---|
existing_slug? | ideas_lib projection (grep the ledger for slug + alias matches) | Catch literal duplicates the orchestrator missed |
subsystem_kind_frequency | Count occurrences of the entry's subsystem_kind in the ledger | Flag never-seen-before kinds (likely typo or wrong taxonomy) |
adr_keyword_hits | Grep ai-docs/decisions/*.md titles for entry keywords | Surface "ADR already covers it" candidates |
slug_token_overlap | Token compare against all existing intake slugs (highest-overlap neighbors) | Surface near-duplicates that warrant a composes_with edge |
These signals do not make the verdict — they are context the Stage 1.5 LLM uses to judge. The five failure modes the gate targets (duplicates, wrong-kind, missed-edge, ADR-covered, evidence- free impact claims) overlap with what grep can answer, but the legitimacy of each call is semantic.
Stage 1.5 — Adversarial LLM judgment (only when --adversarial)
Pre: the batch + enrichment payloads are ready.
Post: a per-entry verdict (accept / revise / drop / other)
with a one-line rationale.
Delegate to a sub-agent with:
- Sub-agent type:
general-purposeby default (universally available). Override via.claude/docs/review-lane.mdif the host project has a custom adversarial agent. - Batch ceiling: 8 entries per LLM call. Batches larger than 8 are chunked. (The 8 is a calibration starting point; bump if you see rubber-stamping at the tail of long batches.)
- Context delivered to the sub-agent:
- The chunk's batch JSON (8 entries max), with the orchestrator's Stage 1 synthesis attached.
- The deterministic enrichment payload from Stage 1.4.
- The ledger's current
subsystem_kindfrequency map (~10 lines). - A short snippet of
idea-ledger.md's schema rules so the gate can reason about marker / state legality.
- Verdict shape per entry:
accept|revise|drop|other, plus a one-line rationale. The five reference failure modes (duplicate,wrong-kind,missed-edge,adr-covered,evidence-free) focus the sub-agent's attention;otheris reserved for cases the rubric doesn't cover.
The dispatch prompt must tell the sub-agent that its output is judged only by that per-entry verdict shape and whether the rationale cites the delivered enrichment signals. Do not ask for a balanced review essay.
Terminal behavior:
accept→ entry flows to Stage 2 unchanged.revise→ orchestrator re-runs Stage 1 for that one entry once, showing the sub-agent's rationale as input. The realistic outcome of one revision pass within the same context tree is "no meaningful change" — this is a one-shot quality bar, not a feedback loop.- Second pass still non-accept: defaults to
dropwith the report line citing both rationales.--accept-on-loopoverrides this (the entry is written with alessonevent flagging both rationales so the user can audit later).
- Second pass still non-accept: defaults to
drop→ entry is excluded from Stage 2; the report logs the rationale so the user can override manually.other→ treat asreviseunless the rationale explicitly says "accept anyway".
--adversarial is off by default in v1. Flip on after the
calibration exit criterion is met (three mature runs catch at least
one real miss the orchestrator would have shipped, with verdict
latency < 30s per chunk). See ADR 0013 for the broader idea-tracking
contract.
Stage 2 — Write research events
Pre: per-target findings in hand. Post: one note event per
target appended to ledger.
For each target, append a note event with summary prefixed
research: plus the synthesis. Sources appear as a citation list at
the end of the summary.
.venv/bin/python .claude/skills/track-idea/scripts/track.py event <slug> \
--kind note \
--summary "research: <synthesis paragraph(s)>. Sources: <url>, <path>, <doc-title>."
When the research warrants a marker clearance and the user requested it via flag, also append a marker event:
.venv/bin/python .claude/skills/track-idea/scripts/track.py event <slug> \
--kind marker --markers-removed needs-research \
--summary "research complete: <one-line why>"
If --clear-underdeveloped is set AND the research showed the idea is
now well-formed, append the same marker event with
--markers-removed underdeveloped.
If the research surfaces a reusable rule or invalidates the original hypothesis, append a lesson through the same writer:
.venv/bin/python .claude/skills/track-idea/scripts/track.py lesson <slug> \
--title "<short lesson title>" \
--body "Rule: <rule>. Why: <evidence>. How to apply: <future use>."
Paste every track.py output line into the final report. If a command
returns non-zero, stop writing additional events for that slug and
report the exact failure.
Stage 3 — Render the report
Pre: writes complete. Post: user sees what was researched and what was decided.
# Maturity pass (now: <iso>, mode: <A|B|C>, n targets: N)
## <slug-1> — <title>
Before: state=<X>, markers=<list>
Research: <synthesis>
Sources:
- <url|path>
- ...
Decision: <cleared needs-research | left as-is | suggest promotion | suggest deprecate>
## <slug-2> ...
End with a suggested next steps section that names the most-actionable
follow-ups across the batch (e.g., "hydration-fast-path is
promotion-ready per .claude/docs/pattern-library.md because
adoption_count is now 1"; "consider /decide on <slug> if the
finding is binding").
Stage 4 — Stop
Do not auto-promote to Tier 2. Do not auto-deprecate. Surface the recommendation; the caller decides.
Non-goals
- Generating new ideas (
/brainstorm-ideas). - Promoting to Tier 2. The promotion workflow is planned but no
/promote-idea-to-patternskill is installed in this kit; cite.claude/docs/pattern-library.mdand stop. - Editing a pattern's Research log section directly. (Future work: when
patterns exist in the library, also append to the pattern's
Research log + update
last_research_at. Out of scope for v1.) - State transitions beyond marker changes. Recommend, don't execute.
- Agentic spec-conformance validation in the formal sense (that's
the
skill-spec-conformance-validationopen gap). This skill is the manual surrogate.
When things go sideways
| Symptom | Action |
|---|---|
--all-needs-research finds zero targets | Exit 0; report "no ideas carry needs-research" |
| Idea not found by slug | Exit 1 with usage; suggest /track-idea list to find the right slug |
--external-research requested but offline | Skip external lookups; do internal-only research and note the limitation in the summary |
| Research conclusion is "no new info" | Still write a note event recording the negative finding — future readers benefit from seeing that the rabbit hole was checked |
| Marker clearance requested but research shows the idea is still under-researched | Refuse the clearance; surface the open questions and recommend a follow-up pass |
| Research surfaces a contradiction with the original hypothesis | Log it as a lesson record (rule + why + how to apply) in addition to the note event |
track.py exits non-zero while writing a note, marker, or lesson | Stop writes for that slug, paste the exact output, and leave markers unchanged |
--adversarial requested but .claude/docs/review-lane.md names a missing sub-agent type | Fall back to general-purpose and note the substitution in the report |
| Adversarial chunk returns a verdict for an unknown id | Treat as other; surface in the report so the user can decide |
| Adversarial verdict latency > 30s per chunk for three consecutive runs | Lower the batch ceiling (e.g. 8 → 4) and re-measure before keeping the gate on by default |
| Revision pass produces the same output as the original | Apply the default terminal behavior (drop); SKILL note clarifies this is the expected case |
Replay case
After material edits to this skill, prove the ledger-write boundary in a temporary project and paste the real output:
TMPDIR=$(mktemp -d)
mkdir -p "${TMPDIR}/.claude/ideas"
.venv/bin/python .claude/skills/track-idea/scripts/track.py intake replay-idea \
--project-root "${TMPDIR}" \
--title "Replay idea" \
--origin "skill-replay" \
--subsystem-kind "skill" \
--quality-markers needs-research \
--summary "Replay fixture for mature-existing-ideas."
.venv/bin/python .claude/skills/track-idea/scripts/track.py event replay-idea \
--project-root "${TMPDIR}" \
--kind note \
--summary "research: replay note. Sources: local fixture."
.venv/bin/python .claude/skills/track-idea/scripts/track.py show replay-idea \
--project-root "${TMPDIR}" \
--quiet-on-list-fields
Do not run the replay against the real project ledger.
Repository layout
.claude/skills/mature-existing-ideas/
└── SKILL.md # this file — orchestrator
The orchestrator does the research; track-idea/scripts/track.py writes
the events deterministically.
Cross-references
- Schema:
.claude/docs/idea-ledger.md - Adversarial-gate sub-agent override (optional host config):
.claude/docs/review-lane.md(default:general-purpose) - Sibling skills:
/track-idea,/find-orphaned-ideas,/brainstorm-ideas - Open gap (formal spec conformance): ledger entry
skill-spec-conformance-validation - ADR motivating this system:
ai-docs/decisions/0013-idea-tracking-system.md
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most docs writing skills give in ~3.9k tokens
Counted across 1,637 of the 3,044 authors here whose files we hold, read 2026-08-07
- Announce the skill at startin 54 of 1637, across 26 files
- Convert legacy doc files before editingin 45 of 1637, across 7 files
- Predict questions readers might askin 42 of 1637, across 4 files
- Generate clarifying questions for initial contextin 42 of 1637, across 3 files
- Create document scaffold with placeholder textin 42 of 1637, across 3 files
- Brainstorm content options for each sectionin 42 of 1637, across 3 files
- Test the document with a fresh context-less instancein 42 of 1637, across 3 files
- Include exact file paths in every taskin 42 of 1637, across 15 files
- Ask interview questions one at a timein 42 of 1637, across 27 files
- Apply surgical edits during refinementin 41 of 1637, across 2 files
- Offer structured workflow or freeformin 40 of 1637, across 1 file
- Ask for document meta-contextin 40 of 1637, across 2 files
Said here and by no other author read
- append one research note event per researched slug
- write findings to the ledger even with no new information
- leave needs-research marker if open questions remain
- clear markers individually based on evidence
- cite all research sources in the summary
- paste all command output lines into the report
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.