第 4 章:核心功能

工具链执行

Claude Code 的核心能力不仅在于代码理解与生成,更在于它能深度集成并执行开发者日常使用的各类工具链。从 Git 操作、包管理、构建编译到数据库迁移、云部署,Claude Code 通过内置工具系统、MCP 协议扩展、Skills 自定义命令和 Hooks 自动化机制,将 AI 助手从"建议者"转变为"执行者"。本章将系统梳理 Claude Code 的工具链执行能力,涵盖原生集成、安全机制、自定义扩展等各个层面。

Claude Code 的核心能力不仅在于代码理解与生成,更在于它能深度集成并执行开发者日常使用的各类工具链。从 Git 操作、包管理、构建编译到数据库迁移、云部署,Claude Code 通过内置工具系统、MCP 协议扩展、Skills 自定义命令和 Hooks 自动化机制,将 AI 助手从"建议者"转变为"执行者"。本章将系统梳理 Claude Code 的工具链执行能力,涵盖原生集成、安全机制、自定义扩展等各个层面。

1. 内置工具全景

Claude Code 提供了一套丰富的内置工具,覆盖文件操作、代码搜索、命令执行、网络请求等核心场景。这些工具是 Claude 与外部世界交互的基础接口。

1.1 工具分类与权限模型

根据官方文档,内置工具按权限需求分为三类:

工具类型示例是否需要权限"记住选择"行为
只读工具Read、Grep、Glob不适用
Bash 命令Shell 执行按项目目录和命令永久记住
文件修改Edit、Write会话结束前有效

完整工具列表(来源:Claude Code Docs - Tools Reference):

  • 文件操作Read(读取文件)、Edit(精准编辑)、Write(创建/覆盖文件)、Glob(模式匹配找文件)
  • 代码搜索Grep(内容搜索)、LSP(语言服务器协议,支持跳转到定义、查找引用、类型检查)
  • 命令执行Bash(执行 Shell 命令)、PowerShell(Windows 原生 PowerShell 执行)
  • 扩展能力Monitor(通过插件系统启用,用于后台任务监控)
  • 网络请求WebFetch(获取 URL 内容)、WebSearch(网络搜索)
  • 任务管理TaskCreateTaskListTaskUpdateTaskStop(后台任务管理)
  • NotebookNotebookEdit(修改 Jupyter Notebook 单元格)
  • AgentAgent(生成子代理处理任务)
  • MCPListMcpResourcesToolReadMcpResourceTool(MCP 资源操作)

1.2 Bash 工具的行为特性

Bash 工具是工具链执行的核心,理解其行为特性至关重要:

工作目录持久化

  • 主会话中 cd 的目录变更会延续到后续 Bash 命令(只要仍在项目目录或 --add-dir 添加的目录内)
  • 如果 cd 跳出了这些目录,Claude Code 会自动重置到项目目录并提示 Shell cwd was reset to <dir>
  • 子代理会话中工作目录变更不会延续
  • 设置 CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1 可禁用目录延续,每次 Bash 命令都从项目目录开始

环境变量隔离

  • 每个 Bash 命令在独立进程中执行,export 不会跨命令持久化
  • 如需持久化环境变量,在启动 Claude Code 前设置 CLAUDE_ENV_FILE 指向一个 shell 脚本,或使用 SessionStart Hook 动态填充

只读命令免提示

  • 内置识别的只读命令包括:lscatheadtailgrepfindwcdiffstatducd 以及只读形式的 git 命令
  • 这些命令在任何模式下都不需要权限提示
  • 但带有写操作标志的命令(如 find -deletesed -i)即使基础命令是只读的也会触发提示

2. 原生工具集成

2.1 GitHub CLI (gh)

Claude Code 对 gh 命令有良好的原生支持,可通过权限规则精细控制:

{
  "permissions": {
    "allow": [
      "Bash(gh pr view *)",
      "Bash(gh pr diff *)",
      "Bash(gh pr list *)",
      "Bash(gh issue view *)",
      "Bash(gh repo view *)"
    ],
    "deny": [
      "Bash(gh pr merge *)",
      "Bash(gh repo delete *)"
    ]
  }
}

典型工作流示例

# 让 Claude 查看 PR 差异并给出评审意见
gh pr diff 123 | claude "Review this PR and suggest improvements"

