Vol. 0 · No. 1A page format for AI agentsOctober 2026
Lede

All the page that fits in a few hundred tokens


skill/lede/SKILL.md, laid out

The reference, for people.

A model reads Lede's reference as 2,908 tokens of dense notes. This is the same language set out to read: one section per kind of block, and an example in each that opens in the playground, so you can change it and watch the page.

View on GitHubInstall the skill

The shape of a page

  • One line is one block. Nothing nests and nothing closes, except ``` code fences and the alt/opt blocks in a sequence diagram. Indentation never matters.
  • You write content; the compiler owns the look. Layout, color, dark mode and the phone layout are decided for you, so a page never carries styling.
  • Keywords are lowercase and start the line: data chart table kpi diagram image grid cards step. A mistyped keyword fails loudly instead of turning into prose.
  • Declare before use. A data set or a diagram is declared above the first line that uses it.
  • Escape with a backslash. Prose that begins with a keyword, or with # - > !, takes a \ in front.

Text

Most of Markdown works as you expect. A few lines at the top describe the page.

@title @subtitle @author Name, Role @date @width wide
The page's title block and settings.
# ## ###
Headings, three levels.
Plain lines
Paragraphs. Consecutive lines join; a blank line ends the paragraph.
- 1. - [ ] - [x]
Bullets, numbered items, open and done tasks. -- or -- 1. nests one level under the item above.
>
A quote. A last quote line that starts with — is the attribution.
---
A horizontal rule.
Inline
`code`, **bold**, *italic*, [link text](https://…).
```lang
A code fence with an optional language. ```=html fences raw HTML, which is sanitized.
@title Checkout, week 42
@subtitle Weekly status for the payments team
# Where we are
Plain lines are paragraphs. Use **bold**, *italic*, `code` and [links](https://example.com) inline.
- Card retries ship Thursday
- [x] Migrate the ledger
- [ ] Remove the old webhook
-- Waits on the partner's cutover
> Ship the boring version first.
> — The on-call handbook
! The cache now expires on write.
\table stakes: a line that starts with a keyword takes a backslash.

Callouts

!
A note.
!!
A warning.
!!!
Critical: an outage, data loss, stop the line.
! The cache now expires on write.
!! Two flags depend on billing_v2.
!!! Writes are paused until 04:00.
Three callouts of rising severity.

Data

Declare a data set once and refer to it by name from charts, tables and tiles.

  • Rows are separated by ; and fields by ,. The first row is the header.
  • Quote a field that contains , or ;: "Smith, J", "$1,450". A comma inside **bold** does not split a field.
  • data runs += … appends rows later in the page.
  • Chart cells are plain numbers. Put the unit in the chart's unit=, not in the cell.
data runs = week,deploys,rollbacks; W1,14,2; W2,19,1; W3,23,3
data runs += W4,31,1; W5,28,2
kpi Deploys this week | =runs.deploys
chart bar runs y=deploys labels title="Deploys per week"
table runs sort=-deploys limit=3 title="Busiest weeks"

Charts

chart KIND DATA [options] draws a data set by name.

KindUse it for
lineLonger trends.
areaA trend where the total matters; stacks with stack.
barUp to 12 points, vertical. Several y columns are grouped.
hbarLong category names and rankings.
rangeSpans on a real scale: schedules, deadlines, safe ranges.
data runs = week,deploys,rollbacks; W1,14,2; W2,19,1; W3,23,3; W4,31,1; W5,28,2; W6,34,1
chart line runs mark="W3 freeze lifted" title="Deploys per week"
A two-series line chart of deploys and rollbacks per week with an event marker at W3.

Options

OptionWhat it does
x=colThe x column. Default: the first column.
y=col,colThe series. Default: every numeric column. Names may contain spaces: y=open bugs,closed bugs.
title="…"A title above the chart.
unit=msA unit for the values: $, % or any suffix.
stackStacks the series (bar, hbar, area).
labelsPrints the values. labels=end labels only the last point; labels=all every one. Bars get labels on their own when they fit.
min= max=The axis range.
focus=col or focus="Thu"Highlights one series and greys the rest, or emphasizes one bar by its x value.
target="99.9 SLO"A dashed reference line at that value, with an optional label.
mark="W3 deploy"An event: the x value as written, then a label under 24 characters. Repeat it 2 to 4 times; not on hbar.
hatch="Thu"Stripes a bar to show it is an estimate.
from=col to=colRange charts: the start and end columns, numbers or ISO dates. Add at=col for a marker per row and bands=400,5000 for up to 4 labelled thresholds.

Series named good, neutral and bad, or done, at risk and blocked, take status colors on their own.

data latency = day,p50,p99; Mon,82,190; Tue,85,240; Wed,80,180; Thu,88,410; Fri,84,200
chart bar latency y=p99 unit=ms focus="Thu" target="250 SLO" title="p99 latency"
data cost = service,usd; Compute,18400; "Storage, S3",6100; Network,3900
chart hbar cost unit=$ title="Cost by service"
data plan = task,start,end; Design,2026-03-02,2026-03-20; Build,2026-03-16,2026-05-08; Test,2026-04-27,2026-05-22
chart range plan from=start to=end target="2026-05-01 freeze"
A schedule of design, build and test as bars on a date axis with a freeze line.

Tables

table runs
Every column of a data set.
cols=week,deploys
Only these columns.
sort=col sort=-col
Ascending, or descending.
limit=5 title="…"
The first rows only; a title.
table = a,b; 1,2
A one-off table written inline.
heat heat=col,col
Shades numeric cells by rank, for scorecards.
bar=col target=col
A bar behind that column's numbers, and a tick at a target.

A cell that is just a status word (Done, On track, Ready, At risk, In progress, Blocked, Failed, Go, No-go) becomes a colored pill, so write the plain word. Cells may use inline markup.

table = service,owner,p99,status; Checkout,Ana,182 ms,On track; Search,Wei,240 ms,At risk; Ledger,Sam,95 ms,Blocked; Billing,Ola,120 ms,Done
A table of four services with owners, latency and colored status pills.
Example: heat and bar=Open in the playground
data teams = team,coverage,open bugs,target; Payments,82,4,90; Search,64,11,80; Ledger,91,2,90
table teams heat=open bugs
table teams bar=coverage target=target

Metric tiles

kpi label | value | change | tone. Consecutive kpi lines form one row; a lone one is a large hero number.

  • The tone is good, bad or neutral and colors the change. A short note can take its place; a note that is just a status word or a date shows as a chip.
  • =runs.deploys as the value takes the last value of a data column.
  • bar as the tone draws a progress bar from 0 to 100.
kpi Uptime | 99.97% | +0.02 pts | good
kpi p99 latency | 182 ms | -12% | good
kpi Cost | $41,200 | +8% | bad
Three metric tiles: uptime, p99 latency and cost, with colored changes.

Diagrams

Declare a diagram with diagram NAME, then write its lines prefixed with the name and a colon. The compiler lays it out.

id "Label" kind "sub label" focus
A node. The kind is a short tag: user, svc, fn, db, queue, cache, lb, ext, store, team, or decision (a diamond; label its exits yes and no). Put focus on the one or two nodes that matter. An id you never declare still becomes a node.
a -> b : label
An edge. --> is dashed (async, reply, optional), <-> runs both ways, -x- is a path that must not exist. Chain with a -> b -> c; fan out with a -> b, c. Keep labels to three words.
group id "Label" members…
A box around nodes. A member can be another group, which nests it (account, VPC, subnet), and an edge can point at a group.
dir=LR dir=TB
Left to right, or top to bottom (the default). legend adds a key.
diagram arch dir=LR
arch: user "Customer" user
arch: api "Payments API" svc focus
arch: db "Orders DB" db
arch: q "Events" queue
arch: user -> api : https
arch: api -> db : sql
arch: api --> q : async
arch: group vpc "VPC 10.0.0.0/16" api, db, q
A left-to-right architecture diagram: customer to payments API inside a VPC, which writes to a database and sends events to a queue.

Sequence diagrams

diagram NAME sequence, then the participants, the messages in order, and notes such as login: note app : checks password. alt "cond" … else "cond" … end and opt "cond" … end mark branches; they do not nest.

diagram login sequence
login: browser "Browser" user
login: app "Web app" svc
login: idp "Identity" ext
login: browser -> app : POST /login
login: app -> idp : verify
login: idp --> app : ok
login: app --> browser : 302 + cookie
A sequence diagram of a login between browser, web app and identity provider.

Layout

cards
The ### sections that follow become a grid of cards, for options side by side.
step Action | by 03:00 | Owner
Consecutive step lines become numbered step cards, the deadline as a chip.
grid 2 grid 3 grid 2 count=4
The next blocks sit side by side.
image file.png "Alt text" caption="…"
An image, with alt text that describes it.
step Rotate the certificate | by 03:00 | Ana
step Drain the old pool | by 03:30 | Wei
step Re-enable writes | by 04:00 | Sam
Three numbered step cards with deadlines and owners.
Example: grid and cardsOpen in the playground
grid 2
kpi Error budget left | 62% | on track | bar
kpi Pages this week | 3 | -2 | good
---
cards
### Retry with backoff
Simple, and the queue absorbs the spikes.
### Circuit breaker
Fails fast, but needs a fallback path.

Choosing a block

To showUse
A trendchart line, or chart bar for up to 12 points
Exact valuestable; repeat a chart's data in one only when the exact values matter
The headline numberA lone kpi line
Thresholds or contacts in a runbookA row of kpi tiles at the top
Structurediagram
A scorecard, progress or sharetable … heat, bar=
Options side by sidecards
Dated actionsstep
Spans on a scalechart range

Write numbers with their unit: 54.7%, $17.2M, 182 ms. Lede pages carry no HTML unless there is no other way, and no Markdown tables or Mermaid.

As a model reads it

The text below is the reference exactly as the skill gives it to a model. The project caps it at 2,910 tokens, counted the way Claude 5.5 counts them: a word is added only if it still fits. The full specification has the grammar.

Show the 2,908-token reference
Lede is a line-oriented page format. One line is one block; nothing nests or closes (except ``` fences and sequence alt/opt blocks); indentation never matters. You write content; the compiler owns layout, color, dark mode and phone layout, so never write styling.

