---
title: "AI Sales OS on Claude Code with 10 Agents"
url: https://stacklist.com/card/eb4c03e2-e68e-4782-bf7d-f6e14321296b
source_url: "https://github.com/utsavnagda/ai-sales-os"
stack: https://stacklist.com/c/technology/stack/cc483fc9-ce97-46ea-bc49-7a300af7cd39
summary: "AI Sales Operating System is a GitHub-based project featuring ten Claude Code agents that automate a complete B2B sales pipeline from lead capture through retention, with human approval at critical decision points. The system costs under $50/month in Claude tokens and was originally built by the Understory team, achieving $15M in closed deals with a one-person sales team."
tags: "sales-automation, ai-agents, claude-code, b2b-sales, crm-integration, workflow-automation, github"
key_entities: "Alex (person), Gabs (person), Ali (person), Understory (organization), Claude Code (technology), HubSpot (technology), PandaDoc (technology), Slack (technology), Gmail (technology), Fireflies (technology), Stripe (technology), LinkedIn Live August 2026 (event), B2B sales pipeline (concept), webhook-driven automation (concept)"
classification: "framework"
content_hash: "sha256:720ff5a293607acc4a0b011360eb1228a2aa6d1d37ff511c5fbf2244f2e7c2c8"
acp_version: "0.2"
token_counts_approximate: 2075
visibility: public
agent_accessible: true
status: "final"
---

# AI Sales OS on Claude Code with 10 Agents

