Person to Brief AF [](#early-preview)
August 12, 2026 · View on GitHub
Person to Brief AF 
Adaptive person intelligence for marketing, inbound, and outreach teams, built on AgentField
Early Preview · APIs may change. Feedback welcome.
One-Call DX · Output · How It Works · Quick Start · Configuration
Give it only a person's name and company. Person to Brief AF resolves the right identity, decides what matters for that person, searches public professional sources in parallel, fills evidence gaps, verifies claims, and returns an organized marketing brief plus a polished PDF with clickable citations.
This is an adaptive intelligence API for inbound qualification and outreach preparation—not a chat wrapper.
Fast runs can land in around 20 seconds; deeper searches take longer. That makes the node useful upstream of time-sensitive workflows: just-in-time personalized marketing collateral, inbound lead handoff, meeting prep, live deal support, and downstream brochure or campaign generation.
One-Call DX
af call person-to-brief-af.research_person \
--in '{"person":"Patrick Collison","context":"Stripe"}'
Prefer raw HTTP:
curl -X POST http://localhost:8080/api/v1/execute/async/person-to-brief-af.research_person \
-H "Content-Type: application/json" \
-d @sample_payload.json
What You Get Back
The PDF path is intentionally the first response attribute:
{
"pdf_path": "/absolute/path/output/pdf/patrick-collison-research-brief-<timestamp>.pdf",
"research": {
"status": "succeeded",
"brief": {
"canonical_name": "Patrick Collison",
"professional_identity": "...",
"executive_summary": "...",
"background": ["..."],
"likely_priorities": ["..."],
"recent_signals": ["..."],
"conversation_starters": ["..."],
"messaging_angles": ["..."],
"cautions": ["..."]
},
"research_themes": ["..."],
"sources": [{"title": "...", "url": "https://..."}],
"confidence": "confident"
}
}
Citation markers inside the PDF link directly to their original sources. Its source appendix prints the complete URLs, and every report links to agentfield.ai and this GitHub repository.
Open the Patrick Collison / Stripe sample brief
How It Works
Resolve → Plan → Research in parallel → Verify → Fill gaps → Synthesize → PDF
- Identity resolution plans targeted searches and independently tries to disprove the match.
- Ambiguous names return
needs_identity_reviewinstead of a guessed profile. - A planner chooses 3–5 research themes dynamically from the resolved identity and company.
- Theme researchers run concurrently; each separately extracts, scores, and verifies claims.
- Weak coverage can trigger one focused recursive gap search.
- Profile, public signals, and outreach guidance are synthesized in parallel.
- A deterministic renderer produces the cited PDF.
Every cross-reasoner call flows through the AgentField control plane, producing an observable execution DAG and verifiable workflow chain.
Quick Start
Two keys are required:
EXA_API_KEYfor public-web search and evidence retrieval.OPENROUTER_API_KEYfor MiniMax M2.7 served by Groq.
git clone https://github.com/Agent-Field/person-to-brief-af.git
cd person-to-brief-af
cp .env.example .env
# Add EXA_API_KEY and OPENROUTER_API_KEY to .env
docker compose up --build -d
Run the included Stripe CEO example:
EXEC_ID=$(curl -sS -X POST \
http://localhost:8080/api/v1/execute/async/person-to-brief-af.research_person \
-H 'Content-Type: application/json' \
-d @sample_payload.json | jq -r '.execution_id')
while :; do
RESULT=$(curl -sS "http://localhost:8080/api/v1/executions/$EXEC_ID")
STATUS=$(echo "$RESULT" | jq -r '.status')
case "$STATUS" in
succeeded) echo "$RESULT" | jq '.result'; break ;;
failed) echo "$RESULT" | jq '.'; exit 1 ;;
*) sleep 2 ;;
esac
done
Open localhost:8080/ui to watch the adaptive reasoner graph execute.
Search backend: Exa is required today. Want Tavily, Brave, Serper, or another provider? Open a PR implementing the same
SourceItemcontract. Additional search backends are especially welcome.
Model Routing
The default is openrouter/minimax/minimax-m2.7, hard-pinned to Groq through OpenRouter with fallbacks disabled:
{"provider": {"only": ["groq"], "allow_fallbacks": False}}
An explicit per-request model overrides that routing policy.
Input
Only two values are needed:
{
"input": {
"person": "Full Name",
"context": "Company"
}
}
Optional controls: team_goal, max_themes, and model.
Configuration
| Variable | Required | Default | Purpose |
|---|---|---|---|
EXA_API_KEY | Yes | — | Public-web search and evidence retrieval |
OPENROUTER_API_KEY | Yes | — | MiniMax M2.7 access through Groq |
AI_MODEL | No | openrouter/minimax/minimax-m2.7 | Default reasoning model |
AGENT_NODE_ID | No | person-to-brief-af | AgentField node ID |
OUTPUT_RESPONSE_ROOT | No | Project output/ | Host-visible PDF path |
Responsible Scope
Person to Brief AF uses public professional information for respectful marketing preparation. It filters private contact details, home addresses, family information, health data, compensation details, and inferred sensitive traits.
Human-review time-sensitive claims before outreach, and delete reports according to your team's data-retention policy.
Development
python3 -m unittest discover -s tests -v
python3 -m py_compile main.py reasoners/*.py
docker compose config
Search-provider adapters are a good first contribution: preserve the SourceItem shape, source provenance, clickable URLs, and identity-safety behavior while adding the provider behind the search skill contract.
Built on AgentField, open infrastructure for production AI agents. See AgentField on GitHub.