# 在 Skill 中动态注入 PR 信息
---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`

## Your task
Summarize this pull request...

!command`` 语法会在 Skill 内容发送给 Claude 之前执行命令,输出替换占位符。这是预处理机制,Claude 只看到最终结果。

2.2 包管理工具 (npm / pnpm / yarn / pip)

包管理是日常开发最高频的操作之一。通过合理的权限配置,可以让 Claude 自主处理依赖:

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(npm install)",
      "Bash(npm ci)",
      "Bash(pnpm *)",
      "Bash(yarn *)",
      "Bash(pip install *)",
      "Bash(pip list)"
    ],
    "deny": [
      "Bash(npm publish *)",
      "Bash(npm unpublish *)",
      "Bash(npm audit fix *)"
    ]
  }
}

实际使用场景

# 让 Claude 安装缺失的依赖并修复版本冲突
"项目构建报错,帮我检查并修复依赖问题"

# Claude 会自动执行:
# 1. 读取 package.json 和 lock 文件
# 2. 运行 npm install 或 pnpm install
# 3. 根据报错信息调整依赖版本
# 4. 重新运行构建验证

2.3 Docker

Docker 命令通常涉及容器生命周期管理,建议按操作类型分级授权:

{
  "permissions": {
    "allow": [
      "Bash(docker ps)",
      "Bash(docker images)",
      "Bash(docker logs *)",
      "Bash(docker build *)",
      "Bash(docker compose *)"
    ],
    "ask": [
      "Bash(docker exec *)"
    ],
    "deny": [
      "Bash(docker system prune *)",
      "Bash(docker volume rm *)",
      "Bash(docker rmi -f *)"
    ]
  }
}

注意事项

  • docker exec 允许在任意容器中以任意身份执行任意命令,等同于 root 权限,建议放在 ask 而非 allow
  • 沙箱模式下,Docker 命令的子进程同样受沙箱限制
  • 通过 Unix Socket 访问 Docker Daemon 时需注意 allowUnixSockets 配置可能带来的沙箱绕过风险

2.4 Kubernetes (kubectl)

kubectl 操作直接影响生产环境,建议采用严格的权限控制:

{
  "permissions": {
    "allow": [
      "Bash(kubectl get pods|services|deployments *)",
      "Bash(kubectl describe *)",
      "Bash(kubectl logs *)",
      "Bash(kubectl top *)"
    ],
    "ask": [
      "Bash(kubectl get secrets *)",
      "Bash(kubectl apply *)",
      "Bash(kubectl delete *)",
      "Bash(kubectl rollout *)"
    ],
    "deny": [
      "Bash(kubectl delete namespace *)",
      "Bash(kubectl drain *)"
    ]
  },
  "sandbox": {
    "enabled": true,
    "filesystem": {
      "allowWrite": ["~/.kube"]
    }
  }
}

沙箱配置要点

  • kubectl 需要写入 ~/.kube 目录来缓存集群配置和认证信息
  • 使用 sandbox.filesystem.allowWrite 而非 excludedCommands 来授权,这是推荐做法
  • 所有子进程(包括 kubectl 调用的底层命令)都继承相同的沙箱限制

3. 构建工具集成

3.1 Vite

Vite 作为现代前端构建工具,与 Claude Code 配合流畅:

{
  "permissions": {
    "allow": [
      "Bash(vite)",
      "Bash(vite build)",
      "Bash(vite preview)",
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm run preview)"
    ]
  }
}

Claude 可执行的典型任务

  • 分析 vite.config.ts 配置并优化构建性能
  • 调整 build.rollupOptions 实现代码分割
  • 配置 server.proxy 解决开发环境跨域
  • 诊断构建错误并修复

3.2 Webpack

{
  "permissions": {
    "allow": [
      "Bash(webpack *)",
      "Bash(npx webpack *)",
      "Bash(npm run build:prod)",
      "Bash(npm run build:dev)"
    ]
  }
}

3.3 TypeScript 编译器

TypeScript 编译是 Claude Code 最常执行的构建操作之一:

{
  "permissions": {
    "allow": [
      "Bash(tsc)",
      "Bash(tsc --noEmit)",
      "Bash(tsc --watch)",
      "Bash(npx tsc *)",
      "Bash(npm run type-check)"
    ]
  }
}

与 LSP 工具的协同

  • Claude Code 的 LSP 工具在每次文件编辑后自动报告类型错误和警告
  • 这消除了单独的编译步骤,Claude 可以在编辑过程中实时修复类型问题
  • LSP 支持:跳转到定义、查找引用、获取类型信息、列出文件符号、查找接口实现、追踪调用层次

3.4 Babel / SWC / esbuild

{
  "permissions": {
    "allow": [
      "Bash(babel *)",
      "Bash(npx babel *)",
      "Bash(npx esbuild *)",
      "Bash(npx swc *)"
    ]
  }
}

4. 数据库工具

4.1 SQL 查询

通过 MCP 服务器,Claude Code 可以直接连接数据库执行查询。以 PostgreSQL 为例,在 settings.json 中配置 mcpServers

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
    }
  }
}

代码中使用

const options = {
  mcpServers: {
    postgres: {
      command: "npx",
      args: ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
    }
  },
  allowedTools: ["mcp__postgres__query"]
};

Claude 会自动发现数据库 Schema,编写 SQL 查询并返回结果。

4.2 ORM 操作 (Prisma / Drizzle)

Prisma 工作流

{
  "permissions": {
    "allow": [
      "Bash(npx prisma migrate dev)",
      "Bash(npx prisma migrate deploy)",
      "Bash(npx prisma generate)",
      "Bash(npx prisma studio)",
      "Bash(npx prisma db pull)",
      "Bash(npx prisma db seed)"
    ],
    "ask": [
      "Bash(npx prisma migrate reset)",
      "Bash(npx prisma db push)"
    ]
  }
}

Drizzle 工作流

{
  "permissions": {
    "allow": [
      "Bash(npx drizzle-kit generate)",
      "Bash(npx drizzle-kit migrate)",
      "Bash(npx drizzle-kit push)",
      "Bash(npx drizzle-kit studio)",
      "Bash(npx drizzle-kit pull)"
    ]
  }
}

4.3 迁移脚本管理

Claude Code 可以协助规划和生成零停机数据库迁移,包括:

  • Expand-Contract 模式:用于列重命名和类型变更
  • 数据回填脚本:迁移后填充新列数据
  • 回滚程序:为每个迁移准备回滚方案
{
  "permissions": {
    "allow": [
      "Bash(npx prisma migrate dev --create-only)",
      "Bash(npx prisma migrate status)",
      "Bash(npx prisma migrate resolve *)"
    ]
  }
}

5. 部署工具

5.1 Vercel CLI

{
  "permissions": {
    "allow": [
      "Bash(vercel)",
      "Bash(vercel --version)",
      "Bash(vercel env *)",
      "Bash(vercel logs *)",
      "Bash(vercel list *)"
    ],
    "ask": [
      "Bash(vercel --prod)",
      "Bash(vercel deploy *)"
    ]
  }
}

5.2 AWS CLI

{
  "permissions": {
    "allow": [
      "Bash(aws s3 *)",
      "Bash(aws ec2 describe *)",
      "Bash(aws lambda list *)",
      "Bash(aws cloudformation describe *)",
      "Bash(aws logs *)"
    ],
    "ask": [
      "Bash(aws ec2 terminate *)",
      "Bash(aws lambda delete *)",
      "Bash(aws s3 rm *)"
    ],
    "deny": [
      "Bash(aws iam delete *)",
      "Bash(aws account *)"
    ]
  }
}

5.3 GCP / Azure CLI

{
  "permissions": {
    "allow": [
      "Bash(gcloud compute instances list)",
      "Bash(gcloud projects list)",
      "Bash(az resource list)",
      "Bash(az account list)"
    ],
    "ask": [
      "Bash(gcloud compute instances delete *)",
      "Bash(az vm delete *)"
    ]
  }
}

6. 自定义工具:Skills 与 MCP

6.1 Skills:团队内部 CLI 工具封装

Skills 是 Claude Code 扩展能力的核心机制。通过创建 SKILL.md 文件,你可以将团队内部的 CLI 工具、脚本和流程封装为可复用的 AI 命令。

Skill 文件结构

my-skill/
├── SKILL.md           # 主指令文件(必需)
├── template.md        # Claude 填充的模板
├── examples/
│   └── sample.md      # 示例输出
└── scripts/
    └── validate.sh    # 可执行脚本

Skill 存储位置与作用域

位置路径适用范围
企业级托管设置组织内所有用户
个人级~/.claude/skills/<skill-name>/SKILL.md所有项目
项目级.claude/skills/<skill-name>/SKILL.md仅当前项目
插件级<plugin>/skills/<skill-name>/SKILL.md插件启用处

封装内部部署工具的 Skill 示例

<!-- 以下为示意性 Skill 配置,具体 frontmatter 字段请以官方文档为准 -->
<!-- https://code.claude.com/docs/en/skills -->
---
name: deploy-internal
description: Deploy to internal Kubernetes cluster
---

Deploy $ARGUMENTS to production:

1. Run pre-deployment checks: !`our-deploy-cli validate $ARGUMENTS`
2. Apply Kubernetes manifests: `kubectl apply -f k8s/$ARGUMENTS/`
3. Wait for rollout: `kubectl rollout status deployment/$ARGUMENTS`
4. Verify health: !`our-deploy-cli health-check $ARGUMENTS`
5. Send notification to Slack if configured

动态上下文注入

使用 !`command` 语法可以在 Skill 执行前运行 shell 命令,将输出注入到 Skill 内容中:

---
name: env-status
description: Check environment status
---

## Current Environment
```!
node --version
npm --version
git status --short
kubectl config current-context

