prose-dev Atlas OpenProse docs bound to the contracts they describe
144 documents
CHANGELOG.md

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 init and prose compose now provide guided, progressive program architecture. The obligation-centered std/ops/compose directory 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-devtools are released under the same names. Reactor is experimental (alpha): early software with no stability guarantees, to be evaluated on your own judgement. Releases up to reactor-v0.3.2-cli.0.2.3 stay here, where their tarballs were published.
  • prose react and the reactor.md operator guide are removed from the skill. The skill no longer routes to a harness binary; prose compile / prose serve / prose run are the whole command surface. runtime_contract stays 2 — the machine contract is unchanged, so no source rewrite is needed.
  • The legacy @openprose/prose-cli (tools/cli/) is removed. The Oclif prose binary and its codex-sdk/claude-sdk/mock harnesses 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 ### Criteria section 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 the prose compile → serve flow). The README's "Harnesses" section is the one pointer to the reference harness.
  • A harness-surface conformance 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.yml gates 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 into modelSettings.reasoning.effort — values are model-dependent and validated by the provider. OpenAI reasoning models accept a custom temperature only when effort is none, 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 failed receipt (inside its semantic_diff, so no receipt field or schema changed and existing .reactor/ ledgers keep verifying) and shown by reactor run, reactor trigger, reactor logs, reactor trace, and reactor inspect. API keys and other secret material in a reason are scrubbed before it is stored or printed. Previously a failed render surfaced only failed, with no way to learn the cause without editing the source.
  • reactor serve reports per-gateway poll activity in its heartbeat. Each cycle now prints gateways: <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-devtools 0.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 temperature is 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 the temperature: line from reactor.yml — or leaving the SDK's RenderOptions.temperature / CompileSessionConfig.temperature unset — now sends none, and the provider's default applies. Projects that relied on the implicit 0 should set temperature: 0 explicitly (the reactor init scaffold already writes it). Type surface: ModelConfig.temperature is now optional, and mergeModelSettings omits the temperature key when none resolves.
  • reactor trigger now exits non-zero when a render fails or the configured provider is missing its key. It previously returned 0 even when the triggered render failed, and a project configured for a non-default provider with only OPENROUTER_API_KEY present appeared to succeed by rendering through the wrong provider. trigger now fails fast with an actionable error naming the exact env var when a custom provider's key is absent, and exits 1 on any failed disposition — matching reactor run.

