任务的三种形态
单聊、任务会话、定时任务各自解决什么问题,以及任务怎么绑定工作目录并隔离。
居民干活有三种容器,长得很像但用途完全不同。混着叫会直接导致你找不到自己的活。
一张表分清
| 单聊 | 任务会话 | 定时任务 | |
|---|---|---|---|
| 谁发起 | 你,随时 | 你(或居民代你发起,经审批) | 你交代,居民登记,时钟触发 |
| 上下文 | 持续累积的一条长会话 | 从零开始,一件事一个空间 | 在该居民单聊里跑一个独立回合 |
| 你在不在场 | 在 | 在 | 不在,到点自动跑 |
| 界面位置 | 消息列表 | 消息列表独立成行(头像带任务签) | 居民档案 →「定时」页签 |
| 结束方式 | 不结束 | 「结束任务」从列表收起,记录保留 | 一次性跑完 / 取消 |
再强调一次用词
界面上「新建任务」= 任务会话。「定时」页签里的才是定时任务。 本文一律用全称。
单聊:你和某位居民的常驻会话
每位居民一条,持续累积。TA 记得你们之前聊过什么,也记得自己的技能与记忆。
适合作日常对话、临时差事、需要它记着上下文的事。不适合「同时推进多件不相干的任务」——那会把上下文搅在一起。
任务会话:一件事一个空间
给某位居民开一个上下文隔离的专属会话:
- 两个入口:居民行的「⋯」菜单,或顶部加号菜单 →「新建任务」;
- TA 继承自己的人设、性格、技能与持久记忆,但上下文从零开始;
- 首轮对话后自动起一个短标题,可随时手动改名;
- 同一居民可以同时开多个任务,与单聊并行各跑各的;
- 「结束任务」即从列表收起,聊天记录保留。
审批卡落在任务会话里,通知直达;「本回合不再问」只对本任务生效,不会漏给同一居民的其它会话。
居民也能替你开:在单聊里说「开个任务整理照片」,TA 调 open_task,你点一下审批就有了。任务里说「改名叫 X」,TA 调 rename_task。
什么时候该用任务会话
- 一件会持续几天的事(跟一个需求、整理一批资料);
- 需要和单聊隔开上下文的活;
- 需要绑定一个真实项目目录的活(下一节)。
定时任务:按时间表自主办事
跟居民说一句带时间的话,例如:
今晚八点提醒我拿快递 每天早上九点给我汇总一次科技新闻
居民会用 set_task / update_task / cancel_task / list_tasks 把它登记进任务清单。登记是纯数据操作,不弹审批,但会给你一张复述时刻的回执——请顺手看一眼时间对不对。
到点之后
- 调度器每分钟扫描一次,到点唤醒居民,在 TA 的单聊里跑一个岛主不在场的回合:提醒照说、事照办、办没办得成如实汇报。
- 错过的时间:一次性任务给 10 分钟补窗;周期任务跳过本期不补。机器睡眠或断网导致错过时,不会在几小时后突然把陈年提醒堆给你。
- 余额不足:直接说余额不足,不会静默失败。
- 上限:每位居民同时进行中的定时任务最多 10 个。
- 步数:单回合最多 100 步。真撞上限时,回一句「继续」就带着全量上下文续跑。
群聊里 @居民 交代也算交代入口,但执行与记录都落在该居民的单聊——群聊只是入口,不是执行容器。
工作目录绑定与隔离
任务会话可以绑定一个真实工作目录,让居民在项目里干活。
三个入口,同一张授权卡
- 创建任务时选目录;
- 任务头部的工作目录标签,点击更换;
- 在任务里吩咐居民
set_task_workdir。
三条路都走绑定授权卡,卡面写明:规范化后的目录、执行模式(隔离 / 直连)、写入范围。这张卡没有「以后全自动」档——绑目录是高风险动作,每次都要你明确同意。
绑定之后,任务才获得该目录的读写能力。从没绑定过的老任务行为不变。
git 仓库:默认隔离
如果绑定的是 git 仓库,默认启用独立工作树:
- 任务在自己的独立工作树 + 专属分支上干活,分支名形如
task/<居民名>/<短号>; - 多个居民、多个任务同时改同一个仓库互不踩踏;
- 你的原目录逐字节不动;
- 居民在对话里汇报改了什么,改动都在任务分支上等你合并。
绑定前的安全检查(绝不静默降级)
绑定会被拒绝,并告诉你原因,如果:
- 仓库不干净(有未提交改动,会列出数量);
- 有进行中的 merge / rebase;
- 是裸仓库或子模块;
- 本机 git 不可用(此时可显式改选直连模式)。
非 git 目录走直连模式:改动直接落在目录里,授权卡会明确标出「无隔离」——不存在悄悄用直连冒充隔离。
回合结束的自动收尾
- 居民忘了提交的改动,自动提交到任务分支;
- 已经提交过又有新残留的,存成带序号的恢复快照(
refs/archipelago/<任务>/leftover-<n>),校验通过才允许后续清理; - 居民把 HEAD 切离任务分支时,下一回合如实阻断,现场不动。
审批等待期间的防抢跑
绑定审批还没点的时候,该任务的新消息会被挡下,防止居民按旧工作目录抢跑。审批期间目录状态变了(比如从隔离降成直连),会拒绝执行并请你重新确认。
结束任务
「结束任务」改为可等待收尾:先等当前回合(含工作树收尾)真正完成,再从列表归档。
- 任务分支保留即记录,不会随手删;
- 干净的工作树随结束移除;
- 脏现场默认保留,不强删;
- 启动时会对崩溃残留的工作树做恢复扫描:半创建的重备、坏现场标异常、归属不明的只报告不删。
适用版本:v1.5.2 及以后·最后更新:2026-11-13
发现写错或过时?点上方「编辑此页」提 PR,或在 常见问题 里找到反馈入口。