📄 一句话概括
会话级能力挂在 Agent Plane 的作用域上下文上——会话开始挂上、结束销毁;配置树里那句 ctx.get('profileContext') 就是它的真实入口。
📝 本节和前面几节的关系
1.2 给过一句口诀:会话内的进预设,跨会话的留宿主。这一节把口诀背后的机制讲清楚:那个【会话内】到底是个什么东西。
一、两个平面:一份的和每人一份的
- Host Plane(宿主平面):整个进程一份。注册表、沙箱、模型路由、持久化住在这里。
- Agent Plane(会话平面):每个会话一份。工具、人格、提示段住在这里。
打个比方:宿主平面是整栋楼的水电与门禁,会话平面是你租的那间房——退房时,房间里的东西跟着清走,楼还在。
二、Scope Context:会话的【房间】
会话的作用域上下文(Scope Context)就是那间房的【房间登记表】:会话开始时开卡,会话结束时销卡。
它不是抽象概念,配置树里有真实入口——插件可以这样声明条件加载:
disabled: !!js '!ctx.get('profileContext')'
这行的意思是:去当前作用域(ctx)里取会话上下文,取不到就不加载。只有真开了一个会话,这类插件才会挂上来。
三、能力怎么挂上来,又怎么消失
- 会话开始:按所选预设把插件实例化,挂进这个会话的作用域——Standard 是 19 件,Minimal 是 2 件。
- 会话进行:插件通过作用域互相找到对方——工具找人格,规划找压缩。
- 会话结束:作用域销毁,挂在其上的能力随之消失。
注意区分两样东西:Trajectory(会话记录)留下,能力不留——记录归持久化管(宿主平面),能力挂在会话平面。
四、为什么能力要跟着会话走
- 隔离:会话 A 装的插件,会话 B 看不见——两个会话互不干扰是硬承诺。
- 回收:结束即销毁,不占常驻资源,也不留脏状态。
- 可复现:同样的预设,每次会话都是同样的起手——昨天的会话不会污染今天的。
五、动手 Demo:两个平面,各管什么
把两个平面的分工与生命周期放到一张表里:
planes = [
("Host Plane", "整个进程一份",
"注册表、沙箱、模型路由、持久化", "进程退出"),
("Agent Plane", "每个会话一份",
"工具、人格、提示段", "会话结束"),
]
for a, b, c, d in planes:
print(" %-12s %s" % (a, b))
print(" 挂什么: %s" % c)
print(" 何时消失: %s" % d)
print()
print("会话结束时:会话平面销毁 19 件,宿主平面 0 变化")
实跑输出:
--------------------------------------------------------------------
两个平面,各管什么
--------------------------------------------------------------------
Host Plane 与 Agent Plane,一张表分开:
平面 几份 挂什么 什么时候消失
---------------------------------------------------------------------------------
Host Plane 整个进程一份 注册表、沙箱、模型路由、持久化 进程退出
Agent Plane 每个会话一份 工具、人格、提示段 会话结束
---------------------------------------------------------------------------------
配置树里有一行真实的条件加载写法:
disabled: !!js '!ctx.get(''profileContext'')'
里面的 ctx,就是会话的作用域上下文(Scope Context)。
插件能不能挂上来,先要问它:当前作用域里有没有我要的东西。
算一笔账:一个会话按 Standard 起手,结束时发生什么?
会话平面销毁的插件 19 件(随会话一起没了)
宿主平面变化 0 件(注册表、沙箱都还在)
会话记录(Trajectory) 留下(记录归持久化管,不随作用域销毁)
一句话:能力跟着会话生、跟着会话死;记录留下,能力不留。
配置树里那句 ctx.get('profileContext') 值得记住——【会话级】不是注释里的形容词,是代码里的一个取值判断。
会话结束时销毁的是能力,不是记录:Trajectory 是 append-only 的日志,永远留着。
这个设计像租房:退房清房间,楼不塌。
30 秒实验
- 在配置树里搜
profileContext,找到那行条件加载,读一遍它的意思。 - 开两个会话,在 A 里用一个特殊工具,到 B 里看——B 里应该没有。
- 复述一遍:会话结束后,什么留下了、什么消失了?
常见误区
- 错误:插件是全局的,装了大家都能用。——纠正:会话级插件挂在自己的作用域上,别的会话看不见。
- 错误:会话结束了,能力也留下来了。——纠正:留下的是 Trajectory 记录;能力随作用域销毁。
- 错误:Host Plane 与 Agent Plane 是两台服务器。——纠正:是同一个进程里的两个作用域,一台机器上就有。
自测三问(点开对答案)
1. 两个平面各管什么? —— 宿主平面管进程级(注册表、沙箱、路由、持久化);会话平面管会话级(工具、人格、提示段)。 2. `ctx.get('profileContext')` 在配置里起什么作用? —— **作为条件加载的判断**:取不到会话上下文就不加载,保证插件只在会话内挂上。 3. 会话结束后,能力和记录各自的命运? —— 能力随作用域销毁;**Trajectory 记录由持久化保存**,可以回放。- ☐ 下一节(3.2.2 作用域的意义:动态组合必须有边界)
相关笔记
- 【一切皆插件】 —— 宿主/会话两平面口诀的出处
- Workspace 是 Agent 的【现实世界】 —— 同样是【先把边界划清】的设计
- 封装化、访问修饰符-只对外公开必要的信息和步骤 —— 封装:只对需要的人开放
- 🐳 DeepSeek Harness · 索引