Replacing the research pile with a briefing agent
Turning a four-hour research scramble into an AI-native workflow
District 3's admissions process was exactly the kind of workflow that made me think "this wouldn't exist like this if built today." Each application starts with three to four hours of background research before anyone can decide on it. Briefbot does that research and hands people a cited brief, and the decision stays with them. I built it on my own after leaving District 3, in answer to Wealthsimple's AI Builder application prompt, which asked where AI should take on responsibility and where it should stop.
The Bottleneck
District 3 is a publicly funded startup incubator at Concordia University in Montreal, processing roughly 200 to 250 applications per month. When an application lands, an operations team member spends three to four hours on background research: scouring LinkedIn, checking founder websites, mapping the competitive landscape, looking for patents and press. They write hasty bullet-point notes and assign a program stream. Stream leads walk into panel meetings and spend their first ten minutes just orienting themselves.
The research is the bottleneck. It's tedious and inconsistent. Two people reviewing the same application can produce dramatically different notes. The quality of the research dictates the quality of the panel's decision, yet it's treated as rote admin work.
Today
With Briefbot
Application sits for days
Application triggers the agent immediately
3–4 hours of manual research
~15 minutes, ~$2.50 CAD in API costs
Hasty, inconsistent bullet-point notes
A 9-section cited brief with risk flags
Stream leads walk in cold
Stream leads arrive informed
Quality depends on who's on shift
Decisions stay with people
What I Built
I built an AI system that eliminates the research bottleneck. When a new application is submitted, an agent autonomously generates a research brief: founder profiles with verified sources, competitive analysis, SDG alignment assessment, stream classification with reasoning, a scored evaluation rubric, risk flags, and interview questions for both operations staff and panelists, all cited to real URLs or application fields.
The human can now open an application that's already deeply researched. Operations shifts from doing research to reviewing research. Stream leads arrive at panel meetings with context instead of spending their first ten minutes catching up.
Every brief has nine sections, and every claim in them cites a URL, an application field or a knowledge base document.
Synthesis
What the startup does, a confidence score and a plain-language recommendation
Founder Profiles
Each founder's background, with credibility signals and gaps
SDG Coherence
Whether the claimed UN Sustainable Development Goals match the work
Competitive Context
Comparable ventures, the market, and how this one differs
Evaluation Scorecard
Each rubric criterion, scored and justified with a confidence level
Stream Classification
Best-fit D3 program stream and stage, with reasoning
Key Risks
Red flags, gaps and concerns, ranked by severity
Questions for Ops
Gaps for the operations team to investigate before the interview
Questions for Panelists
What to probe during the interview itself
Design Philosophy: Sandbox, Not Script
Version 1 of this system was a scripted pipeline, a chain of prompts with predetermined steps and retry logic. It broke constantly. If a LinkedIn page was down or a founder didn't have a website, the whole chain derailed. Wrong output was worse than no output, because it created more work for the ops team to correct.
For version 2, I replaced choreography with agentic design. Instead of a task list, the agent gets an environment: knowledge to reference, tools to use, a goal to achieve, and guidelines for quality. Within that environment, the agent decides what to research, in what order, and how deep to go.
Knowledge
A /knowledge folder it reads at the start of every run: D3's mandate, evaluation rubric, stream definitions and SDG framework. This is what makes it D3's agent, not a generic research bot.
Tools
Thirteen tools it can call in any order: web research with fallbacks, self-assessment checkpoints, brief section emitters, review flags, mid-run questions for a human, and working memory.
Goal
Nine brief sections, all cited. It knows what done looks like and has full autonomy over how to get there.
Guidelines
A quality bar, not steps. Every factual claim needs a citation, confidence decides whether to proceed, retry or flag for review, and zero revisions is a sign of a first-pass report.
How the Agent Works
The agent operates in a loop of research, assessment, and output. It loads D3's knowledge base, reads the application, creates a research plan, then executes that plan phase by phase. After each phase, it self-assesses its confidence and decides whether to proceed, retry with different sources, or flag for human review.
Brief sections are emitted incrementally as the agent completes them, not batched at the end. This means the brief builds in real time, and observers can watch the research unfold through a live server-sent event stream.
The key design insight is the backtracking loop. After each self-assessment, the agent rereads everything it has already published and asks: "Does anything I've already published need updating in light of what I just learned?"
- Research a phase
- Self-assess its confidence
- Reread every section already published
If a new finding changes one, it revises that section, logs the reason, and carries on
That loop is how the system produces an honest, non-linear brief rather than a first-pass report.
One Real Run
The useful artifact is the audit trail: what the agent tried, what failed, when it asked for help, and the brief it produced.
This is the literal run log: fetch failures, escalations, self-assessments, emitted sections, and final review flags.
Nine cited sections, ranked flags, and a cleaner starting point for the ops team and panelists.
Research Resilience: The Fetch Cascade
To research a URL, the agent works down five strategies until one returns something.
- GitHub API · Structured profile data for github.com links: repos, stars, languages, bio
- Direct HTTP fetch · The page itself, with browser headers, meta tags and Next.js SSR/RSC data, plus its navigation links
- Agent-driven exploration · The tool returns the page's links, and the agent decides which sub-pages are worth fetching
- Jina Reader · Headless browser rendering for JavaScript-heavy sites that serve no content in their initial HTML
- Wayback Machine · The most recent archived snapshot of a dead or blocked site
- It records the gap and moves on, rather than fabricating
Even the research tool follows the sandbox pattern: the tool provides information, page content plus navigation links, and the agent provides judgment about which links are worth following.
Human-in-the-Loop: Two Touchpoints
The system has two distinct moments where humans interact with the agent's work, each designed for a different purpose.
During the run: phone-a-friend
When genuine ambiguity would change its research direction, it pauses and asks a human observer in the live agent log, then continues with the answer. If nobody replies within five minutes, it records the open question in the brief and carries on without making one up.
After the run: reviewer context
Flags are ranked by severity at the top of the brief. A reviewer adds corrections, missing context or policy clarification in a form, and a focused mini-agent rewrites the affected sections. Flags are marked resolved, and the brief evolves in place.
Where AI Stops
The AI handles all research, analysis, cross-referencing, and structured output. It is explicitly not responsible for any decision or communication. It cannot accept or reject an applicant, send an email, or route a startup to a stream lead.
The tools for these actions don't exist, so no amount of clever prompting can unlock them. The boundary is architectural rather than policy.
The decision that stays human is accept or reject after the pitch meeting. Institutional judgment, founder rapport, and cohort composition mix there in ways an AI can't replicate. The brief hands the panel a researched starting point; the judgment call stays with them.
Emergent Behaviour
Because the agent has tools, knowledge, and the freedom to reason about what it finds, it catches things that no scripted system would. The insider connection above was one example; there is no "check if the applicant works at D3" step in the system. Another from the same test run:
- Both founders' profiles
- GitHub commit history
- LinkedIn project dates
- DNS lookup failures
- App Store searches
The project was likely dormant, despite claims of a "working prototype used daily." Five independent data points, cross-referenced into one finding.
These are the kinds of findings that justify the agentic approach. A scripted pipeline would check predetermined sources in a predetermined order. The sandbox lets the agent follow leads, cross-reference across sources, and surface patterns that emerge from the data.
What Changed: V1 to V2
V1: scripted pipeline
V2: sandbox design
Gemini + Tavily, built with Codex
Claude Agent SDK, custom MCP server
Linear steps with retry logic
Reasons about its approach as it goes
Predetermined research order
Self-assesses after each research phase
Broke when reality didn't match the script
Backtracks when new findings contradict earlier work
Wrong output was worse than no output
A human in the loop at two touchpoints
Five lessons from V1 shaped V2.
Wrong output is worse than no output
Fabrication creates more work than gaps. The system must be honest about what it doesn't know.
Quality matters more than task completion
A task list isn't enough; the agent needs a target state. Finishing every step poorly is worse than flagging three as unresolvable.
Self-review loops are essential
Assess sufficiency before proceeding. If confidence is low, retry. If it's still low, flag for human review.
Domain knowledge is the differentiator
Without D3's rubric and stream definitions, the agent can't make meaningful assessments.
You can't scrape LinkedIn
V2 asks applicants for more profile URLs upfront, then uses the fetch cascade to get data from whatever sources are available.
What Breaks First at Scale
Trust calibration. The brief is good enough that ops might rubber-stamp instead of reviewing. The self-assessment loops and human review flags resist this, and the system tells you when it's uncertain. The stronger safeguard is organizational: keeping humans accountable for the decisions the system refuses to make.
Other scaling concerns include API cost management at 200+ briefs per month, rate-limiting from external sources like LinkedIn, and the need for a proper database as the file-based storage approach won't hold under concurrent load. The trust calibration problem interests me most because no code change fixes it. The system makes human oversight easier; it can't force anyone to exercise it.
Claude Agent SDK
Claude Sonnet 4.6
FastAPI + SSE
Real-time streaming backend
Vanilla JS + HTMX
Lightweight frontend
13 MCP Tools
Custom in-process server
~$2.50 CAD
Per brief in API costs
Docker
Deployed on Render
Where This Led
I had been circling this idea since 2022, when it became obvious that a lot of legacy workflows were about to look embarrassingly pre-AI. District 3's admissions research process was one of them. High-volume, repetitive, cognitively messy, and still dependent on humans to stitch together context from scattered sources. It was exactly the kind of system I wanted to rebuild, but not the kind of internal project you can casually decide to spin up on your own.
I kept thinking about that trust-calibration problem after Briefbot was done. At Saint Paul University I built an agent on the same pattern and made the question of who checks its work the centre of my research.
Situation
District 3 processes ~200–250 startup applications per month. Each requires 3–4 hours of manual background research that is tedious and inconsistent.
Task
Eliminate the research bottleneck while keeping humans in control of all accept/reject decisions.
Action
Built an autonomous AI agent (Claude Agent SDK + custom MCP server with 13 tools) using a sandbox architecture built around knowledge, tools, goal, and guidelines, with self-assessment loops, a 5-strategy research cascade, and human-in-the-loop at two touchpoints.
Result
Cited 15-minute briefs at ~$2.50 CAD instead of 3–4 hours of manual research, with flags for what it could not verify and cross-referencing that catches things no scripted system would.
A test run on Training Club, a side project of mine. Both flags are about me: it could not verify our prototype, and it caught that I had worked at District 3.