自动记忆 / 01

用当前问题召回,在回答完成后写入。

用户还没有提出问题时,系统并不知道这一轮该召回什么。自动接入会先用新问题检索并注入相关记忆,再让 Agent 基于这些上下文回答;回答完成后,才把用户消息与助手最终回复作为两个不同主体分别写入。

02 / 单轮生命周期

链路从这一轮的新问题开始。

“自动”指宿主系统负责在正确时机触发生命周期,而不是让 TMCRA 提前猜测问题,也不代表仅连接一个 MCP Server 就能旁观所有对话。

  1. 01
    提问

    用户提交这一轮问题

    这条问题成为召回查询;尚未完成的本轮内容不会提前写入。

  2. 02
    召回 + 回答

    召回证据,经安全边界处理后注入

    宿主从获准的记忆范围召回内容,把有界证据作为不可信系统上下文注入,再调用原有模型或 Agent。

  3. 03
    写入

    完整轮次在回答后持久化

    用户问题与助手最终回复分别写入项目共享记忆,并保留 role、Agent、Session 与来源信息。

03 / 多 Agent 记忆

共享项目上下文,同时保留发言主体。

同一项目里的专业 Agent 不应被切成互不相关的项目图。它们共享同一个项目边界,但各自保留会话 Session,每条记录也保留明确的主体归属。

01召回

用户全局记忆

可跨项目使用的稳定用户信息与偏好。自动轮次写入不会把项目对话塞进这一层。

02召回 + 写入

项目共享记忆

默认的协作边界。规划、编码、审查等不同 Agent 使用同一个项目 Scope,因此能够召回彼此的进度。

03可选召回

当前 Agent 私有记忆

默认关闭;当前 Python 与 JavaScript/TypeScript 生命周期封装只会从这一层召回。自动写入仍然落在项目共享 Scope。

SCOPE 不等于 SESSION

同一个项目边界,不同的 Agent 会话。

同一项目中的 Agent 应使用同一个稳定项目标识,不同对话则保留不同 Session ID。不要把 Agent 身份拼进项目 Scope 标识,否则会破坏跨 Agent 召回。

actor.provenance
{
  "role": "user",
  "metadata": { "actor_role": "user", "target_agent_id": "planner" }
}
{
  "role": "assistant",
  "metadata": { "actor_role": "assistant", "agent_id": "planner" }
}

04 / 接入路径

按宿主真正提供的生命周期接入。

原生适配器连接宿主事件;SDK 封装包裹你自己的模型调用;普通 MCP 仍是显式工具层,除非宿主另行提供生命周期 Hook。

01

NATIVE HOOKS · PILOT

OpenClaw

通过 OpenClaw 插件生命周期完成自动召回与采集。

before_prompt_build

使用当前问题召回用户全局与项目共享证据,并在模型执行前返回有界的 prependSystemContext。

agent_end

成功且未中止的回答结束后,把用户问题和助手最终回复作为两条独立消息放入队列。

gateway_start / gateway_stop

处理仅文件所有者可读的持久队列,避免临时 API 故障丢失已完成轮次。

openclaw.config
{
  plugins: {
    entries: {
      "tmcra-openclaw": {
        enabled: true,
        hooks: {
          allowConversationAccess: true,
          allowPromptInjection: true
        },
        config: {
          sharedProjectId: "checkout-service",
          includeGlobalScope: true
        }
      }
    }
  }
}

同一工作流中的所有 Agent 应使用相同的 sharedProjectId。OpenClaw 的 agentId 不参与项目 Scope 计算,但会进入派生 Session 与消息归属。未配置 sharedProjectId 时,适配器依次使用工作区或聊天身份。

管理员必须明确授权读取对话与注入 Prompt。凭据只能保存在受保护的设备配置或 Gateway 环境中,不会暴露为模型工具。

02

MEMORY PROVIDER · PILOT

Hermes Agent

通过当前 Hermes MemoryProvider 合同接入自动记忆。

prefetch / queue_prefetch

召回当前的精确问题;队列形式只预热同一查询的缓存,不改变召回语义。

sync_turn

写入已完成的主对话轮次。同一项目的主 Agent 共享 Scope,但各自保留不同 Session。

on_delegation

把父 Agent 的委派请求和子 Agent 的执行结果都记录为助手侧工作,同时区分父、子 Agent;两者都不会被误标成用户陈述。

hermes.setup
python -m pip install https://tmcra.com/downloads/integrations/tmcra_hermes_plugin-0.4.1-py3-none-any.whl
tmcra-hermes install
hermes memory setup
tmcra-hermes status

协作 Agent 应使用同一个稳定的 TMCRA_PROJECT_ID、项目根目录或工作区值。Hermes 会据此派生共享项目 Scope,同时把 agent_identity 用于各自的不透明 Session ID 与主体来源。

该 Provider 以单选方式启用,不修改 Hermes 核心。普通设备授权可以提供受保护凭据;本地待写队列含有对话内容,必须限制为文件所有者可读。

03

OPTIONAL WRAPPER · PREVIEW

Python SDK

在不替换 Agent Runtime 的前提下,包裹同步或异步模型调用。

由封装器控制单轮顺序

