Session Presence

同时运行多个 AI 编程会话?Session Presence 让它们能实时感知彼此——谁在线、在哪个项目上、每个会话当前在处理什么。这是会话相互感知各自盲目工作之间的本质区别。

记忆与感知

ContextForge 记忆回答关于过去的问题:之前发生了什么、做出了哪些决策、修正了什么。Session Presence 回答另一个问题——关于当下

此刻还有谁在处理这个?就在我工作的同时? 记忆是历史。感知是实时意识。当你针对同一项目运行两个或更多会话时,感知机制能防止会话 B 进入会话 A 已打开的模块。

工作原理

感知功能完全自动。MCP 客户端——每个 Claude Code、Cursor 或 Copilot 会话对应一个进程——负责管理它。你无需运行任何设置命令:

  • 自动注册。会话在首次使用任意工具时自动宣告自己上线。无需手动开启。
  • 心跳检测。每个会话每隔几分钟静默签到一次,确保列表中只显示真正活跃的会话。
  • 干净退出。会话关闭时立即移除——即使在进程被终止前的瞬间也不例外。不留任何残影。
  • 安全兜底。若会话异常终止(崩溃、合盖),它会在大约十分钟没有心跳后自动消失。不会留下过期的幽灵会话。

三个工具

你几乎不需要直接呼叫这些工具——只需用自然语言与智能体交谈,它会选择合适的工具。这里故意没有 session_start 工具:注册是隐式完成的。

session_list — 查看还有谁在这里

列出项目中其他活跃会话及各会话的当前焦点。在对话开始时和进行重大变更前运行它。

# 直接用自然语言询问

"Is anyone else working on this project right now?"

"Before I touch the auth module — is another session already on it?"

session_update — 声明你正在处理的内容

声明本会话的当前焦点,让其他所有会话可见。在开始或切换任务时调用。

"I'm working on the payments flow now — let the other sessions know."

"Update my focus: refactoring the auth module."

session_end — 清除你的感知状态

显式结束本会话的感知状态。通常无需手动调用——关闭会话会自动完成这一操作。

"I'm done here — end my session presence."

项目范围限定

默认情况下, session_list 仅显示与当前目录关联项目中的会话——因为这才是工作真正发生冲突的地方。在五个不同代码库中度过的繁忙下午不会变成噪音。

  • 默认:仅显示当前项目中的会话。
  • 未关联项目?回退到显示你所在组织中的所有会话。
  • 想要全局视图?请求查看组织中的所有会话以扩展视野。

建议性,而非强制性

感知机制是门上的"忙碌"标志,而非上锁的钥匙。它从不阻止你执行任何操作——只是确保你不会在毫不知情的情况下操作。你始终掌控全局,基于完整信息而非残缺信息做出决策。

推荐工作流

对话开始时

询问"还有谁在处理这个项目?"——就像进办公室找位置前先环顾四周一样。如果某个会话已经在处理你准备动手的模块,就换一个任务。

切换任务时

用一句话说明你要切换到什么——"我现在在处理计费流程"——让其他所有会话都能看到并绕开。

Session Presence 已包含在当前 ContextForge MCP 版本中,支持 Claude Code、Cursor 和 Copilot。更新到最新版本即可启用——无需额外配置。

让智能体自动检查

感知看板本身是完全自动的——但智能体只有在真正查阅看板时才能从中受益。你可以每次手动询问,也可以添加项目规则让每个会话自行检查。一条命令即可完成:

npx contextforge-mcp init

这会在项目的 CLAUDE.md 中追加一个 Session Presence — Coordination Rules 章节(Cursor 用户对应 .cursorrules),指示智能体:

  • 对话开始时检查。在执行任何操作前调用 session_list,并告知你还有谁在线。
  • 重大变更前再次检查。若另一个会话的焦点与它即将修改的区域重叠,它会警告你并由你决定——建议性的,从不强制。
  • 宣告自身焦点。每次切换任务时更新一行焦点描述,让其他会话能够绕开。

之前已运行过 init? 再次运行——它只会追加缺失的章节,不会修改文件中的其他内容。你现有的规则和编辑会完整保留。