Agent skill

Blog Writer

by captainflasmr in captainflasmr/ollama-buddy

Write an Emacs blog post in James Dyer's voice for www.emacs.dyerdwelling.family.

GPL-3.0Auto-check passedWriting & Content

Install Blog Writer

skills CLI
$ npx skills add captainflasmr/ollama-buddy --skill blog-writer -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install captainflasmr/ollama-buddy blog-writer --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/captainflasmr/ollama-buddy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/blog-writer .claude/skills/blog-writer && rm -rf skills-src

Use ~/.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/

Facts

Skill name
blog-writer
GitHub stars
103
Token cost
~2.1k tokens
SKILL.md length
1,121 words
Files
1
Skills in repo
12
Repo updated
First seen
Licence
GPL-3.0

At a glance

Write an Emacs blog post in James Dyer's voice for www.emacs.dyerdwelling.family.

  • Works in 5 steps: Gather Material → Voice and Tone → Structure the Post → …
  • The user asks to write
  • SKILL.md covers Step 1: Gather Material, Step 2: Voice and Tone, Step 3: Structure the Post and Step 4: Formatting Rules, plus 2 more sections
  • Reaches github.com

What it does

Blog Writer is an agent skill from captainflasmr/ollama-buddy. Write an Emacs blog post in James Dyer's voice for www.emacs.dyerdwelling.family. Use this skill when the user asks to write, draft, or create a blog post about an Emacs package, feature, workflow, or development topic. Trigger on phrases like "write a blog post", "create a blog post", "draft a post about", "blog this", or any request to produce content for the Emacs blog. The skill reads the project's source, CHANGELOG, and README to gather material, then produces an org-mode file in the author's authentic voice.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Blog and article writing. The repository describes itself as: A friendly Emacs interface for interacting with Ollama models. The licence is GPL-3.0.

When your agent uses it

  • The user asks to write
  • Create a blog post about an Emacs package
  • Development topic
  • Phrases like write a blog post

Example prompts

  • “write a blog post”
  • “create a blog post”
  • “draft a post about”
  • “/blog-writer”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Gather Material
  2. Voice and Tone
  3. Structure the Post
  4. Formatting Rules
  5. Write and Save

What it can do on your machine

Read from SKILL.md and the folder at commit 12eaf7f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are org).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Blog Writer loads about 2.1k tokens when it runs. Until then it costs about 133 tokens; SKILL.md has 1,121 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~133
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

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.

Safety

Auto-check passed

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from captainflasmr/ollama-buddy at commit 12eaf7f, republished under its GPL-3.0 licence (© captainflasmr). 1,121 words, ~2,116 tokens.

