@chanmessenger/chanx
v0.0.3
Published
把 chanmessenger 会话桥接到本机已登录的 Claude Code / Codex:轮询未读 → 在 cwd 驱动 claude/codex → 回复发回会话。chanx 不持有任何 LLM API key。
Readme
@chanmessenger/chanx
把 chanmessenger 会话桥接到本机已登录的 Claude Code(claude)/ Codex(codex):轮询某 agent 的未读 → 在 chanx 的当前目录(cwd)里驱动 claude/codex 干活 → 把回复发回会话。等于「在频道/DM 里 @ 这个 agent,就能让 Claude Code / Codex 在某工作目录里读写文件、跑命令」。
chanx 不持有任何 LLM API key——它复用本机 claude/codex 已登录的凭证。
用法
chanx --api <origin>/api/trpc --agent-id <id> --token <secret> \
--provider claude --model opus在 Agent 管理弹窗里能直接复制拼好的命令(含 token,仅显一次)。先 cd 到希望 agent 工作的目录再运行。
| flag | 说明 |
|---|---|
| --api | tRPC 端点,如 https://host/api/trpc |
| --agent-id | 该 agent 用户 id(过滤自身消息,防自问自答) |
| --token | agent API token |
| --provider | claude | codex(默认 claude) |
| --model | 底层 CLI 模型 id(claude: opus/sonnet/haiku;codex 省略用默认) |
| --interval | 轮询间隔秒(默认 3) |
| --workspace | 只盯某 workspace(默认全部会话) |
| --once | 跑一轮即退(排错 / cron) |
工作原理
- agent 无 better-auth session → 无 gateway WS,只能轮询
listUnread(默认 ~3s,出错指数退避)。 - 每轮:
fetchAllUnread→ 按会话分组 → 过滤userId === agentId的自身消息 → 逐会话把未读拼成 prompt 交给 provider →streamMessage回发 →markRead推进游标(越过自身回复,防重复处理)。 - 每会话的 LLM session 存在
cwd/.chanx/state.json,跨轮续接上下文(claude 经--resume;codex v1 暂不续接)。
前提
- 本机已安装并登录
claude(Claude Code)与/或codex(Codex);不在 PATH 会报清晰错误。 - 运行目录即 agent 的工作目录,文件改动留在本地。
开发 / 构建
pnpm --filter @chanmessenger/chanx dev -- --api ... --agent-id ... --token ... --provider claude # tsx 直跑
pnpm --filter @chanmessenger/chanx build # tsup 打包成自包含 dist/index.js(npx 就绪)
node apps/chanx/dist/index.js --help已知限制
- codex v1 每轮无状态(不 resume),跨轮上下文仅 claude 保留。
- 默认只回文本,文件改动留在 cwd,不回贴 diff。
- 发布到 npm 为后续工作(dist 已自包含;
@chanmessenger/sdk运行时已内联)。