Fixed

  • @openprose/reactor-cli 0.2.3 — reserved @-prefixed files no longer win the structured-backing pick (#136, #153). A render that wrote both the reserved @atomic.json status 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 as sha256("null"), so nothing propagated downstream. @-prefixed files are now excluded from the candidate set.
  • @openprose/reactor-cli 0.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/reactor 0.3.2 — provider key material is scrubbed from surfaced render errors.
  • @openprose/reactor 0.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's temperature now governs run/serve renders, not only compile. run, serve, and the multi-reactor host thread model.temperature / model.reasoning_effort into the render exactly like render_model; previously a configured temperature reached compile sessions while renders silently used the SDK default. reactor doctor --live no 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 the reactor.yml line to fix.
  • reactor trigger now honors reactor.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, causeless failed receipt (model: "none", zero tokens). trigger now resolves the provider plan and threads render_model, temperature, and reasoning_effort into the render exactly like run and serve.

[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 a reactor.md operator guide (install, the compile → run → serve lifecycle, reactor.yml, the prose react playbook, and the keyless reactor-devtools replay), SKILL.md/help.md routing, and the note that — unlike embodied prose run — reactor is a deterministic host the agent does shell out to. prose react [use case...] [--start] is embodied by the skill in-session (there is no prose binary): by default the agent prints the reactor commands for the user to run, and --start drives 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 a Receipt (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: system removed, kind: responsibility reshaped with ### Requires / ### Maintains, and ### Ensures → ### Maintains. ProseScript and the prose compile/serve/run command surface are unchanged in shape. Full migration map and prose upgrade rewrites live in skills/open-prose/changelog.md.

Release process

  • Decoupled version tracks. .version-bump.json now groups version surfaces into independent tracks — skill (both plugin manifests + SKILL.md, locked together for Claude Code marketplace dedup) and cli (@openprose/prose-cli + installer). bump-version.sh gains --track <name> <X.Y.Z> and per-track --check/--list; the CLI release preflight validates only the cli track. 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 write authoring workflow — Added std/ops/prose-author and prose write [request...] for turning rough English or pseudo-Prose into a validated OpenProse source package. Direct in-harness prose write is interactive by default and can ask targeted ask_user questions after a read-only landscape scan and shape/root inference. The shell CLI wrapper remains non-interactive, forwards argv/stdin with interactive: false, and returns unresolved-intent rather than guessing when blocking decisions are missing.
  • Shape-aware authoring guidance — prose-author now records whether the output should be a compact single file, imperative-heavy index.prose.md, multi-service folder, native OpenProse root, .agents/prose sidecar, or ~/.agents/prose user-global agent, then loads the targeted Contract Markdown, ProseScript, Forme, Responsibility Runtime, and filesystem state guidance needed for that shape.
  • Declared ### Skills section — Components may now declare the agent harness skills they require in a ### Skills section using the namespace:name colon form (e.g. document-skills:pdf). The compiler program resolves declared skills against ./skills/, ~/.claude/skills/, ~/.codex/skills/, and ~/.agents/skills/, and prose compile fails closed with a skill_unresolved diagnostic 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 ### Tools section — Components may now declare host CLI executables they require in a ### Tools section using cli:<name> declarations. The compiler program resolves supported declarations through a PATH executable check, fails closed with tool_invalid, tool_unsupported_kind, or tool_unresolved diagnostics, and emits resolved tools into Forme manifests with requiredBy attribution. OpenProse never installs or modifies host tools. Tracks #76.

Fixed

  • Serve shutdown logging — In-flight activations interrupted by prose serve shutdown now log as shutdown cancellations instead of generic trigger failures.
  • Status wording — prose status now describes absent responsibility state as no runtime status yet instead of missing.
  • Compiler discipline — The bundled compiler program now returns after writing manifest.next.json and 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-expansion lockfile entry so the production dependency audit passes with no advisory findings.

[0.13.1] - 2026-05-05

Fixed

  • Compile success detection — prose compile now accepts a freshly written valid manifest.next.json when 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 serve now runs local cron and HTTP trigger adapters from compiled triggers[], dispatches events into ordinary bounded prose run activations, 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, and compliance-evidence-tracker.

Changed

  • OpenProse root model — Documented native, attached, and user-global OpenProse roots with src/, dist/, runs/, state/, deps/, prose.lock, and .env as the current filesystem convention.
  • Command routing — Restored prose compile as the Responsibility Runtime compiler command that emits dist/manifest.next.json; prose serve consumes dist/manifest.active.json, and prose status inspects 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 compile now validates the emitted manifest.next.json; repository IR rejects invalid cron expressions, wrong trigger fields, and live triggers that wake no activations.
  • Responsibility Runtime freshness — prose compile clears stale compile output before running; prose serve rejects 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 compile as folded into prose 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.json and .agents/plugins/marketplace.json so OpenProse is discoverable through native Codex marketplace paths with first-class interface metadata. The manifest sits ready for OpenAI's self-serve plugin directory submission window.

Changed

  • Current contract conventions — Authored Prose files now use *.prose.md with kind: service, kind: system, kind: test, or kind: pattern; older plain .md contracts, .prose source files, kind: program, kind: composite, and compose: 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 upgrade and prose upgrade --dry-run are the current self-healing migration commands. Historical prose migrate, .deps/, root prose.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 lowercase requires: / ensures: blocks remain supported as compatibility syntax.
  • ProseScript reference — Added skills/open-prose/prosescript.md to separate pinned choreography (### Execution, .prose scripts, 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 install clones repos into .deps/ and pins versions in prose.lock (committed to git). Runtime resolution reads from disk only, no network calls. Replaces the earlier p.prose.md registry fetch with GitHub as the authoritative source.
  • run as a first-class keyword type — Programs can now declare run and run[] in requires: to depend on completed runs, enabling provenance tracking, DAG reconstruction, and staleness detection across workflows.
  • environment: contract section — Added environment: 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, and prose status as thin wrappers around standard-library programs. Retires the transitional prose compile / prose wire / prose migrate surface 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-rlmify workflow 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-local skills/open-prose/lib/ and std/README.md content 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 each postcondition evaluation in ensures: blocks, added environment security constraints to Forme wiring rules, introduced runtime delegation markers (__delegate/ directory), and rewrote help.md with 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 missing prose install command to the CLI reference, and corrected cross-file pointers.

Removed

  • Legacy internal skill artifacts — Removed skills/open-prose/SOUL.md and 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 — .md with YAML frontmatter and contract-based semantics (requires:/ensures:) replaces imperative .prose syntax as the primary format. Legacy .prose files 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: websh skill, 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 test command 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 migrate converts .prose files to .md format.
  • 50 example programs — All examples rewritten in v2 .md format, covering basics through complex multi-service orchestrations.

Changed

  • v0 VM moved to v0/ — Legacy specs (prose.md, compiler.md, state/, primitives/) relocated to v0/ subdirectory.
  • New prose.md — v2 VM execution semantics for .md programs.
  • 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.md for 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-miner becomes prose run irl-danb/habit-miner
      • use "@alice/research" becomes use "alice/research"
    • Resolution rules: URLs fetch directly, paths with / resolve to p.prose.md, otherwise local file

Added

  • Memory Programs (recommend sqlite+ backend):

    • user-memory.prose: Cross-project persistent personal memory with teach/query/reflect modes
    • project-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 scopes
    • calibrator.prose: Validates light vs deep evaluation reliability
    • error-forensics.prose: Root cause analysis for failed runs
  • Improvement Loop Programs:

    • vm-improver.prose: Analyzes inspection reports and proposes PRs to improve the OpenProse VM
    • program-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