JG

janskuba/go-to-market-orchestrator

Developer tools
195 stars Quality 40 Trend 40

Claude Code hooks, skills, and subagents for go-to-market teams. Trigger real actions in Slack, Apollo, Lemlist, Notion, Linear, Figma, Google Sheets, and 14+ other tools when Claude finishes work —...

Overview

Claude Code hooks, skills, and subagents for go-to-market teams. Trigger real actions in Slack, Apollo, Lemlist, Notion, Linear, Figma, Google Sheets, and 14+ other tools when Claude finishes work —...

README

Claude Code Hooks for GTM

Claude Code hooks, skills, and subagents for go-to-market teams. Trigger real actions in Slack, Apollo, Lemlist, Notion, Linear, Figma, Google Sheets, and 14+ other tools when Claude finishes work — and use a curated library of GTM skills and outbound agents from inside any session.


The three-layer system

┌─────────────────────────────────────────────────────────────┐
│  CLAUDE CODE SESSION                                        │
│                                                             │
│  1. SKILLS  (skills//SKILL.md → ~/.claude/skills/)    │
│     Pre-written instruction modules that tell Claude        │
│     HOW to do GTM work — campaign building, lead            │
│     enrichment, personalization, signal monitoring.         │
│           ↓                                                 │
│  2. AGENTS + COMMANDS (agents/*.md, agents/commands/*.md)   │
│     Subagents (lead-prioritizer, prospect-profiler, etc.)   │
│     and the /outbound-pipeline slash command that chains    │
│     them into a 5-stage outbound workflow.                  │
│           ↓                                                 │
│  3. HOOKS + ORCHESTRATOR (hooks/, orchestrator/)            │
│     settings.json fragments that fire on Claude Code        │
│     lifecycle events (Stop, PostToolUse, SessionStart…)     │
│     and Python handlers that hit real REST APIs.            │
└─────────────────────────────────────────────────────────────┘

Skills = what to do. Agents = who does it. Hooks = when to act. Orchestrator = how to actually send it somewhere.


What you get

  • 30 hooks across 8 categories (notifications, logging, content, CRM, outbound, design-ops, automation, bootstrap)
  • 17 integrations (Slack, Discord, Notion, Apollo, HubSpot, Attio, Airtable, Google Sheets, Lemlist, Instantly, Smartlead, Clay, Typefully, Linear, Figma, Zapier/n8n/Make) — all direct REST, no MCP dependency required for hooks
  • 6 GTM skills (campaign-builder, lead-enrichment, personalization-writer, pipeline-reviewer, reply-classifier, signal-monitor)
  • 7 subagents + the /outbound-pipeline slash command that orchestrates them
  • 17 content prompts for pitch decks, one-pagers, carousels, case studies, ICP cards, proposals
  • 5 role-based starter packs (founder, sales, marketing, ops, design) — paste-ready settings files
  • One-shot installer, validator, and uninstaller

Quickstart

git clone https://github.com/janskuba/go-to-market-orchestrator.git
cd go-to-market-orchestrator
./scripts/install.sh
# Fill in at least SLACK_WEBHOOK_URL in .env
./scripts/validate.sh

Start Claude Code, give it any task, and watch your Slack channel light up when it finishes. Full walkthrough: QUICKSTART.md.


How a hook fires

Claude Code event (Stop / PostToolUse / SessionStart / Notification / SessionEnd)
   └──→ ~/.claude/settings.json hook entry
         └──→ bash $CLAUDE_GTM_DIR/orchestrator/run.sh  
               └──→ orchestrator/dispatch.py
                     - reads stdin (Claude's hook payload)
                     - merges  into payload["action"]
                     - exec orchestrator/py/.py
                       └──→ POST to Slack / Apollo / Notion / …

dispatch.py exists so a single contract — payload["action"] — drives every handler. The CLI action overrides any value in stdin; handlers fall back to a sensible default if neither is present.


Hook index

Every hook lives in hooks/// with a hook.json snippet and a plain-English README.md.

Team notifications

Hook Event What it does
slack-ping-on-stop Stop Sends a Slack message when Claude finishes
slack-approval-alert Notification Pings Slack when Claude needs approval
discord-webhook-on-stop Stop Posts to Discord when Claude finishes

Reporting and logging

Hook Event What it does
notion-session-log SessionEnd Logs session details to Notion
local-markdown-transcript SessionEnd Saves session transcript locally
cost-tracker-notion SessionEnd Logs token usage and cost to Notion
daily-digest-slack SessionEnd Posts a session summary to Slack
sheets-append-row PostToolUse Appends activity to Google Sheets

Content production

Hook Event What it does
typefully-draft-queue Stop Queues a Typefully draft from Claude’s output
notion-content-archive Stop Archives generated content to Notion
linear-ticket-from-brief PostToolUse Creates a Linear ticket when Claude writes a file
claude-design-output-to-notion Stop Saves design output to Notion

Prospecting and CRM

Hook Event What it does
apollo-enrich-contact PostToolUse Enriches a contact via Apollo.io
attio-upsert-company PostToolUse Creates or updates a company in Attio
hubspot-upsert-contact PostToolUse Creates or updates a contact in HubSpot
airtable-log-row PostToolUse Appends a row to Airtable
sheets-log-enrichment Stop Logs enrichment results to Google Sheets

Outbound and sequencing

Hook Event What it does
apollo-search-leads Stop Searches Apollo for leads matching criteria
lemlist-add-lead PostToolUse Adds a lead to a Lemlist campaign
lemlist-push-sequence Stop Starts a Lemlist sequence for a lead
instantly-push-campaign Stop Pushes a lead to Instantly
smartlead-push-campaign Stop Pushes a lead to Smartlead
clay-table-sync Stop Syncs data to a Clay table via webhook

Design ops

Hook Event What it does
figma-export-frame Stop Exports a Figma frame via REST
notion-design-doc Stop Creates a design doc in Notion
linear-design-version PostToolUse Logs a design version to Linear

Automation bridges

Hook Event What it does
zapier-webhook Stop Fires a Zapier webhook (configurable downstream)
n8n-webhook Stop Fires an n8n webhook
make-webhook Stop Fires a Make webhook

Bootstrap

Hook Event What it does
skill-loader-on-start SessionStart Lists available local skills at session start

Integration index

Every integration is a Python handler in orchestrator/py/.py. Handlers read JSON from stdin, respect DRY_RUN=1, and call REST APIs directly. No MCP server is required for hooks to work.

Tool Auth Required env vars
Slack Webhook SLACK_WEBHOOK_URL
Discord Webhook DISCORD_WEBHOOK_URL
Notion API token NOTION_API_KEY, NOTION_PARENT_PAGE_ID (or NOTION_COST_DATABASE_ID for cost log)
Figma API token FIGMA_API_KEY
Linear API token LINEAR_API_KEY, LINEAR_TEAM_ID
Apollo.io API key APOLLO_API_KEY
Attio API key ATTIO_API_KEY
HubSpot Private app token HUBSPOT_TOKEN
Airtable Personal access token AIRTABLE_TOKEN, AIRTABLE_BASE_ID
Google Sheets API key GOOGLE_SHEETS_API_KEY, GOOGLE_SHEETS_SPREADSHEET_ID
Lemlist API key LEMLIST_API_KEY
Instantly API key INSTANTLY_API_KEY
Smartlead API key SMARTLEAD_API_KEY
Clay Webhook CLAY_WEBHOOK_URL
Typefully API key TYPEFULLY_API_KEY
Zapier / n8n / Make Webhook *_WEBHOOK_URL

Skills, agents, and commands

Path Installs to Purpose
skills//SKILL.md ~/.claude/skills//SKILL.md Auto-invoked skill that teaches Claude how to do a GTM task
agents/*.md ~/.claude/agents/ Subagents Claude can dispatch via the Task tool
agents/commands/*.md ~/.claude/commands/ Slash commands (e.g. /outbound-pipeline)
skills/modules/, skills/templates/, skills/examples/ (reference, not installed) Vendored reference material for skill authors

The /outbound-pipeline command chains 5 subagents (signal-scraper → lead-prioritizer → prospect-profiler → hook-writer → sequence-builder) into a single end-to-end workflow with checkpoint files in agents/output/.

To pull the latest skills/agents from upstream repos: ./scripts/sync-skills.sh. The repo ships with vendored copies, so this is optional.


Content prompts

The /gtm-content-prompts/ directory contains 17 ready-to-use prompts for pitch decks, one-pagers, LinkedIn carousels, case studies, ICP cards, and proposals. Each prompt suggests a hook to pair it with so the output goes to Notion, Linear, or your tool of choice. See gtm-content-prompts/README.md.


Role-based starter packs

Skip assembling hooks one by one. Each file is a complete ~/.claude/settings.json:

Role File Hooks included
Founder full-settings-founder.json Slack ping, Notion log, Typefully draft, daily digest, Zapier
Sales full-settings-sales.json Attio upsert, HubSpot upsert, Lemlist push, Slack approval, Airtable log
Marketing full-settings-marketing.json Typefully draft, Notion archive, design-to-Notion, Linear ticket, Slack ping
Ops full-settings-ops.json Cost tracker, Notion session log, daily digest, Zapier, n8n
Design full-settings-design.json Figma export, design-to-Notion, Linear version, Notion design doc, Slack ping

Or just run ./scripts/install.sh to install everything.


Scripts reference

./scripts/install.sh          # full install (skills + agents + commands + hooks)
./scripts/install.sh --help   # all flags
./scripts/uninstall.sh        # remove everything install.sh added
./scripts/validate.sh         # schema-validate hooks, compile + dry-run handlers, report env state
./scripts/sync-skills.sh      # pull latest skills/agents from upstream repos (optional)
./scripts/install-mcps.sh     # OPTIONAL: register MCP servers for Claude to *use* (not for hooks)

Dry-run mode

Set DRY_RUN=1 in .env (or export it) to make every handler print what it would have sent and exit cleanly. Combine with validate.sh for an end-to-end smoke test.


FAQ

Do I need to use every tool? No. Each hook is independent. Start with one, add more as needed.

What if I don’t have an API key for X? Use the Zapier/n8n/Make webhook bridges as a fallback. They accept any JSON payload and route it anywhere.

Why no Gmail integration? Gmail OAuth setup is heavier than the other integrations. Use Zapier/Make to bridge to Gmail, or contribute a PR.

How do I verify my setup? ./scripts/validate.sh.

How do I uninstall? ./scripts/uninstall.sh. Backups of your previous settings.json are preserved as settings.json.bak.*.


The other two repos

  • claude-md-repo — A library of Claude Code skills and templates for GTM workflows.
  • outbound-agents — Pre-built Claude Code agents for outbound sales tasks.

./scripts/sync-skills.sh pulls the latest copies into skills/ and agents/. Use --no-upstream if you don’t have access — the repo ships with vendored copies.

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add janskuba/go-to-market-orchestrator