独立开发者与产品经理的核心追求除了高效率,还有工作的自由度。盯在电脑前查看智能体编译滚动日志的方式并不高效。
本章我们将搭建一套 移动看护工作流:当本地或云端服务器上的 Codex 进行自动化重构时,一旦遭遇编译失败或触发高危部署授权,微信、飞书或 Telegram 即可实时接收通知卡片,支持直接通过手机进行远程审批或干预。
8.1 移动看护链条的整体架构
我们通过以下管道将本地/云端的 Codex Agent 接入你的手机:
[云端 Codex Agent] ──(Webhook)──> [中转网关 (你自部署的 Node 服务)] ──> [手机端微信/飞书]
▲ │
└───────────────(手机打字回复 "Approve / Stop") ────────────────────┘8.2 实战:GitHub Actions 失败推送与 Webhook 配置
当 Codex 在沙盒中运行构建或测试时,我们将构建日志通过 GitHub Actions 抓取,并触发通知。
1. GitHub Actions 自动化流水线配置 (.github/workflows/codex-watchdog.yml)
在项目根目录下,我们编写如下工作流配置文件,当构建失败时,直接向手机推送包含 CoT 思考链关键节点的摘要:
name: Codex Agent Watchdog
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
agent-build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Run Codex Validation (exec mode)
id: run_agent
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
# 使用 Codex exec 非交互模式跑验证任务
npm ci
npm run test || echo "STATUS=failed" >> $GITHUB_ENV
- name: Push Fail Notice to Mobile
if: env.STATUS == 'failed'
run: |
curl -X POST -H "Content-Type: application/json" \
-d '{
"event": "build_failed",
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"message": "Codex sandbox testing failed. Attention required on phone."
}' \
${{ secrets.MOBILE_WEBHOOK_URL }}OPENAI_API_KEY)。ChatGPT 账号 OAuth 不适合无人值守的 CI 流程。8.3 户外移动端双向交互与审批
接收到失败通知只是第一步。更高级的玩法是,直接在手机端对 Codex 进行远程指令干预。
1. 场景:生产环境部署审批
当 Codex 跑通了所有的测试,准备将代码合并进 main 分支并发布到 Vercel 时,它会暂停并向你的 飞书 或微信群发送卡片:
🚨 [Codex Auth Requested]
Project: pmer-cn-saas
Action: Deploy to production (Vercel)
Change summary: Implemented Stripe subscription webhook in /api/stripe.
Tests: 12 passed, 0 failed.
[回执指令]: 回复 "1" 批准发布,回复 "0" 打断并回滚。2. 实现交互的服务器端中转脚本 (Node.js 极简版)
假设在 pmer.cn 的中转网关部署一个极简的接收端脚本,它会解析你手机端发出的微信或 飞书 命令,并通过远程控制端口(SSH / Codex Port)向下游的 Agent 实例发送信号:
// File: gateway.js (部署在你的 VPS 上)
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json());
// 接收来自微信/飞书的回复通知
app.post('/api/mobile-reply', (req, res) => {
const { userMessage, user } = req.body;
// 仅允许主理人 hunkwu 远程控制
if (user !== 'hunkwu') {
return res.status(403).json({ error: 'Unauthorized' });
}
if (userMessage === '1') {
// 写入信号文件,下游 Codex hooks 监听此文件以批准部署
exec('echo "approved" > /tmp/codex_deploy_signal', (err) => {
if (err) return res.status(500).send('Error triggering deploy');
res.json({ reply: '🚀 部署已批准,生产环境正在上线!' });
});
} else if (userMessage === '0') {
// 强制终止 Codex 进程并回滚代码
exec('pkill -f codex && git checkout -- .', (err) => {
res.json({ reply: '🛑 部署已中止,代码已安全回滚至 HEAD!' });
});
} else {
res.json({ reply: '⚠️ 无效指令,请回复 1 (批准) 或 0 (中止)' });
}
});
app.listen(8080, () => console.log('Mobile gateway listening on port 8080'));8.4 实战产品说心法:把自由留给自己
很多同行在用 AI 编程时,把自己活成了一个“人体测试机”和“Git 提交工具人”:AI 改完了,人去点刷新;AI 报错了,人复制报错发给 AI。
移动看护工作流的本质,是把人从“即时等待”中抽离出来。
通过将测试断言(Validation Specs)托付给 GitHub Actions,将异常通知托付给移动 Webhook,将最终签字权(Deploy Approval)掌握在手机端。你才能真正做到“人在喝咖啡,产品在自动进化”。