Gateway 导读

后台任务:exec 发命令,process 管会话

exec 负责跑命令,yieldMs 超时后自动转入后台;process 负责查输出、写输入、杀进程。最容易忘的是:想确认无输出的命令是否完成,必须用 process 的 poll 或 log 来查,exec 不会主动通知。

先讲这一页到底在解决什么

后台任务:exec 发命令,process 管会话

exec 负责跑命令,yieldMs 超时后自动转入后台;process 负责查输出、写输入、杀进程。最容易忘的是:想确认无输出的命令是否完成,必须用 process 的 poll 或 log 来查,exec 不会主动通知。

原文共 6 节,先看 Start Here 路径:/gateway/background-process 查看官方原文

第一步

🏃 exec 先像“让火车跑起来”,跑久了就可能自己进后台

官方把这个工具的参数写得很细,但核心就一件事:命令先跑,太久了就让它自己去后台待着。

🛤

command

火车要去哪里,必须先写清楚。

yieldMs

像给火车一小段候车时间。超过这个点,它就会被放进后台车厢。

🌙

background

如果你一开始就知道它会跑很久,可以直接让它进后台,不用前台傻等。

timeout

像给这趟车设一个最晚回站时间,超时就停。

命令翻译

🧳 这些参数不是“高级设置”,而是在安排火车怎么上路

看成动作后,参数就没那么吓人了。

workdir / env

像告诉火车从哪座站台出发,车厢里顺手装什么物品。

pty: true

像你需要真火车头,不是纸板模型。需要真正的终端时就把它打开。

elevated

像把火车开上高架通道。只有在允许的时候,它才会走这条路。

OPENCLAW_SHELL=exec

每趟车出发时都会带一个小纸条,告诉后面的壳子“我是 exec 车次”。

后台车厢

🧠 一旦进后台,输出就先放在记忆箱里,等你来站台看

官方这里最关键的词是“in memory”。意思很直白:先放内存,不落地。

📥

前台跑完就直接出结果

像短途车,到了站就把人和行李一起交出去。

🚉

后台跑会返回 sessionId

像给你一个车次号码,告诉你这趟车还在站里。

🧺

输出暂存在记忆里

像把乘客的行李先放站台柜台里,等你之后来取。

🚫

如果 process 不可用

那火车就只能一直前台跑,yieldMsbackground 也会失去效果。

process 工具

🛎 process 像站台调度员:看车次、等消息、喂 stdin、停火车

这个工具不是新的火车,它是负责照看后台会话的站台人。

list

像看站台牌子:现在有哪些车正在跑,哪些已经到站。

poll

像过来扫一眼车厢,顺手把新输出带走,还能告诉你车停没停。

log

像翻整段列车日记。可以按偏移量和长度慢慢看。

write / kill / clear

一个是给车厢塞纸条,一个是把车停掉,一个是把到站后的记录从站台抹掉。

命令翻译

🧪 官方例子其实都很像“先发车,再回来查票”

这几条命令组合起来看,就像后台工作的一条完整小故事。

🚆

{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }

像让火车先跑 5 秒,如果还没回来,就把它转进后台车厢。

🔎

{ "tool": "process", "action": "poll", "sessionId": "<id>" }

像之后再去站台问一句:“那趟车现在到哪了?”

📨

{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\\n" }

像往后台车厢里塞一张“继续吧”的小纸条。

🧯

记住一个限制

只有后台车厢才会被 process 记住。系统重启后,车次也会跟着消失。

最后总结

🎈 把这页压成一句最短的话

exec 像火车,process 像站台调度员。前者负责把活跑起来,后者负责把后台会话看住、查到、叫停、清掉。

下一页如果你想看“门口怎么找到 Gateway”,就去 /gateway/bonjour。那页像小区广播和门牌灯。