The .3md format
3md.
Markdown, but with a third axis you name yourself.
A plain-text format for documents with depth: time, layers, frames, space. Open, MIT, with conformance-verified parsers in Swift, TypeScript, and Rust. Write one below and share it with a link.
--- 3md: 1.0 # the magic marker axis: time # you name the Z axis title: My week --- @plane z=0 label="Monday" # Monday - [ ] Standup at 9 @plane z=1 label="Tuesday" # Tuesday - [ ] Ship the release
One free axis
You decide what Z means.
Markdown is flat. Real things have depth. In 3md the third axis is yours to name, so the same plain-text file becomes a week, a stack of overlays, an animation, or a stage, just by what you call the axis.
- axis = timedays, a week, a timeline
- axis = layerssource · plain-English · review
- axis = framesanimation, step by step
- axis = spacex / y / z stage positions
- axis = slidesa deck you step through
- axis = floorsa building, by elevator
Write one now
The editor is the demo.
Edit the source on the left; the live viewer on the right is the real
<three-md> component people embed.
Switch the layout (split · editor · viewer), then copy a share link
or an embed snippet (both carry the whole document).
The whole spec, on a napkin
Know Markdown? You know 3md.
A version line is the magic marker. An axis
names what depth means. @plane directives
slice the document along Z, and everything between them is ordinary Markdown. That's the format.
The viewer above is the canonical component, backed by a parser kept identical across three languages by one shared conformance suite, so what you write renders the same everywhere.
--- 3md: 1.0 # required version axis: layer # time · layer · frame · space… title: Annotated clause --- @plane z=0 label="source" Deliver within thirty (30) days. @plane z=1 label="plain english" You have 30 days from signing.
- 1
- free axis
- you name what depth means
- 3
- parsers in lockstep
- Swift · TypeScript · Rust
- 43
- conformance vectors
- one contract, green in all three
- 1.0
- frozen grammar
- additive-only from here · MIT
Agent profiles
agent.3md builds on the format.
Put an agent in a single .3md file:
plane 0 is the agent, every other plane is a skill. That project has
its own page because the agent layer adds routing, CLI bindings,
loaders, and MCP on top of the base 3md format.
- progressive disclosureThe agent loads only the skill it needs, not all of them.
- flat at scaleKeep the skill index out of the prompt and query it as a tool, and per turn context stays roughly flat as the agent grows.
- portableThe same file loads in TypeScript, Rust, and Swift.
- mcp-readyRun it as an MCP server and any agent can call its skills as tools.
--- 3md: 1.0 axis: skill # plane 0 is the agent agent: atlas model: claude-opus-4-8 --- @plane z=0 label="Atlas" Route each task to the skill that matches. @plane z=1 label="web-research" triggers="search, find, latest" Find current info, then cite sources.
Markdown, with depth.
One free axis, three conformant parsers, a frozen 1.0 grammar, and a component you can drop into any JavaScript or TypeScript front end.