Text
```
@title Page title            (meta: also @subtitle, @author Name, Role, @date, @width wide)
# Heading 1 / ## Heading 2 / ### Heading 3
Plain lines are paragraphs; consecutive lines join. A blank line ends a paragraph.
- bullet          1. numbered          - [ ] task          - [x] done task
-- sub-bullet     -- 1. sub-step     (one level, under the item above)
> quote line      > — Attribution (last quote line starting with —)
! A note callout.
!! A warning callout.
!!! A critical callout (outage, data loss, stop-the-line).
---               (horizontal rule)
\Escape: a leading backslash makes the line plain text (for prose starting with a keyword like "table" or "data", or with #, -, >, !).
```
Inline: `code`, **bold**, *italic*, [link text](https://example.com).
Code: a ``` fence with an optional language; ```=html fences raw HTML (sanitized).

Data: declare once, reference by name. Rows are separated by `;`, fields by `,`. Quote fields containing `,` or `;`: "Smith, J", "$1,450". A comma inside **bold** does not split the field. The first row is the header.
```
data runs = week,deploys,rollbacks; W1,14,2; W2,19,1; W3,23,3
data runs += W4,31,1; W5,28,2          (append rows later)
```
Charts: `chart KIND DATA [options]`. KIND is `line`, `area`, `bar` (vertical; grouped for several y columns), `hbar` (horizontal; use for long category names or rankings) or `range` (to-scale spans: schedules, deadlines, safe ranges).
```
chart line runs x=week y=deploys,rollbacks title="Deploys per week"
chart bar runs y=deploys labels
data cost = service,usd; Compute,18400; "Storage, S3",6100
chart hbar cost unit=$ title="Cost by service"
data plan = task,start,end; Design,2026-03-02,2026-03-20; Build,2026-03-16,2026-05-08
chart range plan from=start to=end target="2026-05-01 freeze" title="Plan"
```
Options: `x=col` (default: first column), `y=col,col` (default: every numeric column; column names may contain spaces: `y=open bugs,closed bugs`), `title="..."`, `unit=ms` (or `$`, `%`, any suffix), `stack` (bar/hbar/area), `labels` (print values), `min=` / `max=` (axis range), `focus=col` (highlight one series, grey the rest) or `focus="Thu"` (emphasize one bar by its x value), `target="99.9 SLO"` (a dashed reference line at that value, with an optional label), `mark="W3 deploy"` (an event: the x value as written in the column, then a label; repeatable, 2 to 4 per chart, under 24 characters; not hbar). `range` takes `from=col to=col` (numbers or ISO dates), optionally `at=col` (a marker per row) and `bands=400,5000` (labelled threshold ticks, up to 4). `labels=end` labels only the last point; `labels=all` labels every value. `hatch="Thu"` stripes an estimated bar. Series named good/neutral/bad, done/at risk/blocked and similar take status colors. Bars get value labels automatically when they fit. Cells must be plain numbers (no units inside cells; put the unit in `unit=`).

Tables:
```
table runs                                   (all columns)
table runs cols=week,deploys sort=-deploys limit=5 title="Busiest weeks"
table = option,cost,verdict; SQS,low,**chosen**; Kafka,high,overkill    (inline, one-off)
table runs heat                    (rank numeric cells by value; or heat=col,col)
table runs bar=deploys             (a bar behind that column's numbers)
table runs bar=deploys target=rollbacks   (a tick per bar at the target value)
```
`sort=col` ascending, `sort=-col` descending. Cells may use inline markup. A cell that is just a status word (Done, On track, Ready, At risk, In progress, Blocked, Failed, Go, No-go…) renders as a colored status pill, so write the plain word. Numbered lists render as step lists.

Metric tiles: consecutive kpi lines form one row.
```
kpi Uptime | 99.97% | +0.02 pts | good
kpi p99 latency | 182 ms | -12% | good
kpi Cost | $41,200 | +8% | bad
kpi Deploys | =runs.deploys          (last value of a data column)
kpi Migrated | 58% | on track | bar   (progress bar, 0 to 100)
```
A lone kpi line renders as one large hero number. A note that is just a status word or a date shows as a chip. Fields: label | value | change | tone (`good`, `bad`, `neutral`) or a short note. Tone colors the change.

Diagrams: declare, then write lines prefixed with the diagram's name and a colon.
```
diagram arch dir=LR title="Production topology"
arch: user "Customer" user
arch: api "Payments API" svc "ECS, 6 tasks" focus
arch: db "Orders DB" db
arch: user -> api : https
arch: api -> db, cache : sql
arch: q --> worker : async
arch: a <-> b
arch: group priv "Private subnets" api, db
arch: group vpc "VPC 10.0.0.0/16" priv, lb
arch: legend      (a key to node kinds and arrows)
```
- Node: `id "Label" [kind] ["sub label"] [focus]`. Kind is a short lowercase tag: user, svc, fn, db, queue, cache, lb, ext, store, team, decision (diamond; label its exits yes/no)... Use `focus` on the 1–2 nodes that matter most. Undeclared ids become nodes.
- Edge: `a -> b : label`; `-->` dashed (async, reply, optional); `<->` both ways; `-x-` a blocked path that must not exist; chains `a -> b -> c`; fan-out `a -> b, c`. Keep labels short (≤ 3 words).
- Group: `group id "Label" members...`; members may be other group ids, which nests them (account > VPC > subnet).
- An edge may point at a group id (`vpc -> tgw : attach`).
- `dir=LR` (left to right) or `dir=TB` (top to bottom, default).

Sequence diagrams: `diagram NAME sequence`, then participants, messages in order, and notes.
```
diagram login sequence title="Login"
login: browser "Browser" user
login: app "Web app" svc
login: browser -> app : POST /login
login: note app : checks password
login: alt "password ok"
login: app --> browser : 302 + cookie
login: else "bad password"
login: app --> browser : 401
login: end
```
`opt "cond"` also works; blocks do not nest.

Layout:
```
cards             (the ### sections that follow become a grid of cards)
step Rotate the cert | by 03:00 | Ana     (consecutive step lines: numbered step cards, deadline as a chip)
image chart.png "Alt text describing it" caption="Optional caption"
grid 2            (the next 2 blocks sit side by side; `grid 3`, or `grid 2 count=4` for 4 blocks in 2 columns)
```

Rules: keywords (`data chart table kpi diagram image grid cards step`) are lowercase and start the line. Declare every data name and diagram above its first use. Charts for trends, tables for exact values, kpi tiles for headline numbers, diagrams for structure. `bar` for up to 12 points of one series, `line` for longer trends. The one headline number goes on a lone kpi line; a runbook opens with a kpi row of thresholds or contacts. Repeat a chart's data in a table only when exact values matter. `heat` for scorecards, `bar=` for progress or share columns. Write numbers with their unit: 54.7%, $17.2M, 182 ms, never "percent" or "million". `cards` compare options side by side, `step` lists dated actions, `chart range` shows spans on a scale. Lede only: no HTML unless unavoidable, no Markdown tables, no Mermaid.