project-kickoff
Original:🇺🇸 English
Translated
1 scriptsChecked / no sensitive code detected
Bootstrap new projects with curated settings.local.json permissions, CLAUDE.md, and .gitignore. Detects project type (cloudflare-worker, vercel-app, node-generic, python, ops-admin) and generates grouped, commented permission presets. Also tidies existing messy settings files (removes leaked secrets, shell fragments, deprecated MCP refs, duplicate entries). Trigger with 'kickoff', 'new project', 'bootstrap', 'setup claude', 'tidy permissions', 'clean settings', or 'init project'.
3installs
Sourcejezweb/claude-skills
Added on
NPX Install
npx skill4agent add jezweb/claude-skills project-kickoffTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Project Kickoff
Bootstrap a new project or clean up an existing one so Claude Code has the right permissions, documentation, and git setup from the start.
Problem: Every new project accumulates dozens of permission approvals one click at a time, resulting in bloated settings files with leaked secrets, shell fragments, and deprecated MCP refs. This skill generates HQ-quality project scaffolding upfront.
Output: , , (and optionally git init + GitHub repo).
settings.local.jsonCLAUDE.md.gitignoreOperating Modes
Mode 1: New Project Setup
When: Starting a new project, or working in a directory without .
.claude/settings.local.jsonSteps:
-
Detect project type from files present in the directory:
Indicator Type orwrangler.jsoncwrangler.tomlcloudflare-worker orvercel.jsonnext.config.*vercel-app (no deploy target)package.jsonnode-generic orpyproject.tomlsetup.pypython or operational scripts.claude/agents/ops-admin Empty directory Ask the user If ambiguous, ask. Types can stack (e.g. cloudflare-worker + node-generic). -
Generate:
.claude/settings.local.json- Read references/permission-presets.md for the preset definitions
- Combine Universal Base + type-specific preset
- Write with comment groups for organisation
// - Warn the user: "Project settings.local.json SHADOWS your global settings — it does not merge"
-
Generate:
CLAUDE.md- Read references/claude-md-templates.md for templates
- Fill in: project name (from directory name or ask), today's date, detected stack
- Pre-fill Jez's defaults (Cloudflare account ID, pnpm, EN-AU)
-
Generate:
.gitignore- Use the type-appropriate template from references/claude-md-templates.md
- Always include and
.claude/settings.local.json.dev.vars
-
Optionally (ask first):
- + first commit
git init - + push
gh repo create jezweb/[name] --private
Mode 2: Tidy Existing Permissions
When: User says "tidy permissions", "clean settings", or the existing has more than ~50 entries.
settings.local.jsonSteps:
-
Run the tidy script to analyse the current file:bash
python3 ${SKILL_DIR}/scripts/tidy_permissions.py .claude/settings.local.json -
Review the report. It flags:
- Leaked secrets: API keys, tokens, hex strings embedded in approval patterns
- Shell fragments: ,
Bash(do),Bash(fi),Bash(then),Bash(else)Bash(done) - Deprecated MCP refs: and similar
mcp__bitwarden__* - Duplicates: Entries covered by a broader pattern already present
- One-time entries: Entire commit messages, hardcoded paths that will never match again
- Consolidation opportunities: e.g. 5 separate ,
Bash(git add:*)could becomeBash(git commit:*)Bash(git *)
-
Present the cleaned version with a diff showing what changed.
-
Apply after user confirmation. Recommend the user rotate any leaked secrets.
Mode 3: Add Preset
When: User says "add wrangler permissions" or "add MCP permissions" to an existing project.
Steps:
- Read the relevant preset section from references/permission-presets.md
- Read the existing
.claude/settings.local.json - Merge without duplicating — add new entries, keep existing groups
- Write the updated file
Permission Syntax Quick Reference
| Pattern | Meaning |
|---|---|
| Current syntax — space before |
| Deprecated colon syntax (still works) |
| Domain-scoped web access |
| Blanket web search |
| Specific MCP tool |
Critical: Project shadows global settings. It does not merge. If a project has its own allow list, the global allow list is ignored entirely for that project.
settings.local.jsonShell operators (, , ) are handled safely — won't match .
&&||;Bash(git *)git add && rm -rf /Autonomy
- Just do it: Detect project type, read existing files
- Brief confirmation: Write settings.local.json, CLAUDE.md, .gitignore (show what will be written)
- Ask first: git init, GitHub repo creation, overwriting existing files, applying tidy fixes
Reference Files
| When | Read |
|---|---|
| Building permission presets | references/permission-presets.md |
| Generating CLAUDE.md and .gitignore | references/claude-md-templates.md |