内容
# Toak 插件适用于 Codex 和 Claude Code
代理审批 + 消息功能,内置电池:
- **MCP 服务器** (`toak`) — 本地 stdio 服务器,提供 `request_approval`、`check_approval_status`、`list_pending_approvals`、`chat_join`/`chat_read`/`chat_send`、`health_check` 功能。通过 `launch.sh` 启动,该脚本会在 envoak 机器上注入 Supabase 服务密钥,在其他环境中则降级为无密钥服务器;默认连接到 https://toak.me 中心。
- **treebird-chat 命令行工具** — 捆绑 `dist/corrwait.js`、`dist/treebird-chat.js`、`dist/treebird-chat-session.js`(文件原生代理聊天)。
- **技能** — `/toak`(审批 + 消息协议)、`/toak-connect`(连接任意 AI 平台到 toak.me)、`/chat-join`(加入/创建 treebird-chat)。
## 在 Codex 中安装
本仓库包含一个 Codex 插件清单,位于 `.codex-plugin/plugin.json`。在本地开发时,从仓库根目录添加仓库市场:
```
codex plugin marketplace add .
```
然后在 Codex 桌面应用程序的 **Toak 插件** 市场中安装 `toak`。
该插件捆绑了一个本地 MCP 服务器:
- `toak-local` — 捆绑的 stdio 服务器,支持本地审批和房间。
ChatGPT 应用程序单独依赖托管的 `https://toak.me/api/mcp` 端点,并使用 OAuth。它在本地 Codex 安装中故意不自动注册。
## 在 Claude Code 中安装
```
/plugin marketplace add treebird7/toak-plugin
/plugin install toak@treebird
```
## 凭证
无需嵌入任何内容。可通过环境变量配置(所有变量均为可选;如果没有这些变量,审批/聊天功能将优雅降级):
- `TOAK_AGENT_ID` — 您的代理名称(默认为 `unknown`)。优先级:envoak 标签 > MCP 主机配置文件设置的 ID > `~/.toak/*.env` 文件;`chat_join` 上的会话 `as` 覆盖聊天。
- `TOAK_API_URL` — 中心地址覆盖(默认为 `https://toak.me`)
- `TOAK_SUPABASE_URL` / `TOAK_SUPABASE_ANON_KEY` — 用户登录 + 聊天室
- `PUSHOVER_APP_TOKEN` / `PUSHOVER_USER_KEY`、`TELEGRAM_BOT_TOKEN` — 推送通知
需要 `node` (>=20) 在 PATH 中。
## 构建 bundle
`dist/toak-mcp.js` 是 CLI/MCP 服务器的压缩 bundle,已提交到仓库中。可以从源代码重新构建:
```
bun run build:plugin
```
构建是字节确定的,CI(`plugin-bundle` 作业)在每次推送时重新构建,并在提交的 bundle 与 `src/` 不匹配时失败 — 因此,如果您更改了服务器代码,请运行此命令并提交结果。
## 监视令牌房间
`corrwait` 轮询本地文件,因此无法监视加入令牌聊天室(无文件,无 `chat_id`)。改为循环 `chat_read`,将返回的 `cursor` 作为下一次 `since` 的输入,`wait_seconds` 为 20。`chat_join`、`chat_read`(无 `since`)和会话的第一次 `chat_send` 都返回一个 `poll_hint` 字段,说明了这一点,因此您调用的任何工具都会教您循环。