Systems Lab

Agent skill

new-motion

Scaffold a new GTM motion end to end across all three layers.

activeSelf-containedInstructions only520 words

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-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about new-motion

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
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.

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.

kindWhat it isMust declare a hypothesis?
outreachA campaign: it sends messages to humansYes
enrichmentFills in dataNo
scoringRanks recordsNo
routingAssigns records to peopleNo
signalDetects a triggerNo

Only outreach motions are campaigns. The others declare their intent through the outcome they serve in plan/outcomes.md.

Steps

  1. Context first. Copy context/motion/_template.md to context/motion/<name>.md. Fill in the trigger, the sequence, the owner, the success metric, and serves: (the outcome in plan/outcomes.md this 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 validated or proven knowledge. If the angle leans on a claim that is still confidence: hypothesis, there are two honest options: validate the claim first (see the capture-feedback skill), or change the angle. Never upgrade a claim just to unblock the copy.

  2. 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. Check infra/README.md for 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.

  3. Eval third. If the motion calls an agent or an ai() step whose prompt you wrote, add evals/<name>/ with representative cases and wire it into evals/promptfooconfig.yaml.

  4. 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.

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.