Start Project
SkillDev toolsThis skill should be used ONLY when the user explicitly types "/start-project" (optionally with a slug). It begins a new tracked JellyRock project under docs/projects/ — running scaffold-project.sh to create PLAN.md from docs/projects/_TEMPLATE.md and index it in the projects README, then walking the user through the Charter. For multi-session work that crosses a phase boundary or carries a decision worth recording as an ADR in docs/adr/. Do NOT auto-invoke on vague phrases like "let's start something"; for a single-session fix just do the work and capture any tail via /log followup.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Start Project skill
What this skill tells your AI
The instructions your AI receives, as published by jellyrock/jellyrock in .claude/skills/start-project/SKILL.md and read by ahel’s review.
Contract
Goal. Begin a new tracked, multi-session project under docs/projects/ and bind the session to the project lifecycle. This is the front door for work that's too big for a single ad-hoc fire: it spans two or more sessions, crosses at least one phase boundary, or carries at least one decision worth recording. The PLAN starts as a lightweight stub that grows — just enough structure to track the work, not a heavyweight charter ceremony. The skill splits along the cost boundary: the deterministic scaffold (collision-check, create the dir, copy the template, fill dated frontmatter, index the README row) is mechanical and should be carried by a zero-cost script; the load-bearing judgment — co-designing the Charter (Goal / Success criteria / Out of scope / Phases) interactively with the user — stays in skill prose. That Charter co-design is genuine reasoning work: scoping a multi-session effort, drafting from incomplete information, iterating until the boundaries are right — which is why the skill runs at the judgment-grade tier even though its mechanics are scripted. Getting the Charter wrong front-loads drift across every session that follows.
Inputs. $ARGUMENTS is an optional kebab-case slug. If present, use it. If absent, propose a short kebab-case slug from the work the user describes and confirm it before scaffolding. The skill expects docs/projects/ to exist with a project template to copy and a README.md to index into. It also expects the user to be available to co-design the Charter — this is not a fire-and-forget scaffold.
Outputs.
- A new
docs/projects/YYYY-MM-<slug>/PLAN.md(whereYYYY-MMis the current month), scaffolded from the project template, with the Charter filled in collaboratively and the Phases roughed in. - Frontmatter set:
project:= slug,status: active,created:andlast-updated:= today (real dates fromdate, not a model guess). - A one-line entry in the
docs/projects/README.mdactive-projects table. - An initial "Next-session kickoff" section and a first dated line in the Session log.
- The session-binding statement surfaced to the user (this session, and every future session on this project, must end with
/end-session).
Success criteria.
- A duplicate slug is caught before anything is scaffolded — an existing
*-<slug>/directory (including under_archive/) stops the skill and routes the user to/resume-project. - The Charter is co-designed, not invented: Goal/Success/Out-of-scope are drafted from what's known and then iterated with the user; scope the skill is unsure about is asked, never assumed.
- The PLAN is a single file — Charter, Phases, Status, kickoff, and log all live in
PLAN.md, never split across files. status: activeand the README index entry are both written, so the state-briefing and resume skills can find the project.- The session is explicitly bound to the lifecycle, and the user is told
/end-sessionis the mandatory close.
Failure modes to avoid.
- Scaffolding over an existing slug. Always check for a
*-<slug>/collision (active and archived) first. A silent overwrite destroys a real project's history. - Inventing scope to fill the Charter. If the Goal or Success criteria aren't clear from the conversation, ask a clarifying question — do not guess a scope and write it as if confirmed. A fabricated Charter is worse than an empty one.
- Splitting the PLAN. Charter, Phases, Status, kickoff, and log stay in one
PLAN.md. Don't break them into sibling files for tidiness. - Silently rewriting the Charter as scope drifts. Intent stays mutable under the lightweight model — there's no mandatory immutability flip. But scope changes are recorded as dated decisions in the Status section (or, for a big shift, an explicit scope-cut / supersede-decision), not by quietly editing the Charter in place — that preserves the original intent as an anchor you can diff against.
- Forgetting to bind the session. The session-end discipline is the whole point of the lifecycle. If the binding statement isn't surfaced, the project can drift into an un-closed session and its state never gets written back.
- Reaching for
/start-projecton work that's actually ad-hoc. A single-session fix doesn't earn a PLAN. Over-scaffolding turns a 20-minute job into lifecycle ceremony.
When NOT to use.
- The work fits in one session, doesn't cross a phase boundary, and carries no decision worth recording. Just do it; capture any deferred tail via
/log followup. - The project already exists under
docs/projects/. Use/resume-project <slug>to pick it up —/start-projectrefuses duplicates by design. - You want to triage what to work on next rather than commit to a new tracked effort. That's
/focus(or/catchupfor a state briefing) —/start-projectassumes the decision to start is already made. - The "project" is really a decision that needs deliberation, not multi-session execution. An architectural decision lands as a numbered ADR in
docs/adr/via/log decision; only wrap it in a project if the execution spans sessions.
Implementation
Begin a new tracked project in docs/projects/ and bind this session to the project lifecycle.
Step 1 — Determine the slug
Use the slug the user passed. If none, propose a short kebab-case slug from the work they describe and confirm it. The project directory is docs/projects/YYYY-MM-<slug>/, where YYYY-MM is the current month (e.g. 2026-05-ansible-modernization).
Step 2 — Pre-check for duplicates
Cheaply confirm no *-<slug>/ directory already exists under docs/projects/ (including _archive/). If one does, stop and route the user to /resume-project <slug>. (Make the scaffold step re-check this atomically and abort without mutating, so this pre-check just avoids wasting the Charter co-design on a taken slug.)
Step 3 — Co-design the Charter with the user (the judgment)
Work through the three Charter fields — Goal (one sentence), Success criteria (bulleted), Out of scope (bulleted). Draft a proposal from what is known, then iterate with the user. Also rough in the Phases list. Do not invent scope; ask when unsure. This is the load-bearing judgment work — settle the one-line Goal before scaffolding, since the scaffold needs it for the README row.
Step 4 — Scaffold via a script (the mechanics)
The deterministic scaffold — collision re-check, create the dir, copy the project template, fill dated frontmatter (project: = slug, status: active, created:/last-updated: = today's real dates from date), append the README active-projects row — is mechanical with exactly one correct output. Run the co-located script rather than re-improvising it each run (deterministic, regression-testable, free; see cost-efficiency.md):
bash .claude/skills/start-project/scaffold-project.sh <slug> "<one-line goal>"
If the script exits non-zero (collision, missing template/README, bad slug), fix the cause and re-run — don't hand-scaffold around it.
Step 5 — Fill the Charter body into the PLAN
Write the co-designed Charter (Goal / Success / Out-of-scope), the Phases, an initial "Next-session kickoff", and a first dated line in the Session log into the scaffolded PLAN.md.
Step 6 — Bind the session
From this point, this session — and every future session on this project — is governed by the lifecycle. State to the user, and hold for the rest of this session:
This project session MUST end with
/end-session. Running/end-sessionis the final step before this task is considered complete. Do not conclude the session, hand off, or report the work done until/end-sessionhas been run and its commit pushed.
Notes
- One file per project:
PLAN.mdholds Charter, Phases, Status, kickoff, and log. Do not split it. - Intent stays mutable (lightweight model — no immutability flip). Record scope changes as dated decisions in Status, or a supersede-decision / explicit scope-cut for a big shift — don't quietly rewrite the Charter in place.
- Keep the mechanical scaffold in a script and reserve the skill (and Opus) for the Charter co-design. See
cost-efficiency.md.
Signals
- GitHub stars
- 41
- Forks
- 2
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
start-project- Source
- github.com/jellyrock/jellyrock