plf-1 · open spec · MIT

PLF — the Promptcellar Logging Format.

An open, append-only, file-based standard for capturing prompts sent to agentic coding tools. JSON Lines on disk. Mergeable across branches. Stable across versions.

Read the spec on GitHub View the JSON Schema
01 — Why a standard?

Tools come and go.
Your prompts shouldn't.

The format that survives the switch.

Today you use Claude Code. Next year, maybe Codex. The year after, something we haven't named yet. If every tool writes its own format, every switch is a migration.

Two writers, one reader.

A standard makes the data ecosystem cheap. Build a dashboard once, point it at any PLF directory, and it works for any tool that writes the format.

Append-only is non-negotiable.

The format is designed so two branches can never write the same file. Merge conflicts in .prompts/ are avoided by construction, not by convention.

02 — The format at a glance

One annotated record.

.prompts/2026/05/01/7b3e9a4f.jsonlplf-1
{
"version": "plf-1",
"id": "01HX8K2P7M9NRT3VQYZB4WGFCD",
"session_id": "7b3e9a4f-1c84-4d2a-9e21-bd3f7af80c91",
"timestamp": "2026-05-01T14:22:31.412Z",
"author": { "email": "you@team.com", "name": "You" },
"tool": { "name": "claude-code", "version": "1.4.0" },
"model": { "provider": "anthropic", "name": "claude-opus-4-7" },
"prompt": "Refactor the auth middleware to use the new token store.",
"git": { "branch": "feat/auth", "head_commit": "a1b2c3d", "dirty": false },
"outcome": { "files_touched": ["server/auth.ts"], "status": "completed" },
"enrichments": { "input_tokens": 8412, "output_tokens": 1330, "cost_usd": 0.041 }
}

Directory layout

.prompts/YYYY/MM/DD/<session-id>.jsonl

One file per session. Append-only. Content-addressable.

Required fields

Field
Type
Notes
version
string
"plf-1"
id
string
ULID
session_id
string
UUIDv4
timestamp
string
RFC 3339
author
object
email · name
tool
object
name · version
model
object
provider · name

Two record shapes.

captured

The full record.

Prompt text + git context + outcome. The default. What you saw above.

excluded

The typed gap.

When redaction or .promptcellarignore matches, the prompt body drops out — but a record with {"status":"excluded"} stays so the timeline is auditable.

03 — Conformance

Two roles. Two rules.

Conforming writer

Any tool that produces records matching the schema in schemas/plf-1.schema.json.

Conforming reader

Any tool that can read JSONL and tolerates unknown fields.

Earn the badge

Encourage projects to display PLF support in their README:

[![PLF plf-1](https://img.shields.io/badge/PLF-plf--1-a1342a)](https://promptcellar.io/format)
04 — Ecosystem

Writers and readers.

Writers
  • Claude Codevia Promptcellar plugin · production
  • Codexcoming soon
  • Your tool here→ link to the spec
Readers
  • jqanything · stdlib
  • Nerve Centeranalytics + MCP node · coming soon
  • Your tool here→ build it
05 — Versioning

Today: plf-1.

Forward compatibility is non-negotiable. Readers MUST tolerate unknown fields. Writers MUST stamp version. Breaking changes require a new top-level token (plf-2) and never invalidate older records on disk.

Read the changelog →

06 — Get involved

Read it. Implement it. Improve it.

Read the full spec Open an issue / propose a change