Nick Winder

Nick Winder

Software & AI Developer | 13 years of building stuff

Building Specialized AI Agents with Claude Code Meta

Nick Winder

Learn how to build domain-specific AI agents with Claude Code Meta. Automated project setup with custom skills, MCP integrations, and persistent context for developers.

Building Specialized AI Agents with Claude Code Meta

I've become someone who uses Claude Code as my main agent for practically everything. And I mean everything—from building this blog to tracking my running workouts to spinning up new side projects. I'm basically that person who asks Claude Code what I should ask Claude Code.

But here's the thing: generic AI agents are fine for quick questions, but they fall apart when you need them to actually do things. There's a difference between a friend who gives great advice and a friend who shows up with a truck when you need to move furniture. Real work happens with files, code, APIs, and data. That's where Claude Code shines—it's an AI agent that lives in your development environment, has access to your filesystem, can run commands, and integrates with external services through MCP (Model Context Protocol) servers.

The problem? Setting up a properly optimized Claude Code project is complex. You need the right skills, agents, MCP integrations, permissions, and documentation. Do it wrong, and you're fighting with configuration files instead of getting work done. Picture trying to teach someone to use your TV remote—there are seventeen buttons and only three of them actually matter, but good luck figuring out which ones.

That's why I built claude-code-meta: a meta-project that generates other Claude Code projects, pre-configured and optimized for specific use cases. It's Claude Code for people who are tired of setting up Claude Code.

Why I Went All-In on Claude Code

Let me back up for a second. Why Claude Code specifically?

Most AI agents today are chatbots with extra steps. They can answer questions, generate code snippets, maybe search the web. But when you ask them to "build a training plan from my Strava data" or "publish this blog post and promote it on social media," they hit a wall. They're not integrated into your workflow.

Claude Code is different because it's actually environment-aware. It reads and writes files directly, runs bash commands like npm and git and python, and integrates with external APIs through MCP servers. It maintains context across your entire project and has specialized skills and agents for domain-specific tasks. It's not just answering questions—it's doing the work. Think of it as a very competent intern who never needs coffee breaks and won't judge you for your variable names.

This makes it perfect for file-centric and code-centric workflows. Need to analyze data in a SQLite database? Claude Code can query it. Need to fetch workouts from Strava and generate a training plan? It'll do that too. Want to write a blog post, optimize it for SEO, and deploy to Vercel? All of that is possible—if you set it up right. (Spoiler: the "if you set it up right" part is the hard part, which is why this whole blog post exists.)

The Problem: Configuration Complexity

Here's what you need to set up a proper Claude Code project: a .claude/CLAUDE.md file for project memory and guidelines, a .claude/settings.json for permissions, a whole .claude/skills/ directory for custom workflows, .claude/agents/ for specialized sub-agents, an .mcp.json file for MCP server integrations, helper scripts in Python or bash for calculations, and comprehensive documentation for setup and usage. It's a lot.

And every project is different. A running coach needs Strava integration and training zone calculations. A blog needs SEO optimization and social media posting. A data analysis project needs database connections and visualization tools. You can't just copy-paste one project to another and expect it to work, which I learned the hard way after trying to use my running coach's SQLite schema to store blog posts. Turns out "pace per mile" is not a useful field for TypeScript tutorials.

Doing this manually for every new project is tedious and error-prone. You forget to set permissions correctly, you misconfigure MCP servers, you miss key skills that would make your life easier. I kept copy-pasting from previous projects and tweaking things until they worked, which was basically the software engineering equivalent of trying to assemble IKEA furniture without the instructions while your spouse insists they "know how it goes" without looking at the diagram. There had to be a better way.

Enter claude-code-meta

I thought about making this a Claude Code skill. But I realized something: skills are great for executing workflows, but terrible for knowledge management. Trying to teach someone to cook by only giving them recipes means they can follow the steps, but they don't understand why you sear the meat first or what "fold in the egg whites" actually means.

