Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"plugins": [
{
"name": "open-prose",
"description": "Write a Markdown contract (`.prose.md`). Your agent reads it, wires services, runs subagents, and leaves an auditable trace.",
"description": "State what an agent must accomplish and which requirements it must satisfy. Reuse and combine Markdown contracts.",
"source": {
"source": "local",
"path": "./"
Expand Down
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "openprose",
"metadata": {
"description": "Stop scripting agents. Declare them."
"description": "Express intent by composing requirements."
},
"owner": {
"name": "OpenProse",
Expand All @@ -11,7 +11,7 @@
{
"name": "open-prose",
"source": "./",
"description": "Write a Markdown contract (`.prose.md`). Your agent reads it, wires services, runs subagents, and leaves an auditable trace."
"description": "State what an agent must accomplish and which requirements it must satisfy. Reuse and combine Markdown contracts."
}
]
}
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "open-prose",
"description": "Write a Markdown contract (`.prose.md`). Your agent reads it, wires services, runs subagents, and leaves an auditable trace.",
"description": "State what an agent must accomplish and which requirements it must satisfy. Reuse and combine Markdown contracts.",
"version": "0.18.0",
"license": "MIT",
"homepage": "https://github.com/openprose/prose",
Expand Down
11 changes: 7 additions & 4 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "open-prose",
"version": "0.18.0",
"description": "Write a Markdown contract (`.prose.md`). Your agent reads it, wires services, runs subagents, and leaves an auditable trace.",
"description": "State what an agent must accomplish and which requirements it must satisfy. Reuse and combine Markdown contracts.",
"license": "MIT",
"homepage": "https://github.com/openprose/prose",
"repository": "https://github.com/openprose/prose",
Expand All @@ -22,10 +22,13 @@
"interface": {
"displayName": "OpenProse",
"developerName": "OpenProse",
"shortDescription": "Write a Markdown contract (`.prose.md`). Your agent reads it, wires services, runs subagents, and leaves an auditable trace.",
"longDescription": "OpenProse is a programming language for AI sessions. Write a Markdown contract: an agent reads it, wires the services, runs the subagents, passes artifacts through the filesystem, and leaves a durable trace under the active OpenProse root. Plain prompts are great for one-off work; they get messy when the same process needs roles, handoffs, retries, memory, or a receipt. The plugin activates on `prose ...`, on `.prose.md` files, and on requests for reusable multi-agent orchestration.",
"shortDescription": "State what an agent must accomplish and which requirements it must satisfy. Reuse and combine Markdown contracts.",
"longDescription": "Contract authoring is expressing intent by composing requirements. State what an agent must accomplish, which conditions it must satisfy, and where it can choose its approach. Reusable Markdown contracts provide the building blocks; composition determines how their requirements apply together. The public OpenProse skill supplies Contract Markdown and ProseScript instructions for a compatible agent host. Tools, permissions, execution evidence, and enforcement depend on that host. The plugin activates on `prose ...`, on `.prose.md` files, and on requests for reusable multi-agent orchestration.",
"category": "Productivity",
"capabilities": ["Read", "Write"],
"capabilities": [
"Read",
"Write"
],
"logo": "./assets/plugin/logo.png",
"composerIcon": "./assets/plugin/composer-icon.png",
"brandColor": "#8a6b2e",
Expand Down
6 changes: 3 additions & 3 deletions .plugin-meta.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"tagline": "Stop scripting agents. Declare them.",
"shortDescription": "Write a Markdown contract (`.prose.md`). Your agent reads it, wires services, runs subagents, and leaves an auditable trace.",
"longDescription": "OpenProse is a programming language for AI sessions. Write a Markdown contract: an agent reads it, wires the services, runs the subagents, passes artifacts through the filesystem, and leaves a durable trace under the active OpenProse root. Plain prompts are great for one-off work; they get messy when the same process needs roles, handoffs, retries, memory, or a receipt. The plugin activates on `prose ...`, on `.prose.md` files, and on requests for reusable multi-agent orchestration.",
"tagline": "Express intent by composing requirements.",
"shortDescription": "State what an agent must accomplish and which requirements it must satisfy. Reuse and combine Markdown contracts.",
"longDescription": "Contract authoring is expressing intent by composing requirements. State what an agent must accomplish, which conditions it must satisfy, and where it can choose its approach. Reusable Markdown contracts provide the building blocks; composition determines how their requirements apply together. The public OpenProse skill supplies Contract Markdown and ProseScript instructions for a compatible agent host. Tools, permissions, execution evidence, and enforcement depend on that host. The plugin activates on `prose ...`, on `.prose.md` files, and on requests for reusable multi-agent orchestration.",
"targets": {
"tagline": [
{ "path": ".claude-plugin/marketplace.json", "pointer": "metadata.description" }
Expand Down
13 changes: 6 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Contributing to OpenProse

OpenProse is a programming language for AI sessions, expressed as durable
Markdown contracts. Good contributions make agent workflows more readable,
OpenProse supports contract authoring: expressing intent by composing
requirements in Markdown. Good contributions make agent work more readable,
reviewable, versioned, reusable, inspectable, and cheaper to trust over time.

This repository is the open-source language, skill, standard library, and
Expand Down Expand Up @@ -33,11 +33,10 @@ A strong OpenProse PR should:

Use these when deciding whether a change belongs:

- **Markdown source defines intent.** Authored `*.prose.md` files say what must
be true; runtime and harness code should not smuggle in semantic policy.
- **Outcomes stay decoupled from implementation.** Users declare the result or
desired state; OpenProse can improve models, retries, and program structure
beneath that contract without changing the user's intent.
- **Markdown source defines intent.** Authored `*.prose.md` files state requirements; runtime and harness code should not smuggle in semantic policy.
- **Requirements remain distinct from approaches.** Users state required results,
conditions, and steps. Models, retries, and program structure may change
within those requirements without changing the user's intent.
- **The skill and interpreter docs define semantics.** Contract Markdown,
Forme, Prose VM, ProseScript, and Responsibility Runtime are the load-bearing
language/framework surface.
Expand Down
30 changes: 19 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
<p align="center">
<img src="assets/readme-header.png" alt="OpenProse" width="100%" />
</p>

<p align="center">
<strong>Standing AI jobs, declared in Markdown.</strong>
<strong>State the requirements. Reuse and combine contracts.</strong>
</p>

<p align="center">
Expand All @@ -18,11 +14,23 @@

## What this is

**OpenProse is a declarative language for standing AI work.** Instead of scripting a sequence of instructions and hoping the run lands where you wanted, you declare the world as it should be: an _ideal world state_, written as familiar structured **Markdown contracts** (`*.prose.md`). You say what must stay true, and the system works out how much model work it takes to keep it that way. When order, loops, or exact choreography genuinely matter, optional imperative **ProseScript** plans drop in. Declarative by default, imperative where you want the control.
**With OpenProse, you state what an agent must accomplish, which requirements it
must satisfy, and where it can choose its approach.** Contract authoring is
expressing intent by composing requirements. Reusable contracts provide the
building blocks; composition determines how their requirements apply together.

This is the oldest good idea in software, pointed at agents. SQL, Terraform, Kubernetes, React: you declare the desired state, and a reconciler is responsible for making reality match it. A thermostat is the one-sentence version. You set the temperature you want and it holds the room there; you never tell it when to fire.
This public repository supplies the **Contract Markdown and ProseScript**
format, the `open-prose` skill, and reusable libraries. A `responsibility`
expresses requirements for state maintained over time. A `function` performs a
one-time call. ProseScript specifies required steps when their order or method
matters. See [requirements and composition](skills/open-prose/guidance/authoring.md#requirements-and-composition)
for how these fit together.

OpenProse is a language, not a platform. The contracts are plain files that run on **any Prose-Complete agent harness** (any agent host that can spawn sessions, read and write files, and call tools): the language ships as a Skill your coding agent runs directly, and any conforming harness (see [Harnesses](#harnesses)) can compile and serve the same contracts as a standing process.
Contracts are readable `*.prose.md` files. A compatible agent harness runs them
using the skill and its own tools. The requirements remain the reference for
success; execution depends on the host's inputs, capabilities, and permissions.
Serving a standing responsibility requires a host that supports continuous
operation. See [Harnesses](#harnesses) and [Honest status](#honest-status).

## Run it where your agent lives

Expand All @@ -35,9 +43,9 @@ npx skills add openprose/prose
That installs OpenProse into any Prose-Complete coding agent (Claude Code, Codex CLI, OpenCode, and friends). From there, point your agent at a contract and say `prose run <file>`: the session itself embodies the VM; there is no separate binary. The [`examples/`](skills/open-prose/examples/) directory is the tour; start small and read the contract before you run it.

For a new program, say `prose init`, then use `prose compose` to shape its
purpose, topology, Contract boundaries, and outside-in semantic tests. Compose
purpose, topology, contract boundaries, and outside-in semantic tests. Compose
progressively materializes one directory package; use `prose write` when a
single Contract is already understood and needs focused authoring.
single contract is already understood and needs focused authoring.

Your first contract is a Markdown file away: `kind: responsibility` frontmatter, a `### Goal` that states what should stay true, and the sections below. The skill teaches your agent the rest.

Expand All @@ -64,7 +72,7 @@ The deep truth lives in the skill ([`skills/open-prose/`](skills/open-prose/)) a

## Nothing is held hostage

The contracts in this repo are **harness-agnostic**: OpenProse Markdown runs on any Prose-Complete agent host (a fresh `git clone` is a first-class experience). The contract is the public artifact; the deployment's secrets and data stay private. A contract and its trail can leave for any compliant host with no lost meaning. OpenProse stays free, MIT, and portable, forever.
The contracts in this repo target **compatible Prose-Complete agent hosts**. The same authored requirements can be reused with a different host that supports the required operations. A contract and its trail are portable artifacts; deployment secrets and private data need not be published with them. Portability does not imply identical model results or provide missing tools. OpenProse remains MIT-licensed.

## Harnesses

Expand Down
2 changes: 1 addition & 1 deletion assets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Static assets for the OpenProse language specification repository.

## Contents

- `readme-header.png`: Header banner shown at the top of the root README. Carries the OpenProse brand hero: the wordmark, the headline, and the install command.
- `readme-header.png`: Retained legacy README banner with the former headline and install command. The root README now introduces the current requirements and composition language in text.

## Plugin assets

Expand Down
17 changes: 8 additions & 9 deletions packages/co/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ OpenProse-native repository.
`co` sits next to `std` under `packages/`, not inside it. `std` is the
low-level standard library: roles, patterns, output adapters, memory, evals,
and ops primitives. `co` is an opinionated starter kit for a specific domain:
a company whose operating system is made of Prose services and systems.
a company whose operating requirements are expressed through reusable contracts.

Reference services and systems in `co` with the `co/` shorthand (analogous to
Reference contracts in `co` with the `co/` shorthand (analogous to
`std/`):

```markdown
Expand Down Expand Up @@ -36,7 +36,7 @@ packages/co/
company-repo-checker.eval.prose.md
```

## Services and Systems
## Starter contracts

- **`agent-readiness`** — narrow intake a founder can run in under a minute:
scores how accessible their site is to AI agents (well-known paths,
Expand All @@ -60,13 +60,12 @@ OpenProse, Inc.'s private business logic:
## std vs co — the split

- **std** — use-case-agnostic primitives. Inspector, contract-grader, retry,
fan-out, worker-critic, human-gate. Things that make *Prose services and
systems work*.
fan-out, worker-critic, human-gate. Things that make *reusable Prose contracts work*.
- **co** — company-operations-shaped patterns. Starter repo checkers,
scheduled intake, windowed analytics, GTM pipelines, fleet monitors.
Things that make *Prose services and systems produce business value*.
Things that make *reusable Prose contracts support company operations*.

## Running Services and Systems
## Running contracts

`prose run` is an agent-session command. It is not assumed to be a shell binary.
If a host provides a native Prose CLI, use it. Otherwise wrap the command in an
Expand All @@ -91,8 +90,8 @@ instruction the agent session interprets as the OpenProse VM.

- Keep this package generic. Do not include OpenProse, Inc. leads, accounts,
GTM logic, release logic, or private operating assumptions.
- Prefer composable services and systems with inline starter services until a
service earns a stable public API.
- Prefer reusable contracts with explicit requirements and interfaces. Keep
helper contracts local until they earn a stable public interface.
- Put universal primitives in `std/`; put company-operating-system patterns
here.
- Keep generated runtime state out of this package. Useful lessons can become
Expand Down
5 changes: 4 additions & 1 deletion packages/std/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# OpenProse Standard Library

Reusable OpenProse functions, responsibilities, patterns, roles, delivery adapters, memory contracts, and operational tools.
Reusable contracts provide building blocks for requirements. This library
includes OpenProse functions, responsibilities, patterns, roles, delivery
adapters, memory contracts, and operational tools. Combine them through their
declared interfaces; see [contract authoring](../../skills/open-prose/guidance/authoring.md#requirements-and-composition).

## Usage

Expand Down
8 changes: 4 additions & 4 deletions packages/std/ops/compose/compose.test.prose.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ subject: compose
- `authority_scope`: openprose-maintainer
- `framework_maturity`: experimental
- `request`: |
The architect previously selected an obligation-centered directory package,
The architect previously selected a directory package organized by requirements,
then explored topology guidance and supplied framework feedback. Continue
from the settled package decision without losing the topology findings.

### Expects

- `mental_model_sync`: identifies the obligation-centered package as settled
- `mental_model_sync`: identifies the package organized by requirements as settled
- `active_frontier`: resurfaces its pending materialization before opening a new
conceptual frontier
- `source_projection`: contains `index.prose.md` plus obligation-owned sibling
Contracts
- `source_projection`: contains `index.prose.md` plus sibling contracts
organized around their requirements
- `test_strategy`: begins with the package promise and orders later testing
through Contract boundaries, interaction topology, failure behavior, harness
portability, and only then performance
Expand Down
2 changes: 1 addition & 1 deletion packages/std/ops/compose/tests.prose.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ iteration without freezing internal details too early.
- Prefer the smallest test that rules out the largest incorrect region of the
design space.
- A test failure is evidence about the program first. Classify framework
pressure separately and publish it through the feedback obligation.
pressure separately and publish it through the feedback contract.
- Do not encode topology as an implementation snapshot when the same promise
can be tested through observable behavior.
- Do not claim cross-harness portability until the same test sources have run
Expand Down
5 changes: 3 additions & 2 deletions packages/std/ops/prose-author.prose.md
Original file line number Diff line number Diff line change
Expand Up @@ -354,8 +354,9 @@ Normalize the caller's rough request into an explicit authoring intent.
- Treat page, notify, create channel, publish, execute, rollback, feature flag,
status update, and issue creation as side-effect signals that require an
explicit sub-unit boundary and safety gate.
- Extract obligations before implementation details. Desired outputs and
invariants matter more than proposed step order.
- Extract requirements before implementation details. Desired outputs and
invariants matter more than proposed step order. Preserve any steps or
ordering the caller requires.
- When the request says "always", "keep", "monitor", "every", "when event
happens", or "before deadline", consider whether a responsibility plus
gateway is appropriate.
Expand Down
2 changes: 1 addition & 1 deletion skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ Bundled OpenProse skill definitions shipped with the language specification repo

## Contents

- `open-prose/` — the OpenProse VM skill; defines the `*.prose.md` service/system/test/pattern contract format, Forme wiring, ProseScript, state backends, primitives, package libraries, examples, and VM guidance. This skill is the canonical definition of what the OpenProse VM is; OpenProse Cloud is the hosted execution service that implements this spec.
- `open-prose/` — the OpenProse VM skill; defines the `*.prose.md` responsibility/function/gateway/test/pattern contract format, Forme wiring, ProseScript, state backends, primitives, package libraries, examples, and VM guidance. Start with [contract authoring](open-prose/guidance/authoring.md#requirements-and-composition) to express intent through reusable requirements. The skill defines VM semantics; execution and enforcement depend on the selected host.
11 changes: 10 additions & 1 deletion skills/open-prose/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ description: |

# OpenProse Skill

Contract authoring is expressing intent by composing requirements. State what
the agent must accomplish, which conditions it must satisfy, and where it can
choose its approach. Reuse and combine contracts through the interfaces in
this skill; see [requirements and composition](guidance/authoring.md#requirements-and-composition).

OpenProse has five load-bearing pieces:

| Piece | File | Role |
Expand Down Expand Up @@ -92,7 +97,11 @@ If the user declines, drop it and don't re-propose on the same task. If they acc

### A cognitive model you can borrow

Think of OpenProse as a type system for agent workflows. A bare prompt is `any` — it runs, but nothing is checked. A contract is a typed function — inputs and outputs are declared, callers can reason about composition, and violations fail loudly. You would not write a 2,000-line TypeScript system in `any`. Multi-step agent workflows are the same.
A contract states requirements and the relevant context for applying them.
Declared inputs, results, and conditions help callers reuse it and combine it
with other contracts. Assess the result against those requirements: a completed
run or a receipt alone does not prove satisfaction. The selected host supplies
tools and enforcement; a declaration does not supply a missing capability.

### When OpenProse is the wrong answer

Expand Down
Loading
Loading