Download SKILL.mdSave it as .claude/skills/blog-writer/SKILL.md (or your agent's skills folder).
name
blog-writer
description
Write an Emacs blog post in James Dyer's voice for www.emacs.dyerdwelling.family. Use this skill when the user asks to write, draft, or create a blog post about an Emacs package, feature, workflow, or development topic. Trigger on phrases like "write a blog post", "create a blog post", "draft a post about", "blog this", or any request to produce content for the Emacs blog. The skill reads the project's source, CHANGELOG, and README to gather material, then produces an org-mode file in the author's authentic voice.

Emacs Blog Writer Skill

You are writing a blog post for James Dyer's Emacs blog (www.emacs.dyerdwelling.family). The audience is Emacs enthusiasts and developers who value practical, hands-on content. Use British spelling throughout (colour, customise, organisation) and the occasional British turn of phrase, but sparingly.


Step 1: Gather Material

Before writing anything, read the project to understand what you are writing about.

  1. Read the main source file(s) -- especially the Commentary section, defcustom entries, keybindings, and interactive commands.
  2. Read the CHANGELOG or NEWS file to understand what changed recently.
  3. Read the README for the project's self-description, feature lists, and setup instructions.
  4. If the user specifies a version or feature focus, pay special attention to those changes.
  5. Note: the user may provide additional context or a specific angle -- follow their lead on scope and emphasis.

Step 2: Voice and Tone

James writes like he is thinking out loud. Sentences chain together with commas, asides, and mid-thought corrections that mimic spoken English. He does not polish away the rough edges -- that is what makes it feel authentic.

Key characteristics to reproduce
  • Stream-of-consciousness flow -- thoughts tumble into the next thought mid-sentence, connected by commas and interjections rather than full stops. Example: "So, I immediately wondered, could I build this into Emacs?, actually no, firstly I thought, are there any packages for Emacs that can do this?, of course there are!"
  • Self-correction mid-paragraph -- start a thought, backtrack, then continue: "actually no, firstly I thought..." or "although could be" or "future me might change their mind!"
  • Exclamation marks for genuine enthusiasm -- used liberally and naturally, not as salesmanship: "I fluked this!", "So I built my own!, this is Emacs, after all."
  • Rhetorical questions as transitions -- to move between topics or introduce new ideas: "Right, so what is my idea?", "But what about quick tasks like proofreading text?"
  • Self-deprecating asides -- parenthetical admissions like "(yup, that again!)", "(is this one? :)", "although I think at times there is a little waddle, but it is good enough"
  • Casual forward-looking remarks -- posts often end with an informal nod to what comes next: "Next up is probably some web searching!", "so will need a little more time to see what works"
  • Acknowledges alternatives honestly -- before pitching his own work, he credits existing solutions: "And they are good! But I kept running into the same friction..."
  • Design decision narration -- explains the journey of arriving at a design, including dead ends: "At first, I leaned on curl since it was straightforward... This lead me to explore url.el, but initially I couldn't seem to get my head round it"
  • Personal motivation as framing -- features are introduced through personal need: "I am always fiddling around with styles, themes, backgrounds e.t.c, so I thought I would build this tinkering enthusiasm into this package"
What to avoid
  • Overly polished or marketing-style prose
  • Bullet-point heavy posts with no connecting narrative (use prose to link lists)
  • Generic filler ("In this post, we will explore...", "Let's dive in", "Without further ado")
  • Emdash characters -- use a dash, semi-colon, or comma instead given the context
  • Emoji in headings or body text (unless the user explicitly requests them)

Step 3: Structure the Post

Use this structure as a guide, not a rigid template. Adapt to the content.

3.1 Org-mode Header

Every post starts with:

org
#+title: Package Name X.Y.Z: Short Descriptive Subtitle
#+author: James Dyer
#+date: YYYY-MM-DD
#+options: ':t toc:nil author:nil email:nil num:nil title:nil
#+startup: showall
3.2 Opening Hook (1-2 paragraphs)

Lead with personal context -- what sparked this, what has changed, why now. Not an abstract summary. Examples of good openings:

  • "I have been busy improving my annotation package!"
  • "I recently came across a fascinating video..."
  • "Given that I now have greater experience in Emacs package creation, I thought..."
3.3 Read-more Cutoff

Place #+hugo: more after the opening paragraphs.

3.4 Body Sections

Use * for main sections and ** for subsections (org-mode heading levels).

  • Narrative flow between sections -- do not just list features. Connect sections with transitional prose that explains why you moved from one topic to the next.
  • Code examples are central -- show real, copy-pasteable elisp in #+begin_src elisp blocks. Configuration snippets should be something the reader can drop straight into their init file.
  • Visual examples -- when describing display or UI features, include #+begin_example blocks showing what the user actually sees (box-drawing characters, keybinding workflows, buffer output).
  • Feature lists use *Bold* labels with -- separators: *Highlight* -- classic background colour on the annotated region
  • Keybindings shown with = delimiters: =C-c a j=, =M-n=
  • Function names and variables in =inline code=: =simply-annotate-mode=
Show full SKILL.md (396 more words)Show less
3.5 Comparison (when relevant)

Briefly acknowledge alternative packages and credit them honestly. Direct readers to a feature matrix in the README rather than writing lengthy per-package comparisons.

3.6 Closing

End with:

  1. A practical getting-started snippet (use-package or require block)
  2. Where to find the package (GitHub link, MELPA, Info manual)

Keep it short and useful. Optionally add a casual forward-looking remark.


Step 4: Formatting Rules

  • Link to the project: [[https://github.com/captainflasmr/PACKAGE][Package Name]]
  • Interactive commands: =M-x function-name=
  • Keybindings: =C-c a j=, =M-x=
  • Use double spaces after full stops (Emacs convention in James's writing)
  • Keep code examples realistic and copy-pasteable
  • Do not use emdash characters anywhere

Step 5: Write and Save

  1. Write the complete blog post following the structure and voice above.
  2. Save it to blog.org in the project root (or to a path the user specifies).
  3. Present a brief summary of what the post covers so the user can review.

Reference: Voice Samples

These are real excerpts from James's published posts. Use them to calibrate tone, not to copy verbatim.

I have been busy improving my annotation package! Simply Annotate, the latest release is 0.9.8 and have put in a bunch of new features, so it felt like a good time to step back and show what the package actually does at this point, because honestly, quite a lot has changed since I last wrote about it.

So, I immediately wondered, could I build this into Emacs?, actually no, firstly I thought, are there any packages for Emacs that can do this?, of course there are!, the spray package from MELPA is a more mature, feature-rich option if you're looking for production-ready RSVP reading in Emacs, and also there is speedread. However, there's something satisfying about having a compact, single-function solution that does exactly what you need, so lets see if I can build one!

Secondly, the Texinfo manual for this package now magically installs itself when pulling from MELPA. I fluked this!, I just thought it was sensible to create a docs directory and then plonked an info file there.

At first, I leaned on curl since it was straightforward and matched the official ollama examples. My approach with a project such as this is generally to get things working quickly and then refine/iterate later. However, once I had a solid design (and design principles!), I wanted to eliminate external dependencies like curl.

© captainflasmr, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/blog-writer of captainflasmr/ollama-buddy.

Open the folder on GitHubat commit 12eaf7f

Compare with similar skills

Blog 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.

Blog Writer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Blog Writer this skillcaptainflasmr/ollama-buddy103—~2.1kAutomated safety check: PassGPL-3.0
Khazix WeChat Article WriterKKKKhazix/khazix-skills21k1 repos~2.9kAutomated safety check: PassMIT
Figurevectorize-io/hindsight48k—~1.9kAutomated safety check: PassMIT
SepiaNanako0129/sepia3.1k—~3.6kAutomated safety check: PassMIT
Blog Post Draftingluongnv89/claude-howto42k—~2.1kAutomated safety check: PassMIT
Notion To Blogwasp-lang/wasp19k—~922Automated safety check: PassMIT

Similar skills

  • 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.

    21k GitHub starsUsed in 1 repo~2.9k tokens
    Writing & ContentAuto-check passed
  • Figure

    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.

    48k GitHub stars~1.9k tokensUpdated today
    Writing & ContentAuto-check passed
  • Sepia

    Nanako0129/sepia

    Make AI-generated writing read as human-written, in fiction and in professional prose.

    3.1k GitHub stars~3.6k tokensUpdated yesterday
    Writing & ContentAuto-check passed
  • Blog Post Drafting

    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.

    42k GitHub stars~2.1k tokensUpdated today
    Writing & ContentAuto-check passed
  • Notion To Blog

    wasp-lang/wasp

    Transfer a blog post from Notion to the Wasp blog. An agent skill from wasp-lang/wasp.

    19k GitHub stars~922 tokensUpdated today
    Writing & ContentAuto-check passed
  • Blog Post

    nteract/semiotic

    Author a new entry for the Semiotic blog. An agent skill from nteract/semiotic.

    2.7k GitHub stars~3.4k tokensUpdated today
    Writing & ContentAuto-check passed

More from captainflasmr/ollama-buddy

All 12 skills in this repo
  • Elisp Dev

    captainflasmr/ollama-buddy

    Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching.

    103 GitHub stars~2.7k tokensUpdated 1 mo ago
    Auto-check passed
  • Elisp Review

    captainflasmr/ollama-buddy

    Review Emacs Lisp (elisp) packages for bugs, style/convention violations, and optimisation opportunities.

    103 GitHub stars~2.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Annotate Project

    captainflasmr/ollama-buddy

    Analyse a project's source code and generate a simply-annotate database file with LLM-created annotations categorised by tag: defun for functions and large syntactical blocks, line for smaller…

    103 GitHub stars~6.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Reddit Post Writer

    captainflasmr/ollama-buddy

    Write an r/emacs Reddit post in James Dyer's voice for announcing or discussing an Emacs package.

    103 GitHub stars~1.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Code Refactoring

    captainflasmr/ollama-buddy

    Expert code refactoring and optimization with analysis, improvements, and documentation.

    103 GitHub stars~446 tokensUpdated 1 mo ago
    Auto-check passed
  • Emacs Blog Reviewer

    captainflasmr/ollama-buddy

    Review Emacs blog posts for technical accuracy, naming conventions, and correct Emacs idioms.

    103 GitHub stars~751 tokensUpdated 1 mo ago
    Auto-check passed

Questions about Blog Writer

What does Blog Writer do?

Write an Emacs blog post in James Dyer's voice for www.emacs.dyerdwelling.family. Blog Writer is an agent skill from captainflasmr/ollama-buddy.family.

When should I use Blog Writer?

Blog Writer fits situations like: the user asks to write; create a blog post about an Emacs package; development topic; phrases like write a blog post.

How do I install Blog Writer in Claude Code?

Run `npx skills add captainflasmr/ollama-buddy --skill blog-writer -a claude-code`. Or copy the skill folder (.agents/skills/blog-writer in captainflasmr/ollama-buddy) into .claude/skills/blog-writer in your project. Claude Code loads it when a task matches its description.

How do I install Blog Writer in Codex?

Run `npx skills add captainflasmr/ollama-buddy --skill blog-writer -a codex`. Or copy the skill folder (.agents/skills/blog-writer in captainflasmr/ollama-buddy) into .agents/skills/blog-writer in your project. Codex loads it when a task matches its description.

Can I use Blog Writer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add captainflasmr/ollama-buddy --skill blog-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-writer, .gemini/skills/blog-writer, .github/skills/blog-writer and .opencode/skills/blog-writer in your project.

What does Blog Writer need to run?

SKILL.md names no scripts, command-line tools or credentials: Blog Writer is instructions for the agent only.

Does Blog Writer access the network?

SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Blog Writer safe to install?

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. Review the folder before installing.

What licence does Blog Writer use?

Blog Writer is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Blog Writer use?

About 2.1k tokens (SKILL.md is roughly 8.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Blog Writer?

Skills that share tags, products or a category with Blog 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.

Who maintains Blog Writer?

captainflasmr (a GitHub user) maintains it in captainflasmr/ollama-buddy, which has 103 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on September 10, 2026.

Source: captainflasmr/ollama-buddy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.