An agent that prepares your PR. You decide what sends.
The PRAPI Agent is a PR chief-of-staff for a multi-brand operator. It finds the queries worth answering, scores them against each of your brands, and drafts pitches in the right brand voice — then docks every draft for your review. It has no tool that can send. That's not a limitation; it's the point.
Prepare and surface. Never send.
One rule governs everything the agent does. It does all the labor up to the decision — finds, scores, drafts, dockets — and then it stops and hands the work to you. A pitch it prepares waits at the dock until you choose to send it through your own channel. The agent makes no editorial call about which pitch goes out, which angle wins, or which brand pitches. You do.
Enforced in code, not just the prompt
The prompt teaches the rule; the registry enforces it. The agent's tools are a curated allowlist of prepare-and-surface actions. A CI guard rejects any tool whose name even hints at sending — send, publish, dispatch, deliver, outbound. The agent is structurally incapable of acting autonomously.
Why it matters for PR
An agent that auto-sends produces template-feeling pitches journalists deprioritize, and the relationship is hard to recover when something goes wrong. Keeping the human at the send step preserves the signal that a real person at a real domain wrote this — the thing that makes a pitch land.
One agent. Two ways to work with it.
Drive it directly, or let it tell you where to look. Both run on the same engine and the same boundary.
Talk to it.
- ·Ask it to find what is worth answering this week, score a query against your brands, or draft a pitch in a brand voice.
- ·It runs a tool loop against the pitch engine and shows you every call it made — what it looked at, and why a match or a draft is what it is.
- ·When it prepares a draft, it says so plainly: ready for your review, waiting at the dock, here is how to send it yourself.
Let it surface what needs you.
- ·A ranked queue across every brand: drafts pending review, wave exceptions (units too thin to pitch well yet), recent coverage that landed, and queries not yet scored.
- ·The ranking learns — a calibration job tunes it from whether you acted on what was surfaced.
- ·Honest by default: when there is nothing real to surface, it shows quiet, not manufactured engagement.
The whole job, up to the send.
Each capability wraps the same engine action the API, MCP server, and CLI use, and is scoped to your own data. The drafting tools dock a draft — they never send.
Read & understand
list_brandsthe brands you can prepare pitches forlist_pitchesyour scored journalist-query queueget_pitchone query, its scores, its docked draftget_pitch_outcomeswhat happened after a pitch — read-onlyget_brand_briefa brand’s resolved voice + positioninglist_wave_exceptionsunits the engine could not draft to floor
Prepare & dock
score_queryfit against all your brands (0–100)suggest_anglescandidate angles — you pickdraft_pitcha quality-gated, brand-voice draft, dockedpolish_pitchrefine a draft from your angle + inputrun_pitch_wavethe full staged drafting run, docked
Notably absent: anything that sends, marks a pitch sent, publishes, or dispatches. There is no such tool to call.
It works for you, not for a metric.
Per-brand isolation
Each brand’s voice, context, and credentials stay separate. One brand’s framing never leaks into another’s pitch.
Your data only
Every call is scoped to the authenticated operator. The agent can never reference or reach another operator’s brands, pitches, or contacts.
No manufactured work
If a pitch is thin, it says so. If there is nothing real to surface, it stays quiet rather than inventing busywork to look useful.
Shows its work
Every turn returns the tool calls it made, so you can see what it looked at and why a match or draft is what it is.
Learns from your sends
A calibration job tunes the queue from whether you actually sent what was prepared — every change is logged for transparency.
Provider-resilient
Runs on Claude with an automatic fallback that only ever fires before work starts, so a provider blip never double-runs a prepared draft.
Web console, REST, MCP, CLI — same agent.
Reach the agent however you work, all behind the same prapi_<key> bearer token the rest of the API uses.
A two-panel console at app.prapi.dev/agent: chat on the left, the “what needs you” queue on the right. No send controls — review and send happen in the pitch queue.
POST /api/v1/agent/chat for a turn; GET /api/v1/agent/surface for the orchestration queue; conversation history reads alongside. Bearer-authed, rate-limited.
agent_chat, agent_surface, agent_list_conversations, agent_get_conversation — hand the agent to Claude Code, Cursor, or ChatGPT as first-class tools.
prapi agent from your shell, JSON to stdout. Same engine, same boundary, pipeable into your scripts.
# Ask the agent to prepare (REST)
curl -X POST https://app.prapi.dev/api/v1/agent/chat \
-H "Authorization: Bearer $PRAPI_KEY" \
-d '{"message":"Draft the Forbes query for prapi, then stop."}'
→ drafted · docked for review · nothing sent
tool calls: score_query · get_brand_brief · draft_pitch
# What needs me, across every brand (REST)
curl https://app.prapi.dev/api/v1/agent/surface \
-H "Authorization: Bearer $PRAPI_KEY"
→ 3 drafts pending review · 1 wave exception · 2 unscored
# MCP tools/list
mcp handshake prapi.dev
→ agent_chat · agent_surface · agent_list_conversations ...What is the PRAPI Agent?
A PR chief-of-staff for multi-brand operators. It reads your pitch queue, scores journalist queries against each of your brands, and prepares brand-voice draft pitches — then hands every draft back to you. It works for the operator, not for PRAPI.
Can the agent send pitches on its own?
No, by design. The agent prepares and surfaces; you decide and send. Its tool registry is a curated allowlist with no tool that sends a pitch or changes send-state. The boundary is enforced structurally in the code (a CI guard refuses any send-like tool), not just asked for in the prompt.
What are the two modes?
Conversational — you talk to it and it drives the pitch engine for you, showing every tool call it made. Orchestration — it surfaces a ranked “what needs you” queue across all your brands: drafts pending review, units too thin to pitch yet, recent coverage, and unscored queries. When there is nothing real to surface, it says so rather than manufacturing busywork.
Does it mix up my brands?
No. Every tool call is scoped to your own data, and the agent keeps each brand’s voice, context, and credentials isolated — one brand’s framing never leaks into another’s pitch.
How do I use it?
Four surfaces, same bearer auth: a web console at app.prapi.dev/agent, REST at /api/v1/agent/chat and /api/v1/agent/surface, MCP tools (agent_chat, agent_surface, and conversation reads) for Claude Code / Cursor / ChatGPT, and the prapi CLI.
Does it learn?
Yes. Every action and tool call is logged for transparency, and a calibration job tunes how the orchestration queue is ranked based on whether you actually sent what the agent prepared. A docked draft still never sends on its own.
Same engine as the web app, API, and CLI.
The agent runs the same scoring engine, brief.md merge, and quality gates as every other surface. It just sits one level up: it decides what to look at and prepares the work, and leaves the send to you.