When Claude needs to understand a complex domain (like training periodization or SEO best practices), a skill's YAML frontmatter and procedural steps aren't enough. It needs reference documentation, examples, patterns, and context. It needs to know not just what to do, but why to do it and when it makes sense.

That's where CLAUDE.md comes in. Think of it as a project's long-term memory—a place to store domain knowledge, writing style, configuration details, and workflow documentation. Claude reads it before every interaction and uses it to understand your project deeply. There's a massive difference between hiring someone who's read the employee handbook versus someone who's worked there for three years and knows all the unwritten rules.

So instead of cramming everything into a skill, I built claude-code-meta as a meta-project. It's a Claude Code project that creates other Claude Code projects. Think of it like a project factory—it uses templates, agents, and automation to generate optimized setups, includes comprehensive reference documentation for MCPs and patterns, and runs an interactive workflow that researches, recommends, and validates everything before you commit to it.

How It Works: 8-Phase Setup Process

When you invoke the /project-creator skill, it guides you through an interactive workflow that honestly feels kind of magical the first time you use it.

Phase 1: Discovery. Claude asks you targeted questions about what you're trying to build. What's the purpose? Where should it live? What tasks will you actually perform? What integrations do you need? Imagine a really good requirements gathering session, except the AI is doing it instead of a project manager, which means it won't derail into a 45-minute discussion about whether we should also rebuild the entire authentication system while we're at it.

Phase 2: Research & Recommendations. This is where it gets interesting. The system auto-updates its MCP server registry by searching the web for the latest packages, then selects an appropriate template based on your answers (could be software-dev, content-creation, personal-tracker, data-analysis, automation, or just the base template if your needs are weird enough that none of the others fit). It researches relevant MCP servers and scores them by how well they fit your use case, then designs 2-4 custom skills tailored specifically to your domain. Picture a really nerdy personal shopper who gets genuinely excited about finding the perfect npm package for your use case.

Phase 3: Approval. It presents you with a comprehensive plan showing the template it picked, which MCPs it wants to install, what skills it's going to generate, and the overall structure. You can sign off or give feedback, and it'll iterate until you're happy.

Phase 4: Skill Generation. Now it uses a specialized skill-generator agent to create SKILL.md files with proper YAML frontmatter and generates supporting scripts in Python or bash for any calculations or automation you need.

Phase 5: Project Scaffolding. It runs init_project.py to create your directory structure, copies template files with variable substitution (so your project name and paths are correct), installs the generated skills, and creates agents and documentation.

Phase 6: MCP Integration. This part is interactive. For each recommended MCP server, it asks if you want to install it now (automated via install_mcp.py) or get manual instructions for later. Then it verifies everything with claude mcp list to make sure it actually worked.

Phase 7: Validation. It validates all your JSON syntax in settings and MCP configs, checks YAML frontmatter in skills and agents, verifies permission patterns, and generally makes sure you didn't end up with broken configuration files.

Phase 8: Handoff. Finally, it gives you a comprehensive summary report listing all the files it created, which servers it installed, what setup is still pending, and clear next steps. It also documents all the skills and agents you now have available.

The result? A production-ready Claude Code project in 10-15 minutes instead of the hours of manual setup and debugging you'd otherwise spend.

Real Example 1: Running Coach

I built a running training coach using claude-code-meta, and it's honestly become my actual coach. It fetches my workout data from Strava, stores health metrics like HRV and sleep quality in SQLite, and analyzes everything to generate personalized training plans. Basically a running coach who never sleeps, has perfect memory of every workout you've ever done, and won't give you that disappointed look when you admit you skipped long run day to binge-watch Netflix.

The interesting parts are what claude-code-meta generated automatically. It created four custom skills: /analyze-performance pulls my Strava data and identifies trends like overtraining indicators (which is code for "you're doing too much, slow down before you break yourself"), /plan-training builds periodized plans with proper training zones, /prepare-race predicts my finish times using multiple validation methods and creates pacing strategies that account for hills, and /import-health-data logs metrics from my Coros watch and flags concerning trends before I get injured. It's basically trying to save me from myself.

