Eine Übergabe, zwei bestehende Oberflächen
Eine agentenübergreifende Übergabe fügt keine neue API hinzu. Der schreibende Agent kann die Hilfsprogramme des TypeScript-SDK-Workflows taskStart, recordDecision, recordBugFix und taskEnd verwenden; der empfangende Agent kann das MCP-Tool recall_context oder die SDK-Methode recallContext nutzen. Die nachfolgenden Agentennamen sind Zuordnungswerte, die in bestehenden Anfragen übertragen werden, während der API-Schlüssel oder die OAuth-Genehmigung sowie die Berechtigungsbereiche memory:read / memory:write weiterhin den Zugriff autorisieren.
- Claude schreibt die Entscheidung über seinen verbundenen Adapter oder SDK-Client.
- Codex ruft den begrenzten Kontext ab, zeichnet die Korrektur auf und schließt seine Aufgabe ab.
- Claude ruft recall_context erneut auf und erhält die geteilte Entscheidung und Korrektur, sofern der authentifizierte Eigentümer und der angeforderte Bereich dies gestatten.
Die Übergabe-Zeitleiste
Die Lebenszyklus-Reihenfolge ist taskStart → recall_context → recordDecision → recordBugFix → taskEnd → recall_context eines anderen Agenten. taskStart und taskEnd werden standardmäßig auf einen working-Speichertyp mit dem Status started und completed gesetzt; recordDecision und recordBugFix verwenden standardmäßig semantic-Speicher. Jeder SDK-Erfassungshelfer wird zu CaptureResult aufgelöst, sodass ein Aufrufer shouldCapture prüfen muss, bevor er davon ausgeht, dass ein Speicher geschrieben wurde.
1. Claude: client.taskStart(...)
2. Codex: recall_context({ query, max_items, max_tokens })
3. Claude: client.recordDecision(...)
4. Codex: client.recordBugFix(...)
5. Codex: client.taskEnd(...)
6. Claude: recall_context({ query, max_items, max_tokens })Entscheidung mit dem SDK schreiben
Die SDK-Methoden verwenden die vorhandenen AgentWorkflowOptions-Felder. Behalten Sie source, agentId und agentInstanceId stabil, damit die Herkunftszuordnung erhalten bleibt.
const scope = 'memory-os';
const sessionId = 'handoff-session-1';
const taskId = 'handoff-1';
await claude.taskStart('Review the deployment adapter', {
source: 'claude', sessionId, taskId, scope,
});
const decision = await claude.recordDecision(
'Use the hosted network MCP transport for remote agents.',
{ source: 'claude', sessionId, taskId, scope },
);
if (!decision.shouldCapture) {
throw new Error('Decision was not captured: ' + decision.reason);
}Kontext abrufen, korrigieren und Aufgabe abschließen
MCP recall_context ist das begrenzte Multi-Memory-Kontextpaket und erfordert memory:read. Die recallContext-Methode des SDK ruft POST /v1/recall/context auf und gibt das strukturierte JSON-Objekt zurück. Codex kann jede der beiden Oberflächen für den Lesevorgang nutzen und anschließend die vorhandenen SDK-Hilfsprogramme für die Fehlerkorrektur und den Aufgabenabschluss verwenden.
const context = await codex.recallContext(
'deployment adapter decision and current bug',
{ scope, maxItems: 6, maxTokens: 1200, preferWorking: true },
);
await codex.recordBugFix(
'Fixed streamable-http token identity fallback.',
{ source: 'codex', sessionId, taskId, scope },
);
await codex.taskEnd(
'Deployment adapter fix completed for handoff.',
{ source: 'codex', sessionId, taskId, scope },
);
console.log(context.version, context.items);Der äquivalente MCP-Lesevorgang
Verwenden Sie auf der öffentlichen MCP-Oberfläche das vorhandene Tool mit Unterstrich und seine öffentlichen snake_case-Argumente: query, max_items und max_tokens. Das verbundene Profil stellt den authentifizierten Eigentümer und die Agentenidentität bereit; der Server versieht zurückgegebene Elemente mit dem Agentengrenzen-Objekt. max_items und max_tokens begrenzen das gesamte Kontextpaket. Das Tool gibt eine öffentliche Textantwort zurück, die mit ### XMemo Context beginnt.
recall_context({
query: "deployment adapter decision and current bug",
max_items: 6,
max_tokens: 1200
})Die Grenzfelder lesen, nicht nur den Inhalt
Das Abrufergebnis wird mit dem bestehenden Agentengrenzen-Objekt annotiert. Wenn Codex einen mit agent_id=claude geschriebenen Speicher liest, ist die Beziehung other_agent und die Eigentümerschaft other_agent; wenn die logische agent_id übereinstimmt, aber der Installations-Hash abweicht, lautet die Beziehung same_agent_other_instance. Stimmen sowohl agent_id als auch agent_instance_id_hash überein, ist es self. boundary_authority bleibt attribution_only, und current_agent_trust ist token_bound nur dann, wenn die Identitätsquelle token-gebunden ist; andernfalls lautet sie client_asserted.
{
"relation": "other_agent",
"ownership": "other_agent",
"current_agent_id": "codex",
"current_agent_trust": "client_asserted",
"boundary_authority": "attribution_only",
"memory_agent_id": "claude",
"explanation": "memory agent_id differs from this caller"
}Mit demselben Bereich und einer begrenzten Abfrage fortfahren
Claudes nachfolgender Abruf verwendet dasselbe authentifizierte Konto und denselben Bereich, jedoch seine eigenen agent_id- und agent_instance_id-Werte. Der Speicher bleibt nur dort geteilt, wo die Anmeldedaten des Aufrufers, der Bereich memory:read, die Eigentümergrenze und die angeforderten Abruffilter dies zulassen; eine Agentengrenzen-Bezeichnung ist ein Zuordnungsnachweis, keine Autorisierungsumgehung.
recall_context({
query: "deployment adapter decision, Codex fix, and handoff status",
max_items: 6,
max_tokens: 1200
})
# Inspect the returned context and boundary summary before continuing.