SyncMemoryLifecycle 与 AsyncMemoryLifecycle 会先执行 prepare_turn,通过 PreparedTurn.model_messages() 交付安全边界内的上下文,并且只在拿到非空助手回复后执行 commit_turn。

  • 必填的 project_scope 是共享写入边界。
  • 配置 global_scope 后会优先召回,但不会自动写入。
  • agent_private_scope 可选且只用于召回;启用时必须同时提供 agent_id。
  • 默认等待写入 Job 结束并确认成功。
python · tmcra-client
from tmcra_client import (
    AutomaticLifecycleConfig,
    SyncClient,
    SyncMemoryLifecycle,
)

with SyncClient(BASE_URL, api_key=access_token) as client:
    memory = SyncMemoryLifecycle(client, AutomaticLifecycleConfig(
        project_scope="project_checkout",
        global_scope="user_global",
        agent_id="planner",
        agent_metadata={"specialty": "planning"},
        # agent_private_scope="agent_planner_private",  # opt in
    ))
    turn = memory.run_turn(
        user_text,
        lambda prepared: call_model(prepared.model_messages()),
        session_id=session_id,
    )

python -m pip install https://tmcra.com/downloads/integrations/tmcra_client-0.5.0-py3-none-any.whl

04

OPTIONAL WRAPPER · PREVIEW

JavaScript / TypeScript SDK

同一个编译包既可在 JavaScript 中直接运行,也向 TypeScript 提供类型声明。

TMCRAMemoryLifecycle

prepareTurn 会并行召回已配置的范围,并返回 modelMessages();commitTurn 把两个对话主体以 read-your-writes 一致性写入 projectScope;runTurn 则把两者连接在你的回答回调前后。

  • 同一项目的所有 Agent 使用同一个 projectScope。
  • 在 agentMetadata 中提供 agent_id 与分工信息;它用于标记来源,不会切分项目。
  • agentPrivateScope 仅在显式启用时参与召回;自动写入仍然共享。
javascript / typescript · @tmcra/typescript
import {
  TMCRAClient,
  TMCRAMemoryLifecycle,
} from "@tmcra/typescript";

const client = new TMCRAClient({ baseUrl, apiKey: accessToken });
const memory = new TMCRAMemoryLifecycle(client, {
  projectScope: "project_checkout",
  globalScope: "user_global",
  agentMetadata: { agent_id: "coder", specialty: "implementation" },
  // agentPrivateScope: "agent_coder_private", // opt in
});

const turn = await memory.runTurn(
  userText,
  (prepared) => callModel(prepared.modelMessages()),
  { sessionId },
);

npm install https://tmcra.com/downloads/integrations/tmcra-typescript-0.5.0.tgz

05

EXPLICIT MCP / OPTIONAL CODEX HOOKS · PREVIEW

MCP and Codex Hooks

选择显式记忆工具,或使用能够自动触发生命周期的宿主 Hook。

默认

普通 MCP 是显式调用

Server 提供 tmcra_recall、tmcra_ingest、tmcra_get_job 与 tmcra_wait_job。宿主必须主动在回答前调用召回、回答后调用写入;仅连接 stdio 无法自动观察宿主对话。

可选

Codex Hooks 自动触发生命周期

codex-hooks 模式复用现有 TMCRA Codex 插件。UserPromptSubmit 负责召回与注入,Stop 负责分别采集用户与助手记录。用户仍需重启 Codex、检查 /hooks 并主动授予信任。

tmcra-mcp-setup
python -m pip install https://tmcra.com/downloads/integrations/tmcra_mcp_server-0.4.0-py3-none-any.whl

# Generic MCP: explicit tools
tmcra-mcp-setup install --mode explicit
tmcra-mcp-setup status --mode explicit

# Codex: optional automatic lifecycle Hooks
tmcra-mcp-setup install --mode codex-hooks
tmcra-mcp-setup status --mode codex-hooks

多 Agent MCP 宿主应传入相同的共享 Scope、不同的 session_id、原样保留的消息 role,以及可选但真实的 agent_id。宿主没有提供身份时,普通 MCP 不会凭空编造 Agent。

查看完整 Codex 安装指南
06

VERIFIED ARTIFACTS

下载已验收的接入包

这些文件与干净环境安装和打包验收使用的是同一批制品;安装前请核对 SHA-256。

源码分发包和机器可读 manifest 也保存在同一目录,便于复现部署。

05 / 验收检查

验收实际行为,而不只是“已安装”。

  1. 01

    让 Agent A 写入一个唯一事实,并等待写入完成。

  2. 02

    在同一项目中通过 Agent B 提出相关的新问题,并确认召回发生在模型调用之前。

  3. 03

    检查证据:Agent B 应能看到 Agent A 的进度,同时 role、agent_id、Session 与来源仍可区分。

  4. 04

    确认 Agent 私有 Scope 只有在显式配置为召回范围后才可见。

  5. 05

    短暂中断 API,确认适配器能够通过 Job 或持久队列恢复,且不会重复写入同一轮次。

06 / 接入

先把一条真实工作流完整跑通。

提交宿主平台、Agent 数量、项目边界规则和预期流量,我们会据此评估接入路径与最小授权范围。

申请接入试用