From dev-core
Bootstrap OSS community health files — CONTRIBUTING.md, LICENSE, SECURITY.md, CODE_OF_CONDUCT.md, README sections (Getting Started, Badges), .github/PULL_REQUEST_TEMPLATE.md, .github/ISSUE_TEMPLATE/. Reads project metadata and CLAUDE.md; generates missing files idempotently. Triggers: "seed community" | "bootstrap community files" | "add contributing" | "add license" | "add security policy" | "github community files".
npx claudepluginhub roxabi/roxabi-plugins --plugin dev-coreThis skill is limited to using the following tools:
Let:
Guides setup of GitHub community health files (LICENSE, CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md, issue/PR templates) via gh CLI and APIs for open source repos.
Guides setup of GitHub community health files like LICENSE, CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md, and issue/PR templates for open source repos.
Audits open source repo health, scaffolds LICENSE/CODE_OF_CONDUCT/CONTRIBUTING/SECURITY files, sets up GitHub issue/PR templates, Actions for labeling/stale/welcome/release, and governance docs. Use for new OSS projects or publishing repos.
Share bugs, ideas, or general feedback.
Let:
σ := .claude/stack.yml config
M := project metadata (name, description, license, author, repo URL)
χ := community health file
θ := stub threshold (< 20 lines of real content)
MISSING := χ not present or below θ
GENERATED := [] — accumulator
Goal: detect MISSING χ, generate with project-specific content, leave existing populated files untouched.
Idempotent — files ≥ 20 lines skipped unless --force.
/seed-community → detect + generate all MISSING
/seed-community --only SECURITY,CoC → comma-separated subset
/seed-community --force → overwrite even populated files
1a. Read σ (cat .claude/stack.yml 2>/dev/null). Extract: runtime, package_manager, commands.*, build.formatter.
1b. Read project metadata:
# JS/TS
cat package.json 2>/dev/null | grep -E '"name"|"description"|"license"|"author"|"version"|"repository"'
# Python
cat pyproject.toml 2>/dev/null | grep -E '^name|^description|^license|^authors|^version'
# Go
cat go.mod 2>/dev/null | head -5
1c. Git remote → repo URL:
gh repo view --json nameWithOwner,description,licenseInfo,url 2>/dev/null
1d. Read CLAUDE.md (∃). Extract: purpose (1–3 sentences), commit format, branch conventions, PR/review process, stack notes. Merge into M: {name, description, license, author, repo_url, commit_format, pr_process, stack}.
Check presence + line count ∀ target:
| Target | Path | Stub if |
|---|---|---|
| README sections | README.md | Missing "Getting Started" or "Installation" heading |
| CONTRIBUTING | CONTRIBUTING.md | ∄ or < 20 lines |
| LICENSE | LICENSE | ∄ |
| SECURITY | SECURITY.md | ∄ or < 10 lines |
| Code of Conduct | CODE_OF_CONDUCT.md | ∄ |
| PR Template | .github/PULL_REQUEST_TEMPLATE.md | ∄ |
| Issue: Bug | .github/ISSUE_TEMPLATE/bug_report.md | ∄ |
| Issue: Feature | .github/ISSUE_TEMPLATE/feature_request.md | ∄ |
--only X,Y → filter MISSING to those names. --force → include all targets regardless of line count.
Display:
Community health file audit:
README.md ⚠ missing Getting Started section
CONTRIBUTING.md ✅ populated (47 lines) — skip
LICENSE ✅ exists — skip
SECURITY.md ❌ missing
CODE_OF_CONDUCT.md ❌ missing
.github/PULL_REQUEST_TEMPLATE.md ❌ missing
.github/ISSUE_TEMPLATE/bug_report.md ❌ missing
.github/ISSUE_TEMPLATE/feature_request.md ❌ missing
5 files to generate.
MISSING = ∅ → "All community files are present. Use --force to regenerate." → exit.
→ DP(C)
Process MISSING in order: LICENSE → CODE_OF_CONDUCT → SECURITY → CONTRIBUTING → PR Template → Issue Templates → README sections.
git log --reverse --format="%ad" --date=format:"%Y" | head -1 → year (else current year). Generate standard SPDX text. Author = M.author or org from repo URL.
Contributor Covenant v2.1. Replace [INSERT CONTACT METHOD] with M.author email if available, else leave placeholder.
# Security Policy
## Supported Versions
| Version | Supported |
|---------|-----------|
| latest | ✅ |
## Reporting a Vulnerability
Please **do not** open a public GitHub issue for security vulnerabilities.
Report privately via GitHub Security Advisories:
[Report a vulnerability]({M.repo_url}/security/advisories/new)
Or email: {M.author_email or "[MAINTAINER EMAIL]"}
We aim to respond within 48 hours and patch within 14 days.
Pull from M + σ:
{commands.install}, {commands.dev}{commands.test}feat/, fix/, chore/ prefixes{build.formatter} + {build.formatter_fix_cmd}## Summary
<!-- What does this PR do? Link the issue: Closes #N -->
## Type of change
- [ ] Bug fix
- [ ] New feature
- [ ] Refactoring
- [ ] Documentation
- [ ] CI/Infrastructure
## Checklist
- [ ] Tests pass (`{commands.test}`)
- [ ] Lint passes (`{commands.lint}`)
- [ ] Docs updated if needed
- [ ] Commit messages follow `{commit_format}`
bug_report.md — Steps to reproduce, Expected behavior, Actual behavior, Environment (OS, runtime version, plugin version), Additional context.
feature_request.md — Problem statement, Proposed solution, Alternatives considered, Additional context.
Read existing README. Inject after first ## or at end if ¬sections:
¬overwrite existing content — append missing sections or insert badges at top only.
After each file: display ✅ {path} — generated ({N} lines) and append to GENERATED.
Seed Community Complete
=======================
Generated ({|GENERATED|} files):
LICENSE ✅ MIT, 2026
CODE_OF_CONDUCT.md ✅ Contributor Covenant v2.1
SECURITY.md ✅ vulnerability reporting policy
.github/PULL_REQUEST_TEMPLATE.md ✅ PR checklist
.github/ISSUE_TEMPLATE/bug_report.md ✅
.github/ISSUE_TEMPLATE/feature_request.md ✅
README.md ✅ badges + Getting Started added
Skipped (already populated):
CONTRIBUTING.md ⏭ 47 lines
LICENSE ⏭ exists
→ DP(A) Commit generated files | Review first, commit manually | Skip
"Commit" → git add {GENERATED} + commit:
chore: add community health files (SECURITY, CoC, issue templates)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
| Scenario | Behavior |
|---|---|
| ¬git repo | Skip badges + GitHub-specific files; generate root files only |
| ¬package.json ∧ ¬pyproject.toml | Use git remote for name; prompt for author |
| LICENSE already exists | Skip regardless of --force (license changes are intentional) |
| Private repo | Omit public security advisory link; use email only |
| Monorepo | Generate at root; note sub-packages may need own LICENSE |
| README.md has badges already | Skip badge insertion |
| ¬.github dir | mkdir -p .github/ISSUE_TEMPLATE before writing templates |
$ARGUMENTS