After the Hexo Skill, a Plugin for Tone

My first Claude Code skill has 700+ downloads on ClawHub, which surprised me enough to write another. This one holds the voices I post in, and it will keep growing.

Posted by Jessie Jia on 2026-08-13

The first Claude Code skill I wrote was a selfish one. I publish this blog with Hexo, the workflow has enough sharp edges that I kept re-explaining it, so I wrote it down once: front matter template, SEO checks, the deploy path, the specific ways a Hexo build fails silently.

It sat on ClawHub and picked up 700+ downloads.

That number reframed something for me. I’d written it as a note to myself. Apparently a note-to-self about a workflow you’ve actually debugged is useful to people who haven’t yet — which is a fairly low bar to clear, and a good reason to write more of them.

So here’s the second one, and this time it’s a plugin: social-media-tones.

What it’s for

I write in different voices depending on where the thing is going, and I was tired of explaining that to Claude every time. Drafting a thread about something I debugged is not the same job as drafting one about a paper I read. Both are technical, both are casual, and they are not interchangeable — one opens in first person and lands on what surprised you, the other opens third person and lands on the benchmark numbers.

So there are two skills in it right now:

opens with ends on
x-learning-notes “had to build my own SFT data this week…” what else is in the write-up
x-paper-explainer “the authors replace one FFN with a memory layer…” 89% → 11%

Named platform-first, because the constraints that actually bite belong to the platform, not the voice. How long a post can be, whether external links get suppressed, whether hashtags read as spam this year — all true of X no matter which voice you’re using. So those live once in platforms/x.md and both skills point at it.

Why a plugin and not two more skills

Personal skills are flat. Everything sits at ~/.claude/skills/<name>/SKILL.md — no folders, no nesting, no namespace. I have 56 installed and they’re all at the same depth. That’s fine for a pile of unrelated tools and awkward the moment you have a family of related ones, where the only thing grouping them is a prefix you have to keep typing correctly.

A plugin gives you a real namespace. Installed skills are addressed plugin:skill, so mine read social-media-tones:x-learning-notes. And a plugin turns out to be almost nothing: a git repo with a small manifest and the same SKILL.md files you’d write anyway.

1
2
/plugin marketplace add Jarxi/social-media-tones
/plugin install social-media-tones@social-media-tones

The other reason is that a plugin grows. I know I want LinkedIn, probably a shipping-log voice, eventually something for longer writing. Adding one is a new directory; the namespace absorbs it.

The kind of thing worth writing down

Describing a voice in adjectives doesn’t work. “Concrete, lowercase, enthusiastic” produces nothing you’d want to post. What made the skill useful was three specific things: a real post quoted in full as a calibration sample, the drafts I wrote and threw away with what was wrong with each, and the platform facts that fail confusingly.

An example of that last category, from this week. I was posting a six-tweet thread and tweet 3 came back:

1
{"detail":"You are not permitted to perform this action.","status":403,"title":"Forbidden"}

Not permitted to do what? Tweets 1 and 2 had already gone out, so there was now a public fragment sitting on my timeline. Rate limit was fine, credentials were fine, and every individual paragraph of tweet 3 posted successfully on its own.

X doesn’t count characters. It weights them — a few narrow code point ranges count as 1 and everything else counts as 2, including CJK, emoji, and arrows. Tweet 3 was 279 characters with two in it. Real length 281, over by one, reported as a permissions error.

That belongs in a skill. It has nothing to do with writing and it will cost you an afternoon.

Where this goes

The plan is just to keep adding. Every time I work out how to do something and find myself explaining it twice, that’s a skill. The Hexo one came from publishing this blog; this one came from posting about it. Both started as notes I wrote for myself, and the only reason they’re worth sharing is that the mistakes are still in them.

If you want to fork the structure, it’s all in the repo. Two voices so far — which is about the right number to have before claiming you know what you’re doing.

中文版:写完 Hexo skill 之后,又做了一个语气插件