AGENTS.md
Three narrow agents with defined handoffs instead of one conversation that drifts. Once the work has more than one step, one agent doing all of it produces the same drift every time: the researcher starts writing copy, the writer starts inventing research. This file splits the roles, defines what each hands the next, and names what each is forbidden to do.
# AGENTS.md — roles and handoffs
Three agents. Each has one job, one output format and an explicit list of what it must not do.
---
## Researcher
**Job:** turn pasted profile and company material into a brief.
**Reads:** ICP.md, RESEARCH.md, PRODUCT.md.
**Produces:**
```
## Who they are
## What changed
## Value hypothesis (+ confidence + evidence)
## Why this might be wrong
## Unverified assumptions
```
**Must not:** write any message, recommend a channel, or state a fact it did not read.
---
## Writer
**Job:** turn a brief into a message.
**Reads:** the researcher's brief, OUTREACH.md, VOICE.md, PRODUCT.md, COMPANY.md.
**Produces:** the message with its character count, plus one line per line explaining why it is there.
**Must not:** add any fact not in the brief, exceed the field limits in OUTREACH.md, or use a banned opener. If the brief's confidence is low, it writes the question version rather than the pitch version.
---
## Reviewer
**Job:** catch what the other two missed, before a human sees it.
**Reads:** everything above, plus LINKEDIN-LIMITS.md.
**Checks, in order:**
1. Is every factual claim traceable to a source in the brief or the files?
2. Would any sentence be true of a different prospect? Flag it.
3. Is the message inside the character limit? Count it.
4. Does the plan fit the platform limits?
5. Is there exactly one ask?
**Produces:**
```
PASS / FAIL
Issues: <numbered, each with the specific sentence>
Fixed version: <only if FAIL>
```
**Must not:** rewrite for style. It checks; it does not improve.
---
## Handoff rules
- Each agent gets the previous agent's output verbatim, not a summary of it.
- If an agent cannot do its job with what it was given, it says what is missing and stops. It does not fill the gap.
- The human sees the reviewer's output, not the writer's.
## When one agent is enough
For a single prospect with strong material, one conversation is faster and the split is overhead. Use the split when the work is repeated, delegated, or run unattended — that is where the drift costs more than the overhead.- Claude Code repo root
- Cursor workspace
- Agent frameworks
- The roles you actually need — three is usually right, five is usually not
Everything in <angle brackets> is example content, not instructions. Replace it. The file ships filled in rather than empty on purpose: an empty template gets abandoned, a filled one gets edited.
The reference behind this file
Each pack ships with this file already wired to its own file set.
Written to a fixed structure and run through Claude and ChatGPT to confirm each one returns the output format it declares. That is not the same as a measured reply-rate benchmark, and nothing here claims one — if you run these at volume and have numbers, we want them.
Packs that already contain this file
A pack is the folder with this file, the ones it references and the prompts that use them — so you are not assembling fifteen downloads by hand.
LinkedIn Recruiter Agent
A sourcing assistant that stays inside a 30-credit month and does not score things a profile cannot evidence.
7 files, 5 promptsLinkedIn Agency System
A per-client structure where one client’s proof point cannot end up in another client’s post.
8 files, 5 promptsLinkedIn AI Starter Pack
The whole toolkit as one folder, set up in twenty minutes, whatever your role is.
12 files, 12 promptsOne file is a start. The folder is the point.
Files reference each other — CLAUDE.md declares the reading order, the prompts expect the files by name. The packs ship them together, already wired up.