# Temp Session — 将当前 agent 对话接到手机 服务:https://temp-session.paradev.biz 手机消息仍由当前 agent 处理,不启动新的 AI。无登录或额外密钥,只凭 8 位随机 ID 访问;知道 ID 的人均可读写及结束会话。24 小时后自动删除。 ## 建立会话 基础收发需要 Python 3;WebSocket 推送需要 Node.js 22 或更新版本。不需要 pip/npm 依赖。 mkdir -p .temp-session chmod 700 .temp-session curl -fsS https://temp-session.paradev.biz/session.py -o .temp-session/session.py python3 .temp-session/session.py create source .temp-session/session.env 把 create 返回的 url 发给用户。已有状态则复用,不要重复创建。 新 shell 需要重新 source,或通过 --state 传状态文件绝对路径。不要把 .temp-session 提交到 git。 ## 选择接收方式(先确认当前工具的能力) ### A. 支持原生入站通知的 agent 优先使用原生 channel/callback,把手机事件交给 agent 的运行时。Claude Code 有现成适配器,见下文。 普通桌面通知、notify 完成钩子、后台 stdout 并不等于模型收到新的用户输入。 当前环境没有可调用的入站通知接口时,不得声称“回合结束后也能自动唤醒”。 ### B. 支持后台任务完成通知 python3 .temp-session/session.py next next 使用 WebSocket,收到手机消息后输出 JSON 并退出;没有消息时持续等待,不做 25 秒轮询。 将它作为后台任务运行,使用 agent 工具提供的完成通知或任务等待接口。收到结果后处理消息、send、ack,再立即启动下一个 next。 只有确认运行时能在回合结束后自动投递任务完成事件并启动模型,才可结束当前回合;否则必须继续等待任务结果。 不要同时启动多个接收任务。next 只输出未确认的用户消息,包含 seq、text、time。 ### C. 持续推送输出 / 通用回调 python3 .temp-session/session.py listen listen 用 WebSocket 持续逐行输出手机消息 JSON,断线自动重连并补收。仅让这个进程在后台运行不能保证唤醒 agent。 如果没有主动输出通知,请持续调用后台任务的输出读取接口,或使用 next。 有可用的 agent 入站程序时,可以指定本地回调: python3 .temp-session/session.py listen --callback '["/absolute/path/to/agent-inbox"]' 回调通过 stdin 接收单条 JSON;按顺序调用,不经过 shell。手机文字不会被拼接成命令。 程序应把消息送进指定的已有 agent 会话,完成处理或持久化入队后退出 0;监听器这时才保存确认游标。失败会重试同一条消息,回调应按 session ID + seq 去重。 不要把仅显示桌面通知的程序当作此回调。此接口不会凭空为任何 agent 增加入站能力。 ### D. 兼容方式:没有 Node.js python3 .temp-session/session.py wait HTTP 长轮询兼容接口,每次最多等 25 秒,无消息时正常退出。持续再次调用;优先使用上面的 WebSocket 模式。 ## 回复与确认 python3 .temp-session/session.py send <<'REPLY' 这里是答复。 REPLY python3 .temp-session/session.py ack --after 1 ack 的数字必须是已经处理完的手机消息 seq;先成功回复,再确认,然后继续接收。 send 持久化幂等 key,网络失败后用相同文字和图片重试,不会重复显示。不要同时写同一状态文件。 listen 的读取游标在内存,处理确认由 ack 保存;重启会重放未确认消息。 ## 发送图片 python3 .temp-session/session.py send '这是截图' --image /absolute/path/screenshot.png 支持 PNG/JPEG/GIF/WebP,每张最多 2 MiB;--image 可重复,单条最多 4 张,每会话图片合计最多 16 MiB。 可以只发图片、不传文字。图片自动上传、随会话过期删除;手机直接显示,点击可打开原图。 不支持 SVG、任意文件上传或远程图片 URL。图片必须是 agent 已获授权发送的本地文件。 ## Claude Code Channels 适配器 下载到 session.py 同一目录: curl -fsS https://temp-session.paradev.biz/channel.mjs -o .temp-session/channel.mjs 在 Claude Code 的项目 .mcp.json 中合并以下配置(替换两个绝对路径,不要覆盖已有 servers): { "mcpServers": { "temp-session": { "command": "node", "args": ["/absolute/path/.temp-session/channel.mjs", "/absolute/path/.temp-session/session.json"] } } } 按 Claude Code 的 Channels 启动方式加载此 server。当前官方文档中的自定义开发 channel 命令: claude --dangerously-load-development-channels server:temp-session 首次加载需要 Claude Code 的 MCP/channel 确认;组织策略可能限制此功能。需要继续原 Claude 对话时,按 Claude Code 的会话恢复方式启动,不要误开新对话。 适配器将手机消息变成 notifications/claude/channel,并提供 reply(text、images、after)与 status 工具。不需要 agent 空转等待;但 Claude Code 程序和此 channel 必须保持运行。 reply 可发送本地图片,并在发送成功后确认 after 指定的手机消息序号。 通知写入 MCP 不代表模型已处理;网页只根据实际 reply/status 活动更新 agent 活动记录。 此适配器不转发权限审批,不修改 agent 的审批规则。 官方说明:https://code.claude.com/docs/en/channels-reference ## Codex 与当前普通工具环境 Codex App Server 支持 thread/resume、turn/start 和 turn/steer,可以由拥有该线程连接的宿主实现入站桥接。普通 notify 配置不是该入站接口。 当前提供通用 callback 接口,但没有自动接管任意正在运行的 Codex/ChatGPT 会话;必须有宿主暴露的 API、正确的 thread ID 和正常的权限处理。 在没有这类入口的当前工具环境,请使用 next 并保持工作回合活跃。 官方接口:https://learn.chatgpt.com/docs/app-server ## 连接状态 网页分开显示手机推送连接、电脑监听连接和 agent 最近活动。 WebSocket 正常关闭后会推送断开状态;异常断网可能最多约 45 秒才根据心跳过期显示“可能已断开”。 “监听脚本已连接”不等于模型仍在处理。agent 最近活动来自主动 next/wait、send、ack、pulse 或 channel reply/status。 当 agent 正在读取 listen 的输出时,可约每 30 秒主动调用: python3 .temp-session/session.py pulse 不要将 pulse 放进后台自动循环,否则会把空转脚本伪装成 agent 活动。 旧版客户端须重新下载并重启监听器,手机须刷新页面。 ## 关闭与限制 python3 .temp-session/session.py close 手机也可结束会话。电脑不能休眠、断网或关闭 agent。每会话最多 2000 条消息,每条文字最多 16000 字符。 主域名 /s/ID 是可用链接;subdomainUrl 需另配通配 DNS 和证书,目前不要发给用户。 ## HTTP / WebSocket API POST /api/sessions → {id,url,subdomainUrl,expiresAt} WS /api/sessions/{id}/socket?client=agent&after=0 → {type:"messages",messages:[{seq,role,text,time,images?}],expiresAt} → {type:"presence",listenerConnected,listenerSeenAt,agentSeenAt,serverTime} → {type:"closed"};发送字符串 ping,返回 {type:"pong"}。 POST /api/sessions/{id}/messages,JSON {text,key:"UUID",role:"assistant",images?:["图片ID"]} POST /api/sessions/{id}/images,原始图片二进制 → {id,mime,size,chunks} GET /api/sessions/{id}/images/{图片ID} → 图片原图 GET /api/sessions/{id}/presence → 连接状态 POST /api/sessions/{id}/activity → 更新 agent 最近活动 DELETE /api/sessions/{id} → 删除会话 兼容 GET /api/sessions/{id}/messages?after=0&wait=1(最多 100 条,25 秒长轮询)