# Design your own Goose play

You're going to design a **play** — a proven motion Goose deploys as CRM tasks to the reps who
should run it. This guide gives you the schema, the rules, and a prompt you can paste into Claude
(or any AI) to author one. When you have the JSON, come back to Goose → **Plays → Import a play**.

A play does **not** send anything itself. Deploying it creates tasks in your CRM for reps to work
in their own tools. Keep that in mind when you write it.

---

## The file Goose expects

A single JSON object:

```json
{
  "_goose": "play",
  "version": 1,
  "name": "Multithread stalled enterprise deals",
  "desc": "Single-threaded Proposal/Negotiation deals with no exec sponsor — 3-step motion to add one.",
  "trigger": ["Stage ≥ Proposal", "Single-threaded", "No exec engaged"]
}
```

### Fields

| Field | Required | What it is |
|---|---|---|
| `_goose` | yes | Must be the literal string `"play"`. This is how Goose knows the file is a play. |
| `version` | yes | Always `1` for now. |
| `name` | yes | Short, action-first. 3–60 characters. E.g. "Re-engage stalled deals". |
| `desc` | yes | One sentence: who it targets and what the motion does. ≤ 160 characters. |
| `trigger` | yes | An array of 1–4 **criterion strings** — the conditions that decide which accounts/deals match. |

### The trigger vocabulary

Compose triggers from these (mix and match; keep it to 4 or fewer so the match set stays sharp):

- Fit: `Grade ≥ A`, `Grade ≥ B`, `Grade C`
- Opportunity: `No open opp`, `Open deal`, `Stage ≥ Proposal`, `Stage ≥ Negotiation`
- Engagement: `Single-threaded`, `No exec engaged`, `No activity 14d`, `Rising heat`, `Warm`
- Coverage: `In CRM`, `Not in CRM` (net-new / TAM)

Write triggers as plain strings exactly like the examples. If you need one that isn't listed,
phrase it the same way (`"<dimension> <comparator> <value>"`) — Goose will show it verbatim.

---

## Prompt to paste into Claude

> I'm designing a **play** for Goose, a GTM operating system. A play is a targeting rule plus a
> short motion that gets deployed to reps as CRM tasks (it never sends anything itself).
>
> Design ONE play for this situation: **[describe your situation — e.g. "win back closed-lost
> enterprise deals from last year" or "get first meetings with net-new AI-native accounts"]**.
>
> Output ONLY a valid JSON object, no prose, matching exactly this schema:
> `{"_goose":"play","version":1,"name":"...","desc":"...","trigger":["...","..."]}`
>
> Rules:
> - `name`: action-first, 3–60 chars.
> - `desc`: one sentence, ≤160 chars, says who it targets and what the motion does.
> - `trigger`: 1–4 strings drawn from this vocabulary — Grade ≥ A / Grade ≥ B / Grade C /
>   No open opp / Open deal / Stage ≥ Proposal / Stage ≥ Negotiation / Single-threaded /
>   No exec engaged / No activity 14d / Rising heat / Warm / In CRM / Not in CRM. If you need
>   another condition, phrase it as "<dimension> <comparator> <value>".
> - Return the JSON only.

---

## Bring it back

1. Copy the JSON Claude gives you into a file, e.g. `my-play.json`.
2. In Goose: **Plays → Import a play** → drop the file (or paste the JSON).
3. It appears in your library as a card you can **Deploy** like any other. It survives reload.

Nothing goes live until you deploy it, and deploying only writes tasks to your CRM — Goose never
sends outreach on your behalf.