It set up the Strava MCP for read-only access to my activities and SQLite MCP for local health metrics storage. It even created two specialized agents—a running-coach agent using Sonnet for coaching advice, and a data-analyst agent using Haiku for statistical analysis. The cost optimization is built in.

Why It Works

This setup demonstrates what domain-specific intelligence actually looks like in practice. The CLAUDE.md file is loaded with actual sports science—Jack Daniels' VDOT tables (yes, that's his real name, and no, it's not the whiskey guy), Pete Pfitzinger's periodization methodologies, evidence-based recommendations like the 80/20 rule and the 10% weekly mileage increase guideline. The skills handle complete workflows from fetching data to generating plans. The agents provide specialized expertise depending on whether I need coaching advice or statistical analysis.

It handles real-world complexity like multi-source data (Strava API plus local health metrics), time-series analysis across weeks and months, and validation to make sure the recommendations make sense and won't accidentally have me running a marathon every day. And it's privacy-first—everything lives in local SQLite, and Strava access is read-only, so it can judge my performance but can't post embarrassing comments about my pace on my activities.

I can literally type /plan-training and get a full 16-week marathon plan customized to my current fitness level based on my recent workouts. That's the power of a properly optimized Claude Code project.

Real Example 2: This Blog

I also used claude-code-meta to build this very blog. It's a Next.js site with a complete content creation and social media workflow.

The generated skills cover the entire publishing pipeline. /notes-to-post transforms my rough notes into polished blog posts that actually sound like me (which is kind of eerie, like hearing your voice on a recording but somehow better). /refine-draft reviews for technical accuracy and style consistency. /optimize-seo handles keyword analysis and meta tags without making the post sound like it was written by a robot trying to game Google. /deploy-blog runs all the pre-flight checks, commits to git, and triggers Vercel deployment.

Then there's the social media automation, which is where it gets really interesting and slightly terrifying. /generate-social-posts reads published posts and creates platform-optimized drafts—punchy 280-character tweets for X with hashtags, and longer 1300-2000 character LinkedIn posts with personal stories. Everything goes to a drafts folder for human review because I'm not completely trusting an AI to speak for me on social media without checking first. I've read enough sci-fi to know how this movie ends. /post-to-social handles the actual posting with explicit confirmation, and /social-analytics tracks performance metrics and recommends optimal posting times (turns out Tuesday at 2pm is not when developers are on LinkedIn, who knew).

The Twitter and LinkedIn MCPs connect directly to the APIs with my credentials, so the whole workflow is automated but still under my control.

Why It Works

The CLAUDE.md file defines my brand voice, writing style, SEO guidelines, and publishing checklist in ridiculous detail. When I run /notes-to-post, Claude doesn't just convert bullet points to sentences—it writes in my voice with the same technical depth and sense of humor I'd use if I were writing it myself. It's kind of eerie the first time you see it happen.

The skills handle complete workflows from start to finish. I can go from rough notes to a polished draft to SEO optimization to deployment without switching contexts. Then the social media workflow kicks in—published post generates social drafts, I review them, post to X and LinkedIn, and track analytics. It's all connected.

I can go from rough notes to a published blog post with social promotion in under 30 minutes. And the wild part is that it all feels like my writing because the project is configured to understand my style, not some generic content-marketing voice.

Why This Beats Skills Alone

You might ask: "Why not just make this a global skill instead of project templates?"

Because context matters.

A skill is stateless—it doesn't know your project structure, your data schemas, your writing style, or your domain. It's a procedure without memory. Every time you invoke it, it starts from scratch. You know that friend who asks you to tell them the whole story every time you see them because they never remember where you left off? Exhausting.

