Project Init
Initialize a project with standard Claude Code configuration.
What It Does
- Adds a SessionStart hook to
.claude/settings.jsonfor remote environment setup - Detects project languages and adds appropriate tool permissions
Language Detection
The script detects languages based on project files and adds permissions:
| Detection File | Language | Permissions Added |
|----------------|----------|-------------------|
| go.mod | Go | go, golangci-lint, staticcheck, govulncheck |
| Package.swift, *.xcodeproj | Swift | swift, xcodebuild, swiftlint, xcrun |
| package.json | Node.js | npm, npx, node, plus yarn/pnpm/bun if lockfiles present |
| pyproject.toml, requirements.txt | Python | python, pip, uv, pytest, ruff, mypy |
| Cargo.toml | Rust | cargo, rustc |
| Gemfile | Ruby | ruby, bundle, rake, rspec |
| pom.xml | Java (Maven) | mvn, java |
| build.gradle | Java (Gradle) | gradle, ./gradlew, java |
| Dockerfile | Docker | docker, docker-compose |
| *.tf | Terraform | terraform, tofu |
| Makefile | Make | make |
git is always included.
Usage
Run the setup script from your project directory:
~/.claude/skills/project-init/scripts/setup-project.sh
The script:
- Creates
.claude/settings.jsonif it doesn't exist - Merges hooks and permissions into existing settings without overwriting
- Is idempotent (safe to run multiple times)
- Requires
jqfor JSON manipulation
Batch Setup
To initialize multiple projects:
for dir in ~/projects/*; do
(cd "$dir" && ~/.claude/skills/project-init/scripts/setup-project.sh)
done