Keep a Changelog and SemVer history with an empty Unreleased section and the latest skill entry 0.18.1 dated 2026-10-01, which rewords authoring around intent, executor and evaluator roles, evidence, and fulfillment versus adequacy with runtime contract still 2. Prior skill entries include 0.17.0 with prose init and prose compose from std/ops/compose, 0.16.0 removing the Reactor harness and prose-cli binary and going harness-neutral with a harness-surface suite and ci-skill.yml gating, and 0.15.0 with the Intelligent React overhaul from runtime_contract 1 to 2 and decoupled version tracks. Records the reactor 0.3.2 train with reasoning_effort passthrough, failed-receipt reasons, serve gateway heartbeats, temperature omission, trigger exit codes, reserved @-file exclusion, height-ordered reconciler drain, and provider threading. Retains older entries back through 0.14.0 declared Skills and Tools, 0.13 to 0.8 compiler IR, single release train, responsibility runtime serve, plugin envelopes, Contract Markdown syntax, git-native deps, registry simplification, Forme, shapes, and telemetry removal. Anyone checking what shipped in a version, whether migration is needed, or where older behavior moved.
Changelog
All notable changes to OpenProse will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.18.1] - 2026-10-01 — open-prose skill & plugin
Changed
- Explain contract authoring as expressing intent by composing requirements.
- Use executor for the role performing work and evaluator for the role assessing whether requirements are satisfied. Evidence belongs in the result; assessment names the evaluation and its findings.
- Distinguish successful execution from contract fulfillment and contract adequacy in authoring and interpreter guidance.
The skill runtime contract remains 2. Existing source, return declarations and runtime interfaces need no migration.
[0.17.0] - 2026-08-27 — open-prose skill & plugin
Added
prose initandprose composenow provide guided, progressive program architecture. The obligation-centeredstd/ops/composedirectory package keeps the architect focused on a bounded conceptual frontier, materializes settled decisions into one canonical Contract package, derives a disposable visual view, and creates semantic tests outside-in from the package promise through Contract boundaries, failure behavior, harness portability, and performance. Framework pressure discovered during composition is routed to deduplicated public issues rather than implemented in the target program.
[0.16.0] - 2026-08-24 — open-prose skill & plugin
Skill/plugin-track release. This repository is now OpenProse only — the
language spec, the skill, the std/co contract libraries, and the examples —
and installs and tests with no build step. The Reactor harness has moved to its
own repository.
Removed
- The Reactor harness leaves this repository.
packages/reactor*, its example replay suites, the eval harness, and both Reactor workflows now live at github.com/openprose/reactor, where@openprose/reactor,@openprose/reactor-cli, and@openprose/reactor-devtoolsare released under the same names. Reactor is experimental (alpha): early software with no stability guarantees, to be evaluated on your own judgement. Releases up toreactor-v0.3.2-cli.0.2.3stay here, where their tarballs were published. prose reactand thereactor.mdoperator guide are removed from the skill. The skill no longer routes to a harness binary;prose compile/prose serve/prose runare the whole command surface.runtime_contractstays2— the machine contract is unchanged, so no source rewrite is needed.- The legacy
@openprose/prose-cli(tools/cli/) is removed. The Oclifprosebinary and itscodex-sdk/claude-sdk/mockharnesses are deleted; the OpenProse language is embodied by the SKILL in-session, and a conforming harness (see Harnesses in the README) is the deterministic runtime. The separately-authored### Criteriasection is also removed (postconditions live solely in### Maintains).
Changed
- The language is described without the harness's name. The run-phase
model is the reconciler (
concepts/reactor.md→concepts/reconciler.md, same content); the spec keeps the contract any conforming harness must satisfy (spec/02-ReactorHarness.md→ spec/02-Harness.md, the contract part only) and the authoring pattern (spec/03-ReactorPattern.md→ spec/03-AuthoringPattern.md); the example READMEs stay harness-neutral (authored intent plus observable behavior; only the Quick Start examples carry theprose compile → serveflow). The README's "Harnesses" section is the one pointer to the reference harness. - A
harness-surfaceconformance suite keeps it that way: it fails any change that reintroduces harness product tokens, or the product name for the run-phase model, anywhere outside the README pointer and the skill changelog. ci-skill.ymlgates the conformance suites on every pull request (pnpm test; no build, no secrets) — the first workflow to run them.
[reactor 0.3.2 / reactor-cli 0.2.3 / reactor-devtools 0.3.0] - 2026-08-12
Reactor-train release (reactor-v* tag train). Each package publishes at its own
version; the skill/plugin track is unaffected.
Recorded retroactively: the ### Added entries and the temperature / reactor trigger entries below shipped in this release (#137, #138, 2026-06-13) but were
still filed under [Unreleased] when it was tagged.
Added
model.reasoning_effort(reactor.yml) /reasoningEffort(SDK render and compile options). Passed verbatim intomodelSettings.reasoning.effort— values are model-dependent and validated by the provider. OpenAI reasoning models accept a custom temperature only when effort isnone, so this keeps deterministic setups expressible on those models (temperature: 0+reasoning_effort: none).- A failed render now records why it failed, and every command surfaces it.
The reason is persisted on the
failedreceipt (inside itssemantic_diff, so no receipt field or schema changed and existing.reactor/ledgers keep verifying) and shown byreactor run,reactor trigger,reactor logs,reactor trace, andreactor inspect. API keys and other secret material in a reason are scrubbed before it is stored or printed. Previously a failed render surfaced onlyfailed, with no way to learn the cause without editing the source. reactor servereports per-gateway poll activity in its heartbeat. Each cycle now printsgateways: <source> ingested=N skipped=M, so a poll that stages nothing (an empty payload, or a backlog the cursor already deduped) is no longer indistinguishable from a healthy one. Hosts with no configured gateways print nothing new.
Changed
@openprose/reactor-devtools0.3.0 — the replay viewer is re-skinned to the OpenProse machine surface (charcoal + gold, JetBrains Mono) and gains the credibility-seam panels (version/reuse/footprint/skew).- An unset
temperatureis now omitted from model requests instead of silently becoming 0. OpenAI reasoning models (gpt-5.5, the o-series) reject any explicit temperature, so "send no temperature" has to be representable: deleting thetemperature:line fromreactor.yml— or leaving the SDK'sRenderOptions.temperature/CompileSessionConfig.temperatureunset — now sends none, and the provider's default applies. Projects that relied on the implicit 0 should settemperature: 0explicitly (thereactor initscaffold already writes it). Type surface:ModelConfig.temperatureis now optional, andmergeModelSettingsomits the temperature key when none resolves. reactor triggernow exits non-zero when a render fails or the configured provider is missing its key. It previously returned0even when the triggered render failed, and a project configured for a non-default provider with onlyOPENROUTER_API_KEYpresent appeared to succeed by rendering through the wrong provider.triggernow fails fast with an actionable error naming the exact env var when a custom provider's key is absent, and exits1on anyfaileddisposition — matchingreactor run.
Fixed
@openprose/reactor-cli0.2.3 — reserved@-prefixed files no longer win the structured-backing pick (#136, #153). A render that wrote both the reserved@atomic.jsonstatus file and its real structured backing (e.g.sources.json) had the status file chosen, because@sorts before lowercase letters. The canonicalizer then found none of the declared material paths and fingerprinted every facet assha256("null"), so nothing propagated downstream.@-prefixed files are now excluded from the candidate set.@openprose/reactor-cli0.2.3 —reactor.yml's provider and temperature are honored (#137, #138), an unset temperature is omitted rather than sent, and render failure reasons are surfaced instead of swallowed.@openprose/reactor0.3.2 — provider key material is scrubbed from surfaced render errors.@openprose/reactor0.3.2 — height-ordered, dirty-count-gated reconciler drain (MK-1). The FIFO drain could render a diamond-shaped dependent before all its parents settled, producing a transient glitch value and a redundant re-render.reactor.yml'stemperaturenow governs run/serve renders, not only compile.run,serve, and the multi-reactor host threadmodel.temperature/model.reasoning_effortinto the render exactly likerender_model; previously a configured temperature reached compile sessions while renders silently used the SDK default.reactor doctor --liveno longer pins temperature 0 in its connectivity probe (it 400ed against reasoning render models), and the temperature-rejection 400 from a provider now maps to an actionable hint naming thereactor.ymlline to fix.reactor triggernow honorsreactor.yml's provider and model. It threaded no provider, model, or decoding settings into the render, so a live trigger always fell back to the SDK's default OpenRouter provider and model regardless of configuration — and with only the configured provider's key present, every trigger produced a bare, causelessfailedreceipt (model: "none", zero tokens).triggernow resolves the provider plan and threadsrender_model,temperature, andreasoning_effortinto the render exactly likerunandserve.
[0.15.0] - 2026-06-04 — open-prose skill & plugin
Skill/plugin-track release. The @openprose/prose-cli CLI is unaffected and
stays at 0.14.0: the SKILL, the Claude/Codex plugin manifests, and the CLI now
version on independent release tracks (see RELEASE.md).
Added
Recorded retroactively: this entry shipped in skill-v0.15.0 (#112, 2026-06-03)
but was logged under [Unreleased] by a merge three days later.
prose react "<use case>"— A command for taking an English standing goal to a running, inspectable Reactor on the@openprose/reactor-cli(reactor) binary. The open-prose skill gains areactor.mdoperator guide (install, thecompile → run → servelifecycle,reactor.yml, theprose reactplaybook, and the keylessreactor-devtoolsreplay),SKILL.md/help.mdrouting, and the note that — unlike embodiedprose run—reactoris a deterministic host the agent does shell out to.prose react [use case...] [--start]is embodied by the skill in-session (there is noprosebinary): by default the agent prints thereactorcommands for the user to run, and--startdrives the live lifecycle.
Changed
- Intelligent React overhaul (
runtime_contract: 1 → 2). The judge → verdict → pressure → fulfillment loop is retired for a deterministic reconciler: a render runs only when a node's subscribed input fingerprints or its own contract fingerprint move, and each commit is aReceipt(rendered | skipped | failed) with no LLM in the wake/commit decision. The kind taxonomy is re-cleaved around the single render atom —kind: service→kind: function,kind: systemremoved,kind: responsibilityreshaped with### Requires/### Maintains, and### Ensures→### Maintains. ProseScript and theprose compile/serve/runcommand surface are unchanged in shape. Full migration map andprose upgraderewrites live in skills/open-prose/changelog.md.
Release process
- Decoupled version tracks.
.version-bump.jsonnow groups version surfaces into independent tracks —skill(both plugin manifests +SKILL.md, locked together for Claude Code marketplace dedup) andcli(@openprose/prose-cli+ installer).bump-version.shgains--track <name> <X.Y.Z>and per-track--check/--list; the CLI release preflight validates only theclitrack. Restores the plugin↔CLI independence the packaging originally intended and lets the skill release without a CLI bump.
[0.14.0] - 2026-05-19
Added
prose writeauthoring workflow — Addedstd/ops/prose-authorandprose write [request...]for turning rough English or pseudo-Prose into a validated OpenProse source package. Direct in-harnessprose writeis interactive by default and can ask targetedask_userquestions after a read-only landscape scan and shape/root inference. The shell CLI wrapper remains non-interactive, forwards argv/stdin withinteractive: false, and returnsunresolved-intentrather than guessing when blocking decisions are missing.- Shape-aware authoring guidance —
prose-authornow records whether the output should be a compact single file, imperative-heavyindex.prose.md, multi-service folder, native OpenProse root,.agents/prosesidecar, or~/.agents/proseuser-global agent, then loads the targeted Contract Markdown, ProseScript, Forme, Responsibility Runtime, and filesystem state guidance needed for that shape. - Declared
### Skillssection — Components may now declare the agent harness skills they require in a### Skillssection using thenamespace:namecolon form (e.g.document-skills:pdf). The compiler program resolves declared skills against./skills/,~/.claude/skills/,~/.codex/skills/, and~/.agents/skills/, andprose compilefails closed with askill_unresolveddiagnostic naming the skill and the searched paths if any are missing. OpenProse never installs harness skills — installing them remains the user's responsibility (BYO harness). See skills/open-prose/contract-markdown.md (Skills), skills/open-prose/compiler/index.prose.md (skills_resolver), and skills/open-prose/examples/declared-skills/ for the spec and a worked example. Resolves #60. - Declared
### Toolssection — Components may now declare host CLI executables they require in a### Toolssection usingcli:<name>declarations. The compiler program resolves supported declarations through a PATH executable check, fails closed withtool_invalid,tool_unsupported_kind, ortool_unresolveddiagnostics, and emits resolved tools into Forme manifests withrequiredByattribution. OpenProse never installs or modifies host tools. Tracks #76.
Fixed
- Serve shutdown logging — In-flight activations interrupted by
prose serveshutdown now log as shutdown cancellations instead of generic trigger failures. - Status wording —
prose statusnow describes absent responsibility state asno runtime status yetinstead ofmissing. - Compiler discipline — The bundled compiler program now returns after
writing
manifest.next.jsonand leaves deterministic validation to the CLI. - Smoke postconditions — OpenProse smoke checks now trust verified run artifacts when a model exits nonzero after satisfying the fixture contract.
- Dependency audit — Refreshed the
brace-expansionlockfile entry so the production dependency audit passes with no advisory findings.
[0.13.1] - 2026-05-05
Fixed
- Compile success detection —
prose compilenow accepts a freshly written validmanifest.next.jsonwhen the harness exits nonzero afterward, while still rejecting missing manifests, invalid IR, error diagnostics, and aborted runs. - Serve trigger behavior — HTTP triggers now acknowledge immediately while dispatching activations in the background, and cron-only manifests still expose the local health endpoint.
- Smoke fixture isolation — Responsibility Runtime smoke fixtures stay inside their source root and include the local pattern dependencies needed by the compiler.
[0.13.0] - 2026-05-04
Added
- Canonical compiler IR contract — Added skills/open-prose/compiler/ir-v0.md and refactored the bundled compiler into a compact ProseScript service that emits the v0 repository IR directly.
- Unified release preflight — Added one OpenProse release preflight for CLI, SKILL, plugin manifests, installer defaults, changelog notes, npm uniqueness, and GitHub release/tag uniqueness.
Changed
- Single release train — The CLI, SKILL metadata, plugin manifests, package lock, and tarball installer now share one OpenProse version.
- Release workflow — Replaced split CLI/plugin release ownership with one protected OpenProse release workflow.
- Smoke visibility — OpenProse smoke fixtures now run as separate GitHub Actions jobs and emit progress while live agent cases are running.
[0.12.0] - 2026-05-04
Added
- Responsibility Runtime live serve —
prose servenow runs local cron and HTTP trigger adapters from compiledtriggers[], dispatches events into ordinary boundedprose runactivations, and feeds unhealthy judge status into deduped pressure fulfillment. - Responsibility Runtime source model — Added Responsibility-Oriented Architecture docs for standing goals, Reactor reconciliation, gateways, compile-time Forme wiring, judge activations, pressure, and deterministic runtime status.
- Compiler program docs — Added skills/open-prose/compiler/ with the bundled compiler program and pass docs for source discovery, responsibility lowering, gateway lowering, Forme compilation, IR emission, and IR validation.
- Native repository examples — Replaced the old numbered examples with eight small OpenProse Native Repositories:
stargazer-outreach,incident-briefing-room,customer-risk-radar,release-readiness,vendor-renewal-watch,research-inbox-triage,content-performance-loop, andcompliance-evidence-tracker.
Changed
- OpenProse root model — Documented native, attached, and user-global OpenProse roots with
src/,dist/,runs/,state/,deps/,prose.lock, and.envas the current filesystem convention. - Command routing — Restored
prose compileas the Responsibility Runtime compiler command that emitsdist/manifest.next.json;prose serveconsumesdist/manifest.active.json, andprose statusinspects active IR and runtime receipts. - Plugin descriptions — Updated plugin metadata to describe run receipts under the active OpenProse root instead of assuming only
.agents/prose/runs/.
Fixed
- Responsibility Runtime validation —
prose compilenow validates the emittedmanifest.next.json; repository IR rejects invalid cron expressions, wrong trigger fields, and live triggers that wake no activations. - Responsibility Runtime freshness —
prose compileclears stale compile output before running;prose serverejects stale judge status output, validates that status belongs to the launched judge activation, and marks older pressure as resolved once a newer healthy status is recorded. - Responsibility Runtime source safety — Repository IR now rejects non-root-relative source paths and requires live triggers to wake the judge for their responsibility.
- Responsibility Runtime pressure — Pressure dedupe now keys on the source status timestamp so fresh unhealthy judgments can each drive one reconciliation attempt.
- Stale compile doctrine — Removed the old skill guidance that treated
prose compileas folded intoprose lint.
Removed
- Outdated examples — Removed the legacy numbered example set and the older
kind: program-first examples from the distributable skill.
[0.11.0] - 2026-05-01
Added
- Codex plugin envelope — Added
.codex-plugin/plugin.jsonand.agents/plugins/marketplace.jsonso OpenProse is discoverable through native Codex marketplace paths with first-classinterfacemetadata. The manifest sits ready for OpenAI's self-serve plugin directory submission window.
Changed
- Current contract conventions — Authored Prose files now use
*.prose.mdwithkind: service,kind: system,kind: test, orkind: pattern; older plain.mdcontracts,.prosesource files,kind: program,kind: composite, andcompose:are legacy upgrade inputs. - Package/library migration — Public docs now describe packages/std/ and packages/co/ as first-party libraries of service/system/test/pattern contracts rather than the older repo-local stdlib/composite model.
- Upgrade workflow —
prose upgradeandprose upgrade --dry-runare the current self-healing migration commands. Historicalprose migrate,.deps/, rootprose.lock, and.prose/runs/references remain part of older entries and are superseded by this guidance.
[0.10.0] - 2026-04-20
Added
- Canonical Contract Markdown section syntax — Added skills/open-prose/contract-markdown.md as the source of truth for Markdown program/service files. Canonical contracts now use
### Services,### Requires,### Ensures,### Runtime,### Shape, and related Markdown sections, while lowercaserequires:/ensures:blocks remain supported as compatibility syntax. - ProseScript reference — Added skills/open-prose/prosescript.md to separate pinned choreography (
### Execution,.prosescripts, loops, branches, retries, and explicit calls) from declarative Contract Markdown authoring. - Git-native dependency resolution — Programs declare dependencies via
use "owner/repo/path"statements;prose installclones repos into.deps/and pins versions inprose.lock(committed to git). Runtime resolution reads from disk only, no network calls. Replaces the earlierp.prose.mdregistry fetch with GitHub as the authoritative source. runas a first-class keyword type — Programs can now declarerunandrun[]inrequires:to depend on completed runs, enabling provenance tracking, DAG reconstruction, and staleness detection across workflows.environment:contract section — Addedenvironment:as a contract section for declaring runtime dependencies (API keys, secrets, tool access) with VM-enforced security constraints: variables are verified at wiring time but never logged, embedded in artifacts, or passed to subagents that don't declare them.- CLI commands refactored as stdlib sugar — Added
prose lint,prose preflight,prose inspect, andprose statusas thin wrappers around standard-library programs. Retires the transitionalprose compile/prose wire/prose migratesurface now that Contract Markdown is primary. - Agent onboarding narrative — Added skills/open-prose/agent-onboarding.md so agents can quickly learn when to propose OpenProse, how to activate the skill, and how to map host primitives to the VM.
- Codex entrypoint — Added AGENTS.md at the repo root as Codex's native router into skills/open-prose/SKILL.md, with a recommended
[agents]config block (max_depth = 2) for recursive multi-service programs. - LongCoT benchmark automation — Added GitHub Actions workflows and helper scripts for LongCoT benchmarking and the
longcot-rlmifyworkflow dispatcher.
Changed
- Services are now a Markdown contract section — Program topology moved from frontmatter
services:into### Services, matching the rest of the human-readable contract surface. - Skill docs now route by intent — Reworked skills/open-prose/SKILL.md, README.md,
help.md, Forme, VM, guidance, and examples around a smaller "load what you need first" flow for agents. - Examples follow current Contract Markdown — Updated bundled examples to the section-based contract style and clarified multi-service wiring, composites, runtime hints, and execution blocks.
- Stdlib is external — Documentation now points to
openprose/std; repo-localskills/open-prose/lib/andstd/README.mdcontent was removed from this package. - RFCs and skill references are self-contained — Cleaned RFC and skill docs so public references no longer depend on internal planning context.
Fixed
- Spec-to-skill documentation alignment — Documented
eachpostcondition evaluation inensures:blocks, added environment security constraints to Forme wiring rules, introduced runtime delegation markers (__delegate/directory), and rewrotehelp.mdwith Contract Markdown as the primary surface and v0 as a clearly-scoped legacy subsection. - Internal consistency across skill files — Updated stale file-extension references (
.prose→.md), aligned v1/v2 terminology to legacy/declarative, added the missingprose installcommand to the CLI reference, and corrected cross-file pointers.
Removed
- Legacy internal skill artifacts — Removed
skills/open-prose/SOUL.mdand obsolete repo-local stdlib docs in favor of the current public skill and external stdlib model.
[0.9.0] - 2026-03-23
Breaking Changes
- Prose v2: programs are now Markdown files —
.mdwith YAML frontmatter and contract-based semantics (requires:/ensures:) replaces imperative.prosesyntax as the primary format. Legacy.prosefiles still run via v0 mode. - Two-phase execution — Programs with multiple services run through Forme (Phase 1: contract wiring) then the Prose VM (Phase 2: execution). Single-service programs skip Phase 1.
- Removed:
webshskill, voice alts, common library (moved elsewhere).
Added
- Forme Container (Phase 1) — Auto-wires multi-service programs by matching
requires:/ensures:contracts across components. Produces a manifest that the VM executes. - Contract semantics — Programs declare inputs (
requires:) and outputs (ensures:) instead of imperative orchestration. The container figures out the wiring. - Shapes — Typed structure declarations for contract values.
- Strategies — Declarative guidance for how the VM should handle edge cases during execution.
- Errors — Structured error declarations for programs.
- Invariants — Runtime constraints that must hold throughout execution.
- Test programs —
prose testcommand for running test suites against programs. - Standard library (
lib/) — 9 utility programs: calibrator, cost-analyzer, error-forensics, inspector, profiler, program-improver, project-memory, user-memory, vm-improver. - Migration tooling —
prose migrateconverts.prosefiles to.mdformat. - 50 example programs — All examples rewritten in v2
.mdformat, covering basics through complex multi-service orchestrations.
Changed
- v0 VM moved to
v0/— Legacy specs (prose.md,compiler.md,state/,primitives/) relocated tov0/subdirectory. - New
prose.md— v2 VM execution semantics for.mdprograms. - New
forme.md— Forme container semantics for Phase 1 wiring. - New
state/filesystem.md— v2 file-based state with workspace/bindings model. - Guidance directory —
guidance/tenets.md,guidance/patterns.md,guidance/antipatterns.mdfor program authoring.
[0.8.1] - 2025-01-23
Changed
- Token efficiency improvements: State tracking is now significantly more compact, reducing context usage during long-running programs. Append-only logs replace verbose state files, and compact markers replace verbose narration.
[0.8.0] - 2025-01-23
Breaking Changes
- Registry syntax simplified: The
@prefix is no longer required for registry references.- Migration: Update your imports and run commands:
prose run @irl-danb/habit-minerbecomesprose run irl-danb/habit-mineruse "@alice/research"becomesuse "alice/research"
- Resolution rules: URLs fetch directly, paths with
/resolve to p.prose.md, otherwise local file
- Migration: Update your imports and run commands:
Added
-
Memory Programs (recommend sqlite+ backend):
user-memory.prose: Cross-project persistent personal memory with teach/query/reflect modesproject-memory.prose: Project-scoped institutional memory with ingest/query/update/summarize modes
-
Analysis Programs:
cost-analyzer.prose: Token usage and cost pattern analysis with single/compare/trend scopescalibrator.prose: Validates light vs deep evaluation reliabilityerror-forensics.prose: Root cause analysis for failed runs
-
Improvement Loop Programs:
vm-improver.prose: Analyzes inspection reports and proposes PRs to improve the OpenProse VMprogram-improver.prose: Analyzes inspection reports and proposes PRs to improve .prose source code
-
Skill Security Scanner v2: Enhanced with progressive disclosure, model tiering (Sonnet for checklist, Opus for deep analysis), parallel scanners with graceful degradation, and persistent scan history
-
Interactive Example: New example demonstrating input primitives
-
System Prompt: Added system prompt configuration
Removed
- Telemetry system: Removed all telemetry-related code, config, and documentation including USER_ID/SESSION_ID tracking and analytics endpoint calls
Changed
- User-scoped persistent agents now stored in
~/.prose/agents/ - Documentation updates for registry syntax changes