主会话
OpenClaw 首先是一个个人代理。开箱即用,你发送给它的每一条直接消息——无论是来自 Telegram、WhatsApp、iMessage、Slack 私信、Web 应用,还是任何其他地方——都会落入一个滚动对话:主会话。在手机上问点什么,从笔记本电脑上继续跟进,代理在两处拥有相同的上下文。只有一个大脑,而这里就是它思考的地方。
在底层实现中,主会话是一个普通会话,使用规范键 agent:<agentId>:main(例如 agent:main:main)。后缀是固定的;自定义的 session.mainKey 值会被忽略。它的特殊之处在于,默认的 DM 作用域会将所有直接消息汇聚到其中,并且系统的其余部分将其视为代理的根:心跳会唤醒它,后台工作会向它汇报,其他地方的动态也会汇总到它这里。
Home¶
在 Web 应用中,主会话就是 Home 页面——侧边栏中的第一个条目。顶部的身份行就是你的代理(点击可打开代理菜单);Home 是你与它对话的地方。从主对话分叉出来的会话显示在 Threads 下,群聊显示在 Groups 下,编码/CLI 会话显示在 Coding 下。
工作时与 Home 对话¶
在侧边栏底部选择 Talk to your Home agent(或按 Cmd/Ctrl+Shift+H)即可在当前页面旁边打开 Home。助手侧边栏可以停靠在右侧或底部。它会跟随侧边栏代理切换器中所选的代理,因此只有一个地方可以切换代理。Ask OpenClaw 仍然是同一侧边栏中一个独立的系统维护对话。
停靠面板使用你真实的 Home 对话,包括其历史记录、工具、审批和消息队列。Open Home full page 会在主区域打开该对话,并暂时隐藏其停靠面板,以避免出现重复的输入框。
展开 Working on 可以查看伴随你下一条消息的小型参考快照:当前页面,以及(如果可用)工作会话、工作区和可见文件路径。在工作区中选择文本,然后使用 Attach selected text 来附上一段有边界的摘录。使用 Remove work context 可以在不附带快照的情况下发送消息。它成为已发送消息的一部分,并在排队和重试过程中保持不变;斜杠命令不包含它。这些引用不会授予 Home 代理对另一个代理的会话或文件的额外访问权限。
什么会流入主会话¶
主会话不仅仅是一份聊天记录;它是你的代理世界汇聚的地方:
- 新会话。 默认情况下,创建会话会在其代理的 Home 对话中排入一条系统通知,包含会话键以及可用的标题、创建者和创建来源。Home 会在其下一次轮次或计划心跳时看到该通知;创建本身不会触发额外的唤醒。设置
session.notifyOnCreate: false可选择退出。Home 本身、草稿、隐身会话、隐藏的内部会话以及计划的 cron 运行都被排除在外。重置或重新打开现有会话不会再次发送创建通知。这些通知使用有界的内存中系统事件队列,并且不会让 Home 订阅未来的活动。 - 群组活动。 在
session.groupScope: "per-group"(默认值)下,群组和房间会话保持隔离,同时主会话自动监视它们。活动会以紧凑通知的形式排队——按对话合并,绝不会每条消息触发一次唤醒——代理会在下次运行时看到它们:即在你发送下一条消息或按计划心跳时。在tools.sessions.visibility: "all"(默认值)下,主会话可以在整个 Gateway 中使用会话工具,跨代理访问由tools.agentToAgent控制且默认开启;其系统提示会列出被监视的群组,以便它知道最近的动态发生在哪里。 - 后台工作。 子代理和派生的会话会向启动它们的会话汇报结果,因此代理从 Home 发起的工作会汇报回 Home。
- 心跳。 计划心跳以主会话为目标,即使你没有写任何内容,也能将排队中的通知转化为感知。
跨重置和对话的记忆¶
滚动对话受模型上下文窗口的限制,因此连续性来自其周围的各个层:
MEMORY.md,代理精心维护的长期记忆,会被加载到每个新的会话中。每日笔记(memory/YYYY-MM-DD.md)可按需搜索,在/new或/reset之后,近期的笔记会重新预载。在压缩之前,代理会将持久性事实写入每日笔记,这样长对话就不会悄悄丢失这些事实。- 跨对话记忆召回 让代理能够召取其其他私有会话中的内容。在个人设置中——全局
session.dmScope解析为main且没有任何按绑定的 DM 覆盖——它默认启用;任何配置的 DM 隔离都会将其关闭,除非你明确选择启用。请参阅记忆配置。
具有持久历史的滚动会话¶
主会话通过重置和压缩向前滚动,而不是让模型一次性携带其全部历史记录:
- 默认情况下没有自动重置;压缩会在保持滚动会话的同时限制活动上下文的范围。每日重置和闲置重置是选择启用的(请参阅会话管理)。在
/new和/reset时,结束对话的尾部会保存到每日记忆笔记中,下一个会话会重新预载近期的笔记。重置会分配一个新的活动会话 ID,但会保留之前的 SQLite 记录,使其可以在相同的主会话键下搜索。 - 当对话接近上下文窗口时,压缩会进行总结并在原地继续——记录历史仍保留在会话存储中。
- 会话列表显示当前的活动对话,而不是背后的每一个历史会话 ID。
- 当每个代理存储的物理数据库、WAL 和会话产物超过磁盘预算时(
session.maintenance.maxDiskBytes,默认10gb——请参阅会话维护),OpenClaw 会将最旧的、未被引用的历史提取到经过验证的压缩存档中,然后删除其数据库行。活动中的、已路由的和正在进行中的会话永远不会成为预算的牺牲品。
当你希望改用隔离时¶
共享主会话是仅与你对话的代理的合适默认设置。如果多个人都可以向你的代理发送消息,请隔离私信:
在使用隔离作用域时,每个发送者都会拥有自己的会话,并且跨会话记忆召回默认关闭。群组监视仍由 session.groupScope 独立控制:per-group 保留主会话的环境可见性,而 main 则直接将房间放入主会话中。当检测到多个发送者时,openclaw security audit 会建议隔离私信。完整的作用域矩阵、身份链接以及按路由覆盖在 会话管理 和 频道路由 中有说明。
群组和房间默认使用单独的会话。若要使选定的受信任团队房间成为滚动主会话的一部分,请在其路由绑定上设置 bindings[].session.groupScope: "main"。这会更改会话键和共享上下文;提及门控和回复路由仍使用源房间。参见 会话管理。
相关¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw