PROSE01 / 12
OpenProse
A new kind of language for a new kind of computer.
Speaker
Luis Freitas
Role
Co-founder, Frames.AG
Handle
@microchipgnu
Venue
Agentic Engineering Lisbon @ The Nest
Date
2026-05-27
§ 01 · OpeningLisbon · 2026-05-27
PROSE02 / 12
Thesis
Turn recurring prompts
into reusable workflows
that run on your harness.
Format
Markdown
Runtime
your harness, unchanged
Input
prompts you already write
Output
composable, re-runnable workflows
The substrate
LLM OS diagram (Karpathy, 2023)
Claude Codeanthropic
Pi55k+ ★
OpenCode165k+ ★
Codexopenai
Gemini CLIgoogle
…and a dozen others
Karpathy · 2023 · "an LLM is a new kind of computer"
Subagents, filesystem, tools, persistence · the OS that finally shipped. You're already on the computer.
§ 02 · ThesisOne-line pitch
PROSE03 / 12
Mental model
What sits between a prompt and a program?
program (n.)
a sequence of instructions written in a programming language that tells a computer exactly how to perform a specific task.
Layer
File
Role
Conventions
AGENTS.md
text the agent reads
Context
CLAUDE.md
text Claude remembers
Capability
SKILL.md
text the agent loads
Program
.prose.md
text the runtime can execute
AGENTS, CLAUDE, SKILL scaffold the agent.
Prose gives shape to instructions that run as programs.
§ 03 · Mental modelSticky notes vs scripts
PROSE04 / 12
Shape
Contract Markdown.
---
name: security_review
kind: service
---

### Requires
- diff: the code diff to review

### Ensures
- findings: list of security concerns with file:line refs
- severity: low | medium | high
No hardcoded chain · no brittle mega-prompt · no hand-drawn DAG. The contract is the interface. The runtime decides the execution plan.
Anatomy
Kind
service
Name
security_review
Inputs
diff
Outputs
findings, severity
Authoring
Contract Markdown is the default. A small scripting mode exists for explicit order, retries, or loops — most workflows don't need it.
§ 04 · ShapeContract Markdown
PROSE05 / 12
What you just saw
That was a service.
Other kinds compose from there.
service
one unit of agent work
"review this diff for security issues"
system
a composition of services
"fetch the diff, run three reviews, post a comment"
responsibility
a standing goal that wakes itself up
"every PR gets reviewed within 5 minutes"
…and more
other kinds for specific cases
see github.com/openprose/prose
Same Markdown format for all of them. The kind: field at the top tells the runtime which one it is. Today we'll focus on service and system.
§ 05 · Building blocksservice · system · and more
PROSE06 / 12
Worked example · a system
Six services that review a PR.
---
name: pr-review
kind: system
---

### Requires
- pr_event

### Ensures
- posted_comment_url

