Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

📱 mobile-code

把手机变成你 Mac 上 Claude Code 的远程遥控器。

在 Telegram 或飞书里发一条自然语言消息,编码任务就在你机器上的目标仓库里跑起来,结果再推回到你的聊天。

飞书结果回推示例

这是什么

mobile-code 整体链路:手机 → Hermes → mobile-code → Claude Code → 项目仓库 → 结果回推

图中以 Telegram 为例,飞书链路完全一致。请求下行执行、结果回推到聊天——前台调用数秒内返回,后台 worker 跑完任务后自己把结果推回。

Hermes 只是消息入口 + 路由,真正的编码由本机的 claude CLI 完成。mobile-code 是中间的胶水层:解析项目、强制权限分级、在隔离分支上跑任务、再把结果汇报回来。

通勤路上、躺在沙发上,只要能发消息,就能让 Mac 上的 Claude Code 帮你改代码、跑测试、看结果。

✨ 功能特性

以下能力均已实现并通过端到端实跑验收(Telegram / 飞书双通道、claude / codex 双后端)。 对应需求与验收文档见 docs/specs/。

  • ✅ 远程编码 — 手机发自然语言消息,任务在 Mac 上的目标仓库执行,结果自动回推。
  • ✅ 双 IM 通道,均为双向 — Telegram 与飞书都能「发消息触发 + 结果回推」。飞书走 自建应用:入站经 Hermes 网关(websocket、支持 @ 触发与发送者白名单),出站走应用消息 API。
  • ✅ 双执行后端 — --backend claude|codex 自由切换,权限分级对后端无关,由各后端自己映射到 flags/sandbox。
  • ✅ 手机端意图快捷词 — 看/查/分析 走只读,改/修/实现 走可编辑;脚本仍可用 -t 1/-t 2。
  • ✅ 权限分级白名单(默认拒绝) — tier 2 不放行裸 Bash,git commit/push、rm、sudo、curl、ssh、node -e 等一律隐式拒绝。是护栏,不是沙箱。
  • ✅ 分支隔离 — 每个任务独占 mobile/<job> 分支,便于隔离与一键回滚。
  • ✅ 提交 / 推送需显式确认 — run 只改文件,无权提交;你从手机上分别确认 提交 与 推送。
  • ✅ 结果必达 — worker 绝不静默失败,成功 / 失败 / 超时 / 异常每种结局都恰好推回一条消息。
  • ✅ 项目别名外置化 — mobile-code 注册 <别名> <路径> 写入 ~/.mobile-code/projects.json,免改源码、免 rebuild。
  • ✅ 通用 Agent Skill — 一份 SKILL.md 可装到 Hermes / Claude Code / Agent SDK,教编排型 agent 如何调用本 CLI。

🚀 快速开始

npm install
npm run build
mkdir -p ~/.local/bin
ln -sf "$PWD/dist/mobile-code.js" ~/.local/bin/mobile-code   # 放到 `claude` 所在的目录
mobile-code --help

然后创建 ~/.mobile-code/config,至少配置一个推送通道(Telegram 和/或飞书),并配好 Hermes 网关。完整步骤——bot/应用创建、权限、launchd 的 PATH 注意事项——见 docs/SETUP.md。

⚠️ dist/ 是生成的、已被 git 忽略。改完 src/ 后要重新 npm run build (~/.local/bin 的符号链接指向编译产物,而非 TypeScript 源码)。

📲 用法

mobile-code ping                       # 健康检查
mobile-code <别名> "<任务>"             # 跑任务(默认 tier 2)
mobile-code -t 1 <别名> "<任务>"        # 显式指定分级(1 = 只读,2 = 可编辑)
mobile-code --backend codex <别名> "<任务>"   # 选择执行后端(claude | codex)
mobile-code commit <别名> "<msg>"      # 提交任务改动(独立、需显式确认)
mobile-code push <别名>                # 推送任务分支(独立、需显式确认)
mobile-code log [job]                  # 打印某次 job 的日志(不传则取最新)
mobile-code projects                   # 列出项目别名
mobile-code register <别名> <路径>      # 新增项目别名

意图快捷词(日常手机使用)

比数字分级更顺手——这才是你在手机上真正会打的:

快捷词 同义词 分级 能力
看 查 读 分析 总结 / read ask plan 1 只读
改 修 做 实现 新增 / edit work fix 2 可编辑,不能提交/推送
mobile-code 看 test 找出入口文件并总结
mobile-code 改 test 修复 sum 的 bug,跑 npm test
mobile-code 提交 test "fix: 修复 sum 计算错误"
mobile-code 推送 test

🔒 安全模型

  • 权限分级是白名单(默认拒绝)而非黑名单。 tier 2 传入显式 --allowedTools 列表,且不放行裸 Bash,因此 git commit/push、rm、sudo、curl、ssh 被隐式拒绝。这是一道护栏,不是沙箱。
  • commit 与 push 是独立、需显式确认的步骤。 run 任务只改文件,agent 无权提交或推送,你从手机上逐一确认。
  • 每个任务跑在自己的 mobile/<job> 分支上,便于隔离与轻松回滚。
  • worker 绝不静默失败——成功、失败、超时、异常每种结局都会推回恰好一条消息。

🧠 为什么这样设计

mobile-code run 解析项目和权限分级、拿到按仓库的锁后,分离出一个后台 worker 并在数秒 内返回,因此网关调用永远不会阻塞。worker 跑任务、并自己把结果推回聊天——所以即使前台 调用早已返回,结果依然能送达。

两进程异步 worker 模型

完整设计见 CLAUDE.md 与 docs/mvp-spec.md。

🗺️ 路线图

下面是参考任务生命周期 + 验收闭环补的方向,优先级与方案待讨论:

  • 任务绑定 Issue — --issue 1234,结果摘要回写 issue 评论,获得持久 ID / 可追踪 / 可累积上下文。
  • 开工前确认范围 — tier 2 detach 前先推一条「我要做 X、验收 Y,回复 y 继续」,避免跑偏空转。
  • 任务迭代回流 — --on <job> 复用同一 mobile/<job> 分支接着改,不必每次新建 job。
  • 在线看 diff / 预览 — worker 把 diff 生成静态 HTML / 临时链接推回 IM,手机点开看完整改动。
  • git worktree 解串行 — 每个 job 独立工作区,lock 收窄到只保护 commit/push。
  • 收尾延伸到 PR — mobile-code pr <alias> 把 mobile/<job> 开成 PR,而非直接 push。

📁 项目结构

路径 说明
src/cli.ts commander 入口:run / commit / push / log / register / projects
src/backends/ 执行后端(claude.ts、codex.ts)+ 分级→flags 映射
src/worker.ts 分离出去的后台 worker
src/notify.ts src/telegram.ts src/feishu.ts 多通道结果推送
src/tiers.ts src/jobs.ts src/lock.ts src/config.ts 分级、job 元数据、锁、配置
skills/.../mobile-code/SKILL.md 给编排型 agent 用的通用 Agent Skill 契约
docs/specs/ 功能需求文档与验收清单

运行时状态存在仓库之外的 ~/.mobile-code/(config、projects.json、logs/、jobs/、locks/)。

📚 文档

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages