piagent_
← ~/map

$ cat ~/map/motus.md

motus

把 API key 挡在 pi 会话之外:替换工具输出中的精确密钥值,封锁会打印密钥的命令与文件,fail closed。

extensions✓ 10月30日

事实速查

仓库
github.com/espadat-studio/motus ↗
GitHub Stars
★ 0
Forks
0
许可证
MIT
npm / 月
—
最后推送
2026年11月2日

安装

pi install npm:@espadat/motus(必须全局,不要 --local),然后把它在 ~/.pi/agent/settings.json 的 packages 里移到首位——pi install 只会追加到末尾,而处理器按加载顺序运行——再创建 ~/.config/motus/config.toml,否则每个会话都以降级状态启动。Claude Code 侧:npm install --global @espadat/motus,并把 motus-cc-hook 注册为 PreToolUse 钩子。

## 速览

一个把 API key 挡在模型之外的 pi 扩展:会话启动时从 env、命令输出、mise、pa 或 1Password 装载密钥,在工具结果、消息、提示与供应商请求中把每个精确值替换为 [REDACTED:NAME] 标记,并封锁凭据路径与打印密钥的命令。Claude Code 侧由钩子提供封锁;整体 fail closed。

## 要点

## 常见问题

Q motus 需要配置文件吗?

需要。没有 ~/.config/motus/config.toml 时,每个 pi 会话都以降级状态启动,Claude Code 钩子则拒绝所有 Read 与 Bash 调用。若你不自行列出 sources,默认会加入一个 env 来源。

Q 为什么 motus 必须放在 packages 首位?

处理器按加载顺序运行,更早加载的扩展会在 motus 改写之前看到原始工具输出与消息;pi 无法上报处理器顺序,motus 也不检查这条规则。

Q 它能拦住被提示注入的 agent 泄露密钥吗?

不能——README 明确说它只防意外泄露;恶意或被注入的 agent 可以在任何输出被替换之前把密钥带出去,建议的缓解手段是沙箱。

Q Claude Code 侧有什么不同?

只有封锁:PreToolUse 钩子拒绝匹配 blockPaths、blockCommands 或 claudeCode.blockCommands 的 Read 路径与 Bash 命令;配置非法、输入异常或崩溃时同样拒绝。

Q 支持哪些密钥来源?

五种:env、输出 JSON 对象的命令、带 Age 加密列表文件的 mise、pa 存储条目,以及用一次 op inject 调用解析的 1Password op:// 引用。

## 参考链接

## 相关条目

## 教程

最后更新: 2026年11月2日