voc-claude-skills
A Voice of Customer pipeline that cross-references feedback from calls, reviews, chat, and other sources to surface only corroborated patterns, routing actionable insights with exact customer quotes to the right people.
README
Voice of Customer skills for Claude Code
A VoC pipeline that refuses to report a pattern until several independent channels agree. Pulls from call recordings, review sites, internal chat, meeting notes and anything else you wire up. Weights each signal by who said it. Reports only what corroborates. Routes the result to the person who can act on it, with the customer's exact words attached.
Most "AI for customer feedback" workflows stop at summarize this. A summary of a hundred conversations is a paragraph nobody acts on, and the human is still the bottleneck. This is the system version: signal in continuously, confirmation applied mechanically, human attention spent only on judgment calls.
What it produces
Here is the shape of the output. Company names are fictional and the numbers are illustrative — this is a format example, not a real run.
SYNTHESIS — rule: 3+ independent channels, or 2+ with a tier-A account. Minimum 3 mentions.
──────────────────────────────────────────────────────────────────────────────
34 clusters in → 6 confirmed · 9 watchlist · 19 dropped
CONFIRMED
[HIGH ] Export is slow on large datasets
pain · 11 mentions · 3 channels (call, review, chat) · 7 accounts · A:2 B:8 C:1
3 independent channels
+4 unattributed signal(s) excluded from the count
[HIGH ] Cannot buy without SSO
request · 6 mentions · 2 channels (call, ticket) · 4 accounts · A:2 B:4
2 channels including a tier-A account
[MEDIUM] Onboarding felt long
pain · 5 mentions · 2 channels · 1 account · B:5
2 channels, no tier-A contributor — downgraded: all mentions from one
account (Northwind Trading)
WATCHLIST (single channel — not reported, kept for corroboration)
· Reporting filters are confusing (review, 3 mentions)
DROPPED (19) — kept in 2026-04-26-dropped.json for traceability
That last downgrade is the point of the whole thing. Five mentions of a pain looks like a trend right up until you notice they are all the same customer. This pipeline checks the account spread in code, every time, so nobody has to remember to.
What this gets wrong
Read this before you trust anything it outputs.
- The confirmation rule is a heuristic, not a truth test. Three channels can all reflect one loud market segment. It filters noise; it does not establish fact.
- Every source is a biased sample. Sales calls only contain people who took a meeting. Reviews only contain the delighted, the furious, and the incentivized. Chat only contains what a colleague found notable enough to paste. None of these is your market.
- Adding connectors makes confirmation easier, not truer. Wire up six channels and things
start confirming that should not. Raise
min_independent_sourceswhen you add sources. - Cross-source duplicates manufacture confidence. The same complaint relayed in chat, captured on a call, and filed as a ticket is one event, not three. Deduplication happens before profiling, and if you skip it the rule cannot save you.
- It cannot tell you what nobody said. The biggest reason people do not buy is usually invisible to every source here.
Verify it in thirty seconds
git clone <this-repo> && cd voc-claude-skills
npm install
npm run check
npm run check validates every skill's frontmatter, catches lowercase skill.md files that
break on Linux, scans for absolute paths and leaked credentials, syntax-checks every script, and
confirms the threshold config parses. No credentials needed. It exits non-zero on failure, so it
works in CI.
Then, with nothing configured yet:
node scripts/synthesize.js examples/clusters.sample.json --out /tmp/voc-demo
That runs the actual confirmation rule against sample clusters and shows you exactly what confirms, what goes to the watchlist, and what gets dropped. It is the core of the system and it runs without an API key.
Architecture
calls · reviews · chat · notes · custom
│
▼
/voc-source-* normalize to one signal shape
│
▼
/voc-profiler CRM context, ICP fit, weight tier
│ (tier U = unattributed = quarantined)
▼
/voc-synthesize cluster by meaning (subagents)
│ apply the rule (code)
▼
/voc-route testimonial · case study · objection map
│ product feedback · exec memo
▼
/voc-dispatch outreach emails · copy briefs
PM one-pagers · exec memo
Clustering is judgment, so a model does it. Counting is not, so code does it. The
confirmation rule lives in scripts/synthesize.js reading config/thresholds.json, and nowhere
else — it is a threshold you tune, not a paragraph a model interprets differently each run.
Skills
| Skill | What it does |
|---|---|
/voc-orchestrator |
The weekly run. All six phases, with preflight. |
/voc-source-calls |
Pull transcripts from your call recorder |
/voc-analyze-calls |
Transcripts → prospect intelligence report |
/voc-source-reviews |
G2, Capterra and friends → messaging brief. Costs money. |
/voc-source-chat |
Customer quotes your team pasted into Slack |
/voc-source-notes |
AI meeting notes, for the conversations the recorder missed |
/voc-source-custom |
Surveys, tickets, CRM email, anything else |
/voc-profiler |
Attach CRM context and weight to one signal |
/voc-synthesize |
Cross-source confirmation |
/voc-route |
Send each theme where it gets acted on |
/voc-dispatch |
Generate the actual deliverables |
Setup
Full walkthrough in docs/SETUP.md. The short version:
cp .env.example .env # call recorder + tokens
cp .mcp.json.example .mcp.json # MCP servers
cp context/product-context.example.md context/product-context.md
Then fill in product-context.md. It takes about twenty minutes and it is the difference between
useful output and generic themes.
You do not need everything. The pipeline runs with one source and tells you honestly that nothing can reach high confidence. Start with calls, add chat, then reviews.
After connecting any MCP server, run /mcp and copy the exact tool names into the relevant
skill's allowed-tools. Tool namespaces differ between servers for the same product, and a
skill that declares a name your server does not expose fails at its first call while looking like
it ran. This is the most common setup failure by a wide margin.
Cost
Everything is free except review mining, which runs paid scrapers. A four-domain run typically lands between $2 and $8. Apify's free tier is $5 of credit total, not monthly — one wide run can consume it. See docs/COST.md before your first review run.
Privacy
This pipeline writes customer conversation transcripts to disk. They are personal data under GDPR and CCPA.
- Point
VOC_OUTPUT_DIRat a local, gitignored path. Not Dropbox, not iCloud. The orchestrator's preflight warns you, but check it yourself. - Recording laws vary by jurisdiction. This tool assumes you already have lawful recordings.
- Tell your team the chat harvesting is running.
- A public review is not permission to put someone's words in an ad with their logo. Nothing in this repo ever marks a quote as approved.
Requirements
Node 18+. Claude Code. A call recorder with a transcript API is the only near-essential dependency; everything else is optional.
Contributing
Adding a call-recorder adapter is the most useful contribution — see
scripts/providers/README.md, it is four functions. Run
npm run check before opening a PR.
License
MIT. See LICENSE.
Frameworks referenced in the skills are credited in CREDITS.md.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.