Teaching Gemini My Voice: A Journey into Skill Creation

When working with Large Language Models (LLMs) to generate content, there’s always a risk of losing your unique perspective. For a personal blog like this one, that’s a deal breaker. I’ve spent over 15 years developing a voice that is conversational, peer-to-peer, and deeply rooted in my own experiences.

I wanted to see if I could use my existing content to “teach” an LLM how to write like me—not just for speed, but as a way to validate that the content I publish stays true to my style.

Reverse-Engineering 15 Years of Content

The approach was simple: I used an AI agent to scan through my entire blog history. This was made possible because I had recently migrated my blogs to Astro, a process that involved converting over a decade of WordPress posts into Markdown.

By analyzing content from both my current blog (hussainweb.me) and my older personal archives at blog.husainad.com, the agent was able to derive a set of guidelines that capture my natural rhythm. It was a fascinating look into my own evolution from a reflective diarist to an empathetic engineering leader.

What do you know, the agent was able to extract several key habits that define my “voice”:

  • A “Humble Expert” tone: A senior engineer talking to a colleague, not afraid to admit to “writer’s block” or being “drowned in work.”
  • Empathetic leadership: Framing technical and management challenges as “very human things.”
  • Specific structural patterns: Using the “Weekly Learnings” format or breaking down complex commands into their component parts.
  • A “constructive laziness”: Driving me to find simpler, more efficient ways of doing things.

The Gap: Gemini CLI vs. Claude Code

To build and test this, I used the skill-creator tool. This is an interesting piece of software originally designed for the Anthropic ecosystem (Claude Code). When I tried to run it within the Gemini CLI, I noticed some interesting friction points that highlight the differences between these agent environments.

With Claude Code, the evaluation server—which lets you review AI-generated content side-by-side with a baseline—usually spins up reliably and automatically. In the Gemini CLI, this automation failed. The process started, but the server didn’t initiate.

I had to manually intervene and ask the agent to start the server myself. This is a crucial takeaway for anyone working across different AI agents: tools built for one environment won’t always “just work” in another. You need to be prepared to step in and guide the process when the standard triggers fail.

The Importance of the “Trigger”

One thing I learned during this process is that a skill is only as good as its description. Initially, the description was just a summary of what the skill contained. But I realized that the model needs to know when to invoke it.

I refined the skill’s description to be more proactive—explicitly telling the model to ALWAYS use this style for any content generation related to my blog, TILs, or reflections. This ensures that even if I don’t explicitly ask for “my style,” the model understands that anything destined for my blog should sound like me.

The Danger of Over-Stylization

Another challenge is that content generation tends to “overuse” the skill. In the first few iterations, the AI was trying way too hard to sound like me—it was checking off every item in my “common habits” list in every single paragraph! It felt less like an authentic voice and more like a caricature.

This is something I’m still tweaking. It turns out that maintaining a voice is not about using a checklist; it’s about balance and rhythm. I’ve had to refine the skill to emphasize subtlety—telling the AI to use these patterns sparingly and only when they naturally fit the context.

Continuous Validation

Creating a “writing skill” isn’t a one-and-done task. It’s an ongoing exercise in validating both the skill and the content it produces. Every time I use it, I see new ways to refine the instructions to make the output feel more human and less template-driven.

You can see the final result of this journey in my public hussainweb-writing-style repository.

That’s about it. The goal isn’t just to automate writing, but to build a framework where the AI acts as a partner that respects and preserves the unique style I’ve built over the last decade and a half.