En bref
La skill analyse un dépôt pour proposer des permissions Claude Code (settings.json) adaptées aux commandes en lecture seule. Elle sert à démarrer un projet, auditer un fichier existant, ou décider quelles commandes bash en lecture on peut autoriser. Elle détecte la pile, les outils de build, les services et, le cas échéant, une structure de monorepo, puis compare avec les réglages déjà présents, avant de recommander un .claude/settings.json et, si pertinent, un .mcp.json. Elle n’inclut jamais de chemins absolus propres à une machine, ni de scripts de projet à effets de bord (par exemple un deploy.sh), ni le gestionnaire de paquets « concurrent » : si le dépôt est en pnpm, on n’ajoute pas npm ou yarn. Pour GitHub, elle écarte le MCP GitHub et s’en tient à la CLI gh.
Ce que ça fait
- Détecte la pile et les outils réels du dépôt avant de proposer une liste d’autorisations en lecture.
- Exclut chemins utilisateur, scripts à effet de bord, et commandes d’un autre gestionnaire de paquets que celui du projet.
- Ne recommande pas le MCP GitHub : les opérations GitHub passent par gh.
- Produit des recommandations, il n’applique pas les réglages dans le dos de l’utilisateur.
Pour qui, et un exemple
Équipes qui configurent Claude Code sur un dépôt et veulent une liste de permissions lisible, alignée sur la pile réelle.
Exemple de demande : Un monorepo pnpm n’a pas encore de settings : la skill détecte les outils, propose des commandes de test et de lint en lecture, ignore npm, et suggère gh plutôt qu’un MCP GitHub.
Quand on installe un projet, on audite un settings.json, ou l’on cherche quelles commandes bash en lecture seule autoriser pour Claude Code. Exemple rédigé par iadujour.fr à partir du SKILL.md, non testé.
Installer
npx skills add getsentry/skills ou, dans Claude Code, claude plugin marketplace add getsentry/skills puis claude plugin install sentry-skills@sentry-skills.
npx skills add getsentry/skillsclaude plugin marketplace add getsentry/skillsclaude plugin install sentry-skills@sentry-skillsFonctionne avec
- Claude Code
- Cursor
- Cline
- GitHub Copilot
Source : README : installation Claude Code, et skills.sh « Works with Claude Code, Cursor, Cline, GitHub Copilot, and other compatible agents ».
Niveau : Intermédiaire
Suppose un projet de l’éditeur et la maîtrise du SDK ou de la CLI correspondante.
À savoir
Extrait du SKILL.md
La description d’origine, celle que l’agent lit pour décider de charger la skill (en anglais) :
Analyze a repository to generate recommended Claude Code settings.json permissions. Use when setting up a new project, auditing existing settings, or determining which read-only bash commands to allow. Detects tech stack, build tools, and monorepo structure.
Citée depuis le SKILL.md au commit 869bc1c .
Le SKILL.md compte 317 lignes et 25 sections principales :
- Phase 1: Detect Tech Stack
- Phase 2: Detect Services
- Phase 3: Check Existing Settings
- Phase 4: Generate Recommendations
- Baseline Commands (Always Include)
- Stack-Specific Commands
- Python (if any Python files or config detected)
- Node.js (if package.json detected)
- Other Languages
- Build Tools
- Skills (for Sentry Projects)
- WebFetch Domains
- Always Include (Sentry Projects)
- Framework-Specific
- MCP Server Suggestions
- Sentry MCP (if Sentry SDK detected)
- Linear MCP (if Linear usage detected)
- Output Format
- Detected Tech Stack
- Recommended .claude/settings.json
- Recommended .mcp.json (if applicable)
- Important Rules
- What to Include
- What to NEVER Include
- Package Manager Rules
Licence : Apache 2.0
Vérifiée le 10 novembre 2026 sur : fichier LICENSE du dépôt .
La licence autorise la reprise : le texte intégral du SKILL.md est reproduit ci-dessous, sans modification, avec sa mention de licence.
Texte intégral du SKILL.md
Reproduit sans modification depuis getsentry/skills (commit 869bc1c) , © Sentry, sous licence Apache 2.0 (fichier de licence d’origine ).
Afficher le SKILL.md original (317 lignes, en anglais)
---
name: claude-settings-audit
description: Analyze a repository to generate recommended Claude Code settings.json permissions. Use when setting up a new project, auditing existing settings, or determining which read-only bash commands to allow. Detects tech stack, build tools, and monorepo structure.
---
# Claude Settings Audit
Analyze this repository and generate recommended Claude Code `settings.json` permissions for read-only commands.
## Phase 1: Detect Tech Stack
Run these commands to detect the repository structure:
```bash
ls -la
find . -maxdepth 2 \( -name "*.toml" -o -name "*.json" -o -name "*.lock" -o -name "*.yaml" -o -name "*.yml" -o -name "Makefile" -o -name "Dockerfile" -o -name "*.tf" \) 2>/dev/null | head -50
```
Check for these indicator files:
| Category | Files to Check |
| ------------ | ------------------------------------------------------------------------------------- |
| **Python** | `pyproject.toml`, `setup.py`, `requirements.txt`, `Pipfile`, `poetry.lock`, `uv.lock` |
| **Node.js** | `package.json`, `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml` |
| **Go** | `go.mod`, `go.sum` |
| **Rust** | `Cargo.toml`, `Cargo.lock` |
| **Ruby** | `Gemfile`, `Gemfile.lock` |
| **Java** | `pom.xml`, `build.gradle`, `build.gradle.kts` |
| **Build** | `Makefile`, `Dockerfile`, `docker-compose.yml` |
| **Infra** | `*.tf` files, `kubernetes/`, `helm/` |
| **Monorepo** | `lerna.json`, `nx.json`, `turbo.json`, `pnpm-workspace.yaml` |
## Phase 2: Detect Services
Check for service integrations:
| Service | Detection |
| ---------- | ------------------------------------------------------------------------------- |
| **Sentry** | `sentry-sdk` in deps, `@sentry/*` packages, `.sentryclirc`, `sentry.properties` |
| **Linear** | Linear config files, `.linear/` directory |
Read dependency files to identify frameworks:
- `package.json` → check `dependencies` and `devDependencies`
- `pyproject.toml` → check `[project.dependencies]` or `[tool.poetry.dependencies]`
- `Gemfile` → check gem names
- `Cargo.toml` → check `[dependencies]`
## Phase 3: Check Existing Settings
```bash
cat .claude/settings.json 2>/dev/null || echo "No existing settings"
```
## Phase 4: Generate Recommendations
Build the allow list by combining:
### Baseline Commands (Always Include)
```json
[
"Bash(ls:*)",
"Bash(pwd:*)",
"Bash(find:*)",
"Bash(file:*)",
"Bash(stat:*)",
"Bash(wc:*)",
"Bash(head:*)",
"Bash(tail:*)",
"Bash(cat:*)",
"Bash(tree:*)",
"Bash(git status:*)",
"Bash(git log:*)",
"Bash(git diff:*)",
"Bash(git show:*)",
"Bash(git branch:*)",
"Bash(git remote:*)",
"Bash(git tag:*)",
"Bash(git stash list:*)",
"Bash(git rev-parse:*)",
"Bash(gh pr view:*)",
"Bash(gh pr list:*)",
"Bash(gh pr checks:*)",
"Bash(gh pr diff:*)",
"Bash(gh issue view:*)",
"Bash(gh issue list:*)",
"Bash(gh run view:*)",
"Bash(gh run list:*)",
"Bash(gh run logs:*)",
"Bash(gh repo view:*)",
"Bash(gh api:*)"
]
```
### Stack-Specific Commands
Only include commands for tools actually detected in the project.
#### Python (if any Python files or config detected)
| If Detected | Add These Commands |
| ---------------------------------- | --------------------------------------- |
| Any Python | `python --version`, `python3 --version` |
| `poetry.lock` | `poetry show`, `poetry env info` |
| `uv.lock` | `uv pip list`, `uv tree` |
| `Pipfile.lock` | `pipenv graph` |
| `requirements.txt` (no other lock) | `pip list`, `pip show`, `pip freeze` |
#### Node.js (if package.json detected)
| If Detected | Add These Commands |
| ---------------------------- | -------------------------------------- |
| Any Node.js | `node --version` |
| `pnpm-lock.yaml` | `pnpm list`, `pnpm why` |
| `yarn.lock` | `yarn list`, `yarn info`, `yarn why` |
| `package-lock.json` | `npm list`, `npm view`, `npm outdated` |
| TypeScript (`tsconfig.json`) | `tsc --version` |
#### Other Languages
| If Detected | Add These Commands |
| -------------- | -------------------------------------------------------------------- |
| `go.mod` | `go version`, `go list`, `go mod graph`, `go env` |
| `Cargo.toml` | `rustc --version`, `cargo --version`, `cargo tree`, `cargo metadata` |
| `Gemfile` | `ruby --version`, `bundle list`, `bundle show` |
| `pom.xml` | `java --version`, `mvn --version`, `mvn dependency:tree` |
| `build.gradle` | `java --version`, `gradle --version`, `gradle dependencies` |
#### Build Tools
| If Detected | Add These Commands |
| -------------------- | -------------------------------------------------------------------- |
| `Dockerfile` | `docker --version`, `docker ps`, `docker images` |
| `docker-compose.yml` | `docker-compose ps`, `docker-compose config` |
| `*.tf` files | `terraform --version`, `terraform providers`, `terraform state list` |
| `Makefile` | `make --version`, `make -n` |
### Skills (for Sentry Projects)
If this is a Sentry project (or sentry-skills plugin is installed), include:
```json
[
"Skill(sentry-skills:agents-md)",
"Skill(sentry-skills:blog-writing-guide)",
"Skill(sentry-skills:brand-guidelines)",
"Skill(sentry-skills:browse-local-sentry)",
"Skill(sentry-skills:claude-settings-audit)",
"Skill(sentry-skills:code-review)",
"Skill(sentry-skills:code-simplifier)",
"Skill(sentry-skills:commit)",
"Skill(sentry-skills:create-branch)",
"Skill(sentry-skills:django-access-review)",
"Skill(sentry-skills:django-perf-review)",
"Skill(sentry-skills:doc-coauthoring)",
"Skill(sentry-skills:document-api-endpoint)",
"Skill(sentry-skills:find-bugs)",
"Skill(sentry-skills:gh-review-requests)",
"Skill(sentry-skills:gha-security-review)",
"Skill(sentry-skills:iterate-pr)",
"Skill(sentry-skills:pr-link-issue)",
"Skill(sentry-skills:pr-screenshots)",
"Skill(sentry-skills:pr-writer)",
"Skill(sentry-skills:presentation-creator)",
"Skill(sentry-skills:prompt-optimizer)",
"Skill(sentry-skills:secret-serialization)",
"Skill(sentry-skills:security-model)",
"Skill(sentry-skills:security-review)",
"Skill(sentry-skills:skill-scanner)",
"Skill(sentry-skills:skill-writer)",
"Skill(sentry-skills:sred-project-organizer)",
"Skill(sentry-skills:sred-work-summary)",
"Skill(sentry-skills:triage-frontend-issues)",
"Skill(sentry-skills:typing-exclusion-worker)"
]
```
### WebFetch Domains
#### Always Include (Sentry Projects)
```json
[
"WebFetch(domain:docs.sentry.io)",
"WebFetch(domain:develop.sentry.dev)",
"WebFetch(domain:docs.github.com)",
"WebFetch(domain:cli.github.com)"
]
```
#### Framework-Specific
| If Detected | Add Domains |
| -------------- | ----------------------------------------------- |
| **Django** | `docs.djangoproject.com` |
| **Flask** | `flask.palletsprojects.com` |
| **FastAPI** | `fastapi.tiangolo.com` |
| **React** | `react.dev` |
| **Next.js** | `nextjs.org` |
| **Vue** | `vuejs.org` |
| **Express** | `expressjs.com` |
| **Rails** | `guides.rubyonrails.org`, `api.rubyonrails.org` |
| **Go** | `pkg.go.dev` |
| **Rust** | `docs.rs`, `doc.rust-lang.org` |
| **Docker** | `docs.docker.com` |
| **Kubernetes** | `kubernetes.io` |
| **Terraform** | `registry.terraform.io` |
### MCP Server Suggestions
MCP servers are configured in `.mcp.json` (not `settings.json`). Check for existing config:
```bash
cat .mcp.json 2>/dev/null || echo "No existing .mcp.json"
```
#### Sentry MCP (if Sentry SDK detected)
Add to `.mcp.json` (replace `{org-slug}` and `{project-slug}` with your Sentry organization and project slugs):
```json
{
"mcpServers": {
"sentry": {
"type": "http",
"url": "https://mcp.sentry.dev/mcp/{org-slug}/{project-slug}"
}
}
}
```
#### Linear MCP (if Linear usage detected)
Add to `.mcp.json`:
```json
{
"mcpServers": {
"linear": {
"command": "npx",
"args": ["-y", "@linear/mcp-server"],
"env": {
"LINEAR_API_KEY": "${LINEAR_API_KEY}"
}
}
}
}
```
**Note**: Never suggest GitHub MCP. Always use `gh` CLI commands for GitHub.
## Output Format
Present your findings as:
1. **Summary Table** - What was detected
2. **Recommended settings.json** - Complete JSON ready to copy
3. **MCP Suggestions** - If applicable
4. **Merge Instructions** - If existing settings found
Example output structure:
```markdown
## Detected Tech Stack
| Category | Found |
| --------------- | -------------- |
| Languages | Python 3.x |
| Package Manager | poetry |
| Frameworks | Django, Celery |
| Services | Sentry |
| Build Tools | Docker, Make |
## Recommended .claude/settings.json
\`\`\`json
{
"permissions": {
"allow": [
// ... grouped by category with comments
],
"deny": []
}
}
\`\`\`
## Recommended .mcp.json (if applicable)
If you use Sentry or Linear, add the MCP config to `.mcp.json`...
```
## Important Rules
### What to Include
- Only READ-ONLY commands that cannot modify state
- Only tools that are actually used by the project (detected via lock files)
- Standard system commands (ls, cat, find, etc.)
- The `:*` suffix allows any arguments to the base command
### What to NEVER Include
- **Absolute paths** - Never include user-specific paths like `/home/user/scripts/foo` or `/Users/name/bin/bar`
- **Custom scripts** - Never include project scripts that may have side effects (e.g., `./scripts/deploy.sh`)
- **Alternative package managers** - If the project uses pnpm, do NOT include npm/yarn commands
- **Commands that modify state** - No install, build, run, write, or delete commands
### Package Manager Rules
Only include the package manager actually used by the project:
| If Detected | Include | Do NOT Include |
| ------------------- | --------------- | -------------------------------------- |
| `pnpm-lock.yaml` | pnpm commands | npm, yarn |
| `yarn.lock` | yarn commands | npm, pnpm |
| `package-lock.json` | npm commands | yarn, pnpm |
| `poetry.lock` | poetry commands | pip (unless also has requirements.txt) |
| `uv.lock` | uv commands | pip, poetry |
| `Pipfile.lock` | pipenv commands | pip, poetry |
If multiple lock files exist, include only the commands for each detected manager.
Dans l’annuaire
Cas d’usage et guides qui partagent un thème, un métier ou un outil avec cette skill.
Commentaires.
Un retour d’expérience, une question, une précision sur cette skill ? Les commentaires sont relus avant publication.
Commentaires publiés
Chargement des commentaires…
Laisser un commentaire
Charte de modération. Chaque commentaire est relu avant publication. Sont refusés : l’incitation à la haine, les propos injurieux ou discriminatoires, la publicité, le spam et les liens promotionnels, le hors-sujet et les données personnelles d’autrui.