OpenProse
Start

Your first program

Write and run a tiny OpenProse program.

Your first program

Hello world proves the loop. This program takes one input, asks the agent to explain it, and leaves a run trace you can inspect afterward.

Create hello-openprose.md:

---
name: hello-openprose
kind: program
---

### Requires

- `topic`: thing to explain

### Ensures

- `summary`: a short explanation of the topic

### Execution

Tell the user what `topic` means in plain English.
Write the result to `summary.md`.

Run it from an agent session:

prose run hello-openprose.md --topic "why traces matter"

Or, if you installed the CLI, run the same command from a shell:

prose run hello-openprose.md --topic "why traces matter"

In both cases, the command is asking an agent harness to run the program. The CLI does not execute the program by itself.

What happened

The agent reads hello-openprose.md as a Contract Markdown program.

Requires says the program needs a topic. The command supplies it with --topic "why traces matter".

Ensures says the run must produce a summary. This is the promise you can check when the run is done.

Execution pins the tiny bit of choreography for this first program. Most OpenProse programs start declarative and only add execution steps when order matters.

Because this program has one component and no Services section, there is no service graph to wire and no subagent fan-out required. The agent can run it directly.

Inspect the trace

After the run, look under the newest directory in .prose/runs/.

You should find the durable record of the run: the inputs, the execution log, and the output artifacts produced by the program. Exact filenames can vary as the tooling evolves, but the point is stable: a run leaves a receipt on disk instead of disappearing into chat history.

That receipt is why OpenProse is more than a long prompt. The contract, the artifacts, and the trace can be reviewed, versioned, and improved.

Next: try a useful workflow.

On this page