SuperAPI AI 工具集

execkit

execkit 是一个为 AI 代理提供有状态、结构化、安全命令执行能力的工具,支持本地 shell、SSH 和 Docker。它让 cd 和环境变量在多次调用间保持,命令返回结构化结果(分离的 stdout/stderr、退出码、耗时、工作目录)。它会在模型看到输出前自动脱敏常见密钥(AWS、GitHub、OpenAI、JWT、PEM 私钥等),并通过 tail、head、grep 和字符上限等输出预算防止噪声输出淹没上下文窗口。所有命令可记录到 JSONL 审计日志,并可在终端或浏览器中实时只读观看会话;远程会话可检查点与恢复工作区文件以实现撤销。它支持通过 MCP 集成、作为 Rust 库或 Python 绑定使用,采用 Apache-2.0 许可,可自由嵌入包括商业用途。

访问官网

工具介绍

execkit 为 AI 代理提供有状态、结构化且安全的命令执行能力,覆盖本地 shell、SSH 和 Docker 环境。它旨在补充而非替代代理内置的 shell 或沙箱,尤其适合代理需要在远程主机或容器中工作、需要记录执行历史、或需要在远程工作区撤销文件更改的场景。

主要能力:

  • 持久、有状态的会话:支持本地 PTY、SSH、Docker;SSH 可使用 ~/.ssh/config 中的主机别名。cd 和环境变量在多次调用间保留。
  • 结构化执行结果 ExecResult:分离的 stdout/stderr、退出码、耗时、cwd、truncated、timed_out 字段。
  • Base64 命令封装:注释、heredoc、!、结尾 &、语法错误和长命令都不会卡住会话。
  • 保持会话的超时:命令默认 120 秒超时(可通过 timeout_secs 每次调用设置,最高 3600 秒)。超时后通过 Ctrl-C 中断命令并返回 timed_out: true 与退出码 124,会话保留其 cwd 和环境。
  • 密钥脱敏:对常见令牌形态(AWS、GitHub、GitLab、Slack、Stripe、Google、Anthropic、OpenAI、JWT、PEM 私钥)、URL 中的密码、password= / token= 风格的键值对,以及会话中赋值给密钥命名变量的值进行脱敏。回显的命令也会被脱敏。
  • 输出预算:支持按行 tail / head / head+tail、带上下文的 grep 过滤以及字符上限,可按调用或设置会话默认值,结果会报告保留了哪些内容。
  • 远程撤销:通过快照工作区并在命令出错时恢复文件(需要远程有 git 且指定明确工作区;仅限文件,不涉及副作用)。
  • 审计日志与实时查看器:可将会话记录到 JSONL 审计日志,通过 execkit-mcp watch 在终端实时查看,或 execkit-mcp watch --serve --open 打开只读浏览器查看器。
  • 可嵌入,非服务:通过 cargo add 集成到进程中,无守护进程、无供应商绑定。

使用方式:

  • 通过 MCP 从代理使用:代理获得 session_create(local、ssh 或 docker)、session_exec、session_list 和 session_destroy,以及用于远程撤销的 session_checkpoint / session_checkpoints / session_restore。
  • 零安装(uv):可将配置添加到 MCP 客户端配置中,或安装后让 execkit 为客户端打印配置。execkit-mcp doctor 可检查设置。
  • 作为库使用:Rust 可运行示例 cargo run --example local、EXECKIT_SSH="user:password@host:22" cargo run --example ssh、EXECKIT_DOCKER=<container> cargo run --example docker。Python 绑定通过 pip install execkit(原生绑定,无需 Rust 工具链)。
  • 查看代理行为:设置 EXECKIT_MCP_AUDIT_DIR 后每个会话都会被记录。

适用场景: 适合代理在远程主机或容器内执行命令、需要审计执行记录、或需要在远程工作区撤销文件更改时使用。

限制与注意事项:

  • 状态为早期 0.x,次要版本间 API 可能变化。
  • 不是沙箱:命令策略只是建议性的字符串匹配,容易绕过(如 deny: ["curl"] 无法阻止 env curl、sudo curl 或 sh -c curl)。真正的控制是最小权限环境。
  • 不支持交互式输入:stdin 为 /dev/null,提示符、REPL 和编辑器无法工作。应使用非交互标志(sudo -n、apt-get -y)。分页器默认设为 cat,直接运行 less 或 vim 会挂起直到超时并关闭会话。Shell 历史关闭。
  • 超时是中断而非杀死一切:execkit 发送 Ctrl-C。忽略 Ctrl-C 的命令会结束会话。长任务应后台运行(nohup CMD > /tmp/job.log 2>&1 &)并轮询日志。
  • 目标需要 POSIX shell 和 base64。本地会话使用 bash。不支持 Windows。
  • 同步核心:适合典型代理使用,未针对数千个并发会话调优。
  • SSH AcceptAny 主机密钥模式仅用于测试,需显式不安全选择加入,切勿在生产环境中使用。
  • 升级到 0.9 有破坏性变更:SSH 主机密钥固定于 ~/.execkit/known_hosts 而非 ~/.ssh/known_hosts;stdin 为 /dev/null 且分页器设为 cat;超时返回退出码 124 与 timed_out: true 并保留会话;会话 id 形如 a3f9-1_local;SshConfig 新增 connect_timeout 字段(默认 15 秒)。详细内容见 Upgrading to 0.9。
  • SSH 主机密钥变化会显式失败,而非重连导致中间人攻击。
  • 许可:Apache-2.0,可自由嵌入包括商业用途。