A properly configured Claude Code project, on the other hand, has persistent context. The CLAUDE.md file acts as long-term memory storing domain knowledge, style guidelines, and patterns. Skills are executable workflows with helper scripts that know where your data lives. Agents provide specialized expertise for different tasks. MCP servers give you live integrations with external services. Permissions are scoped to only what's actually needed. The project structure itself—organized directories for data, content, docs—tells Claude how your project works.

This creates a persistent context that Claude can leverage across sessions. It's not just executing a skill in isolation—it's working within a well-defined environment that's been tailored specifically to your needs. The difference between asking a stranger for directions versus asking someone who lives in your neighborhood.

Concrete Example

If I had a global /write-blog-post skill, it wouldn't know my writing style. It wouldn't know my SEO targets or my content directory structure. It wouldn't know which social media accounts I use or have access to Vercel or git. It would be generic and stateless, starting fresh every time.

But with my blog project, everything is integrated. CLAUDE.md defines my voice, tone, and style in detail. Skills are scoped to content/drafts/ and content/published/ directories. MCP servers connect directly to X and LinkedIn with my credentials. The deployment skill knows my Vercel config and git workflow. Everything works together as a cohesive system instead of a collection of disconnected tools.

The Templates

claude-code-meta includes 6 pre-built templates:

Template Best For Example Skills
software-dev Web apps, APIs, CLI tools code-review, test-runner, deploy-helper
content-creation Blogs, articles, social media draft-content, seo-optimize, publish-workflow
personal-tracker Fitness, habits, finance log-entry, analyze-trends, export-data
data-analysis Statistics, ML, visualization load-data, clean-data, analyze-dataset, visualize-trends
automation Scripts, DevOps, workflows create-script, schedule-task, monitor-jobs
base Custom/other purposes Fully customizable

Each template includes pre-configured permissions, common MCP server recommendations, starter skills, documentation structure, and helper scripts. But the real power is in the customization. The skill-generator agent creates domain-specific skills based on your actual needs, not just generic templates. It's the difference between getting a prefab house and getting a house designed specifically for how you live.

Key Lessons Learned

After building two production projects with claude-code-meta, here's what I've learned.

Documentation Is Code

CLAUDE.md is as important as your source code. It's the persistent memory that makes Claude actually understand your project instead of just guessing. Invest real time in documenting your domain knowledge (like training theory for the running coach or SEO principles for the blog), your writing style and brand voice if applicable, your data schemas and structures, your workflow patterns, and examples of common tasks. This isn't busywork—it's the difference between Claude understanding your domain and Claude giving you generic advice.

Skills Should Be Workflows, Not Functions

Don't create skills for single operations like "read file" or "run command." That's pointless. Create skills for complete workflows: fetch data, process it, analyze it, generate insights, save a report. Or write a draft, refine it, optimize for SEO, deploy it, and promote it on social media. The skill should handle the entire thing from start to finish, not just one step.

Use Agents for Specialized Expertise

Different tasks need different levels of sophistication, and you should match the model to the task. Haiku is fast and cheap and great for data processing and simple analysis. Sonnet is balanced and good for most tasks including coaching and content creation. Opus is expensive but worth it for complex reasoning and strategic planning. Don't use Opus to parse CSV files, and don't use Haiku to architect your system. Match the tool to the job. Same principle as hiring—you don't need a senior principal architect to fix typos, and you don't want an intern designing your database schema.

MCP Servers Are Game-Changers

Integrating external services via MCP makes Claude Code incredibly powerful. You get live data access to things like Strava workouts and social media metrics. You can do database operations—SQLite queries without writing SQL by hand, which is good because I can never remember if it's JOIN ON or JOIN WHERE and I refuse to look it up every single time. You can interact with APIs like posting to X or LinkedIn. You can read files from Google Drive or Notion databases. It turns Claude from a chatbot into something that actually connects to the rest of your digital life. You know those universal remotes that have seventeen buttons and only three actually work? This is the opposite of that.

