Khazix WeChat Article Writer
KKKKhazix/khazix-skills
Writes long-form WeChat official account articles in the personal style of the Khazix account, from briefs, links, PDFs or rough notes, with a topic quality check.
Turn Nick Nisi's raw material into a blog post draft in his voice.
$ npx skills add nicknisi/claude-plugins --skill blog-post-writer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nicknisi/claude-plugins blog-post-writer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nicknisi/claude-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/content/skills/blog-post-writer .claude/skills/blog-post-writer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "blog-post-writer" agent skill from https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writer into .claude/skills/blog-post-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-post-writer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nicknisi/claude-plugins --skill blog-post-writer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nicknisi/claude-plugins blog-post-writer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nicknisi/claude-plugins.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/content/skills/blog-post-writer .agents/skills/blog-post-writer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "blog-post-writer" agent skill from https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writer into .agents/skills/blog-post-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-post-writer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nicknisi/claude-plugins --skill blog-post-writer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nicknisi/claude-plugins blog-post-writer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nicknisi/claude-plugins.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/content/skills/blog-post-writer .cursor/skills/blog-post-writer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "blog-post-writer" agent skill from https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writer into .cursor/skills/blog-post-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-post-writer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nicknisi/claude-plugins.git --path plugins/content/skills/blog-post-writer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nicknisi/claude-plugins --skill blog-post-writer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nicknisi/claude-plugins blog-post-writer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nicknisi/claude-plugins.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/content/skills/blog-post-writer .gemini/skills/blog-post-writer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "blog-post-writer" agent skill from https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writer into .gemini/skills/blog-post-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-post-writer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nicknisi/claude-plugins blog-post-writerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nicknisi/claude-plugins --skill blog-post-writer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nicknisi/claude-plugins.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/content/skills/blog-post-writer .github/skills/blog-post-writer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "blog-post-writer" agent skill from https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writer into .github/skills/blog-post-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-post-writer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nicknisi/claude-plugins --skill blog-post-writer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nicknisi/claude-plugins blog-post-writer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nicknisi/claude-plugins.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/content/skills/blog-post-writer .opencode/skills/blog-post-writer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "blog-post-writer" agent skill from https://github.com/nicknisi/claude-plugins/tree/main/plugins/content/skills/blog-post-writer into .opencode/skills/blog-post-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-post-writer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
blog-post-writerTurn Nick Nisi's raw material into a blog post draft in his voice.
Blog Post Writer is an agent skill from nicknisi/claude-plugins. Turn Nick Nisi's raw material into a blog post draft in his voice. Use when the user says "write a blog post," "draft a post," "write about [topic]," "turn my notes into a blog post," or provides scattered ideas that need shaping. Produces a deliberately flat draft with sourced facts and tagged gaps — never a finished post.
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 33 other files, including scripts and reference files (for example `references/catch-22.md`, `references/comedians-set.md` and `references/compare-contrast.md`).
It sits in Writing & Content, covering Blog and article writing. The repository describes itself as: Nick's own marketplace of Claude Plugins. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6a6decd. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Blog Post Writer loads about 1.8k tokens when it runs, and up to ~46k if it reads all its reference files. Until then it costs about 86 tokens; SKILL.md has 1,020 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from nicknisi/claude-plugins at commit 6a6decd, republished under its MIT licence (© nicknisi). 1,020 words, ~1,773 tokens.
.claude/skills/blog-post-writer/SKILL.md (or your agent's skills folder). This skill also uses 32 other files; get the full folder from GitHub.Turn raw material into a draft Nick finishes. This skill does research, structure, and connective prose. It does not produce publishable first-person writing.
Facts may come from logs. Feelings may not.
An earlier version of this skill shipped a post that readers called AI slop. The facts were impeccable — real timestamps, real commit stats, real Slack quotes. The failure was that it also generated Nick's inner life: what he thought, what he'd assumed, what moved him. Nine such claims; one had a source. Readers can't always name that, but they feel it, and they stop trusting the piece.
The measured version: that post claimed inner states at 5.84 per 1,000 words against Nick's corpus mean of 0.97. Six times his rate. He mostly writes about what he built. The draft wrote about how he felt about what he built.
Everything below follows from that.
Accept the mess: scattered thoughts, code, commands, conclusions, links. Don't require organization.
If the material is thin, mine it — session logs, Slack, git history, the repos themselves. This is the pipeline's genuine strength and there's no reason to hold back. Record a source for every fact. A working file of claim → source keeps the draft honest and makes step 5 mechanical.
This is the highest-value step in the skill. Do not skip it.
Logs record what Nick did. They never record what he thought. Ask 8–15 targeted
questions with ask_user_question or plain prose, and capture the answers
verbatim:
Tell him to type fast and not polish. His unpolished answers are the raw material for every voice-load-bearing sentence in the post. They will be flat, hedged, and specific — that flatness is the voice. Do not smooth it.
If he declines to be interviewed, the post ships with [NICK: ...] markers where
his inner life would go. That is a correct outcome, not a failure.
Read 2–3 recent posts from src/content/posts/ in full — most recent first, plus
any on a similar topic. Write connective prose consistent with those, not with
a summary of them.
Then read references/voice-tone.md, which is now a list of ceilings and
prohibitions, not features to hit. Requesting a feature makes a model execute it
every time it applies; that's what produced eight aphorisms in an eight-section
post. Only constraints are safe to state.
Find the chronology or the argument already in the facts and follow it.
Do not select a narrative framework. references/frameworks.md exists as
diagnostic vocabulary for talking about a draft that already exists — never as a
template to fill. Choosing a framework means choosing what the events meant,
which is Nick's call, not the tool's. A flawlessly executed Story Circle is the
single most detectable artifact this skill can produce, because no human drafting
from memory has ever produced one.
The only structural instruction: identify the one turn the post exists to make, arrange the facts so it lands, and leave flat ground everywhere else.
Section headers are descriptive — they name the topic ("What Fleet is", "Three signals, none trustworthy alone"). Allusive narrative-beat headers ("The drift", "Coming home") read as chapter titles and are a tell in bulk.
Informationally complete, rhetorically inert. Aim for flat.
Nick is good at adding voice to plain prose and bad at excising pastiche from clever prose. A draft that already sounds finished is the worst possible artifact to hand him — he has to fight it. Give him something that obviously needs him.
Hard rules while drafting:
| Rule | Why |
|---|---|
Every mental-state sentence is a verbatim quote from step 2, or a [NICK: what were you actually thinking here?] marker | The core failure. Untagged invented interiority is an automatic fail. |
| Sections end on information — a fact, a number, a command, or just stop | Eight aphoristic endings is the template's silhouette |
| Every number traces to a source | "Twelve minutes of curiosity" was invented precision that narrativizes a life |
| One sustained metaphor per post, maximum | A metaphor recurring across 3+ sections is a framework fingerprint |
| No narrator stage directions | "Now watch what happened next" is Nick emceeing a post he'd never emcee |
Where you'd reach for a rhetorical flourish, write the plain sentence instead and let Nick decide whether it deserves more.
python3 scripts/slopcheck.py \
--corpus '/Users/nicknisi/Developer/nicknisi.com/src/content/posts/*.md*' \
--draft path/to/draft.mdxIt calibrates against Nick's real posts and flags outliers in both directions — suppression is as suspicious as excess. A draft engineered to dodge a metric looks different from one that never considered it.
The gate's job is to produce Nick's rewrite list, not to certify the draft. Fix what it flags, then hand over.
The interiority section always prints and is not scored against the corpus — it exits non-zero while any claim is unconfirmed. A structurally clean draft with unconfirmed first-person claims is not a passing draft. Those lines go to Nick, not to you.
Vocabulary checks (the tighten-prose skill) run last and matter least. They
scan for 2024-era tells like "delve" and "leverage" and will pass a maximally
slop-shaped draft — they did exactly that on the post that caused this rewrite.
Deliver:
Do not publish a post whose first-person sentences Nick has not read and approved. He isn't the editor of this artifact. He's the only source for half of it.
See references/post-template.md for frontmatter schema and file conventions.
references/voice-tone.md — ceilings and prohibitions, with measured rates from his corpusreferences/post-template.md — frontmatter schema and structural skeletonreferences/frameworks.md — diagnostic vocabulary for critiquing a finished draftscripts/slopcheck.py — corpus-calibrated structural detector© nicknisi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 32 other files (scripts, references) in plugins/content/skills/blog-post-writer of nicknisi/claude-plugins.
Open the folder on GitHubat commit 6a6decd
Blog Post Writer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Blog Post Writer this skillnicknisi/claude-plugins | 114 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Khazix WeChat Article WriterKKKKhazix/khazix-skills | 21k | 1 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Figurevectorize-io/hindsight | 48k | — | ~1.9k | Automated safety check: Pass | MIT | |
| SepiaNanako0129/sepia | 3.1k | — | ~3.6k | Automated safety check: Pass | MIT | |
| Blog Post Draftingluongnv89/claude-howto | 42k | — | ~2.1k | Automated safety check: Pass | MIT | |
| Notion To Blogwasp-lang/wasp | 19k | — | ~922 | Automated safety check: Pass | MIT |
KKKKhazix/khazix-skills
Writes long-form WeChat official account articles in the personal style of the Khazix account, from briefs, links, PDFs or rough notes, with a topic quality check.
vectorize-io/hindsight
Draw an animated figure (boxes, arrows, moving data) as one self-contained SVG for a GitHub README, PR, issue or blog post.
Nanako0129/sepia
Make AI-generated writing read as human-written, in fiction and in professional prose.
luongnv89/claude-howto
Guides drafting a blog post from an idea and optional source material: research, brainstorming, outlining and version-tracked drafts, with user approval at each step.
wasp-lang/wasp
Transfer a blog post from Notion to the Wasp blog. An agent skill from wasp-lang/wasp.
nteract/semiotic
Author a new entry for the Semiotic blog. An agent skill from nteract/semiotic.
nicknisi/claude-plugins
Generate or edit images via Google Gemini (nano-banana-pro) or OpenAI gpt-image-2.
nicknisi/claude-plugins
Build a throwaway prototype to answer a design question before committing to real implementation.
nicknisi/claude-plugins
Review the current branch with six specialist lenses (security, correctness, conventions, tests, architecture, duplication), then put every finding through an adversarial verifier that tries to…
nicknisi/claude-plugins
Read and drive other tmux panes when Claude runs inside tmux.
nicknisi/claude-plugins
Pull captions from a YouTube video and turn them into chapter-aligned notes where every claim carries a clickable timestamp.
nicknisi/claude-plugins
Create conference talk outlines and slide-by-slide content plans using narrative frameworks.
Categories
Turn Nick Nisi's raw material into a blog post draft in his voice. Blog Post Writer is an agent skill from nicknisi/claude-plugins. Turn Nick Nisi's raw material into a blog post draft in his voice.
Blog Post Writer fits situations like: the user says write a blog post; write about [topic]; turn my notes into a blog post; provides scattered ideas that need shaping.
Run `npx skills add nicknisi/claude-plugins --skill blog-post-writer -a claude-code`. Or copy the skill folder (plugins/content/skills/blog-post-writer in nicknisi/claude-plugins) into .claude/skills/blog-post-writer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nicknisi/claude-plugins --skill blog-post-writer -a codex`. Or copy the skill folder (plugins/content/skills/blog-post-writer in nicknisi/claude-plugins) into .agents/skills/blog-post-writer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nicknisi/claude-plugins --skill blog-post-writer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blog-post-writer, .gemini/skills/blog-post-writer, .github/skills/blog-post-writer and .opencode/skills/blog-post-writer in your project.
Going by SKILL.md and its folder, Blog Post Writer needs the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Blog Post Writer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 44k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Blog Post Writer: Khazix WeChat Article Writer (KKKKhazix/khazix-skills, 21k stars), Figure (vectorize-io/hindsight, 48k stars), Sepia (Nanako0129/sepia, 3.1k stars) and Blog Post Drafting (luongnv89/claude-howto, 42k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nicknisi (a GitHub user) maintains it in nicknisi/claude-plugins, which has 114 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on August 11, 2026.
Source: nicknisi/claude-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.