Part 3 of a 5-part series on building production-grade skills for Claude
Previous: Part 2: Anatomy of a Skill | Next: Part 4: Skill Patterns That Work
The most effective skill creators start by doing the task manually with Claude, iterating until it works, and then extracting the winning approach into a skill rather than beginning with YAML. This part walks through that process.
Step 1: Start With Use Cases, Not Code
Before writing anything, identify 2 to 3 concrete use cases. A well-defined use case looks like this:
Use Case: Project Sprint Planning
Trigger: User says "help me plan this sprint" or "create sprint tasks"
Steps:
1. Fetch current project status from Linear (via MCP, or Model Context Protocol)
2. Analyze team velocity and capacity
3. Suggest task prioritization
4. Create tasks in Linear with proper labels and estimates
Result: Fully planned sprint with tasks created
Ask yourself four questions:
- What does a user want to accomplish?
- What multi-step workflow does this require?
- Which tools are needed (built-in or MCP)?
- What domain knowledge or best practices should be embedded?
Step 2: Iterate on a Single Task First
This is the most important advice in the entire guide: iterate on one challenging task until Claude succeeds, then extract the winning approach into a skill.
Open Claude.ai and manually work through your hardest use case, paying attention to where Claude needs guidance, where it makes wrong assumptions, and what instructions produce the best results. This leverages Claude’s in-context learning and gives you faster signal than writing a skill blind.
Once you have a conversation where Claude nails the workflow, you have your skill’s instruction set.
Step 3: Define Success Criteria
Before building, decide what “working” means. These are aspirational benchmarks rather than precise thresholds, and you should accept that there’s a vibes-based element to evaluation.
Quantitative targets:
| Metric | How to Measure |
|---|---|
| Skill triggers on ~90% of relevant queries | Run 10 to 20 test queries, track auto-trigger rate |
| Completes workflow in X tool calls | Compare same task with and without skill, count calls |
| 0 failed API calls per workflow | Monitor MCP server logs during test runs |
Qualitative targets:
| Metric | How to Assess |
|---|---|
| Users don’t need to prompt about next steps | Note how often you redirect or clarify during testing |
| Workflows complete without user correction | Run the same request 3–5 times, compare outputs |
| Consistent results across sessions | Can a new user accomplish the task on first try? |
Step 4: Build the Skill
Now write it. Here’s a complete, minimal skill for a Django data pipeline setup:
django-pipeline-setup/
├── SKILL.md
└── scripts/
└── validate_models.py
SKILL.md:
---
name: django-pipeline-setup
description: >
Sets up Django data ingestion pipelines with models, management
commands, and Celery tasks. Use when user asks to "create a pipeline",
"set up data ingestion", "build a Django ETL (Extract, Transform, Load)", or mentions
"management command" with data sources.
metadata:
author: your-name
version: 1.0.0
---
# Django Pipeline Setup
Creates production-ready data ingestion pipelines following
domain-driven design principles.
# Instructions
## Step 1: Define the Data Source
Ask the user for:
- Source name and type (API, CSV, S3, database)
- Update frequency (real-time, hourly, daily)
- Data schema or sample payload
## Step 2: Generate Models
Create Django models in the appropriate app:
- Use `TimeStampedModel` base class
- Add `source` and `ingestion_timestamp` fields
- Include proper indexes for query patterns
- Add `__str__` and `Meta.ordering`
Run validation:
```bash
python scripts/validate_models.py
Step 3: Create Management Command
Generate management/commands/ingest_{source_name}.py:
- Idempotent execution (safe to re-run)
- Proper logging with structlog
- Error handling with retry logic
--dry-runflag support
Step 4: Set Up Celery Task
Create periodic task in tasks.py:
- Match frequency to user’s requirements
- Add
@shared_taskwithbind=Truefor retries - Configure
celery-beatschedule
Step 5: Verify
- Run management command with
--dry-run - Check model migrations generate cleanly
- Verify Celery task registration
Examples
Example: CSV from S3
User says: “Set up a daily pipeline to ingest CSV files from S3”
Actions:
- Create
DataSourcemodel with S3 path field - Create
ingest_s3_csvmanagement command using boto3 - Create Celery task scheduled for 2 AM daily
- Generate migration and verify
Troubleshooting
Models won’t migrate
Cause: Circular imports or missing app in INSTALLED_APPS Solution: Check import order, verify app registration
Celery task not discovered
Cause: Missing autodiscover_tasks() in celery.py
Solution: Ensure app.autodiscover_tasks() is called in celery config
### Step 5: Use the Skill Creator
If you want to accelerate the process, the `skill-creator` skill is built into Claude.ai. Just say:
Use the skill-creator skill to help me build a skill for [your use case]
It will walk you through use case definition, generate properly formatted YAML frontmatter, suggest trigger phrases, and flag common issues. After building, you can ask it to review:
Review this skill and suggest improvements
The skill-creator helps you design and refine, but it doesn't run automated tests or produce quantitative evaluations, which is what we'll cover in the next step.
### Step 6: Upload and Test
**For Claude.ai:**
1. Zip your skill folder
2. Go to Settings → Capabilities → Skills
3. Click "Upload skill"
4. Select the zip file
**For Claude Code:**
Place the skill folder in the Claude Code skills directory.
**For API:**
Use the `/v1/skills` endpoint or add skills to Messages API requests via the `container.skills` parameter. Note: Skills in the API require the Code Execution Tool beta.
After upload, immediately test with your defined use cases. Start with the obvious triggers, then try paraphrased requests, then verify it doesn't fire on unrelated queries.
### Quick Debugging
If your skill doesn't trigger, ask Claude directly:
When would you use the [skill-name] skill?
Claude will quote the description back. This immediately reveals what's missing from your trigger phrases.