Analysis

Based on the above environment information, analyze...


### 6.2 MCP:连接外部服务

Model Context Protocol (MCP) 是连接 AI Agent 与外部工具和数据源的开放标准。

**MCP 工具命名规则**:`mcp__<server-name>__<tool-name>`

**三种传输类型**:

1. **stdio**(本地进程,通过 stdin/stdout 通信):

```json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}
  1. HTTP/SSE(云端托管服务):
{
  "mcpServers": {
    "remote-api": {
      "type": "sse",
      "url": "https://api.example.com/mcp/sse",
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}"
      }
    }
  }
}
  1. SDK 内嵌(在应用代码中直接定义工具)

授权访问

const options = {
  mcpServers: { /* 服务器配置 */ },
  allowedTools: [
    "mcp__github__*",      // GitHub 服务器的所有工具
    "mcp__db__query",      // db 服务器的 query 工具
    "mcp__slack__send_message"
  ]
};

常用 MCP 服务器(来源:MCP Server Directory):

  • GitHub:仓库、Issue、PR 操作
  • Filesystem:安全文件操作(可配置访问控制)
  • PostgreSQL / SQLite:数据库查询
  • Puppeteer:浏览器自动化
  • Brave Search:网络搜索
  • Slack:消息发送
  • Git:仓库读取、搜索、操作

6.3 为团队 CLI 创建 MCP 服务器

如果团队有内部 CLI 工具,可以为其创建 MCP 服务器:

// 以下为示意性 MCP 服务器代码,具体 API 请以官方 SDK 文档为准
// https://github.com/modelcontextprotocol/sdk
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server({
  name: "internal-tools",
  version: "1.0.0"
}, {
  capabilities: {
    tools: {
      deploy_service: {
        description: "Deploy a service to internal infrastructure",
        inputSchema: {
          type: "object",
          properties: {
            service: { type: "string" },
            environment: { type: "string", enum: ["staging", "prod"] }
          },
          required: ["service", "environment"]
        }
      }
    }
  }
});

// 处理工具调用
server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "deploy_service") {
    const { service, environment } = request.params.arguments;
    // 调用内部部署 API
    const result = await internalDeploy(service, environment);
    return { content: [{ type: "text", text: result }] };
  }
});

const transport = new StdioServerTransport();
await server.connect(transport);

7. 安全执行机制

7.1 权限规则系统

权限规则按 deny -> ask -> allow 顺序评估,第一个匹配的规则生效。

规则语法

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(* --version)",
      "Read(./src/**)",
      "Edit(/docs/**)",
      "WebFetch(domain:example.com)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(docker *)"
    ],
    "deny": [
      "Bash(rm -rf /)",
      "Bash(curl *)",
      "Read(~/.ssh/**)",
      "Read(//etc/passwd)"
    ]
  }
}

路径模式类型

模式含义示例
//path绝对路径Read(//Users/alice/secrets/**)
~/path用户主目录Read(~/Documents/*.pdf)
/path项目根目录相对Edit(/src/**/*.ts)
path./path当前目录相对Read(*.env)

通配符规则

  • * 可匹配任意字符序列,包括空格
  • Bash(ls *) 匹配 ls -la 但不匹配 lsof(有空格时要求词边界)
  • Bash(ls*) 匹配 ls -lalsof(无词边界约束)

进程包装器剥离

  • Claude Code 会自动剥离 timeouttimenicenohupstdbuf 等包装器
  • 因此 Bash(npm test *) 也会匹配 timeout 30 npm test
  • direnv execdevbox runmise execnpxdocker exec 不在剥离列表中

7.2 沙箱隔离

沙箱通过操作系统级原语实现文件系统和网络隔离(来源:Claude Code Docs - Sandboxing)。

文件系统隔离

  • 默认写入:当前工作目录及其子目录
  • 默认读取:整台计算机(除特定拒绝目录外)
  • 无法修改工作目录外的文件(除非显式授权)

网络隔离

  • 仅允许访问批准的域名
  • 新域名请求触发权限提示(除非启用 allowManagedDomainsOnly
  • 限制适用于所有脚本、程序和子进程

OS 级执行

  • macOS:使用 Seatbelt 框架
  • Linux:使用 bubblewrap
  • WSL2:使用 bubblewrap(WSL1 不支持)

启用沙箱

# 交互式启用
/sandbox

# 或在 settings.json 中配置
{
  "sandbox": {
    "enabled": true,
    "mode": "autoAllow",
    "filesystem": {
      "allowWrite": ["~/.kube", "/tmp/build", "./output"]
    },
    "network": {
      "allowedDomains": ["npmjs.org", "github.com", "registry.npmjs.org"]
    }
  }
}

沙箱模式

模式说明
autoAllow沙箱内命令自动允许,无需提示;无法沙箱化的命令回退到常规权限流程
regularPermissions即使沙箱化,所有命令仍需标准权限确认

路径前缀解析

前缀含义示例
/文件系统根目录绝对路径/tmp/build 保持 /tmp/build
~/相对于主目录~/.kube 解析为 $HOME/.kube
./ 或无前缀项目设置中相对于项目根;用户设置中相对于 ~/.claude./output 解析为 <project-root>/output

7.3 权限模式

模式说明适用场景
default首次使用每个工具时提示权限日常开发
acceptEdits自动接受文件编辑和常见文件系统命令信任编辑的场景
plan仅分析不修改或执行代码评审
autoML 分类器评估每个动作的风险,自动批准低风险操作需理解其判断逻辑
dontAsk未预批准的工具自动拒绝锁定环境
bypassPermissions跳过权限提示(谨慎使用)完全受信环境

7.4 Hooks:自动化安全护栏

Hooks 是在 Claude Code 生命周期关键点执行的自定义命令,可用于实现安全护栏(来源:Claude Code Docs - Hooks)。

核心 Hook 事件

  • PreToolUse:工具使用前执行,可拦截危险操作
  • PostToolUse:工具使用后执行,可记录审计日志
  • Stop:Agent 停止时执行
  • Notification:发送通知时执行

Hook 决策机制

退出码行为
0允许工具调用继续
1强制显示权限提示
2阻止工具调用

拦截危险命令的 Hook 示例

// Hooks 格式请以官方文档为准: https://code.claude.com/docs/en/hooks
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash(rm -rf /*|DROP TABLE|DELETE FROM.*WHERE)",
        "hook": "echo 'Dangerous command blocked' && exit 2"
      }
    ]
  }
}

记录审计日志的 Hook

{
  "hooks": [
    {
      "event": "PostToolUse",
      "command": "echo \"$(date -Iseconds) $(jq -r '.tool_name' /dev/stdin)\" >> ~/.claude/audit.log"
    }
  ]
}

7.5 设置优先级

权限规则遵循五级优先级(高到低):

  1. 托管设置:无法被任何其他级别覆盖
  2. 命令行参数:临时会话覆盖
  3. 本地项目设置.claude/settings.local.json
  4. 共享项目设置.claude/settings.json
  5. 用户设置~/.claude/settings.json

关键规则:如果某工具在任何级别被拒绝,其他级别无法允许它。

7.6 安全最佳实践

  1. 从严格开始:最小权限原则,按需扩展
  2. 监控日志:审查沙箱违规尝试
  3. 环境隔离:开发/生产使用不同的沙箱规则
  4. 组合防护:权限规则 + 沙箱 + Hooks 多层防御
  5. 测试配置:验证沙箱设置不会阻塞合法工作流
  6. 谨慎使用 Unix SocketallowUnixSockets 可能绕过沙箱(如 /var/run/docker.sock
  7. 避免过宽的写入权限:不要允许写入 $PATH 中的可执行目录或 shell 配置文件

8. Monitor 插件:后台任务监控

⚠️ 注意:Monitor 是 Claude Code 的插件组件,需通过插件系统启用,而非内置工具。

Monitor 让 Claude Code 能够事件驱动地响应后台进程,无需阻塞对话(来源:Claude Code Docs - Plugins Reference)。

使用场景

  • 追踪日志文件并标记错误
  • 轮询 PR 或 CI 作业状态变化
  • 监视目录文件变化
  • 追踪任何长运行脚本的输出

工作原理

  1. Claude 编写一个监视脚本
  2. 在后台运行该脚本
  3. 每行输出到达时接收通知
  4. 用户在对话中继续工作,Claude 在事件发生时插入响应

示例:监视构建日志

# 用户请求
"Monitor the build log and let me know if any errors appear"

# Claude 启动 Monitor 插件
# 相当于执行: tail -f build.log | grep -i error
# 当错误出现时,Claude 会主动提示

Monitor 使用与 Bash 相同的权限规则,因此为 Bash 设置的 allowdeny 模式同样适用。

9. 完整配置示例

9.1 前端项目配置

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(npm install)",
      "Bash(npm ci)",
      "Bash(pnpm *)",
      "Bash(vite)",
      "Bash(vite build)",
      "Bash(tsc)",
      "Bash(tsc --noEmit)",
      "Bash(git status)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(git log *)",
      "Bash(git diff *)",
      "Bash(gh pr view *)",
      "Bash(gh pr diff *)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(git merge *)",
      "Bash(npm publish *)"
    ],
    "deny": [
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(rm -rf *)",
      "Read(~/.ssh/**)",
      "Read(//etc/passwd)",
      "WebFetch(domain:localhost)"
    ]
  },
  "sandbox": {
    "enabled": true,
    "mode": "autoAllow",
    "filesystem": {
      "allowWrite": ["./dist", "./build", "/tmp"]
    },
    "network": {
      "allowedDomains": ["registry.npmjs.org", "npmjs.org", "github.com", "unpkg.com", "cdn.jsdelivr.net"]
    }
  },
  "hooks": [
    {
      "event": "PreToolUse",
      "matcher": {
        "tool": "Bash",
        "pattern": "npm audit fix"
      },
      "command": "echo '{\"decision\": \"ask\", \"reason\": \"Audit fix may introduce breaking changes\"}' && exit 1"
    }
  ]
}

9.2 全栈项目配置(含数据库和部署)

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(npx prisma *)",
      "Bash(npx drizzle-kit *)",
      "Bash(vercel *)",
      "Bash(vercel env *)",
      "Bash(vercel logs *)",
      "Bash(docker ps)",
      "Bash(docker compose *)",
      "Bash(kubectl get pods|services|deployments *)",
      "Bash(kubectl describe *)",
      "Bash(kubectl logs *)",
      "Bash(gh *)"
    ],
    "ask": [
      "Bash(vercel --prod)",
      "Bash(docker exec *)",
      "Bash(kubectl get secrets *)",
      "Bash(kubectl apply *)",
      "Bash(npx prisma migrate deploy)"
    ],
    "deny": [
      "Bash(kubectl delete *)",
      "Bash(docker system prune *)",
      "Bash(vercel remove *)"
    ]
  },
  "sandbox": {
    "enabled": true,
    "filesystem": {
      "allowWrite": ["~/.kube", "./prisma/migrations"]
    }
  },
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
    }
  }
}

10. 参考来源