Delivery Bootstrap Skill
Just-in-Time tech stack detection and setup.
Workflow
- Check product_type from
.claude/diamonds/active.yml:- If
product_typeis set (from/mycelium:interview), use it to determine the delivery profile. - If not set, scan for indicators per
${CLAUDE_PLUGIN_ROOT}/jit-tooling/detector.mdStep 1b:- Curriculum/lesson plans, LMS config ->
content_course - Manuscript/chapters, editorial calendar ->
content_publication - Video scripts, subtitle files, podcast RSS ->
content_media - Prompt templates, model configs, agent definitions ->
ai_tool - Service blueprints, pricing docs ->
service_offering
- Curriculum/lesson plans, LMS config ->
- If non-software product_type detected: skip software tooling detection (Steps 2-3 below), configure product-type-appropriate validation instead, and proceed to Step 4.
- If
1b. Scan project root for technology indicators (software and ai_tool with code):
- Package files: package.json, Cargo.toml, go.mod, requirements.txt, pyproject.toml, Gemfile, pom.xml, build.gradle
- Config files: tsconfig.json, .eslintrc, .prettierrc, rustfmt.toml, .editorconfig
- CI/CD: .github/workflows, .gitlab-ci.yml, Jenkinsfile, Dockerfile
- Framework indicators: next.config.js, nuxt.config.ts, angular.json, etc.
-
Identify stack components (software/ai_tool with code):
- Language(s) and version(s)
- Framework(s)
- Package manager
- Test runner and framework
- Linter and formatter
- Build tool
- CI/CD platform
- Database (if detectable)
- Deployment target
-
Verify tooling works:
- Run build command
- Run test command
- Run lint command
- Note any failures or warnings
3a. Offer the feedback-loop tooling menu (OFFER-MENU layer):
- For the detected stack, present the best-practice menu from
${CLAUDE_PLUGIN_ROOT}/jit-tooling/security-scanning.md(SAST, dep audit, secrets, test runner, linter), ordered smallest-friction first (typically: secrets scan → linter → SAST → dep audit → container scan). - Frame as: "Best practice is to have tools help you shorten the feedback loop. For your detected stack ({lang}), the menu is: {list}. Want help finding and configuring any of these?"
- Never auto-install. Never pick rulesets on the user's behalf. Adoption is per-tool, per-consent. The user owns the choice. See
feedback-jit-nudge-not-push(founder principle, 2026-05-26). - If user declines or defers, record the offer in
active-stack.ymlundertooling_offers_declinedwith timestamp — later shape-triggers (Step 3b) can re-surface the relevant subset.
3b. Risk-shape re-offer (RISK-TRIGGERED layer):
- Scan code for risk-shape patterns. If any fires AND the corresponding tool was declined in 3a, re-offer the relevant subset with the risk as citation. Patterns:
- AUTH shape:
/login,/auth,/register,password,session,token,jwt,oauth,x-user-idand similar trust-bearing headers → re-offer SAST + suggest/mycelium:threat-modeland/mycelium:security-review. SAST blind spot: identity-trust design (e.g.,x-user-idheader trusted as auth) is NOT catchable by SAST tools — they don't model intent. Route to/mycelium:security-reviewregardless of whether SAST consent was given. - AI shape: imports from
ai_componentscategories per detector.md Step 1c → suggest/mycelium:xai-check - PII / data shape:
email,ssn,phone,address,payment,card, schema fields matching PII patterns → suggest/mycelium:privacy-check+ secrets scanner - Public endpoint shape: routes without auth middleware → suggest SAST + DAST. SAST blind spot: "no authorization check" is design-level; SAST can flag suspicious patterns but cannot confirm absence-of-intent. Route to
/mycelium:security-review. - File-upload shape:
upload,multipart,FormFile,ServeFile,ServeContent,Content-Disposition, file-system write from request → re-offer SAST + suggest/mycelium:threat-modelwith explicit MIME-allowlist + filename-sanitization + size-cap + overwrite-policy review. SAST partial coverage: gosec/semgrep catch path-traversal (filepath.JoinwithoutBase), but cannot catch design flaws (MIME confusion via stored files, public-list disclosure, missing auth).
- AUTH shape:
- Cite the trigger explicitly per CLAUDE.md attribution rule:
(per: AUTH shape detected at app.py:42 → SAST recommended). - The 4-layer composition (OFFER-MENU + RISK-TRIGGERED + NUDGE-AT-FAILURE + PR-TIME) is derived from a deep-study comparison of 10 adoption approaches (2026-05-26). Strongest single-finding: contextual nudges at decision moments produce ~8× higher detection vs no-nudge baseline (Less is More, arxiv 2202.04586; consistency_only — single experimental study). Other layers live in
/mycelium:security-review,/mycelium:threat-model,/mycelium:reflexion(NUDGE-AT-FAILURE) and/mycelium:definition-of-done(PR-TIME).
-
Document existing patterns:
- Code organization (monorepo, src layout, etc.)
- Naming conventions
- Test patterns
- Error handling patterns
- API patterns
-
Scaffold Architecture Decision Records (if applicable):
- Check: Does the project have significant architecture decisions ahead? Indicators:
- Multiple competing implementation approaches (e.g., REST vs GraphQL, monolith vs microservices)
- New infrastructure choices (database, hosting, auth provider)
- Framework selection or migration
- Integration with external systems
- If yes: create
docs/adr/directory and a template filedocs/adr/0000-template.md:# [NUMBER]. [TITLE] Date: [DATE] ## Status Proposed | Accepted | Deprecated | Superseded by [ADR-XXXX] ## Context What is the issue that we're seeing that is motivating this decision? ## Decision What is the change that we're proposing and/or doing? ## Consequences What becomes easier or more difficult to do because of this change? - If no significant architecture decisions are foreseeable: skip. Don't scaffold ceremony for a weekend project.
- ADR format: Nygard (Context/Decision/Consequences). Lightweight by design — each ADR should be readable in under 2 minutes.
- Check: Does the project have significant architecture decisions ahead? Indicators:
-
Output:
## Stack Profile - Language: [x] v[y] - Framework: [x] - Package manager: [x] - Test: [command] ([framework]) - Lint: [command] - Build: [command] - CI/CD: [platform] ## Commands - Install: [command] - Dev server: [command] - Test: [command] - Build: [command] - Lint: [command] ## Observed Patterns - [list of patterns detected] ## Issues Found - [any broken tooling or warnings] ## Architecture Decision Records - Scaffolded: yes/no - Location: docs/adr/ - Pending decisions: [list if any identified during bootstrap] ## Risk Shapes Detected - [list of risk shapes fired in Step 3b, with citations] ## Recommended Next Skills - [if AUTH / public-endpoint / file-upload / PII shape fired] → run `/mycelium:security-review` before merging (per: SAST blind spot — identity/authorization/business-logic flaws aren't tool-catchable) - [if AI shape fired] → run `/mycelium:xai-check` - [if PII shape fired] → run `/mycelium:privacy-check`
Rules
- Use the project's established patterns. Don't impose external preferences.
- Be language-agnostic in principles, language-specific in implementation.
- If tooling is broken, flag it rather than silently working around it.
Canvas Output
Create/update ${CLAUDE_PLUGIN_ROOT}/jit-tooling/active-stack.yml with detected stack configuration.
See ${CLAUDE_PLUGIN_ROOT}/jit-tooling/active-stack.example.yml for the expected format.
Theory Citations
- Forsgren: Accelerate (tooling and automation)
- Smart: Sooner Safer Happier (remove friction)
- Nygard: Architecture Decision Records (lightweig