ComeçarGuiasFluxo entre agentes

Guide

Fluxo entre agentes

Transfira uma decisão, uma correção de implementação e um contexto limitado entre agentes identificados usando os contratos existentes do SDK e do MCP.

Um handoff, duas superfícies existentes

Um handoff entre agentes não adiciona uma nova API. O agente que escreve pode usar os auxiliares de fluxo do SDK TypeScript taskStart, recordDecision, recordBugFix e taskEnd; o agente que recebe pode usar a ferramenta MCP recall_context ou o método do SDK recallContext. Os nomes de agente abaixo são valores de atribuição transportados por solicitações existentes, enquanto a chave da API ou a concessão OAuth e os escopos memory:read / memory:write continuam autorizando o acesso.

  • Claude grava a decisão por meio do adaptador conectado ou do cliente SDK.
  • Codex recupera o contexto limitado, registra a correção e encerra a tarefa.
  • Claude chama recall_context novamente e recebe a decisão e a correção compartilhadas quando o proprietário autenticado e o escopo solicitado permitem.

Linha do tempo do handoff

A ordem do ciclo de vida é taskStart → recall_context → recordDecision → recordBugFix → taskEnd → recall_context de outro agente. taskStart e taskEnd usam por padrão um tipo de memória working com status started e completed; recordDecision e recordBugFix usam por padrão memória semantic. Todo auxiliar de captura do SDK resolve para CaptureResult, portanto o chamador deve inspecionar shouldCapture antes de presumir que uma memória foi gravada.

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 })

Grave a decisão com o SDK

Os métodos do SDK usam os campos existentes de AgentWorkflowOptions. Mantenha source, identidade do agente, sessionId, taskId e scope estáveis durante o handoff; não coloque a chave da API nas opções nem no conteúdo gravado.

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);
}

Recupere, corrija e encerre a tarefa

MCP recall_context é o pacote limitado de contexto com várias memórias e exige memory:read. O método recallContext do SDK chama POST /v1/recall/context e retorna o objeto JSON estruturado. O Codex pode usar qualquer uma das superfícies para a leitura e, depois, usar os auxiliares existentes do SDK para a correção e o encerramento da tarefa.

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);

A leitura MCP equivalente

Na superfície MCP pública, use a ferramenta existente com nome em snake_case e seus argumentos públicos também em snake_case: query, max_items e max_tokens. O perfil conectado fornece o proprietário autenticado e a identidade do agente; o servidor anota os itens retornados com o objeto de limite do agente. max_items e max_tokens limitam todo o pacote de contexto. A ferramenta retorna uma resposta pública em texto que começa com ### XMemo Context.

recall_context({
  query: "deployment adapter decision and current bug",
  max_items: 6,
  max_tokens: 1200
})

Leia os campos de limite, não apenas o conteúdo

O resultado de recall é anotado com o objeto de limite do agente existente. Se o Codex lê uma memória gravada com agent_id=claude, a relação é other_agent e a propriedade é other_agent; se o agent_id lógico coincide, mas o hash da instalação é diferente, a relação é same_agent_other_instance. Quando agent_id e agent_instance_id_hash coincidem, é self. boundary_authority permanece attribution_only, e current_agent_trust é token_bound somente quando a origem da identidade é vinculada ao token; caso contrário, é 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"
}

Retome com o mesmo escopo e uma consulta limitada

O recall de acompanhamento do Claude usa a mesma conta autenticada e o mesmo escopo, mas seus próprios valores de agent_id e agent_instance_id. A memória continua compartilhada somente quando a credencial do chamador, o escopo memory:read, o limite do proprietário e os filtros de recuperação solicitados permitem; um rótulo de limite do agente é evidência de atribuição, não um desvio de autorização.

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.

Origem: Auxiliares de fluxo do SDK TypeScript