# Growth actions for agents

FunnelKeeper is the growth engine your coding tools read. After sources are
connected it ranks the **next incremental changes** that will generate revenue
or growth — activation leaks, rage-click paths, wasted spend, missing
conversions, weak landing pages — and writes a prompt you can hand to Cursor,
Claude Code, Lovable, Bolt, or v0.

Ask this **before inventing a feature**. The numbers come from the warehouse
(spend + funnel + revenue + replay), not from a vibe.

Spend changes are never executed here. A scale recommendation tells you to
`propose_budget_change`; a human still taps Approve.

## Surfaces

| Surface | Call |
|---|---|
| MCP | `get_growth_actions` then `get_growth_prompt` |
| REST | `GET /products/{slug}/growth-actions` · `POST /products/{slug}/growth-actions/{id}/prompt` |
| CLI | `fk growth --product <slug>` · `fk prompt <id> --product <slug> --tool cursor` |
| Dashboard | Overview → **Next growth steps** → Copy prompt |

## MCP flow

```text
1. get_growth_actions { slug, days: 30, tool: "cursor" }
   → ranked actions with headline, category, estimated monthly impact, prompt

2. Pick the top action the human agrees with (or the one with the largest impact).

3. get_growth_prompt { slug, id, tool: "cursor" | "claude_code" | "lovable" | "bolt" | "v0" }
   → full prompt: why it matters, what to do, ground truth, done-when.

4. Run that prompt in the coding tool. Do not edit ad budgets from it.
```

CLI equivalent:

```bash
fk growth --product demo-product
fk prompt activation.dropoff.signup-activated --product demo-product --tool cursor
```

## Categories

| Category | What it diagnoses |
|---|---|
| `activation` | Consecutive funnel dropoffs (e.g. signup → activated) |
| `friction` | Rage / dead clicks on a path, with recording URLs when we have them |
| `acquisition` | Wasted spend (zero engaged) or a channel that is paying back |
| `pricing` | Signups with no payments, missing conversion definitions, unattributed revenue |
| `seo` | No organic traffic, or a landing page that scored poorly |

Effort is `quick_fix`, `feature_build`, or `experiment`. Impact is integer cents
per month, or null when we cannot yet put a number on it.

## Guarantees

- Deterministic. No LLM in the ranking — the prompt is formatted from warehouse facts.
- Action ids are stable for a given diagnosis (`activation.dropoff.signup-activated`)
  so you can re-fetch a prompt after the window moves.
- Unattributed revenue stays unattributed. We will not tell you to smear it onto a paid channel.
- HITL unchanged: anything that spends money is a proposal card.
