Project Init
Initialize a project with standard Claude Code configuration.
What It Does
- Adds a SessionStart hook to
.claude/settings.json for 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.json if it doesn't exist
- Merges hooks and permissions into existing settings without overwriting
- Is idempotent (safe to run multiple times)
- Requires
jq for JSON manipulation
Batch Setup
To initialize multiple projects:
for dir in ~/projects/*; do
(cd "$dir" && ~/.claude/skills/project-init/scripts/setup-project.sh)
done