Skip to content
FunCoding

Search

Search docs, Skills and MCP

Shell、MCP 与 subagent 策略匹配

正确区分命令条件、服务身份、被调用代理和调用者上下文。

This page has not been translated into English yet. The original Chinese version is shown below.

先明确要限制的是哪类工具、哪个服务或谁发起的调用,再添加参数条件。过宽的通配符和不匹配的工具名称都会改变规则实际范围。

Shell 命令

commandPrefix 接受字符串或字符串数组,匹配命令前缀;commandRegex 使用正则。二者不能在同一规则并用,都是策略字段,不是 run_shell_command 的调用参数。

[[rule]]
toolName = "run_shell_command"
commandRegex = "git (commit|push)"
decision = "ask_user"
priority = 100

正则最终针对参数的 JSON 表示,前面带 command 字段;^/$ 会作用于完整 JSON,因此不要把普通 Shell 字符串的锚点规则直接搬来。需要更复杂条件时,先验证参数序列化与转义。

重定向

即使命令规则允许,检测到 >、>>、<、<<、<<< 等重定向时默认仍询问。allowRedirection = true 只为该条规则允许重定向;链式命令中每个使用重定向的子命令都需满足自己的规则。

允许命令前缀不等于自动允许任意目标文件写入,仍应结合沙箱范围核对。

MCP 服务

官方推荐 mcpName 配合工具简单名,避免手写完整 FQN:

[[rule]]
mcpName = "my-jira-server"
toolName = "search"
decision = "ask_user"
priority = 200

这里 toolName 是 search,不是 mcp_my-jira-server_search。所有 MCP 工具可用 mcpName = "*" 和 toolName = "*"。

官方专页称只填 mcpName 即可覆盖服务全部工具;但所引固定 revision 解析器要求 toolName。本页采用显式 toolName = "*",避免该示例在当前解析器失败。

服务名称避免下划线 _。官方警告 FQN 解析会按 mcp_ 后首个下划线切分身份,可能导致规则静默失配;使用连字符名称。

subagent 的两种约束

把 subagent 名称作为 toolName,可控制是否允许调用该代理;主 Agent 通过 invoke_agent 指定的 agent_name 会被当作虚拟工具别名参与匹配。

subagent 字段则限定“由谁发起工具调用”。例如限制 codebase_investigator 内部的工具,与禁止主 Agent 启动 codebase_investigator 是不同规则。不要只限制入口就假定其内部每个动作都有相同决定。