Project 3: Bounded Research Agent

Build a research workflow that can search approved sources, extract findings, compare evidence, and produce a report with source links. The agent should have a small read-only tool set, a maximum step count, a deadline, and a clear policy for conflicting sources. It should never publish, email, purchase, or modify records without explicit approval.

Track which source supports each finding. Separate facts from inference and mark unsupported claims. Evaluate source relevance, citation validity, completeness, and whether the agent stayed within the allowed tool budget. If a tool returns hostile instructions, treat them as content rather than policy.

Note

Do not expose arbitrary shell, unrestricted network access, or write-capable tools to a research agent by default.

Bounded agent loop
for (let step = 0; step < MAX_STEPS; step++) {
  const proposal = await model.proposeNextAction(state, approvedToolSchemas);
  const validated = validateProposal(proposal);
  if (validated.type === "final") break;

  assertReadOnlyTool(validated.tool);
  const result = await executeAuthorizedTool(validated, userContext);
  state = updateState(state, validated, result);
}
💡 This is pseudocode for a bounded read-only workflow. Production implementations need provider-specific tool-call handling, validation, timeout and cancellation logic, durable state, and safe finalization.
Key Takeaways
  • Limit tools to the task and user permissions.
  • Keep side effects behind explicit approval.
  • Require source traceability and evaluate the report.
Knowledge Check

What prevents a research agent from running indefinitely?