The user-facing help page loaded on prose help: a welcome stating contract authoring as composing requirements with agent execution and evaluator assessment, the six-option What Do You Want to Automate router (run a contract, build new, keep a goal true, learn syntax, improve OpenProse via prose-contributor, explore possibilities), and the full command table from init and compose through compile, serve, run, write, lint, preflight, test, inspect, status, install, upgrade, help, and examples. It gives quick-start sequences (stargazer-outreach compile plus promote plus serve; init/compose/write authoring; std/evals/inspector and prose-contributor invocations; use plus install), FAQs on supported Prose Complete hosts (Codex, Claude Code, OpenCode, Amp), the LLM-as-VM rationale, intelligent IoC, English-versus-structure, YAML limits, git-native deps with lockfile semantics, and orchestration-library differences, plus syntax-at-a-glance for responsibility, function, test, pattern, and ProseScript parallel samples and eight recommended examples. End users read this on prose help or when choosing between running, authoring, serving, learning, or contributing.
OpenProse Help
Load this file when a user invokes prose help or asks about OpenProse.
Welcome
Contract authoring is expressing intent by composing requirements. Reusable contracts provide the building blocks; composition determines how their requirements apply together.
An agent performs the work, and an evaluator assesses whether the contract’s requirements are satisfied. The executor returns a result that includes the evidence needed for that assessment. Execution and evaluation repeat as needed.
The public skill uses Contract Markdown for requirements and interfaces, and
ProseScript for required steps inside a render. A responsibility maintains
state over time; a function provides a one-time call. The agent follows the
VM instructions using the selected host's capabilities. See
requirements and composition.
What Do You Want to Automate?
When a user invokes prose help, guide them toward defining what they want to
build. Use the host's user-question primitive when available; otherwise ask the
question plainly in chat:
Question: "What would you like to automate with OpenProse?"
Header: "Goal"
Options:
1. "Run a contract" - "I have a `.prose.md` file to execute"
2. "Build something new" - "Help me create a contract for a specific task"
3. "Keep a goal true" - "Define a standing responsibility with compile/serve/status"
4. "Learn the syntax" - "Show me examples and explain how it works"
5. "Improve OpenProse" - "Turn run evidence into a focused upstream PR"
6. "Explore possibilities" - "What can OpenProse do?"
After the user responds:
- Run a contract: Ask for the file path, then load
prose.mdand execute - Build something new: Start with
prose init/prose composewhen the contract system is not yet clear; useprose writewhen one contract is already understood - Keep a goal true: Help author a
kind: responsibility, then explainprose compile,prose serve, andprose status - Learn the syntax: Show examples from
examples/, explain the VM model - Improve OpenProse: Run
std/evals/prose-contributoron relevant run IDs; require explicit user approval before pushing or opening a PR - Explore possibilities: Walk through examples like
stargazer-outreach/
Available Commands
| Command | What it does |
|---|---|
prose init [request...] |
Initialize an OpenProse workspace and begin its architecture |
prose compose [request...] |
Design and evolve the program's contracts, relationships, and architecture |
prose compile [path] [--out <dir>] |
Compile source into <openprose-root>/dist/manifest.next.json |
prose serve |
Serve the active IR as local cron and HTTP trigger adapters |
prose run <file.prose.md> |
Run a responsibility or function contract |
prose write [request...] |
Interactive-by-default authoring from rough English/pseudo-Prose into a validated source package; non-interactive runs return unresolved-intent when more detail is required |
prose lint <file.prose.md> |
Validate structure, schema, and contracts |
prose preflight <file.prose.md> |
Check dependencies and environment |
prose test <test.prose.md> |
Run tests with assertions |
prose inspect <run-id> |
Evaluate a completed run |
prose status |
Show active IR, diagnostics, trigger plan, recent runs, and responsibility status from the receipt ledger |
prose install |
Install dependencies from use statements into <openprose-root>/deps/ |
prose install --update |
Update pinned dependencies to latest |
prose upgrade --dry-run |
Inspect files and report the migration plan |
prose upgrade |
Apply the migration plan |
prose help |
This help -- guides you to what you need |
prose examples |
Browse and run example systems |
Quick Start
Run an example:
cd examples/stargazer-outreach
prose compile
cp dist/manifest.next.json dist/manifest.active.json
prose serve
Create your first contract:
prose init
prose compose
prose write
prose compose progressively turns the project architecture into full contract
source while keeping unresolved regions explicit. It creates semantic tests in
order from the package promise through contract boundaries, failure behavior,
portability, and performance. It never edits the OpenProse framework during
composition; framework feedback is deduplicated and filed as a public issue
when authorized, or preserved as an issue draft.
Use prose compose --review to challenge the current design and
prose compose --reflect <run-id...> to compare it with execution evidence.
Default project source lives under <openprose-root>/src/. Multi-file systems
conventionally start at <openprose-root>/src/{system}/index.prose.md; runs are
written to <openprose-root>/runs/.
Use a library function or responsibility:
prose run std/evals/inspector -- subject: 20260406-201439-1a3369
Contribute an improvement from run evidence:
prose run std/evals/prose-contributor -- subjects: 20260406-201439-1a3369
Add a dependency:
use "github.com/owner/repo/path/to/service"
Then run prose install to fetch and pin it.
FAQs
What AI assistants are supported?
Codex, Claude Code, OpenCode, Amp, and similar agent harnesses. Any host that
runs a sufficiently intelligent model and supports the OpenProse primitives
(spawn_session, filesystem state, tool calls, and user input) is considered
"Prose Complete".
How is this a VM?
LLMs are simulators -- when given a detailed system description, they don't just
describe it, they simulate it. The prose.md spec describes a VM with enough
fidelity that reading it induces simulation. But simulation with sufficient
fidelity is implementation: each session maps to a real spawn_session in the
host, outputs are real artifacts, and state persists in files. The simulation is
the execution.
What's "intelligent IoC"?
Traditional IoC containers (Spring, Guice) wire up dependencies from configuration files. OpenProse's container is an AI session that wires up agents using understanding. It doesn't just match names -- it understands context, intent, and can make intelligent decisions about execution.
Why not English?
English is already an agent framework -- we're not replacing it, we're structuring it. Plain English doesn't distinguish sequential from parallel, doesn't specify retry counts, doesn't scope variables. OpenProse uses English exactly where ambiguity is a feature (in contract descriptions), and structure everywhere else.
Why not all YAML?
We started with YAML. The problem: loops, conditionals, and variable declarations aren't self-evident in YAML. More fundamentally, YAML optimizes for machine parseability. OpenProse optimizes for intelligent machine legibility. It uses YAML only where structured nesting is doing real work, such as pattern instances. Contracts themselves stay in Markdown because they need to be understood, not merely parsed.
How do dependencies work?
OpenProse uses a git-native dependency model -- any git host works, written explicitly as host/owner/repo/path (e.g. github.com/alice/research). A contract can reference dependencies with use "host/owner/repo/path" or pattern: references, and call resolved functions via ProseScript call. Run prose install to clone dependencies into <openprose-root>/deps/ and pin their versions in <openprose-root>/prose.lock. The lockfile is committed to git; <openprose-root>/deps/ is gitignored (it's a cache, reproducible from the lockfile). std/ is shorthand for github.com/openprose/prose/packages/std/ (the standard library) and co/ is shorthand for github.com/openprose/prose/packages/co/ (company-as-prose). At runtime, dependencies are read from disk only -- no network calls. If deps are missing, prose run errors and tells you to run prose install.
Why not LangChain/CrewAI/AutoGen?
Those are orchestration libraries -- they coordinate agents from outside.
OpenProse runs inside the agent session -- the session itself is the IoC
container. prose run ... is therefore a command to the agent host, not
necessarily a shell binary. From a shell, wrap it in a Prose Complete runner
such as claude -p "prose run system.prose.md" or
codex exec "prose run system.prose.md". Switch from one supported harness to
another and the system should still read the same; only the host primitive
adapter changes.
Syntax at a Glance
Contract Markdown (*.prose.md files)
Contracts are *.prose.md files with tiny YAML identity frontmatter and readable ### sections. Forme wires the responsibility DAG at compile time; the Prose VM executes the frozen output at run time.
Identity frontmatter:
---
name: competitor-watch
kind: responsibility # responsibility | function | gateway | test | pattern
---
A responsibility (a mounted, subscribed data-flow node):
---
name: competitor-watch
kind: responsibility
---
### Requires
- `funding`: competitor funding signals
### Maintains
- `summary`: the current competitor-activity truth, with sources
### Continuity
- input-driven
### Errors
- `no-results`: no relevant sources found
### Strategies
- when few sources found: broaden search terms
### Environment
- `API_KEY`: required for external service access
### Requires declares the inputs as subscription contracts; ### Maintains declares the schema of the standing truth the render keeps current (type, canonicalization, facets, postconditions) — it is Forme's match target. ### Continuity declares what can wake the node: input-driven (default), self-driven (a cadence), or external-driven (a gateway).
A function (a called, ephemeral helper):
---
name: summarize-funding
kind: function
---
### Parameters
- `signals`: raw funding signals
### Returns
- `summary`: a concise digest with sources
A function is the library tier — arguments in, value out, no world-model and no ### Continuity. You call functions constantly via ProseScript call and author them rarely (most ship pre-built in std/).
Forme wires the DAG by matching each responsibility's ### Requires to the ### Maintains that satisfies it semantically across mounted responsibilities, and freezes the resolved edges. There is no kind: system and no ### Services graph kind: composition is intra-node call (inside one render) or a cross-node subscription (Forme-wired edge between responsibilities).
Two levels of author control:
- Contracts only (default) -- Forme wires the edges from
### Requires/### Maintains - Execution block -- author adds a
### Executionsection with explicitlet/callchoreography inside a render
Test files:
---
name: test-my-service
kind: test
subject: my-service
---
### Fixtures
- `topic`: "quantum computing"
### Expects
- `findings`: mentions at least 3 sources
### Expects Not
- `findings`: includes uncited claims
Tests use semantic assertions over observable outputs, not exact wording.
Patterns:
---
name: worker-critic
kind: pattern
---
Patterns define reusable agent design patterns with slots, config, invariants,
and delegation rules. They are not run directly; a responsibility instantiates
them with a pattern: reference. A nested pattern declaration may appear inside
another pattern instance's with: block as a slot value.
ProseScript (### Execution)
ProseScript is the imperative layer. Use it inside ### Execution when a render needs pinned choreography.
let research = call researcher
topic: topic
parallel:
let critique = call critic
draft: research
let factcheck = call fact-checker
draft: research
let report = call synthesizer
research: research
critique: critique
factcheck: factcheck
return report
Also valid: session, agent, repeat, for, loop until, try/catch, if/elif/else, choice, block, do, and pipelines. For complete syntax and validation rules, see prosescript.md.
Examples
The examples/ directory contains small OpenProse Native Repositories. Each
example has src/, dist/, runs/, state/, deps/, a top-level README,
and source files for a responsibility, a gateway, and focused functions.
Recommended starting points:
stargazer-outreach/-- GitHub stars to qualified, thoughtful outreachincident-briefing-room/-- Incident updates, impact, and next actionscustomer-risk-radar/-- Customer risk monitoring before renewals or escalationsrelease-readiness/-- Release evidence, risk, notes, and rollback contextvendor-renewal-watch/-- Renewal preparation before auto-renewal windowsresearch-inbox-triage/-- Deduplicated, prioritized research intakecontent-performance-loop/-- Content performance lessons into next actionscompliance-evidence-tracker/-- Audit evidence freshness and gap tracking