The last two posts here were about the skills in this plugin — one learns my writing voice from my published posts, the other revises a draft section by section. Neither can do anything without a way to reach Ghost: to read what I've already posted, create a draft, update one that's already up. That's the rest of the plugin, a small MCP server wrapping the Ghost Admin API. The server reaches Ghost with several tools create, read, update, images, and site info. Everything that takes judgment st
Fixing a draft used to mean regenerating the whole post. When a section didn't sound right, the new version would correct it and overwrite three others that were already fine, so I kept a corrected copy open in the Ghost editor, regenerated, and pasted the good paragraphs back in whenever a draft dropped them. Four rounds in, the post still wasn't right. The revision step in the plugin came out of that. It works one section at a time: it changes a section, leaves the rest of the draft alone, a
Your writing voice is already on the page. Everything you've published is a record of how you actually write — consistent enough that a tool can learn it from your posts, even if you couldn't spell it out yourself. ghost-blog-mcp is the Claude Code plugin I draft and edit these posts with. The first thing it did on this blog was read everything I'd published and build a style guide out of it, so its drafts start in my voice instead of a generic one — then I edit from there. You can point it at y
Asked Claude Code with Fable 5 to write some API docs based on the code, and it did, and also pointed out some bugs in the API, which it is now fixing, and updating the docs to match the fixes.
Building an Anthropic-native LLM gateway in TypeScript
So far all my Claude Code work has been with Laravel. Today I'm starting a new project with WordPress, and will be interested to see how Claude does in a slightly different domain.
I am now a member of the "Claude code deleted something that it shouldn't have from my database" club! Good thing it was a development database.
A few days ago I wrote about what happens when you tell Claude a task is urgent — the agent silently introduces correctness bugs and self-reports as confident as ever. The closing section proposed a sharper question: if the bugs are framing-driven rather than caused by any real time pressure (of which there is none in a sandbox), then lying to the agent about urgency should neutralize the bug pattern without needing any CLAUDE.md intervention. Reframe an urgent task as archived cleanup, the hypo
I've been working with Claude Code long enough that the laughably bad time estimates have become background noise. Claude thinks a 90-second task takes 30 minutes. I ask it to plan a sprint that I know we can do in a few days and it thinks it will take weeks. It's annoying but easy to ignore. What's harder to ignore is what happens when you introduce a deadline — tell Claude it's end-of-sprint, a demo is tomorrow morning, something needs to ship today and the behavior changes. And because the
One of the best parts about Claude Code is that the "code" in the name is misnomer. The fact is that it can be used for a wide variety of things. I wanted to use it to help with some woodworking projects. But part of the problem was that I didn't know where to start. I am very inexperienced at this which leads me to lean in to using Claude Code to help with research and planning. So that's where I got started can we work on creating some plugins/skills/agents and anything else that would be
Things move fast. I recently wrote about using the adversarial models with my feature-workflow plugin a few weeks ago — ripping out the internal self-review skill and replacing it with external reviewers. Different model, read-only, posting structured critiques on the PR. The core insight was that a different model catches things the implementing model doesn't, because it isn't agreeable to its own work. That part was right and hasn't changed. But the process was cumbersome and time consuming.
Three months ago I wrote about a feature-workflow plugin that added structure to how I work with Claude Code. Capture ideas, plan them, implement them, ship them. The structure helped — I stopped losing track of what I was building mid-session and started actually finishing things. But the review step was weak. The plugin had its own internal review skill, and Claude was reviewing its own code but it was too agreeable. The same blind spots persisted across features. I'd work on something and i
MixCraft started with static API keys—generate one from the web portal, paste it into your Claude Code config. The mx_ prefixed keys had no expiration, lived in shell history and dotfiles, and revoking one meant generating a new key and updating every client. Service tokens from third-party APIs expired after an hour with no refresh mechanism, so users would get silent failures mid-session. I needed to replace the whole auth model with OAuth. But worse, it didn't work well with claude.ai because
MixCraft connects Claude to Apple Music. The infrastructure post explains why the server is hosted remotely — Apple Music requires server-side JWT signing with a private key, so a local MCP server wasn't an option. This post covers the other side: the Apple Music integration itself, the adapter pattern that makes the server extensible, and the Claude Code plugin that ships alongside it. The source is at github.com/schuettc/mixcraft-app. The Adapter Interface The MCP server doesn't call Ap
How I developed a Fastify API from scratch with Claude Code
How I developed a Hono API from scratch with Claude Code
A friend had been building a web app with Claude Code — Express server, vanilla HTML/CSS/JS, in-memory data storage. The app worked and kept growing. But it was running on her laptop with no deployment, no database, and no auth. She needed to get it to AWS and had limited experience with cloud infrastructure. I couldn't see her code, so I built a Claude Code plugin that could walk her through the deployment. The plugin analyzes an Express app, converts routes to Lambda functions, sets up S3 +
Design is perhaps the software paradigm most wedded to the mouse and the GUI. But there’s no reason it can’t be text-driven.
I needed a plugin that could run a multi-phase workflow autonomously — start a task, wait for it to finish, check the result, start the next one. I built it in Claude Code using Stop and SubagentStop hooks, then rebuilt it in OpenCode using session.idle events. Both work. The orchestration patterns are different, and so are the tradeoffs. This post covers the general pattern. The examples are distilled from both implementations but apply to any workflow where phases run sequentially, each prod
The feature-workflow plugin tracks features in files (docs/features/[id]/plan.md), but that state isn't visible without reading the files. Multiple terminal tabs running Claude Code have no indication of which feature each is working on. The statusline integration solves this by writing the current feature ID to a session file that a custom statusline script reads and displays. This requires two systems working together. The plugin writes session state when features transition. The dotfiles us
A short guide to using Claude Code with some essential plugins for a better, pair programming experience
With proper workflows and setup, Claude Code has been amazing for me to get a project 80% complete. Where I have struggled (not just with Claude Code, but in general) is to complete a project. I think I did fairly well with this project: https://github.com/schuettc/plex-collection-creator with a deliberate effort to publish before I had every single thing I might want completed. One of the things that helped me was a workflow I have been working on. Very frequently, while working on a project,