gh repo create my-new-repo --template TitusKirch/scaffoldThat's it. Click Use this template (or use gh), edit a handful of placeholders, and the meta layer — lint, format, commit hooks, CI, CodeQL, Dependabot, release-please — is already wired up.
- 🟢 Node + pnpm pinned —
.nvmrc(Node 24),pnpm-workspace.yaml(pnpm 11 with sane defaults),package.jsonwithpackageManager. - 🧹 Lint & format via oxc —
.oxlintrc.json,.oxfmtrc.json, singlepnpm checkgate. - 🪝 Commit hooks — Husky +
lint-staged+commitlintenforcing Conventional Commits. - 🤖 Dependency PRs — Dependabot (npm weekly, actions monthly) +
taze.config.jsfor interactive upgrades. - 🔁 release-please — full workflow + config + manifest so the new repo can publish from its first commit.
- 🛡️ GitHub workflows —
ci.yml(lint + format check on PR),codeql.yml(push/PR + weekly). - 📋 Issue / PR templates — bug report, feature request, question (
.ymlforms) + PR checklist. - 📄 Standard meta —
LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md. - 🤖 Agent-ready —
CLAUDE.md+AGENTS.md(kept in sync),.tituskirch-skills.json, baseline.claude/settings.jsonpermissions,pnpm skills:updatewiring.
The actual project code can be anything — PHP, Go, Rust, Vue, plain shell. scaffold only owns the meta layer that sits on top.
After clicking Use this template:
-
Clone your new repo.
-
Replace the placeholders listed in Customising the template.
-
Reset release-please as described in Resetting release-please (only if you want to start at
v0.0.0). -
pnpm install— Husky activates the hooks via thepreparescript. -
Add your project code and ship the first commit:
git commit -m "chore: initial commit from scaffold"
Every repo from this template is agent-ready on day one:
CLAUDE.md+AGENTS.md— one set of guidance for Claude Code and vendor-neutral agent tools (Codex, OpenCode, Cursor, Copilot). Kept byte-identical — edit one, edit the other..claude/settings.json— baseline permissions: read-only git and thepnpmscripts are allowed; destructive git (push,reset --hard,clean -f, …) is denied..tituskirch-skills.json— configures the TitusKirch skills (commit, PR, issue, release, docs) per repo.
Install the skill bundle, then keep project-scoped skills fresh:
pnpm dlx skills add TitusKirch/skills # add the bundle — npx / yarn dlx / bunx work too
pnpm skills:update # refresh project-scoped skillsEvery file below references TitusKirch/scaffold, the maintainer's name, or the maintainer's email. Search-and-replace these to your repo's identity before the first push.
| File | Replace |
|---|---|
package.json |
name, description, homepage, bugs.url, repository.url, author |
README.md |
Project title, tagline, hook snippet, every TitusKirch/scaffold link |
LICENSE |
Copyright year + holder |
CODE_OF_CONDUCT.md |
Enforcement contact email |
CONTRIBUTING.md |
Every TitusKirch/scaffold link, the development setup section |
SECURITY.md |
Advisory URL, contact email, scope wording |
.github/ISSUE_TEMPLATE/*.yml |
Generic as shipped. config.yml links questions/ideas/possible-bugs to the Discord forum — private repos without a forum drop that block; optionally add stack-specific version fields to bug_report.yml |
.github/pull_request_template.md |
Example commit message in the title hint |
release-please-config.json |
packages["."]["package-name"] |
CLAUDE.md + AGENTS.md |
Delete both and regenerate with /init in Claude Code — scaffold-specific, keep byte-identical |
Tip
A quick grep -rn "TitusKirch/scaffold" . catches every reference in one sweep.
Important
Private repo? Two defaults are public-only. Delete .github/workflows/codeql.yml (CodeQL needs GitHub Advanced Security — free only on public repos), and swap the MIT LICENSE + README footer for a proprietary notice with package.json "license": "UNLICENSED".
scaffold ships with an initial manifest pinned at 0.0.0. For most cases you can leave it alone — release-please will simply propose a first release PR after your first conventional commit on main. If you want a truly clean slate:
-
Manifest — make sure
.release-please-manifest.jsonis{ ".": "0.0.0" }(the default). -
Changelog — delete
CHANGELOG.mdif your fresh repo somehow inherited one. -
Config — update
release-please-config.json→packages["."]["package-name"]to your repo name. -
Workflow permissions — in Settings → Actions → General → Workflow permissions, enable Read and write permissions so release-please can open its PR.
-
Tags & releases (optional) — if you copied the repo with history, drop old tags:
git tag -l | xargs -r git tag -d…and clear any stale entries on the GitHub Releases tab.
-
First commit — push a Conventional Commit on
main(feat: …,fix: …). release-please opens the initial release PR; merge it and your first tagged release ships.
Single word, brandable, language-neutral. Future stack-specific templates can sit next to it as scaffold-laravel, scaffold-nuxt, etc.
PRs welcome. Conventional Commits required (enforced via commitlint). Husky runs the project's linters/formatters on git commit.
Tip
Run pnpm check:fix before pushing — CI will catch what husky missed.
See CONTRIBUTING.md for the full workflow.
Semantic Versioning via release-please — see CHANGELOG.md.