plugins/pronto/skills/init/SKILL.md
Scaffold the pronto kernel (AGENTS.md, project/ container, .pronto/, .claude/ seed, .gitignore additions) into the current repo and propose installs for recommended sibling plugins
npx skillsauth add acostanzo/quickstop initInstall 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.
You are the Pronto init skill. When the user runs /pronto:init (optionally --force), scaffold the kernel into the current repo, then offer to install each recommended sibling plugin that isn't already present.
Parse $ARGUMENTS:
--force → FORCE = true.git rev-parse --show-toplevel 2>/dev/null. If this fails, tell the user /pronto:init must run inside a git repo and stop.${CLAUDE_PLUGIN_ROOT} — pronto's own root, for reading templates/ and references/.${PLUGIN_ROOT}/templates.Build a collision report. For every template source path, check whether the target already exists:
| Source | Target | Collision rule |
|---|---|---|
| ${TEMPLATES_ROOT}/AGENTS.md | ${REPO_ROOT}/AGENTS.md | Refuse to overwrite without --force |
| ${TEMPLATES_ROOT}/project/** | ${REPO_ROOT}/project/** | Refuse on file-level collision unless --force; create missing subdirs regardless |
| ${TEMPLATES_ROOT}/.claude/** | ${REPO_ROOT}/.claude/** | Skip on file-level collision (never clobber existing .claude/ content); add files the consumer lacks |
| ${TEMPLATES_ROOT}/.pronto/state.json | ${REPO_ROOT}/.pronto/state.json | Refuse without --force if present; the file is tool-state, never user-authored |
| ${TEMPLATES_ROOT}/gitignore-additions.txt | ${REPO_ROOT}/.gitignore | Append-and-dedupe (see Phase 3.5) |
Batch existence checks via a single Bash call where possible (e.g., test -e per path, collect results).
Build COLLISIONS, a list of (source, target, action) tuples where action is one of write, skip, refuse, append.
Show the user exactly what will happen before doing anything. Format:
=== PRONTO INIT PLAN ===
Repo: <REPO_ROOT>
Force mode: <on|off>
Kernel scaffolding:
+ AGENTS.md (new)
+ project/README.md (new)
+ project/plans/.gitkeep (new)
+ project/tickets/.gitkeep (new)
+ project/adrs/.gitkeep (new)
+ project/pulse/.gitkeep (new)
+ .claude/README.md (new)
+ .pronto/state.json (new)
~ .gitignore (append: 4 lines)
Sibling recommendations:
<enumerated in Phase 4>
Proceed? [run with --force to overwrite any file marked 'refuse']
Markers:
+ — new file to write.~ — file to modify (append).- — file to skip (collision; preserving existing).! — refusal (collision without --force); this run will abort if any ! appears.If any ! markers and FORCE == false, stop here and tell the user how to proceed:
Conflicts detected. Re-run with --force to overwrite, or resolve manually:
- <path>: <reason>
For each (source, target, action) in COLLISIONS where action is write:
mkdir -p)..gitkeep files: touch the target rather than reading an empty source.For action skip: log the skip, move on.
For action refuse (only present if FORCE == true): overwrite per write.
Special handling for ${TEMPLATES_ROOT}/gitignore-additions.txt:
${REPO_ROOT}/.gitignore does not exist → Write with ADDITIONS as the full file..gitignore lines into EXISTING.Load ${PLUGIN_ROOT}/references/recommendations.json.
Filter to plugin_status == "shipped" OR plugin_status == "phase-1b" (phase-2-plus plugins don't exist yet — don't propose installs for them).
For each qualifying dimension:
recommended_plugin is already installed. Consult:
${REPO_ROOT}/.claude-plugin/marketplace.json (if pronto is being run from within quickstop itself) for local availability.~/.claude/plugins/installed_plugins.json for globally-installed plugins.present; do nothing further for this dimension.recommend-install; record the install_command for proposal.If any dimensions have recommend-install:
Use AskUserQuestion (multiSelect) to let the user choose which sibling plugins to install:
question: "Which recommended sibling plugins should we install?"
header: "Sibling installs"
options (one per recommend-install entry):
label: "<plugin-name> — <dimension_label>"
description: "<one-sentence value prop> (install: <install_command>)"
options additionally:
label: "Skip all — no installs"
For each selected plugin, tell the user to run the install command (or invoke it via Bash if the CLI supports it): /plugin install <name>@quickstop. Pronto does not install programmatically; Claude Code's normal install path runs with the user in the loop.
If the user selects "Skip all" → skip Phase 5's action; proceed to summary.
Print a final summary:
=== PRONTO INIT COMPLETE ===
Kernel scaffolded at <REPO_ROOT>:
<list of files written, one per line>
.gitignore: <appended N lines | already current>
Siblings recommended:
✓ <installed or just-installed plugin>
⊘ <not installed> — /plugin install <name>@quickstop
Next steps:
1. Review AGENTS.md and fill in repo-specific conventions.
2. Run /pronto:audit for your baseline score.
3. Run /pronto:improve to walk the weakest dimensions.
=== END ===
Running /pronto:init twice on the same repo without --force should:
.gitignore as already current.This is the test for A1's "run in empty dir produces full kernel; run again without --force is a no-op with clear output" acceptance.
git rev-parse fails → abort with a clear message.recommendations.json parse failure → skip Phase 4/5 silently, continue with the kernel scaffolding (don't block scaffolding on registry issues).CLAUDE.md, LICENSE, package.json, etc., init leaves them alone..claude/ and .pronto/ as literal hidden directories; the copy routine doesn't need a rename map — paths are 1:1 with the target.--force is coarse. There's no per-path --force. If the user needs to reset only .pronto/state.json, they can rm it and re-run /pronto:init without --force.documentation
Surface (and optionally fix) doc-tree drift — duplicates, dead links, stale docs, template non-compliance, missing `## Related` blocks. Read-only by default; `--apply` does mechanical fixes; `--apply-semantic` emits diffs for human review.
documentation
Full-text search over the repo's `docs/` tree (FTS5-backed). Returns ranked hits with file paths, tags, and matching snippets.
testing
Retrieval-augmented Q&A over the repo's `docs/` tree. Returns a one-paragraph synthesis plus citations (doc path + heading anchor) and per-citation corroboration verdicts. Field shape and ordering are locked at M3; M5 populates the verdicts.
documentation
Scaffold a new doc under `docs/` from a Diátaxis template, or update an existing one and bump its `updated:` date. Suggests `## Related` candidates and refreshes the FTS5 index on write.