ai-sales-os A small, cron-and-webhook-driven set of Claude Code agents that runs a full B2B sales pipeline — lead capture through onboarding and retention — with a human pressing "send" at every point that matters, and everything else automated. This is an independent, public replication of a system built by Alex, Gabs, Ali and the Understory team , who shared it publicly on a LinkedIn Live (August 2026). It is not their code, not affiliated with or endorsed by Understory, and the ~$15M-closed / one-person- sales-team result they reported is their result — a description of what the system did for them, not a promise about what it will do for you. Wherever this project's story is told, keep that line intact. "It's basically a sales ops team" — Alex, on what the original system replaces, LinkedIn Live (Aug 2026). Their reported Claude token cost to run it: under $50/month. What it actually does Ten agents, each triggered by a calendar event, a new call transcript, a signed contract, or a schedule — never by a human clicking "run": Meeting prep briefs you in Slack 2 hours before every call: who they are, what the company does, funding, hiring signals, a buy-readiness score. Post-call follow-up drafts a recap email in your voice within 5 minutes of a call ending, with the right service page and the right testimonial auto-picked. CRM staging reads the same transcript and advances (or doesn't) the HubSpot deal, with a note explaining why — but never touches contract-sent or closed-won. Proposal generation turns "can you send me a proposal" into a PandaDoc draft with the right template and the company's real legal entity, ready for you to review pricing and press Send. Stale-deal, closed-lost-reignite, churn-risk, and expansion-signals agents run the rest of the pipeline so nothing goes quiet, nothing closed-lost stays dead forever, and no unhappy client or expansion opening slips past a busy calendar. Every email is a Gmail draft , never a send. Every contract is a PandaDoc draft , never a send. Every agent runs through the local claude CLI on a Claude Code subscription — there is no ANTHROPIC_API_KEY anywhere in this repo. See SYSTEM-MAP.md for the full pipeline diagram and docs/architecture.md for how the guardrails are enforced in code, not just in a prompt. Two ways to use this Import it. Clone the repo, open Claude Code inside it, then run /setup (or just say "import this"). A guided interview adapts the system to your own CRM/transcription/chat/ contract/billing tools, walks you through wiring credentials safely (it never asks you to paste a secret into chat), extracts your voice even with zero sent-email history to bootstrap from, fills in your service lines/testimonials/ICP, and walks you into a dry-run month. See SETUP-INTERVIEW.md . Take the skeleton. Don't want to run this repo's code at all? Read BLUEPRINT.md — the same ten-agent system as a standalone spec, written to be copied into your own AI OS or stack with zero dependency on anything here. Is this for you? The original team reports this pays off fastest for companies doing under ~$20M in revenue with a lean or nonexistent sales team. At enterprise scale, IT/security review and procurement friction tend to slow adoption down. See docs/cost.md for the numbers. Quickstart The steps below are the manual path. Most people should skip straight to /setup (see "Two ways to use this" above) — it walks you through everything here interactively and adapts each step to your own stack instead of assuming HubSpot/Fireflies/PandaDoc. git clone &lt; this-repo &gt; ai-sales-os &amp;&amp; cd ai-sales-os # 1. Checks python3 / claude CLI / gh, installs deps, seeds .env from .env.example ./setup.sh # 2. Fill in .env — HubSpot, Fireflies, Slack, PandaDoc, Stripe tokens + your identity. # Full per-tool wiring (private apps, webhooks, Google OAuth) is in docs/setup-guide.md. $EDITOR .env # 3. Log in to Claude Code once, if you haven't already — every agent rides this subscription. claude login # 4. Bootstrap your voice from everything you've ever sent (recency-weighted): python3 voice/learn.py --bootstrap # 5. Try one agent by hand, in DRY_RUN (the default) — nothing external gets written, # output lands in ./out/ instead: DRY_RUN=1 python3 agents/02-meeting-prep/run.py # 6. Work through docs/qa-playbook.md for about a month of dry-run QA, the way the # original team did, before flipping DRY_RUN off. # 7. Wire up the schedule and the webhook receiver: crontab triggers/crontab.example # edit the paths in it first python3 triggers/webhook_server.py # receives Fireflies + PandaDoc events Only when you're satisfied with a month of dry-run output do you set DRY_RUN=0 in .env . Tool stack Tool Role Required? Claude Code (subscription) Every reasoning step — drafting, scoring, classifying Yes HubSpot CRM — deals, stages, notes Yes Fireflies Call transcripts, GraphQL API Yes Slack Human-facing surface for every agent's output Yes PandaDoc Proposal/contract drafts + signature webhook Yes Google Workspace Gmail (drafts, history) + Calendar (meeting trigger) Yes Stripe Customer + invoice creation on signature Yes Calendly Booking link, UTM-tagged on every surface Yes Clay Hiring-signal watching for expansion (agent 10) Optional n8n For any leg you'd rather run as a durable, never-break flow instead of an agent Optional Instantly / HeyReach Cold outbound sending Adjacent, out of scope Cost breakdown and the "why under $50/mo" explanation: docs/cost.md . Repository layout README.md this file SYSTEM-MAP.md full pipeline diagram + narration BLUEPRINT.md standalone system spec — copy it out, no code required SETUP-INTERVIEW.md the guided-import interview `/setup` runs CLAUDE.md how to operate/extend this repo with Claude Code LICENSE MIT .claude/commands/setup.md the `/setup` slash command docs/ architecture, setup, QA, voice training, cost, adapting your stack to a different tool, FAQ, source/provenance requirements.txt / .env.example / .gitignore / setup.sh plumbing lib/ thin wrappers: HubSpot, Fireflies, Gmail, Calendar, PandaDoc, Stripe, Slack, the claude CLI runner, state store triggers/ crontab.example + the stdlib webhook server agents/01-lead-capture .. 10-expansion-signals/ one folder per agent — README, prompt, run.py (and small example config files) voice/ voice-profile.md (generated) + learn.py Each agent folder has its own README.md (what it does, trigger, inputs, output, guardrails, human gate, setup) and prompt.md (the exact system prompt sent to Claude). Start there for agent-specific detail; start with SYSTEM-MAP.md and docs/architecture.md for how they fit together. Guardrails, in one place Every outbound email and every contract is a draft a human sends. CRM stages contractsent / closedwon are only ever set by the PandaDoc↔HubSpot integration, never by an agent — enforced in lib/hubspot.py , not just requested in a prompt. Every claude -p call pins an explicit model ( MODEL_DRAFT , MODEL_SCAN , MODEL_CLASSIFY — default Sonnet for drafting/analysis, Haiku for classification). DRY_RUN=1 by default; no script performs an external write in that mode. No ANTHROPIC_API_KEY , ever — all LLM calls ride the local claude CLI on a Claude Code subscription. Full detail: CLAUDE.md (operating guide) and docs/architecture.md (why + how enforced). Docs SETUP-INTERVIEW.md — the guided-import interview /setup runs docs/adapting-your-stack.md — swap matrix: which lib/ file to reimplement for a non-native CRM, transcription tool, chat app, contract tool, or email/calendar, with signatures frozen docs/architecture.md — trigger model, data flow, state store, human gates docs/setup-guide.md — per-tool wiring (HubSpot, Fireflies, Slack, PandaDoc, Stripe, Google OAuth, Calendly), then install + go-live steps docs/qa-playbook.md — the dry-run QA loop, go-live checklist docs/voice-training.md — how the voice profile is bootstrapped and kept fresh docs/cost.md — what the original system costs to run, and to build BLUEPRINT.md — the standalone, no-code system spec for rebuilding this natively elsewhere docs/faq.md — Q&amp;A from the original team's webinar, with pointers to what this repo implements docs/source-webinar.md — where this system came from, and what this repo does and doesn't carry from it License MIT — see LICENSE .
