skills/graduate-project/SKILL.md
Bridge a project from its LLM Wiki gestation vault into its own code repo, carrying the context across the boundary so future sessions starting in the repo pick up exactly where the wiki session stopped. Reads the project's llm-wiki vault (design docs, ROADMAP, decisions, open questions), synthesises a cold-start docs/agents/HANDOFF.md, opens a coordination-hub GitHub issue plus sliced ready-for-agent child issues, writes a thin repo CLAUDE.md whose "Start here" points at both (with a cross-vault back-pointer to the gestation vault), and writes a forward-pointer in the vault so it knows its child repo. Use when a project leaves ideation and gets its own repo. Triggers on "graduate this project", "graduate the project", "spin up the repo for this", "this needs its own repo now", "move this from the wiki into a repo", "bridge the vault to the repo", "carry the wiki context into the repo".
npx skillsauth add RonanCodes/ronan-skills graduate-projectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Projects gestate in the LLM Wiki (ideation, research, design docs, decisions
hashed out in chat), then get their own code repo, and future sessions run in
that repo. The knowledge from the gestation phase lives in an llm-wiki-<slug>
vault, but nothing automatically carries it across the repo boundary. So a fresh
session in the new repo starts cold and the operator has to remember to say "read
the design docs."
This skill is the bridge. Run it once, when a project gets its repo. It turns
the vault's gestation knowledge into the repo's durable orientation layer
(HANDOFF.md + a coordination GH issue + a thin CLAUDE.md), and it back-links
the two so neither side forgets the other. After it runs, a fresh session opened
in the repo self-orients from CLAUDE.md → HANDOFF.md → the coordination issue,
which is "pick up where the previous wiki session stopped."
It is the forward half of the seam. The vault-side re-entry is [[pickup]]; the
repo-side equivalent is the generated CLAUDE.md "Start here" block (a dedicated
/ro:pickup-repo is the natural follow-up).
llm-wiki-<slug> vault <new repo>
(gestation: design, ──graduate──▶ docs/agents/HANDOFF.md (cold-start doc)
ROADMAP, decisions, GH issue #N (coordination hub)
open questions) ready-for-agent issues (sliced scope)
▲ CLAUDE.md (thin, "Start here")
└────── forward-pointer in vault ◀──── cross-vault back-pointer ┘
(ROADMAP "graduated → repo")
gh remote (this skill does not
scaffold the app — use /ro:new-tanstack-app etc. for that). If it has no gh
remote, fall back to writing HANDOFF.md + CLAUDE.md only and skip issues.llm-wiki-<slug> vault exists for the project. If you are unsure which vault,
ask, or detect by matching the repo name against vaults/llm-wiki-*./ro:repo-mode: in a work repo, skip the GitHub side (no issues) and
keep everything local, per the personal-vs-work rule.<vault-name> is the first arg (with or without the llm-wiki- prefix). Resolve
to vaults/llm-wiki-<slug>/.--repo <owner/name> names the target repo; otherwise use the current repo
(gh repo view --json nameWithOwner). Confirm the pairing with the user before
writing anything (AskUserQuestion), since this is a hard-to-undo wiring step.Read, in the vault:
index.md (the map), ROADMAP.md (In progress / Next up / Blocked / recently
done), the tail of log.md (recent decisions), and the design docs under
wiki/ (concepts, comparisons, sources tagged to the project)./query "<project> design + decisions + open questions" --vault llm-wiki-<slug> over raw grep, so the progressive index + cross-links surface
the load-bearing pages.Pull out: what it is, the architecture north-star, decisions made AND rejected (the rejected ones are the most easily lost), open questions, known blockers, and the scope still to build.
docs/agents/HANDOFF.mdWrite a cold-start doc a fresh agent reads to get warm. Follow /ro:understanding-first.
Sections:
llm-wiki-<slug> so the repo
always knows where it came from.--no-issues or work-mode)One GH issue that is the shared-memory anchor for the repo (the #39-style hub):
points at HANDOFF.md, states the multi-agent shared-memory model (GH issues =
coordination, HANDOFF.md + vault = durable, one-file-per-agent = scratch), and
lists how work is split. Label ready-for-agent.
ready-for-agent child issues/ro:slice-into-issues.## Parent\n\n#<hub> per the Pocock convention.log() what was left.CLAUDE.mdThin and link-heavy (detail lives in HANDOFF.md):
docs/agents/HANDOFF.md, then gh issue view <hub>,obsidian://open?...) to the gestation vault.If a repo CLAUDE.md already exists, merge a "Start here" + back-pointer block into
it rather than overwriting.
In the vault's ROADMAP.md, move the project to "Recently completed" with a
graduated → <owner/name> on <date> note, and append a log.md entry. Add a
cross-vault link from the vault to the repo (or to the repo's HANDOFF). Now each
side knows the other.
main./ro:vercel-verify (or the repo's deploy verify) only if the change is
build-affecting; usually it is docs-only.--repo <owner/name> — target repo if not the current directory.--no-issues — write HANDOFF.md + CLAUDE.md only; skip the GH side.--dry-run — print what would be written/opened without writing.Re-running updates HANDOFF.md and the hub issue in place (match by title) and
refreshes the CLAUDE.md "Start here" block, rather than duplicating. Safe to run
again after more gestation happens in the vault.
[[pickup]] — vault-side session re-entry; this is the repo-side bridge.[[handoff]] / [[close-session]] — single-session durability; this is the
cross-repo, cross-phase version.[[slice-into-issues]] / [[write-a-prd]] — the Pocock GH-issue pipeline this
hands scope off to.[[agent-native-repo-pocock]] — the pattern that makes the repo side capturable.multi-agent-shared-memory-architecture.testing
--- name: linear-pipeline description: The Fable orchestrator for a single dispatched Linear ticket. Holds almost no context itself; it receives `--issue <ID> --detached`, decides the stage sequence, and fans out a sub-agent per stage, passing forward only each stage's artifact (never re-derived, never inlined into its own context). Step zero, before any planning or stage routing, is a boundary triage against `canon/security-boundary.md` (#199): a match tags Ronan Connolly and stops the run, no
development
--- name: in-your-face description: Capture a chat-only answer into a durable artifact (markdown + HTML, PDF when cheap) and launch it automatically so the user cannot miss it. Use when user says "in your face", "don't let me lose this", "save that answer", "make that durable", or right after answering a substantive side question (a recipe, comparison, how-to, or generated prompt) that would otherwise die with the context. category: workflow argument-hint: [--no-open] [--vault <short>] [hint of
tools
One-shot headless OpenAI Codex CLI calls for background/admin AI tasks — summaries, classification, extraction, admin glue. The default engine for anything that runs AI constantly in the background (daemon-driven, per-event), because it bills the flat ChatGPT subscription instead of Claude usage or per-token API spend, and it keeps working while Claude is rate-limited. NEVER for coding — coding stays Claude. Use when a skill or daemon needs a cheap always-on AI call, when the user says "use codex", "ask codex", "codex as backup", or when building a background summarizer/classifier into a listener or loop. Reads auth from ~/.codex/auth.json (ChatGPT account, no API key).
research
Turn a warranty rejection, repair quote, or RMA email into a cited decision brief — legal read (NL/EU consumer law), is the part user-serviceable, live part and new-unit prices, repair-vs-DIY-vs-new economics, before-you-send-it checklist, deadlines. Use when the user pastes or screenshots a repair quote, warranty rejection, "not covered" email, onderzoekskosten fee, or asks "should I repair or replace this".