/prd-ce:init — Greenfield Scaffold Seeder
Plant the consumer-owned scaffold for a fresh PRD-CE project. The methodology engine
(lifecycle skills, the agent squad, governance hooks, readiness.py) is delivered live
by the installed prd-ce plugin — it never gets copied into your repo. This skill seeds only
what is yours to own and edit: PRD.md, the SoT/ graph, epics/ templates, your
.claude/domain-profile.yaml, and per-agent MEMORY.md starters.
One manifest, no drift. The seed list comes from
install-manifest.yaml'stemplate_seedsection — the same listinstall.sh(fork path) andghm-template-sync(update path) read. This skill drives the deterministicprd-ce-init.shso behavior is identical no matter who invokes it.
Scope (v1): greenfield only. This seeds an empty structure into a fresh repo. Mid-build and live-codebase on-ramps (entry-mode branching, graph extraction) are backlogged — see
temp/plugin-conversion-plan.md. If the target already hasPRD.mdorSoT/content, the seeder keeps it (non-destructive) rather than adapting to it.
Consumes
${CLAUDE_PLUGIN_ROOT}/templates/— the bundled seed sources (mirrorstemplate_seedpaths) the packager ships with the plugin.install-manifest.yamltemplate_seed+never_touch— authoritative seed/skip lists.scripts/prd-ce-init.sh— the deterministic seeder this skill drives.
Produces
- A seeded scaffold in the target repo (no new SoT IDs — this skill places templates, it does not author specs).
- A freshly reset
PRD.md(frontmatter at v0.1, today's date, no staletemplate_version). - A verification report (hooks emit valid JSON;
readiness.pyruns).
Workflow
Phase 1 — Preflight
- Confirm
git,python3,bashare present. Warn (don't block) if the target isn't a git repo. - Confirm greenfield: if
PRD.mdor non-emptySoT/already exist, say so and stop — the seeder will keep them untouched, so there is nothing for init to do. (Point the user at the lifecycle skills to keep building, not at re-seeding.)
Phase 2 — Wizard questions
Ask only what changes the outcome (honor the execution mode's budget):
- Target directory (default: current repo).
- Domain profile:
product(default) ·library·infrastructure·research. Quick mode skips this and takes the default.
Phase 3 — Seed (drive prd-ce-init.sh)
Run the deterministic seeder so behavior matches every other path:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/prd-ce-init.sh" --target <DIR> --dry-run # preview
bash "${CLAUDE_PLUGIN_ROOT}/scripts/prd-ce-init.sh" --target <DIR> # seed
- Show the
--dry-runplan first[standard+], then execute. - The seeder skips any file that already exists (
never_touchhonored) and resets a freshly seededPRD.mdfrontmatter to v0.1. - After seeding, if the chosen domain profile differs from the default, update the
profile:key in the seeded.claude/domain-profile.yaml[standard+].
Phase 4 — Verify (trust-but-verify)
- Run each plugin hook against the target; assert valid JSON on stdout.
- Run
python "${CLAUDE_PLUGIN_ROOT}/scripts/readiness.py" run— a BLOCK on an empty scaffold is the gate working (no content yet), not a failure. Report the score. - Print next steps: customize
README.md+PRD.md, then "Let's frame the problem" (v0.1).
Anti-patterns
| Pattern | Fix |
|---------|-----|
| Hardcoding the seed file list in the skill | Drive prd-ce-init.sh; it reads template_seed |
| Copying the framework (skills/hooks) into the consumer repo | The plugin provides those live — seed only consumer-owned files |
| Overwriting an existing PRD.md/SoT/ | Greenfield-only; the seeder skips what exists |
| Leaving PRD.md at the example's version header | Frontmatter reset to v0.1 happens automatically on a fresh seed |
| Treating a readiness BLOCK on a fresh scaffold as a bug | It's the gate working — report the score |