How to Create Custom Claude Desktop Skills for Recurring Tasks
The Problem: Session Amnesia
Every morning I start Claude Desktop the same way. I ask for a code review. I explain my project structure. I describe what “good code” means for my team. Then Claude gives me feedback.
The next day, I repeat the whole process. Same prompts. Same explanations. Same context setup.
Day 1: Me: "Review this PR. Focus on error handling, no nested exceptions." Claude: "What's your error handling pattern?" Me: "We use try-catch with specific error messages..." Claude: [Review with adequate feedback]
Day 2: Me: "Review this PR." Claude: "What should I focus on?" Me: "Error handling, no nested exceptions..." [Same explanation again]
Day 3: [Same routine, same explanations]
Time wasted per day: 5-10 minutesDays per month: 20Total wasted: 100-200 minutes/monthI found a Reddit thread where developers shared the same frustration. One comment hit home: “Any recurring task, I go through the whole process with Claude once, then turn it into a skill that runs the same way every time.”
That’s the core idea: Package your recurring prompts into a reusable skill that Claude recognizes automatically.
What Are Claude Desktop Skills
A skill is a SKILL.md file in a specific directory. Claude Desktop reads these files and uses them as context for specific tasks.
Claude Desktop starts │ ▼Reads ~/.claude/skills/*/SKILL.md │ ▼Matches skill description to user request │ ▼Uses skill instructions as context │ ▼Executes task with embedded expertiseThe key insight from the Reddit thread: “Skills only make sense when they solve a problem for YOU or your business - your context is your moat.”
Generic skills exist. But the real value comes from skills that encode YOUR specific workflows, YOUR code review criteria, YOUR content creation process.
The Skill Structure
A skill lives in ~/.claude/skills/<skill-name>/SKILL.md. The file has YAML frontmatter and step-by-step instructions.
~/.claude/├── skills/│ ├── code-review/│ │ └── SKILL.md│ ├── seo-audit/│ │ └── SKILL.md│ └── content-creator/│ │ └── SKILL.md│ └── your-custom-skill/│ └── SKILL.mdThe SKILL.md format:
---name: Your Skill Namedescription: One-line description of what this skill does. Claude matches this to user requests.---
# Instructions
Step-by-step instructions that Claude follows when this skill is invoked.
Include:- What to check- How to format output- What to avoid- Examples of good vs badThe description field is critical. Claude uses it to decide when to invoke your skill. If the description is vague, Claude won’t know when to use it.
My First Skill: Code Review
I started with my morning code review routine. Here’s what I created:
---name: Code Reviewdescription: Review code for error handling, security issues, and code quality. Focus on specific patterns defined in instructions.---
# Code Review Process
## What to Check
1. **Error Handling** - No empty catch blocks - Specific error messages (not generic "operation failed") - Errors propagate with context - No swallowed exceptions
2. **Security** - No hardcoded secrets - Input validation present - No SQL injection patterns - Proper authentication checks
3. **Code Quality** - Functions under 50 lines - No deep nesting (max 4 levels) - Meaningful variable names - No duplicate code blocks
## Output Format
Provide review in this structure:Summary
[Overall assessment: approve/needs changes/block]
Critical Issues
[Issues that must be fixed before merge]
Suggestions
[Optional improvements]
Positive Notes
[What’s done well]
## What to Avoid
- Don't suggest stylistic changes without reason- Don't review unrelated files- Don't make changes yourself - only reviewI tested this skill by asking Claude to “review my latest commit.” The response matched my criteria exactly: it flagged an empty catch block I’d missed and suggested specific error message improvements.
What Went Wrong First
My first attempt at a skill failed. Here’s what I did wrong:
---name: reviewdescription: review code---
# do a code reviewcheck for errors and securityThe problems:
-
Vague description - “review code” matches too many requests. Claude couldn’t distinguish between code review and general code requests.
-
No structure - “check for errors and security” is too generic. Claude defaulted to standard review behavior, not my specific criteria.
-
Missing output format - Without format instructions, Claude’s output varied wildly between sessions.
Me: "Review this code"Claude: [Generic review, missed my specific criteria]Me: "You missed the empty catch block"Claude: "I wasn't told to check for that specifically"
Result: Skill didn't work, back to manual explanationsI iterated. Added specific criteria. Added output format. Added examples. The skill started working.
Second Skill: SEO Audit
After code review worked, I created an SEO audit skill for my blog posts.
The Reddit thread mentioned: “My seo-audit skill has an internal linking analysis - that’s not in the default skill, I added that myself.”
That’s the point. Generic SEO audit skills exist. But I needed MY specific criteria: internal linking patterns, keyword density thresholds, meta description length.
---name: SEO Auditdescription: Audit blog post for SEO quality: internal links, keywords, meta descriptions, heading structure.---
# SEO Audit Process
## Internal Linking Analysis
Check for:- At least 3 internal links per 1000 words- Links to related posts (not random pages)- Descriptive anchor text (not "click here")- Links distributed throughout (not clustered at end)
## Keyword Placement
- Primary keyword in title- Primary keyword in first 100 words- Primary keyword in at least one H2- Keyword density between 0.5% and 2.5%
## Meta Description
- Length: 120-160 characters- Includes primary keyword- Action-oriented (not passive description)- Matches page content
## Heading Structure
- Single H1 (title)- H2s for main sections- H3s for subsections- No skipped levels (H1 to H3)
## Output FormatSEO Score: [X/100]
Issues Found
[Each issue with specific location]
Improvements Made
[What was fixed]
Recommendations
[Optional enhancements]
This skill captures MY SEO criteria. Generic tools check keyword density. My skill checks internal linking patterns specific to my blog structure.
How to Identify Skill Candidates
Not every prompt needs a skill. The Reddit thread nailed it: “Skills only make sense when they solve a problem for YOU.”
I use this checklist:
Ask yourself:1. Do I do this task 3+ times per week?2. Do I repeat the same explanations each time?3. Does the output need consistent format?4. Is the task complex enough to need guidance?
If YES to all 4 → Create a skillIf NO to any → Keep as regular promptMy skill candidates:
| Task | Frequency | Repeated Explanations | Needs Format | Complex | Skill? |
|---|---|---|---|---|---|
| Code review | Daily | Yes | Yes | Yes | YES |
| SEO audit | Weekly | Yes | Yes | Yes | YES |
| Write blog post | Weekly | Yes | Yes | Yes | YES |
| Debug error | Random | No | No | Varies | NO |
| Quick question | Random | No | No | No | NO |
Debugging doesn’t fit because each error is different. The explanations vary. No consistent format needed. I keep that as regular prompts.
Step-by-Step Skill Creation
Here’s my process for creating a new skill:
Step 1: Document Your Current Process
I run through the task manually. Write down every prompt, every explanation, every correction I make.
Session 1 - Manual code review: Prompt 1: "Review this commit for error handling" Claude: "What patterns?" Prompt 2: "No empty catch blocks, specific error messages..." Claude: [Review output varies]
My corrections: - "You missed the nested exception" - "Format it as a list, not paragraphs" - "Don't suggest stylistic changes"
Session 2 - Repeat: Same prompts, same correctionsI do this 3-5 times. The patterns emerge. The repeated explanations become skill instructions.
Step 2: Create the Directory
mkdir -p ~/.claude/skills/my-skill-nameThe directory name should be descriptive. code-review, seo-audit, content-planner - names that match what the skill does.
Step 3: Write the SKILL.md
Start with frontmatter. The description is the most important field.
---name: Human-readable namedescription: WHEN to invoke this skill. Be specific.---Bad description: “Review code” Good description: “Review code for error handling, security issues, and code quality”
The good description tells Claude exactly when to use this skill.
Step 4: Add Instructions
I structure instructions in sections:
# Instructions
## What to Check[Specific criteria]
## Output Format[How to format the response]
## What to Avoid[Anti-patterns]
## Examples[Good vs bad examples]The “What to Avoid” section matters. Claude will try to help in many ways. Without limits, it might do things you don’t want.
Step 5: Test and Iterate
I invoke the skill and check output:
Me: "Review this commit"Claude: [Uses skill, outputs formatted review]
Check:- Did it use my criteria?- Is output in correct format?- Did it avoid the anti-patterns?
If NO to any → Edit SKILL.md, test againMy first code review skill missed empty catch blocks. I added that criteria explicitly. Next test worked.
Installing Skills from GitHub
Other developers share skills on GitHub. Installation is straightforward:
# Download the repositorygit clone https://github.com/user/skills-repo.git
# Copy specific skillcp -r skills-repo/skill-name ~/.claude/skills/Or via Claude Desktop Settings:
- Open Settings > Skills
- Click “Add Skill”
- Select the SKILL.md file
- Claude loads it automatically
The Reddit thread warned about this: “Don’t just copy skills. They need to match YOUR workflow.”
I install shared skills as starting points. Then I modify them to match my specific criteria.
Install shared skill │ ▼Test with my workflow │ ▼Identify gaps │ ▼Add my specific criteria │ ▼Test again │ ▼Keep iterating until it works for MECommon Mistakes
| Mistake | Symptom | Fix |
|---|---|---|
| Vague description | Skill never invoked | Make description specific to task |
| No output format | Inconsistent responses | Add explicit format template |
| Missing examples | Claude guesses criteria | Show good vs bad examples |
| Too many skills | Claude confused which to use | Keep skills focused, limit to 5-10 |
| Copying without adapting | Skill doesn’t match workflow | Modify to match your criteria |
| No iteration | First version doesn’t work | Test, fix, test again |
The ROI of Skills
I tracked time savings after creating my first three skills:
Before skills: Code review setup: 5 min/day × 20 days = 100 min/month SEO audit setup: 10 min/week × 4 weeks = 40 min/month Blog planning: 8 min/week × 4 weeks = 32 min/month Total: 172 min/month wasted on setup
After skills: Code review: 0 setup time SEO audit: 0 setup time Blog planning: 0 setup time Total: 0 min/month wasted
Time to create skills: 60 min (one afternoon)Payback period: Less than 1 monthSkills pay off quickly. The investment is small. The return is ongoing.
Summary
Claude Desktop Skills solve the session amnesia problem. Instead of repeating explanations every session, you encode them into SKILL.md files that Claude reads automatically.
The process is straightforward:
- Identify recurring tasks - What you do 3+ times per week
- Document your process - Run manually, note repeated explanations
- Create skill directory -
mkdir -p ~/.claude/skills/my-skill - Write SKILL.md - Specific description + detailed instructions
- Test and iterate - Fix gaps until skill works for YOU
The Reddit thread’s key insight: “Your context is your moat.” Generic skills exist. But the real value comes from skills that encode YOUR specific workflows.
Start with one task you repeat weekly. Create a simple SKILL.md. Test it. Iterate. Your recurring tasks are your automation opportunities.
Final Words + More Resources
My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me
Here are also the most important links from this article along with some further resources that will help you in this scope:
- 👨💻 Claude Desktop Skills Documentation
- 👨💻 Reddit: Skills changed everything for my workflow
- 👨💻 Anthropic Skills GitHub Repository
Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!
Comments