customer-support-builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited customer-support-builder (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Help users create a custom Claude Code skill for automating their customer support workflow.
This skill guides users through building a support automation system tailored to their company's tools (support platform, billing, database). The result is a working skill that can triage tickets, gather customer context, draft responses, and execute common support operations.
When this skill is invoked, ALWAYS begin with discovery questions. Never assume their tech stack.
Ask the user about their support infrastructure:
Required Questions:
Present their answers back in a summary and confirm before proceeding.
Create the skill directory structure in their repository:
mkdir -p support-automation/{scripts,references/common-responses}
touch support-automation/config.ts
touch support-automation/README.mdCreate .claude/skills/support/skill.md if they want it as a Claude skill (recommended).
Files to create:
config.ts - Environment variable loading and shared configurationREADME.md - Human-readable documentationskill.md - Claude skill definition (if using as skill)scripts/ - All automation scriptsreferences/common-responses/ - Response templatesBased on their stack, plan the scripts they'll need.
Core Scripts:
list-open-tickets.ts - List all open/pending tickets with automatic paginationget-ticket.ts <ticket_id> - Fetch complete ticket/conversation detailsreply-to-ticket.ts <ticket_id> "<message>" - Send response to customerclose-ticket.ts <ticket_id> - Mark ticket as resolvedget-customer-context.ts <customer_email> - Unified view across all platformsOptional but useful:
reopen-ticket.ts - Reopen closed ticketssearch-tickets.ts - Search ticket historylist-saved-replies.ts - Get canned responses from platformCore Scripts:
search-billing.ts <email> - Look up customer by emailissue-refund.ts <charge_id> <amount> - Process refundscancel-subscription.ts <subscription_id> - Cancel subscriptionsOptional:
create-coupon.ts - Generate discount codesupdate-subscription.ts - Modify subscriptionCore Script:
query-db.ts [query] - Run read-only SQL queries--tables to list all tables--schema <table> to show table structureAlways create:
check-setup.ts - Validates all required environment variables existCreate config.ts that loads environment variables:
import dotenv from 'dotenv';
import path from 'path';
// Load .env.local from the repository root
dotenv.config({ path: path.resolve(__dirname, '../.env.local') });
// Validate required environment variables
export function validateEnv(required: string[]) {
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
console.error('Missing required environment variables:', missing);
process.exit(1);
}
}Based on their stack, create helper libraries in lib/ directory:
lib/helpscout.ts)lib/stripe.ts)Key principle: Wrap the platform APIs with clean TypeScript functions that the scripts can use.
For each planned script:
Example structure:
#!/usr/bin/env tsx
import '../config';
import { getTicket } from '../../lib/support-platform';
async function main() {
const ticketId = process.argv[2];
if (!ticketId) {
console.error(JSON.stringify({ error: 'Ticket ID required' }));
process.exit(1);
}
try {
const ticket = await getTicket(parseInt(ticketId));
console.log(JSON.stringify({ success: true, ticket }));
} catch (error) {
console.error(JSON.stringify({
error: error.message,
ticketId
}));
process.exit(1);
}
}
main();Ask the user about their common support scenarios. Create templates for each:
Standard Templates to Always Include:
refund-approved.md - Confirming refund processedrefund-denied.md - Declining refund with explanationbug-report.md - Acknowledging and tracking bugsfeature-request.md - Responding to product suggestionsbilling-explanation.md - Clarifying billing questionsCompany-Specific Templates: Ask: "What are your most common support scenarios?" and create templates for each.
Template Format:
# [Scenario Name]
Use this template when [describe situation].
## Template
Hi [Customer Name],
[Message with placeholders]
Best,
[Your Name]
## Variables to Replace
- `[Customer Name]` - Customer's first name or "there"
- `[SPECIFIC_DETAIL]` - Description of what to replace
## Notes
- [Guidance on tone, timing, or special considerations]Create a comprehensive skill.md that defines the automated workflow. This is Claude's instruction manual.
#### 1. Overview Brief description of what the skill does.
#### 2. First Time Setup
## First Time Setup
Before using for the first time, verify environment:
\`\`\`bash
npx tsx support-automation/scripts/check-setup.ts
\`\`\`
Required environment variables in `.env.local`:
- SUPPORT_API_KEY
- BILLING_API_KEY
- DATABASE_URL (optional)#### 3. Automatic Workflow
## Workflow
**IMPORTANT**: When invoked, ALWAYS start by automatically listing and triaging all open tickets.
### 1. List and Triage Open Tickets
**Automatically run** `list-open-tickets.ts` to see ALL pending tickets (with automatic pagination):
[Document the triage process]
**Present to User:**
- Show total count of open tickets
- List CRITICAL and HIGH PRIORITY issues first
- Provide brief summary of each urgent issue
- **Suggest the single most important ticket to handle first**
- Ask "Should I start with this one?" so user can say "yes" to begin#### 4. Step-by-Step Workflow Document the complete flow:
#### 5. Triage Guidelines Define urgency categories and keyword patterns:
### 🚨 CRITICAL Indicators
- "double bill", "charged twice", "unauthorized"
- "still waiting", "did you see"
- Can't access account
- Same customer appearing multiple times
### ⚠️ HIGH PRIORITY Indicators
- "refund", "money back"
- "bug", "broken", "not working"
- Payment failed
- Subject starts with "Re:"
### 📋 MEDIUM PRIORITY
- Feature requests
- General questions
- Account changes
### 📧 LOW PRIORITY / NOISE
- Misdirected emails
- Spam
- Newsletter bounces#### 6. Script Documentation Document each script with usage examples.
#### 7. Best Practices
Always create a setup validation script:
#!/usr/bin/env tsx
import '../config';
const REQUIRED_VARS = [
'SUPPORT_API_KEY',
'BILLING_API_KEY',
// ... list all required vars
];
function checkSetup() {
const missing = REQUIRED_VARS.filter(key => !process.env[key]);
if (missing.length > 0) {
console.error('❌ Missing required environment variables:');
missing.forEach(key => console.error(` - ${key}`));
console.error('\nAdd these to .env.local');
process.exit(1);
}
console.log('✅ All required environment variables are set');
console.log('You\'re ready to use the support automation!');
}
checkSetup();Guide the user through testing:
Ask: "Would you like me to walk through testing each script?"
Create a comprehensive README.md:
Present to the user:
.env.localcheck-setup.ts to verify # Invoke the skill
/support
# It will automatically:
# 1. List and triage all open tickets
# 2. Suggest the most important one
# 3. Wait for "yes" to proceednpx tsxWhen the skill is invoked:
Claude: "I'll help you build a custom customer support automation skill! First, let me understand your support stack:
User answers questions
Claude: "Perfect! Here's what I understand:
I'll create a support automation skill with:
Should I proceed?"
User: "Yes"
Claude starts building...
Q: Can this work with any support platform? A: Yes! As long as they have an API, we can build scripts for it. Common platforms (Zendesk, Intercom, HelpScout, Front) are well-documented.
Q: Do they need to be technical? A: They need API access and the ability to run scripts. The skill does the coding for them.
Q: How long does this take? A: 30-60 minutes for a basic setup with 5-10 scripts and templates. More complex integrations take longer.
Q: Can they customize later? A: Absolutely! That's the point. They can add scripts, templates, and workflow steps as they identify repetitive tasks.
The goal is to create a working, practical tool that saves them time every day. Focus on:
Make it useful, not perfect.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.