agent-skills / create-repo
CLAUDE.md0 starsChanged 15 days agoMITView on GitHub
Project scaffolding skill that bootstraps monorepo projects from templates. The SKILL.md orchestrates the flow: interview → preflight → version resolution → scaffold → setup → verify → git init. The Python scripts handle deterministic work (rendering templates, installing deps, running verification commands). The AI handles intelligence work (version resolution via parallel agents, applying customizations, diagnosing failures). After templates are rendered, the pipeline splits into two phases: - Setup (scaffold.py: setup_project()) — deterministic steps to get a working project: install deps,…
- Reads credentials
In this repository16 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- author-e2eSkill
- author-messageSkill
- code-reviewSkill
- create-repoSkill
- deploy-awsSkill
- do-fixesSkill
- do-workSkill
- plan-reviewSkill
- plan-workSkill
- setup-agent-skillsSkill
- solve-take-homeSkill
- start-workSkill
- super-workSkill
- sync-guidanceSkill
- wtfSkill
The file
We split this CLAUDE.md into the rules it gives an agent
12 rules. About 0 are common, 1 is distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 37
After templates are rendered, the pipeline splits into two phases:
- Very specific: line 61
Create templates/<template-name>/ with the template's files
- Very specific: line 62
Add template.json with {"platform": "<platform>"} (e.g., "python", "ts", or ["ts", "python"] for multi-platform)
- Very specific: line 64
Use "exclude": ["pattern/"] to skip base template files (fnmatch globs)
- Very specific: line 65
Add shared platform files to __common/<platform>/ if they don't exist yet
- Very specific: line 66
Use .j2 extension for files needing Jinja2 substitution
- Very specific: line 68
Add template-specific preflight checks to TEMPLATE_CHECKS in preflight.py
- Very specific: line 69
Add template to AVAILABLE_TEMPLATES and version fallbacks in eval/run_eval.py
- Very specific: line 70
Add structural checks to eval/checks/check_structure.py
- Very specific: line 71
Add the template to the SKILL.md interview options
- Very specific: line 72
Write scaffold tests in tests/test_scaffold.py
- Very specific: line 76
Use __variable_name__ in template directory names to substitute context variables at scaffold time.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
create-repo skill
Project scaffolding skill that bootstraps monorepo projects from templates.
Structure
create-repo/
├── SKILL.md # AI orchestrator — the skill definition
├── CLAUDE.md # This file
├── pyproject.toml # Python project config (uv-managed)
├── scripts/ # Python modules called by the skill
│ ├── preflight.py # Environment checker (tools, versions)
│ ├── scaffold.py # Jinja2 template renderer + setup_project() (install, docker, db)
│ ├── verify.py # Quality checks only: build/typecheck/lint/test/e2e (platform-aware)
│ └── init_git.py # Git init + GitHub repo creation
├── templates/ # Jinja2 template files
│ ├── __common/ # Universal files (all templates)
│ │ ├── python/ # Shared across Python templates
│ │ └── ts/ # Shared across TypeScript templates
│ ├── fullstack-ts/ # React + Hono + tRPC + Prisma (base for TS templates)
│ ├── fullstack-graphql/ # React + Hono + Yoga/Pothos + Apollo + Prisma (extends fullstack-ts)
│ ├── api-ts/ # Hono + tRPC + Prisma, no frontend (extends fullstack-ts)
│ ├── api-python/ # FastAPI + SQLModel + Postgres
│ ├── fullstack-python/ # React + FastAPI + Postgres (extends fullstack-ts, multi-platform)
│ └── swift-ts/ # Swift multiplatform + Hono REST API (extends fullstack-ts)
├── tests/ # pytest tests for all scripts
└── eval/ # Eval frameworkHow it works
The SKILL.md orchestrates the flow: interview → preflight → version resolution → scaffold → setup → verify → git init. The Python scripts handle deterministic work (rendering templates, installing deps, running verification commands). The AI handles intelligence work (version resolution via parallel agents, applying customizations, diagnosing failures).
Post-scaffold pipeline (setup vs verify)
After templates are rendered, the pipeline splits into two phases:
- Setup (
scaffold.py: setup_project()) — deterministic steps to get a working project: install deps, run setup scripts (port discovery, .env generation), prisma generate, biome format, docker compose up, db push, db seed / alembic migrate. - Verify (
verify.py: verify()) — quality checks that assume setup is done: build, typecheck, lint, test, dev server smoke check, E2E tests.
Both the skill (SKILL.md) and E2E tests (run_eval.py) use the exact same setup_project() → verify() code path.
Template layers
Templates render in up to 4 layers, each overriding the previous:
__common/— universal files (docker-compose, .gitignore, PR template, etc.)__common/<platform>/— platform-specific shared files (e.g., ruff config for Python, biome for TS)<base_template>/— base template files (when"extends"declared in template.json, with"exclude"globs applied)<template>/— template-specific files
Each template has a template.json declaring its platform (e.g., {"platform": "python"} or {"platform": ["ts", "python"]} for multi-platform templates) and optionally "extends" + "exclude". When platform is a list, each __common/<platform>/ layer is applied in order (later overrides earlier). The scaffold engine reads this to determine which layers to include.
Running tests
cd create-repo && uv sync --group dev && uv run pytest tests/ -vAdding a new template
- Create
templates/<template-name>/with the template's files - Add
template.jsonwith{"platform": "<platform>"}(e.g.,"python","ts", or["ts", "python"]for multi-platform)- To inherit from an existing template, add
"extends": "<base-template>"and only include files that differ - Use
"exclude": ["pattern/**"]to skip base template files (fnmatch globs)
- To inherit from an existing template, add
- Add shared platform files to
__common/<platform>/if they don't exist yet - Use
.j2extension for files needing Jinja2 substitution - Available variables:
{{ project_name }},{{ scope }},{{ swift_project_name }}(PascalCase),{{ versions.<pkg> }} - Add template-specific preflight checks to
TEMPLATE_CHECKSinpreflight.py - Add template to
AVAILABLE_TEMPLATESand version fallbacks ineval/run_eval.py - Add structural checks to
eval/checks/check_structure.py - Add the template to the SKILL.md interview options
- Write scaffold tests in
tests/test_scaffold.py
Directory name templating
Use __variable_name__ in template directory names to substitute context variables at scaffold time. For example, Sources/__swift_project_name__/ becomes Sources/MyApp/ when the project name is my-app. Unknown variables (like __pycache__) are left unchanged.
Template variable naming
For versions.* in Jinja2 templates, convert package names:
@scope/package→scope_package(e.g.,@trpc/server→trpc_server)@scope/sub-package→scope_sub_package- Simple packages stay as-is (e.g.,
react,hono,fastapi)
Platform detection
verify.py and check_structure.py detect the platform from the scaffolded output:
package.json+apps/ios/directory → swift-ts (Node pipeline for API; Swift side is not auto-verified — user creates Xcode project in apps/ios/)- Both
pyproject.tomlandpackage.jsonpresent → fullstack-python (combined: uv + pnpm, ruff + biome, pytest + vitest, both dev servers) pyproject.tomlonly → Python (uv sync, ruff, pytest, uvicorn)package.jsononly → Node (pnpm install, biome, turbo, vitest)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

