---
name: firstflag
description: Work FirstFlag buying signals end to end - pull this week's stacked signals, research each company, write a grounded outbound sequence, and mark signals sent or skipped. For agencies, runs the same loop for every client workspace. Use when the user mentions FirstFlag, buying signals, "who should I prospect this week", "stacked signals", "run my clients", or asks for outbound emails to companies that just raised, are hiring, changed leadership, or were in the news. Requires the FirstFlag MCP server (tools named get_signals, research_company, mark_signal; agency keys add list_workspaces and add_workspace).
---

# FirstFlag prospecting workflow

FirstFlag watches the market for buying signals (funding, hiring, job changes, acquisitions, SEC filings, website and newsroom changes, press) that match the user's ICP, finds the right contact, and drafts a first email. You reach it through the `firstflag` MCP server. If its tools are missing, tell the user to connect it: FirstFlag → Settings → Connect your AI.

## The loop

1. **Pull.** Call `get_signals` with `stacked_only: true`. Stacked means the same company shows 2+ different kinds of buying signal in 45 days (say funding plus a hiring surge, or a new leader plus an acquisition): those are the accounts moving right now, so work them first. Each carries a `stack.why_now` line to open from. If fewer than 5 come back, call `get_signals` again without `stacked_only` to fill up with the best-fit open signals. The default window is the last 7 days; pass `since` for a different one.
2. **Research.** For each company you will write to, call `research_company` with its domain. It returns every signal on the company (locked ones have facts but no contact), the people FirstFlag found (tier 1 = the user's primary persona), and the fit score. Call `get_signal` when you need source links or the `fact_rules`.
3. **Write.** Write a 3-touch sequence to the signal's contact:
   - Email 1 (day 0): lead with the strongest `why_now` fact, connect it to one pain the user solves, one-line ask. Under 90 words. FirstFlag's `first_email` is a good starting point; tighten it rather than starting over.
   - Email 2 (day 3): a different signal or angle from the same company (stacked companies have more than one). Under 70 words.
   - Email 3 (day 7): a short, polite breakup. Under 40 words.
   - If the user wants FirstFlag to regenerate the first email in their saved voice, call `draft_email` with an `instruction` (tone, length, angle). Pass `save: true` only if they want it stored.
4. **Review.** Show a table first (company, contact, why now in one line, subject lines), then the full copy. Wait for the user.
5. **Record.** When the user says a sequence is sent or queued, call `mark_signal` with `action: "sent"`. For companies they reject, `action: "skip"` (the credit may be refunded if it was delivered within 24 hours). Use `approve` when they want it worked but not yet sent.

## Rules

- **Only state facts FirstFlag returned.** Every number, investor, job title, date and name in an email must come from `why_now`, `fact_rules`, `details` or `sources`. Never invent round sizes, headcounts, customers or quotes. If `why_now` says an amount is not confirmed, do not state one. `draft_email` enforces this on its side and will refuse an instruction that adds facts.
- **Ask before changing anything.** Confirm with the user before `remove_accounts`, `set_play`, or `mark_signal` with `skip`. Reads are free; do them without asking.
- **No em dashes, no hype words**, no "I hope this finds you well". Peer to peer, specific, short.
- **Never send email yourself.** FirstFlag has no send tool. The user sends from their own sequencer or inbox; your job ends at copy plus `mark_signal`.
- Locked signals unlock automatically while the plan has quota. If `get_signals` comes back empty, call `account_usage` and tell the user what is left.

## Other things the user may ask

- "Watch these companies" → `add_accounts` with their domains (plan-capped; nothing is added if the batch goes over).
- "What am I tracking?" → `list_accounts`, `list_plays`.
- "Turn on the hiring play" → `list_plays` to check the plan allows it, confirm, then `set_play`.
- "How many signals do I have left?" → `account_usage`.

## Agencies: every client, one key

If `list_workspaces` is available and returns `key_scope: "organization"`, the user runs FirstFlag for several clients with an agency key. Each client is a **workspace** with its own website, buyers, plays and signals.

**Weekly agency run** ("run my clients", "do this week for all clients"):

1. `list_workspaces`. Note each client's `workspace` slug and this week's counts. Skip clients with 0 new signals and say so.
2. For each remaining client, in turn:
   1. `get_signals` with `workspace: "<slug>"` and `stacked_only: true`; top up without `stacked_only` to 3-5 companies.
   2. `research_company` with the same `workspace` for each company.
   3. Write the 3-touch sequence exactly as in the loop above, **from that client's signals and that client's offer only**.
3. Show one table per client (client, company, contact, why now, subject lines), then the copy grouped by client.
4. **Push to the client's own sequencer.** Every client has its own campaign (Smartlead, Instantly, EmailBison, HeyReach...). If the user has a sequencer tool connected, prepare the leads + copy for *that client's* campaign and ask before pushing. Otherwise output a CSV per client (email, first_name, last_name, company, title, subject_1, body_1, subject_2, body_2, subject_3, body_3). Never put two clients' leads in one campaign.
5. After the user confirms a client's push, `mark_signal` with `action: "sent"` for those signal ids (no `workspace` needed: a signal id finds its own client).

**One list across all clients:** `get_signals` without `workspace` returns every client's best signals together, each tagged `client` and `workspace`. Use it for "what's hot across my book this week", then pass the `workspace` when you drill in.

**New client:** "add acme.com as a client" → confirm, then `add_workspace` with the website. FirstFlag reads the site, switches on the recommended plays and backfills 30 days; signals show up within minutes. Then offer `add_accounts` (with the new `workspace`) for the client's named accounts.

**Agency rules:**
- Every tool except `list_workspaces`, `add_workspace` and the signal-id tools needs `workspace` when the org has more than one client. If a tool returns `workspace_required`, pick from the list it returns; never guess.
- Never carry facts, positioning, proof points or voice from one client into another client's emails.
- The client-facing weekly report is in the app (All clients → Client report). Point the user there when they want something to forward to a client.

