Use this skill before publishing a Grab Engineering Blog post. It runs four passes on Markdown files in _posts/:
## Join us footer exists; add it if missing (references/join-us-boilerplate.md).references/grammar-tone-writing-quality.md.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.
| In scope | Out of scope |
|---|---|
_posts/*.md front matter validation |
Broken link checking |
Body prose in _posts/*.md |
Readability scores or lint tooling |
| PR/legal risk review of prose and images | Legal sign-off or formal approval |
Adding missing authors to _data/authors.yml |
Renaming post files |
Adding the canonical ## Join us footer when missing |
Rewriting code blocks, URLs, or quoted text without user approval |
Drafting missing excerpt or tags |
Auto-redacting content without user confirmation |
| Suggesting safer wording for flagged metrics/names | Editing the Join us boilerplate text without an explicit PR/legal request |
_posts/*.md changes if they asked for a change-only pass.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.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.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.
Every post must include all of these keys:
| Field | Required | Validation rules |
|---|---|---|
layout |
Yes | Must be post. |
id |
Yes | Must 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. |
title |
Yes | Non-empty string in sentence case (see references/grammar-tone-writing-quality.md → Headings and titles). Use single quotes if the title contains a colon. |
date |
Yes | Non-empty publish datetime, e.g. 2026-06-19 00:00:00. |
authors |
Yes | YAML array of author handles, e.g. [kevin.littlejohn]. At least one author. |
categories |
Yes | YAML array with at least one category, e.g. [Engineering]. |
tags |
Yes | YAML array with at least 3 tags relevant to the post content. |
comments |
Yes | Boolean: true or false. |
cover_photo |
Yes | Site-root path to the banner image, e.g. /img/palana-part-1/banner-image.png. |
excerpt |
Yes | Non-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:
MISSING METADATA: <filename> is missing required field(s): <field1>, <field2>
id vs filename.md from the filename and compare to id character for character.id to match the filename (do not rename the file).authorsauthors must exist as a key in _data/authors.yml.adrian.margin:
name: Adrian Margin
thumbnail: /img/authors/adrian-margin.png
firstname.lastname).thumbnail file exists on disk (see Image file checks).categories_data/categories.yml (e.g. Engineering, Data Science, Design, Product, Security)._data/categories.yml, flag it and ask before adding.tagscover_photo/img/.img/ directory (see Image file checks).references/pr-legal-pre-flight.md).excerptResolve 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.pngthumbnail: /img/authors/adrian-margin.png → img/authors/adrian-margin.pngIf any referenced cover or author thumbnail file is missing, stop and report:
PLEASE INCLUDE IMAGE FILES
List each missing path. Do not invent placeholder images.
---
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."
---
Run immediately after metadata validation. See references/join-us-boilerplate.md for the canonical copy.
## Join us heading (exact match).Report when the section was added or replaced:
JOIN US BOILERPLATE: missing — added | present — ok | present — replaced with canonical copy
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.
title and all Markdown headings per references/grammar-tone-writing-quality.md → Headings and titles.Do not rewrite:
excerpt, wrong id, etc.).id / filename) unless correcting a metadata mismatch.Run after the grammar and tone pass on the same _posts/*.md file.
references/pr-legal-pre-flight.md in full.cover_photo, ![...](), and <img> tags — including alt text, captions, and surrounding prose.After all passes, report:
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.