### Services
- fetch_diff
- security_review · performance_review · docs_review
- synthesize · post_comment
Six services · flat list · no edges, no order declared anywhere.
Anatomy
Kind
system
Name
pr-review
Input
pr_event
Output
posted_comment_url
Services
6
Open question
No order declared anywhere. So how does the runtime know what runs first?
§ 06 · Worked exampleOne system · no order declared
PROSE07 / 12
How does it know
what runs first?
Forme · the wiring layer
It reads outputs against inputs. No graph to draw.
Result
DAG falls out
Parallel
3 reviewers
Cost
zero wiring
fetch_diff security_review performance_review docs_review synthesize post_comment
You didn't draw the DAG. Flat list + tight contracts. Parallelism falls out for free.
Forme · output
The DAG you saw, as JSON.
{
  "id": "pr-review", "systemName": "pr-review", "sourcePath": "src/pr-review.prose.md",
  "graph": [
    { "id": "fetch_diff",         "inputs": [{"name":"pr_event","from":"caller"}],                          "outputs": [{"name":"diff","public":true}] },
    { "id": "security_review",    "inputs": [{"name":"diff","from":"service","sourceNodeId":"fetch_diff"}], "outputs": [{"name":"findings","public":true}] },
    { "id": "performance_review", "inputs": [{"name":"diff","from":"service","sourceNodeId":"fetch_diff"}], "outputs": [{"name":"findings","public":true}] },
    { "id": "docs_review",        "inputs": [{"name":"diff","from":"service","sourceNodeId":"fetch_diff"}], "outputs": [{"name":"findings","public":true}] },
    { "id": "synthesize", "inputs": [
        {"name":"security_findings",   "from":"service","sourceNodeId":"security_review"},
        {"name":"performance_findings","from":"service","sourceNodeId":"performance_review"},
        {"name":"docs_findings",       "from":"service","sourceNodeId":"docs_review"}
      ], "outputs": [{"name":"review","public":true}] },
    { "id": "post_comment",       "inputs": [{"name":"review","from":"service","sourceNodeId":"synthesize"}], "outputs": [{"name":"comment_url","public":true}] }
  ],
  "executionOrder": [
    { "nodeId": "fetch_diff",         "dependsOn": ["caller"] },
    { "nodeId": "security_review",    "dependsOn": ["fetch_diff"] },
    { "nodeId": "performance_review", "dependsOn": ["fetch_diff"] },
    { "nodeId": "docs_review",        "dependsOn": ["fetch_diff"] },
    { "nodeId": "synthesize",         "dependsOn": ["security_review","performance_review","docs_review"] },
    { "nodeId": "post_comment",       "dependsOn": ["synthesize"] }
  ],
  "trace": { "vm_log": "vm.log.md" }
}
A Forme manifest · compiled before any service runs · the runtime walks this.
§ 07 · FormeThe wiring falls out · into a manifest
PROSE08 / 12
Runtime · run it live
There is no prose binary.
It's a command routed into your harness.
The skill embodies a small VM
that interprets your .prose.md.

Prose parasitizes the harness you already use.
claude code · agent session harness
$
filesystem · your repo 1 entry
src/pr-review.prose.md
§ 08 · RuntimeThe skill is the interpreter
PROSE09 / 12
How it runs
Three layers · all already in your harness.
01
Spec
open-prose skill
a folder of Markdown · teaches the model how to read .prose.md, wire Forme, walk the plan
02
Interpreter
the model itself
loads the spec into context · walks it · constrained by the contract
03
Primitives
spawn · read · write · copy
tools the harness already provides · no new infrastructure
Specification-as-instruction. The skill is the spec. The model is the interpreter. The harness is what runs.
§ 09 · How it runsspec · interpreter · primitives
PROSE10 / 12
Production
Frames runs on Prose.
We use it every day. Every entry at frames.ag/datasets is produced by Prose programs.
Concrete example · our dataset refresh responsibility discovers candidate rows, enriches them, attaches source evidence, diffs against the previous run, and writes the trace. All Prose.
Surface
frames.ag/datasets
Curated agentic-stack datasets, refreshed continuously.
Stack
Goals
responsibilities
Workflows
systems
Work
services
§ 10 · Production
PROSE11 / 12
On-ramp
Install. Write. Replace.
01 · install
npx skills add openprose/prose
into Claude Code or Codex
02 · write
one service
the smallest unit · one .prose.md file
03 · replace
one recurring prompt
something you re-type today
Caveats
Young
v0.14 · track HEAD
Non-deterministic
path may vary
Cost
N model calls per run
Hosted
early access · self-host for now
§ 11 · Adopt safelybounded, auditable, on-ramp
PROSE12 / 12
Thanks.
Find me
Speaker
Luis Freitas
Handle
@microchipgnu
Company
Frames
Links
Frames
frames.ag
Datasets
frames.ag/datasets
Prose
openprose.ai
Repo
github.com/openprose/prose
§ 12 · ThanksLisbon · 2026-05-27
01 / 10
← → · SPACE · N NOTES · V VOICE