Local-First Is Better

Store data locally in SQLite or on the file system rather than relying on cloud services. The benefits are huge: privacy and control over your data, no rate limits, offline access, faster operations because there's no network latency, and lower costs because you're not paying for cloud storage or API calls. Unless you specifically need cloud sync, local-first is almost always the right choice.

Validation Matters

Always validate your configurations. Check JSON syntax in settings.json and .mcp.json. Validate YAML frontmatter in skills and agents. Verify permission patterns. Make sure environment variables are set correctly. The validate_project.py script catches about 90% of issues before you even try to run the project, which saves you from the frustrating experience of debugging config files for an hour.

Progressive Enhancement

Start simple and add complexity as needed. Begin with the base template, add MCP servers one at a time, create skills for workflows that you actually repeat, and add agents when you need specialized expertise. Don't over-engineer from day one. You'll end up with a bunch of complexity you don't need, and it'll just slow you down.

The Technical Details

For those who want to dig deeper, here's how claude-code-meta works under the hood:

Template Structure

Templates use variable substitution:

{{PROJECT_NAME}}    → Display name
{{PROJECT_PATH}}    → Absolute path
{{PROJECT_TYPE}}    → Template name
{{TIMESTAMP}}       → Creation timestamp
{{DESCRIPTION}}     → Project description

Files ending in .template are processed during initialization. Everything else is copied as-is.

Initialization Script

init_project.py is pure Python (stdlib only) for portability:

  • Recursive template tree copying
  • Variable substitution in all text files
  • Binary file handling
  • Path validation
  • Interactive overwrite confirmation

Usage:

python3 scripts/init_project.py \
  --path /absolute/path/to/project \
  --template software-dev \
  --name "My Project" \
  --description "Optional description"

Skill Generator Agent

The skill-generator agent creates domain-specific skills:

  • YAML frontmatter with name and description
  • Detailed workflow steps with error handling
  • Concrete examples (3-5 scenarios)
  • Helper scripts when needed
  • Reference materials
  • Best practices

It follows naming conventions:

  • Kebab-case: log-workout, analyze-performance
  • Verb-noun format: Action + target
  • Descriptive: Clear purpose from name alone

MCP Installation

install_mcp.py handles automated MCP server setup:

  • Validates package names
  • Installs via npm/npx
  • Updates .mcp.json configuration
  • Prompts for environment variables
  • Verifies with claude mcp list

Validation

validate_project.py checks:

  • JSON syntax (catch parse errors early)
  • YAML frontmatter in skills/agents
  • Permission patterns (whitelist format)
  • MCP server configurations
  • File structure consistency

What's Next?

I'm actively using claude-code-meta for new projects. Some ideas I'm exploring: a fitness tracker that integrates with multiple wearables like Garmin and Whoop and Coros (because apparently one running tracker isn't enough for me), a personal finance system to track expenses and analyze trends and forecast budgets, a learning tracker to log reading and courses and projects, and a recipe manager to store recipes and plan meals and generate shopping lists.

The pattern is clear: any domain that involves files, data, APIs, and repeated workflows is a perfect fit for a specialized Claude Code project. If you find yourself doing the same multi-step tasks over and over, you should probably build a Claude Code project for it.

Try It Yourself

If you work with Claude Code regularly, I highly recommend trying this approach. Identify a domain where you do repeated tasks—could be content creation, data analysis, automation, whatever. Use claude-code-meta to generate a project for it. Iterate on the skills and documentation as you use it and figure out what works. Let Claude Code become your specialized assistant for that domain.

You'll be amazed at how much more productive you become when your AI agent actually understands your domain instead of just being a generic chatbot that has to relearn your context every time you talk to it.


Want to learn more? Check out claude-code-meta on GitHub or ask me about it on X/Twitter.

Questions or feedback? I'd love to hear what specialized projects you build. Drop me a line at nicholastwinder@gmail.com or connect on LinkedIn.