Was this page helpful?
Outcomes é um recurso de Pré-visualização de Pesquisa. Solicite acesso para experimentá-lo.
O outcome eleva uma sessão de conversa para trabalho. Você define como deve ser o resultado final e como medir a qualidade. O agente trabalha em direção a esse objetivo, autoavaliando-se e iterando até que o resultado seja alcançado.
Quando você define um resultado, o harness provisiona automaticamente um grader para avaliar o artefato em relação a uma rubrica. Ele utiliza uma janela de contexto separada para evitar ser influenciado pelas escolhas de implementação do agente principal.
O grader retorna um detalhamento por critério: seja a confirmação de que o artefato satisfaz a rubrica, ou as lacunas específicas entre o trabalho atual e os requisitos. Esse feedback é repassado ao agente para a próxima iteração.
Todas as solicitações da API de Managed Agents requerem o cabeçalho beta managed-agents-2026-04-01. Os recursos de pré-visualização de pesquisa requerem adicionalmente managed-agents-2026-04-01-research-preview. O SDK define esses cabeçalhos beta automaticamente.
Uma rubrica é um documento markdown que descreve a pontuação por critério. A rubrica é obrigatória.
Exemplo de rubrica:
# DCF Model Rubric
## Revenue Projections
- Uses historical revenue data from the last 5 fiscal years
- Projects revenue for at least 5 years forward
- Growth rate assumptions are explicitly stated and reasonable
## Cost Structure
- COGS and operating expenses are modeled separately
- Margins are consistent with historical trends or deviations are justified
## Discount Rate
- WACC is calculated with stated assumptions for cost of equity and cost of debt
- Beta, risk-free rate, and equity risk premium are sourced or justified
## Terminal Value
- Uses either perpetuity growth or exit multiple method (stated which)
- Terminal growth rate does not exceed long-term GDP growth
## Output Quality
- All figures are in a single .xlsx file with clearly labeled sheets
- Key assumptions are on a separate "Assumptions" sheet
- Sensitivity analysis on WACC and terminal growth rate is includedPasse a rubrica como texto inline em user.define_outcome (mostrado na próxima seção), ou faça upload via Files API para reutilização entre sessões:
Requer o cabeçalho beta files-api-2025-04-14.
Após criar uma sessão, envie um evento user.define_outcome. O agente começa a trabalhar imediatamente; nenhum evento de mensagem de usuário adicional é necessário.
O progresso em uma sessão orientada a resultados é exibido no stream de eventos.
agent.* (mensagens, uso de ferramentas, etc.) mostram o progresso em direção ao resultado.span.outcome_evaluation_* são emitidos apenas para sessões orientadas a resultados e mostram o número de loops de iteração e o processo de feedback do grader.user.message para uma sessão orientada a resultados, para direcionar o trabalho do agente conforme ele avança, mas esses não são tão necessários; o agente sabe que deve trabalhar até esgotar suas iterações ou alcançar o resultado.user.interrupt pausará o trabalho no resultado atual e marcará o span.outcome_evaluation_end.result como interrupted, permitindo que você inicie um novo resultado.Apenas um resultado é suportado por vez, mas você pode encadear resultados em sequência. Para fazer isso, envie um novo evento user.define_outcome após o evento terminal do resultado anterior.
Este é o evento que você envia para iniciar um resultado. Ele é ecoado de volta no recebimento, incluindo um timestamp processed_at e outcome_id.
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": { "type": "file", "file_id": "file_01..." },
"max_iterations": 5
}Emitido assim que o grader inicia uma avaliação sobre um loop de iteração. O campo iteration é um contador de revisão com índice 0: 0 é a primeira avaliação, 1 é a reavaliação após a primeira revisão, e assim por diante.
{
"type": "span.outcome_evaluation_start",
"id": "sevt_01def...",
"outcome_id": "outc_01a...",
"iteration": 0,
"processed_at": "2026-03-25T14:01:45Z"
}Heartbeat emitido enquanto o grader está em execução. O raciocínio interno do grader é opaco: você vê que ele está trabalhando, não o que está pensando.
{
"type": "span.outcome_evaluation_ongoing",
"id": "sevt_01ghi...",
"outcome_id": "outc_01a...",
"processed_at": "2026-03-25T14:02:10Z"
}Emitido após o grader terminar de avaliar uma iteração. O campo result indica o que acontece a seguir.
| Resultado | Próximo |
|---|---|
satisfied | A sessão transita para idle. |
needs_revision | O agente inicia um novo ciclo de iteração. |
max_iterations_reached | Nenhum ciclo de avaliação adicional. O agente pode executar uma revisão final antes de a sessão transitar para idle. |
failed | A sessão transita para idle. Retornado quando a rubrica fundamentalmente não corresponde à tarefa, por exemplo, se a descrição e a rubrica se contradizem. |
interrupted | Emitido apenas se outcome_evaluation_start já foi disparado antes da interrupção. |
{
"type": "span.outcome_evaluation_end",
"id": "sevt_01jkl...",
"outcome_evaluation_start_id": "sevt_01def...",
"outcome_id": "outc_01a...",
"result": "satisfied",
"explanation": "All 12 criteria met: revenue projections use 5 years of historical data, WACC assumptions are stated, sensitivity table is included...",
"iteration": 0,
"usage": {
"input_tokens": 2400,
"output_tokens": 350,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 1800
},
"processed_at": "2026-03-25T14:03:00Z"
}Você pode escutar no stream de eventos por span.outcome_evaluation_end, ou fazer polling em GET /v1/sessions/:id e ler outcome_evaluations[].result:
O agente grava arquivos de saída em /mnt/session/outputs/ dentro do contêiner. Assim que a sessão estiver ociosa, busque-os via Files API com escopo para a sessão:
rubric=$(curl -fsSL https://api.anthropic.com/v1/files \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01,files-api-2025-04-14" \
-F file=@/path/to/pr_review_rubric.md)
rubric_id=$(jq -r '.id' <<<"$rubric")
printf 'Uploaded rubric: %s\n' "$rubric_id"# Create a session
session=$(curl -fsSL https://api.anthropic.com/v1/sessions \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01-research-preview" \
--json @- <<EOF
{
"agent": "$agent_id",
"environment_id": "$environment_id",
"title": "Financial analysis on Costco"
}
EOF
)
session_id=$(jq -r '.id' <<<"$session")
# Define the outcome — agent starts working on receipt
curl -fsSL "https://api.anthropic.com/v1/sessions/$session_id/events" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01-research-preview" \
--json @- >/dev/null <<EOF
{
"events": [
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": {"type": "text", "content": "# DCF Model Rubric\n..."},
"max_iterations": 5
}
]
}
EOF
# or: "rubric": {"type": "file", "file_id": "$rubric_id"}
# "max_iterations" is optional; default 3, max 20session=$(curl -fsSL "https://api.anthropic.com/v1/sessions/$session_id" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01-research-preview")
jq -r '.outcome_evaluations[] | "\(.outcome_id): \(.result)"' <<<"$session"
# outc_01a...: satisfied# List files produced by this session
curl -fsSL "https://api.anthropic.com/v1/files?scope_id=$session_id" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: files-api-2025-04-14,managed-agents-2026-04-01-research-preview" \
| jq '.data[] | {id, filename, size_bytes}'
# Download by file_id
curl -fsSL "https://api.anthropic.com/v1/files/$file_id/content" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: files-api-2025-04-14" \
-o costco_dcf.xlsx