project-kickoff
Skill1 starsChanged 4 days agoMITView on GitHub
Use when starting a brand-new project of any type (software, research, content/writing, personal) and the user wants it set up so any AI can pick it up — project brief, roadmap and phases, stack/methods/style/resources doc, task/issue/report files with status, AGENTS.md (plus CLAUDE.md / GEMINI.md pointers) and project skills. Also upgrades a project that an older project-kickoff set up to the current project structure. Do NOT use on other projects that already have AGENTS.md, CLAUDE.md or docs/PROJECT.md (use project-adopt).
14 other projects use a version of this.
Adopted by
Most recently taken up by
- mahelmouzoun07-afk/project-kickofftheir own version, first seen Nov 8, 2026
- jonesrussell/skillstheir own version, first seen Nov 1, 2026
- adiutama/skillstheir own version, first seen Nov 1, 2026
- Brandondaymdr/Claude-Skillstheir own version, first seen Oct 29, 2026
- romain-nicod/kickofftheir own version, first seen Oct 2, 2026
- lawalOyinlola/appsec-protocolstheir own version, first seen Sep 28, 2026
Other versions14 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 14
- soumyaRauth/skills-hub★ 10same name
- adiutama/skills★ 1same name
- Brandondaymdr/Claude-Skills★ 1same name
- impeto-ai/claude-skills-impeto★ 1same name
- jonesrussell/skills★ 1same name
- lawalOyinlola/appsec-protocols★ 1same name
- Lucas-Grilli/context-os-plugin★ 1same name
- magi12345/project-kickoff★ 1same name
- openqa-labs/zenith★ 1same name
- romain-nicod/kickoff★ 1same name
4 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. 0 are common, 9 are distinctive, and 12 are very specific to this project.
0
Common
Most of the 13 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Never overwrite: Before writing any file, check that it does not exist.
- Very specific: line 34
If any of these exist in the target: AGENTS.md, CLAUDE.md, docs/PROJECT.md, take the first case that applies:
- Very specific: line 48
If docs/ exists but docs/PROJECT.md does not:
- Very specific: line 49
every file under docs/ is under docs/design/ (ignore .DS_Store and .gitkeep) → the project was designed first: continue.
- Distinctive: line 68
Ask the user to give everything they have in one message: a description, notes, requirement files, links, chat excerpts.
- Distinctive: line 72
If existing design docs were found in step 1, decide whether to use them as part of the brief:
- Distinctive: line 82
Not used → they are not read.
- Distinctive: line 85
When the design docs are used, read each one in full — at most 20 files and 2 000 lines in all.
- Very specific: line 125
At most 7 questions in total: Ask in table order. When the budget is used up, every remaining gap becomes Undecided.
- Distinctive: line 148
Ask these questions, one per message, even when the gap budget is used up:
- Very specific: line 211
if phase-1 features or phase-1 exit criteria are Undecided, they share one task, Decide phase-1 features (feature: none)
- Very specific: line 215
no features at all → docs/features/.gitkeep
- Very specific: line 236
When the brief's phase-1 features are Undecided, only ui-design-system (if any) gets tasks — the Decide phase-1 features task covers the …
- Very specific: line 274
Never rewrite, reformat or fill them from a template.
- Distinctive: line 301
If an instruction says to delete the line when there is no value, delete the whole line.
- Very specific: line 312
Every Undecided in PROJECT.md, the type doc, phase-1 of ROADMAP.md and the phase-1 features (their Impact excepted) has a matching Decide … …
- Very specific: line 315
Every value in the type doc and phase-1 is either in the brief (existing design docs used in step 2 included), in an answer, or Undecided.
- Distinctive: line 317
Every existing design doc is unchanged, except for front matter prepended after a yes.
- Very specific: line 322
Every feature comes from the brief or an answer, in its words — except ui-design-system.
- Distinctive: line 325
No token, key or other secret value appears in any file written or command run.
- Very specific: line 339
If the target is a git repository (git rev-parse --is-inside-work-tree succeeds), run git check-ignore -v -- <every file you wrote or …
“Common” is measured: kept by at least 6 in 10 of the 13 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Project Kickoff
Sets up a new project with a documentation set that lets any AI agent understand the project
from AGENTS.md alone. Templates are in templates/ next to this file; per-type differences
are in references/project-types.md. Upgrade mode (step 1) follows references/upgrade.md.
Hard rules
- Never overwrite. Before writing any file, check that it does not exist. If it does, skip it and report it at handoff. The one exception: front matter prepended to an existing design doc, only when the user said yes to that diff in step 5 (see "Existing design docs" in step 6).
- Never invent. Anything the user did not provide or answer is written as
Undecidedand gets aDecide <topic>task. The only exceptions: the name and goal of each phase, phase-1 included, when the brief does not state them (proposed from the type's typical phases and shown as proposed in step 5), theui-design-systemfeature, optional fallbacks such asNot designed yet, and the one sharedDecide phase-1 featurestask — see steps 3, 5 and 6. A common default is not an answer — see step 3. - English only in every generated file — names, frontmatter and body. Talk with the user in whatever language they use.
- No git commits unless the user says yes at handoff.
- No files before approval. Nothing is written before the user confirms the summary in step 5.
Workflow
1. Preflight
Target directory = the current working directory, unless the user names another one.
If any of these exist in the target: AGENTS.md, CLAUDE.md, docs/PROJECT.md, take the
first case that applies:
AGENTS.mdcontainsmanaged-by: project-adopt→ stop and write nothing: it was set up by project-adopt, which has no refresh mode yet.- the target has
AGENTS.md,docs/PROJECT.mdand.claude/skills/project-docs/SKILL.md→ it was set up by project-kickoff. Its structure is the number in.claude/skills/project-docs/KIT-VERSION(1 when the file is missing). Lower than the one intemplates/skills/project-docs/KIT-VERSION→ upgrade mode: tell the user, then followreferences/upgrade.mdinstead of the hard rules above and steps 2–7. The same → say it is up to date and write nothing. - otherwise → stop and write nothing. Tell the user that project-kickoff only sets up new projects and never overwrites; the project already has documentation, so use the project-adopt skill instead.
If docs/ exists but docs/PROJECT.md does not:
- every file under
docs/is underdocs/design/(ignore.DS_Storeand.gitkeep) → the project was designed first: continue; step 2 decides whether to use the design docs. otherwise → write nothing and ask two questions, one per message:
- "Does
docs/belong to something else, such as a documentation site or another tool?" (yes / no / not sure) - "project-kickoff will add its files to
docs/next to the files already there, and will not change those files. Continue?" (yes / no). If the answer to question 1 was yes or not sure, first say that kickoff's files may then be mixed into that tool's or site's content.
Continue only on an explicit yes to question 2. Otherwise stop, and say that nothing was written. Neither question counts toward the 7-question budget of step 3.
- "Does
Anything else (empty folder, .git, a short README.md, source files) → continue.
Existing design docs are the files under docs/design/, plus DESIGN.md and the files
under design-ui/. Note which exist; step 2 decides whether to use them.
2. Receive the brief
Ask the user to give everything they have in one message: a description, notes, requirement files, links, chat excerpts. Read any files or links they point to. If the user's first message already gives the brief, do not ask for it again.
If existing design docs were found in step 1, decide whether to use them as part of the brief:
- the brief points at them — names
docs/design/,DESIGN.md,design-ui/or one of their files, or says the design already exists in this folder → use them; do not ask. Before the first question of step 3, tell the user in one line which files are used, e.g. "Usingdocs/design/ARCHITECTURE.mdanddocs/design/api-notes.mdas part of the brief." (not a question; it costs nothing from the 7-question budget) - the brief says not to use them → do not use them; do not ask
- otherwise → list them and ask whether to use them (not counted in the 7-question budget of step 3)
Not used → they are not read; they are still never overwritten, and AGENTS.md still lists them (step 6 item 12). The step-5 summary says which design docs are used.
When the design docs are used, read each one in full — at most 20
files and 2 000 lines in all; list any file beyond that as "not read" in the step-5 summary.
From here on, the brief includes what those docs state: an item they answer is not asked,
and a value they give is not Undecided. When a design doc and the user's message disagree,
ask which is right (it counts toward the 7 questions). Alternatives a design doc rejects, with
its reasons, go into D-0001 "Rejected".
3. Gap analysis
Map the brief onto this checklist:
| # | Item | Goes to | If missing |
| 1 | Project type: Software / Research / Content / Other | PROJECT.md, picks the type doc | ask |
| 2 | Project name | everywhere | ask |
| 3 | Goals | PROJECT.md | ask |
| 4 | Success criteria | PROJECT.md | ask |
| 5 | Non-goals | PROJECT.md | ask |
| 6 | Phase 1 features | docs/features/, initial tasks | ask |
| 7 | Type-doc gap questions (see references/project-types.md) | type doc | ask |
| 8 | Users / beneficiaries | PROJECT.md | ask |
| 9 | Scope | PROJECT.md | derive from brief; ask only if unclear |
| 10 | Later phases | ROADMAP.md | propose from the type's typical phases; confirmed in step 5 |
| 11 | Problem / motivation | PROJECT.md | restate the need behind the brief's stated purpose, adding nothing; else Undecided |
| 12 | Constraints | PROJECT.md | None stated |
Rules:
- Skip every item the brief already answers unambiguously (e.g. "a web app in Next.js" → type Software, framework Next.js). Skipped items cost no question; show the derived value in the step-5 summary so the user can correct it.
- Answered means stated. An item or field counts as answered only when the brief states it
or it follows necessarily from what is stated. A common default is not an answer: TypeScript
for Next.js, CI from the hosting provider, an auth method, a coverage threshold, standard
setup features. Such a value is
Undecided, or an option offered in a question. Stated values are carried over without added detail — see "Filling templates" in step 6. - Goals (item 3) are answered when the brief states what the project is for ("a web app
for groups of friends to split travel expenses" →
Let groups of friends split travel expenses.). Write only what it states, as few bullets as that gives. A feature or MVP list is scope, not a goal. - One question per message; multiple choice when possible.
- At most 7 questions in total. Ask in table order. When the budget is used up, every
remaining gap becomes
Undecided. - "I don't know" / "not decided yet" is a valid answer →
Undecided. Do not push. - Type-doc fields that are neither in the brief nor covered by a gap question (e.g. Testing
in STACK.md) are written as
Undecidedwithout asking — they still get a Decide task. - A template fallback other than
Undecided(None stated,Not stated,None yet,Not set up yet) marks an optional field: write it as given, with no Decide task. - Whenever the user rejects an alternative during the conversation, note it and the reason — it goes into D-0001 "Rejected".
- Phase 1 = the type's first typical phase, unless the brief clearly starts later (e.g. the setup is already done). Phase names may be adapted to the project.
- A feature is a unit of scope the project delivers: a product capability, or e.g. "Project setup" in a Foundation phase. Each item the brief or an answer lists becomes one feature, in its own words.
- Features the brief gives for a later phase (e.g. "MVP: …" when phase 1 is Foundation) belong to that phase and do not answer item 6. Item 6 is then still asked; offer your proposed phase-1 features as the options, plus "I don't know yet".
- Has a UI: a Software project has a user interface when the brief states a web, mobile
or desktop app or a user-facing screen. Otherwise the UI gap question in
references/project-types.mdasks it.
4. Setup choices (not counted in the 7-question budget)
Ask these questions, one per message, even when the gap budget is used up:
- AI tools (multi-select): Claude, Gemini, Codex, Cursor, none. Skip if the brief already says. Decides the pointer files in step 6.
- Project skills: pick the 2–4 most relevant skills from the type's "Typical skills" and
the brief (adapt names to the project if useful). For each: kebab-case name, one-line
purpose, why this project needs it. The user picks any number, including none.
project-docsis always installed and is not part of the suggestion. - Stack tools: per
references/stack-tools.md— only for Software projects where Claude was selected and at least one STACK.md value comes from the brief or an answer. Up to 6 installed or installable skills, agents, plugins and MCP servers matching those values, plus up to 4 installed skills or agents for the project's work areas (testing, API security, database, user interface); turned-off tools are left out. The user picks reference, install or skip for each.
5. Summary for approval
Show, in the user's language:
- the full file tree to be created
- PROJECT.md essentials: name, type, goals, non-goals, success criteria
- phases, with phase-1 marked active and every phase name or goal the brief does not state
marked
(proposed), and the features of each phase - the initial task list (number + title)
- design docs:
docs/design/ARCHITECTURE.md(Software), and the UI setDESIGN.md+design-ui/with itsui-design-systemfeature (projects with a user interface); existing design docs are kept as they are and named as such - for each existing
docs/design/ARCHITECTURE.mdorDESIGN.mdwhose first line is not---: the front matter diff of step 6 ("Existing design docs") as a unified diff, saying that only these lines are added and the rest of the file is not changed. Ask for a separate yes or no on each diff; a no keeps the file exactly as it is and does not block the rest - values derived from the brief without asking (so the user can correct them)
- all
Undecideditems - pointer files and selected skills
- stack tools: each chosen tool with reference / install, and the exact command of every install
Revise until the user explicitly confirms. Do not write any file before that.
6. Generate
DATE = today, YYYY-MM-DD. Write in this order, checking first that each path does not exist:
docs/PROJECT.md←templates/docs/PROJECT.mddocs/ROADMAP.md←templates/docs/ROADMAP.md(phase-1active, later phasesplanned). Each phase's name and goal come from the brief when it states them; otherwise they are proposed from the type's typical phase (confirmed in step 5). A label the brief puts on a list ("MVP: …") states that phase's name, not its goal. A proposed goal says what the phase is for, in general terms (e.g. Foundation:Set up the project so features can be built.); it never adds features or thresholds. Later phases' exit criteria come only from the brief or answers. Otherwise they areUndecidedwithout a Decide task; they are settled when that phase becomes active.docs/<TYPE-DOC>.md← the type's template onlydocs/features/←templates/skills/project-docs/templates/feature.md:- one file per feature confirmed in step 5, numbered from
0001in phase order - each has
status: approved, itsphase:andticket: none WHY= "Listed in the kickoff brief." or "Answer to a kickoff question.", plus the reason if one was givenGOAL,INandCRITERIAuse the brief's or the answer's own words (one criterion per stated outcome, e.g.- [ ] Create a trip);OUT=Not statedunless an exclusion applies to this feature- Impact → UI =
needs mockupwhen the project has a UI and the feature is something a user does on screen, otherwisenone; Impact → Architecture =Undecided(settled when its tasks are created) — neither gets a Decide task relatedlists the feature's tasks, and each task'srelatedlists its feature- if phase-1 features or phase-1 exit criteria are
Undecided, they share one task,Decide phase-1 features(feature: none) - with a UI,
feature-0001isui-design-system, written exactly as in "The ui-design-system feature" below - no features at all →
docs/features/.gitkeep
- one file per feature confirmed in step 5, numbered from
- Software only:
docs/design/ARCHITECTURE.md←templates/docs/design/ARCHITECTURE.md, withEMPTY=Not designed yet(an optional field: no Decide task). If it already exists, do not write it; see "Existing design docs" below - Projects with a user interface only. If
DESIGN.mdalready exists, skip this whole item and theui-design-systemfeature, and report it at handoff (and see "Existing design docs" below):DESIGN.md←templates/DESIGN.md(EMPTY=Not designed yet)design-ui/README.md←templates/design-ui/README.mddesign-ui/tokens.css←templates/design-ui/tokens.css(verbatim)design-ui/proposals/.gitkeep
docs/DECISIONS.md←templates/docs/DECISIONS.md(the decision index) anddocs/decisions/D-0001-project-kickoff.md←templates/docs/decisions/D-0001-project-kickoff.md(D-0001 records the kickoff decisions; when existing design docs were used, its Decision names them, e.g. "based ondocs/design/ARCHITECTURE.md")docs/tasks/←templates/skills/project-docs/templates/task.md:- first, one
Decide <topic>task perUndecideditem (no cap; never merge them), each withfeature: none, in this order: PROJECT.md items, then the type doc's areas in its table order, thenDecide phase-1 features.<topic>is the item or area name as the doc writes it, lowercased (Decide testing,Decide data / storage) - then 2–6 tasks for the phase-1 features, each with
feature:set to its feature. When the brief's phase-1 features areUndecided, onlyui-design-system(if any) gets tasks — theDecide phase-1 featurestask covers the rest. - numbered from
0001, allstatus: todo,ticket: none - acceptance criteria may say "add a decision (docs/decisions/)" but never pre-assign a
D-NNNNid - a
Decide …task about a stack area also gets the criterion inreferences/stack-tools.md§10
- first, one
docs/issues/.gitkeepanddocs/reports/.gitkeep(empty files).claude/skills/project-docs/← copytemplates/skills/project-docs/verbatim (SKILL.md,adding-a-feature.md,finding-tools.md,KIT-VERSIONandtemplates/). Do not fill its placeholders; they are for later use..claude/skills/<name>/SKILL.mdfor each selected skill ←templates/skills/skill-skeleton.md(RELATED_TOOLSperreferences/stack-tools.md§9)AGENTS.md←templates/AGENTS.md(TOOL_ROWSperreferences/stack-tools.md§9;DESIGN_DOCSlistsdocs/design/ARCHITECTURE.mdandDESIGN.mdwhen they exist after items 5–6, written now or already there, and the other files indocs/design/, if any)CLAUDE.mdif Claude was selected,GEMINI.mdif Gemini was selected — copy verbatim. Codex and Cursor readAGENTS.mddirectly and need no file.- Stack tool installs, if any were approved — per
references/stack-tools.md§6–§8. This is the only step that writes outside the target directory.
The ui-design-system feature (projects with a user interface; the only feature not taken from the brief):
- title
UI design system,phase: phase-1 - Why:
The project has a user interface; project-kickoff adds this feature so screens are built from an agreed design. - Goal:
An agreed look and feel, recorded in DESIGN.md and design-ui/tokens.css, that every screen is built from. - Scope In:
Design proposals, the chosen look, design tokens.Out:Building screens. - Criteria:
- [ ] 2–4 proposals in design-ui/proposals/, plus design-ui/proposals/index.html to compare them- [ ] The human picks one; the others are marked superseded- [ ] DESIGN.md and design-ui/tokens.css are filled from the chosen proposal- [ ] The choice is recorded as a decision (docs/decisions/)
- Impact: UI
needs mockup, Architecturenone - Its tasks (counted in the 2–6):
Create UI design proposals(file topiccreate-ui-design-proposals)Fill DESIGN.md and tokens.css from the chosen proposal(file topicfill-design-md-tokens-css)
Existing design docs (docs/design/ARCHITECTURE.md, DESIGN.md)
- Never rewrite, reformat or fill them from a template. Other files in
docs/design/anddesign-ui/are never changed; adesign-ui/file that exists is skipped as usual. A doc whose first line is not
---gets the core-doc front matter only if the user said yes to its diff in step 5. Prepend exactly these lines and change nothing else:--- title: <the text of its first "# " heading; else "Architecture" or "Design"> status: draft created: <the date its first commit added it: git log --diff-filter=A --format=%as -- <file> | tail -n 1; else DATE> updated: DATE ---- A doc that already has front matter is left as it is.
Filling templates
{{NAME}}→ the value.{{NAME: instruction}}→ follow the instruction and write the result.- Content comes only from the brief and the answers (the brief includes the existing design
docs used in step 2). Translate and reshape it, but add
nothing: no fields, roles, flows, numbers or qualifiers the brief does not give.
"MVP: create a trip, add expenses, see who owes whom" →
Create a trip,Add expenses,See who owes whom— not "Create a trip with named participants" or "Add expenses with payer and amount". A template asking for "2–5 bullets" or "concrete" outcomes never justifies padding; write fewer bullets instead. - Shared values:
{{DATE}},{{PROJECT_NAME}},{{TITLE}},{{NUMBER}}(4-digit, zero-padded). EMPTY(the empty-section fallback in DESIGN.md and ARCHITECTURE.md) →Not designed yet.- If an instruction says to delete the line when there is no value, delete the whole line.
- No
{{may remain in any generated file outside.claude/skills/project-docs/.
File names for features, tasks, issues and reports: <kind>-<NNNN>-<kebab-topic>-<DATE>.md.
kebab-topic = 2–5 lowercase English words from the title, joined by -, [a-z0-9-] only:
delete any other character without replacing it (CI/CD → cicd); a hyphenated word keeps
its hyphen and counts as one word (Decide phase-1 features → decide-phase-1-features).
Example: docs/tasks/task-0001-decide-hosting-provider-2026-10-24.md.
Self-check before handoff
grep -rl '{{' . --include='*.md'lists only files under.claude/skills/project-docs/.- Every
Undecidedin PROJECT.md, the type doc, phase-1 of ROADMAP.md and the phase-1 features (their Impact excepted) has a matchingDecide …task, and is listed under 'Open questions' in PROJECT.md. - Every value in the type doc and phase-1 is either in the brief (existing design docs used
in step 2 included), in an answer, or
Undecided. - Every existing design doc is unchanged, except for front matter prepended after a yes.
- Re-read PROJECT.md (Summary, Goals, Scope) and every feature file against the brief: each specific detail (field, role, flow, number) appears in the brief or an answer. Remove any that do not.
- Exactly one phase in ROADMAP.md has
- **Status:** active. - Every feature comes from the brief or an answer, in its words — except
ui-design-system. - ROADMAP.md has no
Deliverablesline. Every task'sfeature:names a file indocs/features/, or isnone. - No token, key or other secret value appears in any file written or command run.
7. Handoff
Report:
- files created, and files skipped with the reason
- existing design docs: used or not, and for each front matter diff whether it was applied
Undecideditems and their tasks- stack tools: installed / failed / referenced, with follow-ups (reload plugins, commands the user must run with their own key)
- next steps: (1) review PROJECT.md, ROADMAP.md, the type doc and any design docs, then set
status: approved, and check that the features match what you want; (2) fill in the draft skill skeletons; (3) start withtask-0001; (4) for any new feature, follow.claude/skills/project-docs/adding-a-feature.md
If the target is a git repository (git rev-parse --is-inside-work-tree succeeds), run git check-ignore -v -- <every file you wrote or
edited> first. If it prints anything, list each ignored file with the rule and the file that
holds the rule, and say that these files stay out of every commit unless they are added with
git add -f. Leave out files under a folder this run added to .gitignore (such as
.agents/), which are ignored on purpose. Never edit any .gitignore beyond that. Then ask
whether to commit; on a yes, when some listed files are ignored, ask separately whether to add
them with git add -f. Never commit without a yes.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

