Agent skill
new-motion
Scaffold a new GTM motion end to end across all three layers.
Filed under Outbound email.
From getcargohq/cargo-manifest · 4 skills · 6 · pushed 2026-09-12
What it does when it runs
Scaffold a new GTM motion end to end across all three layers. Use whenever creating a new motion, campaign, play, or automation in this repo, so the narrative (context), the implementation (infra), and the regression suite (evals) ship together and never drift apart. Enforces the outreach hypothesis rule.
Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/getcargohq/cargo-manifest.git /tmp/cargo-manifest git -C /tmp/cargo-manifest sparse-checkout set ".claude/skills/new-motion" mkdir -p ~/.claude/skills/new-motion cp -R "/tmp/cargo-manifest/.claude/skills/new-motion/." ~/.claude/skills/new-motion/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from getcargohq/cargo-manifest/blob/c8b9850b5f9cf07d5a2290dd42227e2ac128a906/.claude/skills/new-motion/SKILL.md, which is licensed MIT (repository). 520 words, 4 headings.
New motion, three layers at once
A motion is not just the automation. It is the narrative, the code, and the guardrail. Create all three in one PR.
On vocabulary: a motion is the go-to-market move, and its narrative
lives in context/motion/. A play is a specific Cargo resource
(definePlay: an automation that watches a data model and runs per row). A
motion is implemented as a Cargo play, a Cargo tool, or an agent, depending on
how it is triggered. Do not confuse the two.
Step 0: is this a campaign?
Set kind: in the narrative's frontmatter. It changes what you must declare.
| kind | What it is | Must declare a hypothesis? |
|---|---|---|
outreach | A campaign: it sends messages to humans | Yes |
enrichment | Fills in data | No |
scoring | Ranks records | No |
routing | Assigns records to people | No |
signal | Detects a trigger | No |
Only outreach motions are campaigns. The others declare their intent through the
outcome they serve in plan/outcomes.md.
Steps
-
Context first. Copy
context/motion/_template.mdtocontext/motion/<name>.md. Fill in the trigger, the sequence, the owner, the success metric, andserves:(the outcome inplan/outcomes.mdthis makes real). Reference the ICP and personas with[[icp/<slug>]]and[[persona/<slug>]]wikilinks.If
kind: outreach, write the hypothesis before a single line of copy exists: segment, angle, trigger, expected_reply_rate. This is what lets the result be judged against a bar set in advance rather than one invented afterwards. The linter fails the PR if it is missing.Outreach motions may cite only
validatedorprovenknowledge. If the angle leans on a claim that is stillconfidence: hypothesis, there are two honest options: validate the claim first (see thecapture-feedbackskill), or change the angle. Never upgrade a claim just to unblock the copy. -
Infra second. Pick the implementation by how it is triggered:
- Watches a data model, runs per row:
definePlay+defineWorkflow. - Runs on demand, or called by an agent:
defineTool+defineWorkflow. - Reasons, decides, and calls several tools:
defineAgent.
The file goes in
infra/as<name>.ts.infra/is flat by default: only nest (infra/plays/,infra/tools/,infra/agents/) once a use case has enough files that finding one is work, or because a cookbook you installed already nests. Checkinfra/README.mdfor what the directory looks like now before you decide.Workflow bodies are parsed, not executed: no await, no try/catch, no closures, no destructuring inside the body. Reference existing resources by imported handle, never by pasted UUID. Run
npm run typecheck. - Watches a data model, runs per row:
-
Eval third. If the motion calls an agent or an
ai()step whose prompt you wrote, addevals/<name>/with representative cases and wire it intoevals/promptfooconfig.yaml. -
Verify. Run
npm run lint, then open the PR. Confirm the cargo plan comment shows only the resources you intended to add. The narrative and the plan diff should tell the same story.
Naming
Kebab-case, verb-first where possible: inbound-router, churn-winback,
signal-to-sequence. Same slug across all three layers.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- playbook-new-in-role by growthenginenowoslawski · 705
- vid-motion-graphics by Varnan-Tech · 645
- sales-motion-design by chadboyda · 77
- renewal-save-motion by NEON-Rutger · 48
- new-business-registration by zime-ai · 14
- cold-start-motion by 0xF4ng · 5
- motion-community by 0xF4ng · 5
- motion-mlg by 0xF4ng · 5
Need help setting it up?
This page tells you what new-motion does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.