Skip to content
Conduit

skill

revops-3-contracts

Drop-in RevOps engine for Claude Code teams: three discipline-imposing contracts (single front door, numbered-CSV agent chain, one-contract dispatcher) that make a RevOps stack transferable.

tga-cheetung/revops-3-contractscommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/tga-cheetung/revops-3-contracts itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 23, 2026

The 3-Contract RevOps Stack

A complete, drop-in RevOps engine for Claude Code teams running multi-million-dollar ARR pipelines.

Built on three discipline-imposing contracts that make it impossible to add a fourth parallel system. Tools change. Vendors get bought. Workflows mutate. Contracts survive — because a contract is a fixed shape that every tool, agent, and workflow must agree to, not a tool that gets ripped and replaced.

If you've ever inherited a RevOps stack and thought "I cannot transfer this — there's no canonical shape," this repo is the canonical shape.


What a contract is (and why it beats tools)

A tool is a thing you bought (HubSpot, Apollo, Clay, n8n, Smartlead). It does work for you. It gets ripped out the moment a cheaper, faster, or better one shows up.

A contract is a fixed shape that every tool, agent, and workflow in your stack must agree to. The shape never changes. The tools behind it can.

Three examples to make this concrete:

  1. The contract "every campaign starts from a brief YAML with a locked status." Doesn't matter if your sequencer is Instantly, Smartlead, Apollo, or something that doesn't exist yet — they all read the same brief. Swap sequencers without touching strategy. Swap strategists without touching sequencers.
  2. The contract "every agent step writes a numbered CSV." Doesn't matter if step 02 is enrichment by Apollo, Clay, or a custom script — the output is 02-enriched.csv. Step 03 reads it. Step 03 doesn't know or care who wrote step 02.
  3. The contract "every external action goes through one dispatcher with stdin JSON + <service> <action>." Doesn't matter if your Slack today is Slack tomorrow — the dispatcher swaps the handler, every agent above it stays the same.

Why this matters: RevOps teams die from accretion. Every tool added is a new shape, a new auth flow, a new error path, a new thing to break the day someone leaves. Contracts are the only thing that survive the next vendor swap, the next team change, the next "we just bought X, can you wire it in." Tools come and go. Contracts compound.

This repo gives you three contracts. Everything else is replaceable.


Repo structure

.
├── os/                      ← shared frameworks (ICP, TOV, brief schema)
├── engine/                  ← shared code (dispatcher, handlers)
│   ├── dispatch.py
│   └── handlers/
│       ├── slack.py
│       ├── notion.py
│       └── http.py
├── tenants/                 ← per-revenue-motion (one folder per ICP / product / segment)
│   └── _templates/
│       ├── CLAUDE.md
│       ├── briefs/
│       │   └── _blank.yaml
│       └── RUNBOOK.md
├── .claude/
│   ├── agents/
│   │   ├── revops-conductor.md
│   │   ├── list-builder.md
│   │   ├── enricher.md
│   │   ├── scorer.md
│   │   └── copy-writer.md
│   └── commands/
│       ├── strategy-loop.md
│       ├── pipeline.md
│       └── dispatch.md
└── docs/
    └── REPO-RULES.md

Five folders. That's the cap. Anything outside this set requires a written argument committed to docs/plans/.


The three contracts

Contract 1 — Single Front Door

There is exactly ONE operator-facing agent. Call it revops-conductor. The human operator talks to the conductor. The conductor talks to everything else.

operator → revops-conductor → (engine binary | sub-agents | dispatcher)

See .claude/agents/revops-conductor.md.

Contract 2 — Numbered-CSV Agent Chain

Every agent step writes a numbered CSV. 01-sourced.csv, 02-enriched.csv, 03-scored.csv, 04-personalized.csv. The number prefix forces ordering. Step N+1 reads step N — nothing else.

tenants/<name>/runs/<run-id>/
  01-sourced.csv      ← list builder writes
  02-enriched.csv     ← enrichment agent writes
  03-scored.csv       ← scoring agent writes
  04-personalized.csv ← copy agent writes
  meta.json           ← run metadata

See the four sub-agent files under .claude/agents/.

Contract 3 — One-Contract Dispatcher

Every external action goes through one Python dispatcher with a single contract: stdin JSON + CLI <service> <action>.

echo '{"channel":"#revops","text":"campaign launched"}' \
  | python engine/dispatch.py slack send

See engine/dispatch.py and the example handlers under engine/handlers/.


Install (5 minutes)

# 1. Clone this repo at the root of your RevOps workspace
git clone https://github.com/tga-cheetung/revops-3-contracts.git .

# 2. Spin up your first tenant
cp -r tenants/_templates tenants/my-first-revenue-motion

# 3. Edit tenants/my-first-revenue-motion/CLAUDE.md with your ICP overrides
#    Then open Claude Code in your workspace and run:
/strategy-loop 2026-q3-pilot

The conductor takes it from there.


Configuration

Set in tenants/<name>/.env:

VariableUsed byPurpose
INSTANTLY_API_KEY (or your sequencer of choice)sequencer handlerSending
APOLLO_API_KEY (or your sourcing tool of choice)list-builderSourcing
SLACK_WEBHOOK_URLengine/handlers/slack.pyNotifications
NOTION_API_KEYengine/handlers/notion.pyArchive strategic decisions
DRY_RUN (1 or unset)every handlerSafety

Tuning the repo for your stack

The repo is opinionated about shape, not tools. Edit these to fit your environment:

  • Want a different sequencer? Replace the sequencer handler. Conductor doesn't change.
  • Want a different CRM? Replace the relevant handler. Conductor doesn't change.
  • Want different scoring criteria? Edit tenants/<name>/briefs/<brief>.yaml icp block. Scorer reads it. Scorer doesn't change.
  • Want different agent boundaries? Add a verifier.md agent between scorer and copy-writer; have it write 03b-verified.csv. The chain extends without breaking the contract.

The contracts hold. Everything below the contracts is yours to bend.


Deploy when

  • You're inheriting (or rebuilding) a RevOps stack and want a canonical shape before adding tools
  • You're scaling from one revenue motion to multiple and need each motion to look the same
  • You're handing a RevOps engine off to a colleague, an acquirer, or a buyer and need it to be transferable
  • You've felt the "we have 12 agents and 6 trigger.dev workflows and nobody can find anything" pain
  • You're using Claude Code (or any operator-agent pattern) and want to stop the proliferation of parallel skill files

What this is NOT

  • Not a sequencer (use Instantly / Smartlead / Apollo / etc. as your handler)
  • Not a CRM (use HubSpot / Salesforce / Attio / etc. as your handler)
  • Not a workflow engine (use n8n / trigger.dev / Vercel cron / launchd as your scheduler)
  • Not opinionated about which tools you use — opinionated about the shape every tool plugs into

This is the discipline layer that sits on top of whatever stack you already have.


License

MIT — see LICENSE.


Created by The GTM Architects, 2026. Built for B2B software and services teams running multi-million-dollar ARR pipelines who want their RevOps engine to be transferable, inspectable, and free of accretion.

↑↓ navigate openesc close