Research Completion
Finish deliberately. A provider stopping or a prose summary is not a committed research outcome.
Before finishing
- Check the current objective and any public success criteria.
- Resolve or explicitly preserve blockers. Do not claim that an approval-gated action ran.
- Close or mark remaining task branches appropriately. Do not start a broad new branch merely to deepen an already sufficient result.
- Save all evidence supporting the outcome — plus failed-attempt diagnostics — through
security-artifact-manifest / security-artifact-access and collect the resulting artifact IDs. Verify every ID: if a tool returns no artifactId, persistence failed — retry or finish blocked; never proceed as if the evidence is saved. Check persistedContentSource: an artifact persisted from manifest text alone (no workspace file content) is a summary stub, not the evidence bytes — treat it as unsaved and do not cite it.
- Call
update_research_state with the final branch dispositions, artifact-backed evidence summaries, best candidate answer, and any remaining blocker. This is an upsert: include changed entries, not a transcript rewrite. Never invent an artifact ID.
- Choose one outcome:
solved: a concrete answer — including a well-supported negative result such as "X is not vulnerable to Y" — is supported by durable evidence;
abstained: available evidence does not support an answer either way; state the null answer, what was attempted, and the limiting evidence gap;
blocked: authorization, approval, target, tool, or runtime state prevents completion.
Commit the outcome
Call finish_research exactly once with the best supported outcome. Solved outcomes need a concrete answer and evidence artifact IDs. Blocked outcomes need a concise remaining-uncertainty explanation. Confidence is a calibrated value from 0 to 1, not a benchmark score.
If the tool rejects the call, repair only the named fields or blocker and retry within the reported limit. Do not evade the gate in prose or begin unrelated exploration. If repairs are exhausted, stop as blocked.
A prose conclusion, empty response, or thought-only stop is not completion. The controller records it as a malformed terminal attempt and may issue one bounded recovery/wrap-up turn. Respond with the typed tool call; do not repeat the prose summary.
Hidden benchmark answers and scorer feedback are never research inputs. The terminal call records what the research agent committed; a separate product review or deterministic oracle decides whether it succeeded.
Near the budget limit
At a wrap-up checkpoint, choose among submitting the best supported result, abstaining, or performing one decisive remaining check. Before that check, upsert update_research_state with the current plan of record so an interruption leaves a durable resumable pause rather than a lost plan. Preserve open uncertainty and evidence provenance. Never spend the final budget on a new broad branch.