gendesign/.claude/settings.json
bot-backend 4a33347aee chore(claude): security hardening — hooks/settings в git, dangerous-commands hook, restricted DB для reviewer/qa
- .claude/settings.json закоммичен (секретов нет): бот-окна и чистые checkout
  получают hooks/deny/statusLine вместо молчаливого их отсутствия
- новый PreToolUse hook check-dangerous-commands.py: ловит force/amend/no-verify/
  rm -rf/reset --hard/push в main И внутри powershell-обёрток (deny-префиксы позиционны);
  24/24 тест-кейсов; + Read-deny **/.env
- postgres MCP reviewer/qa → --access-mode=restricted (декларируемый read-only
  теперь enforced, не проза)
- auto-analyst: принята throttle-политика ready>=10 (конфликт с work-as-analyst устранён,
  just-in-time нарезка)
- defaultMode:auto перенесён на project-уровень (глобально снят — balance_platform
  вернулся к обычным промптам)
2026-07-02 18:10:26 +03:00

144 lines
3.9 KiB
JSON

{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"mcp__obsidian__obsidian_list_files_in_vault",
"mcp__obsidian__obsidian_simple_search",
"mcp__obsidian__obsidian_get_file_contents",
"mcp__obsidian__obsidian_list_files_in_dir",
"mcp__postgres-gendesign__get_object_details",
"mcp__postgres-gendesign__explain_query",
"mcp__postgres-gendesign__list_objects",
"mcp__postgres-gendesign__list_schemas",
"mcp__postgres-gendesign__analyze_query_indexes",
"Bash(curl *)",
"Bash(powershell *)",
"Bash(gh pr comment:*)",
"Bash(powershell.exe:*)",
"Bash(powershell:*)",
"Bash(pwsh:*)",
"mcp__forgejo",
"mcp__forgejo__create_issue",
"mcp__forgejo__update_issue",
"mcp__forgejo__add_issue_labels",
"mcp__forgejo__remove_issue_labels",
"mcp__forgejo__issue_state_change",
"mcp__forgejo__create_issue_comment",
"mcp__forgejo__create_pull_request",
"mcp__forgejo__merge_pull_request",
"mcp__forgejo__create_pull_review",
"mcp__forgejo__get_pull_request_diff",
"mcp__forgejo__list_repo_issues",
"mcp__forgejo__list_repo_pull_requests",
"mcp__forgejo__get_pull_request_by_index",
"mcp__forgejo__list_pull_request_files",
"mcp__forgejo__list_pull_reviews",
"mcp__forgejo__list_repo_labels",
"mcp__forgejo__get_issue_by_index",
"mcp__forgejo__list_issue_comments",
"Write",
"Edit",
"Read",
"Glob",
"Grep",
"LS",
"Task",
"TodoWrite",
"EnterWorktree",
"WebFetch",
"WebSearch",
"NotebookEdit",
"mcp__obsidian",
"mcp__postgres-gendesign",
"mcp__playwright",
"mcp__a11y",
"mcp__lighthouse",
"mcp__shadcn",
"mcp__glitchtip",
"mcp__context7",
"mcp__fetch",
"Bash(*)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(rm -rf /*)",
"Bash(git push --force *)",
"Bash(git push -f *)",
"Bash(git reset --hard *)",
"Bash(git commit --amend *)",
"Bash(git rebase --interactive *)",
"Bash(git commit --no-verify*)",
"Bash(git push --no-verify*)",
"Bash(git push --force-with-lease*)",
"Bash(git push --force-if-includes*)",
"Bash(docker compose down -v *)",
"Bash(docker volume rm *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./backend/.env)",
"Read(./backend/.env.*)",
"Read(**/.env)",
"Read(**/.env.*)"
],
"defaultMode": "auto"
},
"enabledMcpjsonServers": [
"obsidian",
"context7",
"fetch",
"forgejo",
"a11y",
"lighthouse",
"shadcn"
],
"worktree": {
"baseRef": "fresh",
"bgIsolation": "worktree"
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python ${CLAUDE_PROJECT_DIR}/scripts/claude-hooks/check-secret-read.py"
},
{
"type": "command",
"command": "python ${CLAUDE_PROJECT_DIR}/scripts/claude-hooks/check-dangerous-commands.py"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "python ${CLAUDE_PROJECT_DIR}/scripts/claude-hooks/check-no-print.py"
},
{
"type": "command",
"command": "python ${CLAUDE_PROJECT_DIR}/scripts/claude-hooks/check-sql-pitfalls.py"
}
]
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "python ${CLAUDE_PROJECT_DIR}/scripts/claude-hooks/session-preflight.py"
}
]
}
]
},
"statusLine": {
"type": "command",
"command": "python ${CLAUDE_PROJECT_DIR}/scripts/claude-hooks/statusline.py"
}
}