command
火车要去哪里,必须先写清楚。
Gateway 导读
exec 负责跑命令,yieldMs 超时后自动转入后台;process 负责查输出、写输入、杀进程。最容易忘的是:想确认无输出的命令是否完成,必须用 process 的 poll 或 log 来查,exec 不会主动通知。
先讲这一页到底在解决什么
exec 负责跑命令,yieldMs 超时后自动转入后台;process 负责查输出、写输入、杀进程。最容易忘的是:想确认无输出的命令是否完成,必须用 process 的 poll 或 log 来查,exec 不会主动通知。
第一步
exec 先像“让火车跑起来”,跑久了就可能自己进后台官方把这个工具的参数写得很细,但核心就一件事:命令先跑,太久了就让它自己去后台待着。
command火车要去哪里,必须先写清楚。
yieldMs像给火车一小段候车时间。超过这个点,它就会被放进后台车厢。
background如果你一开始就知道它会跑很久,可以直接让它进后台,不用前台傻等。
timeout像给这趟车设一个最晚回站时间,超时就停。
命令翻译
看成动作后,参数就没那么吓人了。
workdir / env像告诉火车从哪座站台出发,车厢里顺手装什么物品。
pty: true像你需要真火车头,不是纸板模型。需要真正的终端时就把它打开。
elevated像把火车开上高架通道。只有在允许的时候,它才会走这条路。
OPENCLAW_SHELL=exec每趟车出发时都会带一个小纸条,告诉后面的壳子“我是 exec 车次”。
后台车厢
官方这里最关键的词是“in memory”。意思很直白:先放内存,不落地。
像短途车,到了站就把人和行李一起交出去。
sessionId像给你一个车次号码,告诉你这趟车还在站里。
像把乘客的行李先放站台柜台里,等你之后来取。
那火车就只能一直前台跑,yieldMs 和 background 也会失去效果。
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。那页像小区广播和门牌灯。