Agent skill

Pre Publishing Blog Tone Checker

by grab in grab/engineering-blog

Pre-publish quality pass for Grab Engineering Blog posts in posts/.md.

MITAuto-check passedWriting & Content

Install Pre Publishing Blog Tone Checker

skills CLI
$ npx skills add grab/engineering-blog --skill pre-publishing-blog-tone-checker -a claude-code

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

GitHub CLI
$ gh skill install grab/engineering-blog pre-publishing-blog-tone-checker --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/grab/engineering-blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pre-publishing-blog-tone-checker .claude/skills/pre-publishing-blog-tone-checker && 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
pre-publishing-blog-tone-checker
GitHub stars
138
Token cost
~3k tokens
SKILL.md length
1,218 words
Files
4 (incl. references)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Pre-publish quality pass for Grab Engineering Blog posts in posts/.md.

  • Works in 4 steps: Metadata validation — confirm every… → Join us boilerplate — confirm the… → Prose editing — apply grammar, tone,… → …
  • Editing a blog post before publish
  • SKILL.md covers Overview, Scope, Workflow and Metadata validation, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Pre Publishing Blog Tone Checker is an agent skill from grab/engineering-blog. Pre-publish quality pass for Grab Engineering Blog posts in posts/.md. Validates YAML front matter, ensures the canonical Join us footer, applies grammar/tone/spelling fixes via references/grammar-tone-writing-quality.md, then runs a PR/legal pre-flight for metrics, images, confidentiality, and reputational risk via references/pr-legal-pre-flight.md. Use when reviewing or editing a blog post before publish.

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/grammar-tone-writing-quality.md`, `references/join-us-boilerplate.md` and `references/pr-legal-pre-flight.md`).

It sits in Writing & Content, covering Blog and article writing, Markdown and Project scaffolding. The repository describes itself as: 📝 We write about our technologies and the problems we handle at scale. The licence is MIT.

When your agent uses it

  • Editing a blog post before publish
  • Tasks that involve Blog and article writing
  • Tasks that involve Markdown

Example prompts

  • “/pre-publishing-blog-tone-checker”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Metadata validation — confirm every required front-matter field is present and valid.
  2. Join us boilerplate — confirm the canonical ## Join us footer exists; add it if missing (references/join-us-boilerplate.md).
  3. Prose editing — apply grammar, tone, spelling, and writing-quality fixes from references/grammar-tone-writing-quality.md.
  4. PR/legal pre-flight — review images, metrics, names, quotes, and claims against references/pr-legal-pre-flight.md; suggest fixes (do not…

What it can do on your machine

Read from SKILL.md and the folder at commit fd83523. 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 yaml).

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

  • Network

    No URLs in SKILL.md.

    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

Pre Publishing Blog Tone Checker loads about 3k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 112 tokens; SKILL.md has 1,218 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~112
When it runs · the whole SKILL.md, loaded when a task matches
~3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

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 grab/engineering-blog at commit fd83523, republished under its MIT licence (© grab). 1,218 words, ~3,015 tokens.

Download SKILL.mdSave it as .claude/skills/pre-publishing-blog-tone-checker/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
pre-publishing-blog-tone-checker
description
Pre-publish quality pass for Grab Engineering Blog posts in `_posts/*.md`. Validates YAML front matter, ensures the canonical Join us footer, applies grammar/tone/spelling fixes via references/grammar-tone-writing-quality.md, then runs a PR/legal pre-flight for metrics, images, confidentiality, and reputational risk via references/pr-legal-pre-flight.md. Use when reviewing or editing a blog post before publish.
disable-model-invocation
true

Pre-Publishing Blog Tone Checker

Overview

Use this skill before publishing a Grab Engineering Blog post. It runs four passes on Markdown files in _posts/:

  1. Metadata validation — confirm every required front-matter field is present and valid.
  2. Join us boilerplate — confirm the canonical ## Join us footer exists; add it if missing (references/join-us-boilerplate.md).
  3. Prose editing — apply grammar, tone, spelling, and writing-quality fixes from references/grammar-tone-writing-quality.md.
  4. PR/legal pre-flight — review images, metrics, names, quotes, and claims against references/pr-legal-pre-flight.md; suggest fixes (do not apply redactions unless the user asks).

Work one file at a time. Prefer small, safe edits. Preserve technical meaning. Summarize findings and ask whether to apply changes unless the user already asked you to edit.

Scope

In scopeOut of scope
_posts/*.md front matter validationBroken link checking
Body prose in _posts/*.mdReadability scores or lint tooling
PR/legal risk review of prose and imagesLegal sign-off or formal approval
Adding missing authors to _data/authors.ymlRenaming post files
Adding the canonical ## Join us footer when missingRewriting code blocks, URLs, or quoted text without user approval
Drafting missing excerpt or tagsAuto-redacting content without user confirmation
Suggesting safer wording for flagged metrics/namesEditing the Join us boilerplate text without an explicit PR/legal request

Workflow

  1. Select files — the file(s) the user named, or uncommitted _posts/*.md changes if they asked for a change-only pass.
  2. Validate metadata — run every check in Metadata validation. Report failures before editing prose.
  3. Join us boilerplate — run every check in Join us boilerplate. Add the canonical section if missing.
  4. Grammar and tone pass — read references/grammar-tone-writing-quality.md and edit the Markdown body (and metadata fields only where validation requires fixes). Do not edit the Join us boilerplate text.
  5. PR/legal pre-flight — read references/pr-legal-pre-flight.md and review the same file for images, tables, figures, metrics, internal names, quotes, and reputational risk. Produce suggested fixes using the reference report format. Do not apply PR/legal rewrites automatically unless the user explicitly requests it.
  6. Verify and report — use the Verification report template.

Metadata validation

Run these checks before any prose edits. Treat front matter as the YAML block between the opening and closing --- at the top of the file.

Required fields checklist

Every post must include all of these keys:

FieldRequiredValidation rules
layoutYesMust be post.
idYesMust exactly match the filename without .md. Example: file 2026-06-19-palana-part-1-secure-platform-for-ai-agents.md → id: 2026-06-19-palana-part-1-secure-platform-for-ai-agents.
titleYesNon-empty string in sentence case (see references/grammar-tone-writing-quality.md → Headings and titles). Use single quotes if the title contains a colon.
dateYesNon-empty publish datetime, e.g. 2026-06-19 00:00:00.
authorsYesYAML array of author handles, e.g. [kevin.littlejohn]. At least one author.
categoriesYesYAML array with at least one category, e.g. [Engineering].
tagsYesYAML array with at least 3 tags relevant to the post content.
commentsYesBoolean: true or false.
cover_photoYesSite-root path to the banner image, e.g. /img/palana-part-1/banner-image.png.
excerptYesNon-empty summary string. If missing or blank, draft one of 300 characters or fewer that summarizes the post.

If any required key is missing, report it explicitly:

text
MISSING METADATA: <filename> is missing required field(s): <field1>, <field2>
Field-specific rules
id vs filename
  • Strip .md from the filename and compare to id character for character.
  • If they differ, flag as an error and propose correcting id to match the filename (do not rename the file).
authors
  • Each handle in authors must exist as a key in _data/authors.yml.
  • If a handle is missing, add an entry using this format:
yaml
adrian.margin:
  name: Adrian Margin
  thumbnail: /img/authors/adrian-margin.png
  • Use lowercase handle notation (firstname.lastname).
  • Confirm the author thumbnail file exists on disk (see Image file checks).
categories
  • Each category must exist in _data/categories.yml (e.g. Engineering, Data Science, Design, Product, Security).
  • If a category is missing from _data/categories.yml, flag it and ask before adding.
tags
  • Minimum 3 tags.
  • Tags should be Title Case nouns or short phrases relevant to the article topic.
  • Do not invent tags that misrepresent the content.
cover_photo
  • Must be a path starting with /img/.
  • The file must exist under the repo img/ directory (see Image file checks).
  • Also subject to PR/legal image review in pass 3 (references/pr-legal-pre-flight.md).
excerpt
  • Must be present and non-empty after validation.
  • Maximum 300 characters when you draft or revise it.
  • Write a plain-language summary of the whole post, not a marketing tagline.
Image file checks

Resolve paths by stripping the leading / and checking under the repository root:

  • cover_photo: /img/palana-part-1/banner-image.png → img/palana-part-1/banner-image.png
  • thumbnail: /img/authors/adrian-margin.png → img/authors/adrian-margin.png

If any referenced cover or author thumbnail file is missing, stop and report:

text
PLEASE INCLUDE IMAGE FILES

List each missing path. Do not invent placeholder images.

Show full SKILL.md (481 more words)Show less
Example front matter
yaml
---
layout: post
id: 2026-06-19-palana-part-1-secure-platform-for-ai-agents
title: 'Palana (Part 1): Why Grab built a secure platform for autonomous AI agents'
date: 2026-06-19 00:00:00
authors: [kevin.littlejohn]
categories: [Engineering]
tags: [Security, Artificial Intelligence, Kubernetes, DevSecOps, Platform, Engineering]
comments: true
cover_photo: /img/palana-part-1/banner-image.png
excerpt: "AI agents are becoming autonomous workloads with new security risks. Part 1 explains why Grab built Palana, a Kubernetes-native platform for running agents safely with isolation, controlled egress, and auditability."
---

Join us boilerplate

Run immediately after metadata validation. See references/join-us-boilerplate.md for the canonical copy.

  1. Search the post body for a ## Join us heading (exact match).
  2. If missing, append the canonical boilerplate from the reference to the end of the file, preceded by one blank line after the previous section.
  3. If present but non-canonical (different wording, wrong link, or extra content after the section), report it and replace with the canonical boilerplate when applying fixes.
  4. Do not modify the boilerplate text during grammar/tone or PR/legal passes.

Report when the section was added or replaced:

text
JOIN US BOILERPLATE: missing — added | present — ok | present — replaced with canonical copy

Prose editing (pass 3)

After metadata passes (or after reporting metadata gaps the user asked you to fix), edit the post body using references/grammar-tone-writing-quality.md.

What to improve
Grammar and mechanics
  • Fix obvious grammar, punctuation, and sentence-structure issues.
  • Apply sentence case to the metadata title and all Markdown headings per references/grammar-tone-writing-quality.md → Headings and titles.
  • Replace double spaces, trailing spaces, and hard tabs.
  • End sentence-like paragraphs and list items with full stops where appropriate.
  • Add commas where grammar is clear.
  • Split comma splices into two sentences or add a conjunction.
  • Do not add full stops to headings, table header cells, fragment labels, UI labels, command snippets, or incomplete placeholders.
Tone and style
  • Write in clear, direct, colleague-to-colleague engineering blog prose.
  • Prefer active voice, concrete verbs, and one idea per paragraph.
  • Remove hedging, meta-commentary, filler phrases, and AI-style slop listed in the reference.
  • Preserve the post's section structure unless the user asks for reorganization.
Spelling consistency
  • Determine whether the post mostly uses UK or US English.
  • Normalize inconsistent spelling to match that majority.
  • Do not change names, product labels, commands, code, URLs, or quoted material.
What not to change during prose editing

Do not rewrite:

  • Front matter keys or values except when fixing metadata issues found in the validation pass (missing excerpt, wrong id, etc.).
  • Code blocks, inline code, commands, JSON/YAML examples, or stack traces.
  • URLs, file paths, API names, product names, package names, table syntax, or quoted external text.
  • Filenames or post slug (id / filename) unless correcting a metadata mismatch.
  • The Join us boilerplate section (fixed corporate copy).

Run after the grammar and tone pass on the same _posts/*.md file.

  1. Read references/pr-legal-pre-flight.md in full.
  2. Build a disclosure inventory (metrics, images, internal names, people, vendors, incidents).
  3. Inspect every image: cover_photo, ![...](), and <img> tags — including alt text, captions, and surrounding prose.
  4. Inspect tables and figure references for unsourced or over-precise metrics.
  5. Apply every gate in the reference. Flag issues as blocker or recommend.
  6. Output the PR/legal review report from the reference. For each issue, include suggested fix wording.
  7. Ask the user whether to apply suggested PR/legal edits. Do not redact or remove content silently.

Verification report

After all passes, report:

text
files checked: <list>

--- pass 1: metadata ---
metadata status: pass | fail
missing or invalid metadata: <list or "none">
image file errors: <list or "none">
authors added to _data/authors.yml: <list or "none">
excerpt drafted or revised: <yes/no>
tags added or revised: <yes/no>

--- pass 2: join us ---
join us boilerplate: missing — added | present — ok | present — replaced with canonical copy

--- pass 3: grammar and tone ---
grammar and mechanics fixes applied: <summary>
tone and style improvements applied: <summary>
UK/US spelling normalization applied: <yes/no and variant>
sentence case fixes (title/headings): <summary or "none">

--- pass 4: PR/legal ---
PR/LEGAL VERDICT: PASS | PASS WITH CHANGES | BLOCK
blockers: <count + details per pr-legal-pre-flight.md format>
recommended edits: <count + details>
clearance questions: <list or "none">
gate checklist: <from pr-legal-pre-flight.md>

--- overall ---
items intentionally left unchanged: <front matter (except metadata fixes), links, code, quoted text, PR/legal redactions pending user approval>
next step: <ask user to apply PR/legal fixes | ready for PR/legal submit | resolve blockers first>

If metadata failed, list every missing or invalid field before prose and PR/legal findings.

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

Files

SKILL.md and 3 other files (references) in skills/pre-publishing-blog-tone-checker of grab/engineering-blog.

  • SKILL.md
  • references/grammar-tone-writing-quality.md
  • references/join-us-boilerplate.md
  • references/pr-legal-pre-flight.md

Open the folder on GitHubat commit fd83523

Compare with similar skills

Pre Publishing Blog Tone Checker 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.

Pre Publishing Blog Tone Checker compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pre Publishing Blog Tone Checker this skillgrab/engineering-blog138—~3kAutomated safety check: PassMIT
Notion To Blogwasp-lang/wasp19k—~922Automated safety check: PassMIT
Post Writingbenjamincrozat/blog-v5135—~2.3kAutomated safety check: PassNone
Reading Guidechingswy/Skill-Research-Figure179—~4.5kAutomated safety check: PassNone
Blog AnalyzeAgriciDaniel/claude-blog2.3k1 repos~3.5kAutomated safety check: PassMIT
Blog WriteAgriciDaniel/claude-blog2.3k1 repos~5.6kAutomated safety check: PassMIT

Similar skills

  • 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
  • Post Writing

    benjamincrozat/blog-v5

    Draft and revise publication-ready Markdown blog posts with reader-first writing, current primary sources, tested examples, reproducible benchmarks for quantitative claims, visually inspected…

    135 GitHub stars~2.3k tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Reading Guide

    chingswy/Skill-Research-Figure

    Structured learning navigator for blog posts and articles. An agent skill from chingswy/Skill-Research-Figure.

    179 GitHub stars~4.5k tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Blog Analyze

    AgriciDaniel/claude-blog

    Audit and score blog posts on a 5-category 100-point scoring system covering content quality, SEO optimization, E-E-A-T signals, technical elements, and AI citation readiness.

    2.3k GitHub starsUsed in 1 repo~3.5k tokens
    Writing & ContentAuto-check passed
  • Blog Write

    AgriciDaniel/claude-blog

    Write new blog articles from scratch optimized for Google rankings and AI citations.

    2.3k GitHub starsUsed in 1 repo~5.6k tokens
    Writing & ContentAuto-check passed
  • Write Chinese "数据库筑基课" Markdown articles for database architects, DBAs, and application developers.

    8.6k GitHub stars~2.4k tokensUpdated 2 days ago
    Writing & ContentAuto-check passed

Questions about Pre Publishing Blog Tone Checker

What does Pre Publishing Blog Tone Checker do?

Pre-publish quality pass for Grab Engineering Blog posts in posts/.md. Pre Publishing Blog Tone Checker is an agent skill from grab/engineering-blog.md.

When should I use Pre Publishing Blog Tone Checker?

Pre Publishing Blog Tone Checker fits situations like: editing a blog post before publish; tasks that involve Blog and article writing; tasks that involve Markdown.

How do I install Pre Publishing Blog Tone Checker in Claude Code?

Run `npx skills add grab/engineering-blog --skill pre-publishing-blog-tone-checker -a claude-code`. Or copy the skill folder (skills/pre-publishing-blog-tone-checker in grab/engineering-blog) into .claude/skills/pre-publishing-blog-tone-checker in your project. Claude Code loads it when a task matches its description.

How do I install Pre Publishing Blog Tone Checker in Codex?

Run `npx skills add grab/engineering-blog --skill pre-publishing-blog-tone-checker -a codex`. Or copy the skill folder (skills/pre-publishing-blog-tone-checker in grab/engineering-blog) into .agents/skills/pre-publishing-blog-tone-checker in your project. Codex loads it when a task matches its description.

Can I use Pre Publishing Blog Tone Checker 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 grab/engineering-blog --skill pre-publishing-blog-tone-checker -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pre-publishing-blog-tone-checker, .gemini/skills/pre-publishing-blog-tone-checker, .github/skills/pre-publishing-blog-tone-checker and .opencode/skills/pre-publishing-blog-tone-checker in your project.

What does Pre Publishing Blog Tone Checker need to run?

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

Does Pre Publishing Blog Tone Checker access the network?

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.

Is Pre Publishing Blog Tone Checker 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 Pre Publishing Blog Tone Checker use?

Pre Publishing Blog Tone Checker is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pre Publishing Blog Tone Checker use?

About 3k tokens (SKILL.md is roughly 12k 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 8.6k tokens, read only when the agent opens those files.

What are the alternatives to Pre Publishing Blog Tone Checker?

Skills that share tags, products or a category with Pre Publishing Blog Tone Checker: Notion To Blog (wasp-lang/wasp, 19k stars), Post Writing (benjamincrozat/blog-v5, 135 stars), Reading Guide (chingswy/Skill-Research-Figure, 179 stars) and Blog Analyze (AgriciDaniel/claude-blog, 2.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pre Publishing Blog Tone Checker?

grab (a GitHub organization) maintains it in grab/engineering-blog, which has 138 GitHub stars. The repository was last updated on October 8, 2026.

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