# Project Init

> Initialize Claude Code project settings with standard language-specific permissions. Use when setting up a new project for Claude Code or adding standard configuration to an existing project.

- Skill: `arjenschwarz/project-init` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add arjenschwarz/project-init`
- Raw SKILL.md: https://api.skillmd.com/api/skills/arjenschwarz/project-init/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: arjenschwarz (https://skillmd.com/u/arjenschwarz)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/arjenschwarz/project-init

---


# Project Init

Initialize a project with standard Claude Code configuration.

## What It Does

1. Detects project languages and adds appropriate tool permissions to `.claude/settings.json`

## 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:

```bash
~/.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:

```bash
for dir in ~/projects/*; do
  (cd "$dir" && ~/.claude/skills/project-init/scripts/setup-project.sh)
done
```

