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/ci-failure-repair.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# oa run --spec .agents/ci-failure-repair.yaml --task diagnose_and_remediate \
# --input "$(jq -n --rawfile log log.txt '{workflow_name:"CI",branch:"main",job_log:$log}')" --quiet
#
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: ci-failure-repair-agent
Expand Down
2 changes: 1 addition & 1 deletion .agents/codex-runner.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: codex-runner-agent
Expand Down
2 changes: 1 addition & 1 deletion .agents/hello-world-agent.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion .agents/review.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# git diff > change.diff
# oa run --spec .agents/review.yaml --task review --input change.diff --quiet
#
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: code-reviewer
Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,31 @@ All notable changes to **open-agent-spec** (Open Agent CLI) will be documented i
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.5.0] - 2026-04-13

### Added
- **Immutable Inference Sandboxing (IIS)** — a new `sandbox:` spec key that lets you declare hard execution constraints enforced by the runner *before* any tool call reaches the I/O layer. Three constraint types: `tools.allow`/`deny` (tool allowlist/denylist), `http.allow_domains` (HTTP host restriction for `http.get`/`http.post`), `file.allow_paths` (file path restriction for `file.read`/`file.write`). Sandbox can be declared at root level (all tasks) or per-task (overrides root). Three structured error codes: `SANDBOX_TOOL_VIOLATION`, `SANDBOX_DOMAIN_VIOLATION`, `SANDBOX_PATH_VIOLATION`.
- **Chain-wide input immutability** — every task boundary now receives a deep copy of its input. Upstream chain mutations can never leak into downstream inputs or back to the caller's original dict.
- **History threading** — pass a `history` array in the input to any task and it is injected into the LLM message list between system and user turns, enabling stateless multi-turn conversations without OAS managing persistence.
- **Memory-retriever registry spec** (`oa://prime-vector/memory-retriever`) — an LLM re-ranker that accepts pre-fetched `candidates` (prior conversation turns from your own store) and returns the most contextually relevant ones as a `history` array, ready to inject into any chat-capable task.
- **Spec Registry** — `openagentspec.dev/registry/` hosts shareable specs via `oa://` shorthand URLs. Includes seed specs: `oa://prime-vector/summariser`, `classifier`, `sentiment`, `code-reviewer`, `keyword-extractor`, and `memory-retriever`.
- **npm CLI** (`@prime-vector/open-agent-spec`) — a native TypeScript port of `oa run` for Node.js environments. Supports OpenAI and Anthropic providers, `depends_on` chains, and history threading. No Python required.
- **CLI terminal UI redesign** — new compact bot-face banner (`Panel.fit`), live inference spinner, syntax-highlighted JSON output panel, smart string rendering (Markdown for prose, extracted fenced JSON), and a unified help panel combining the bot face and command reference.
- **`examples/sandboxed-agent/`** — demo spec showing root-level sandbox, per-task sandbox override, and the OAS vs BCE boundary.
- **`examples/chat-agent/`** and **`examples/memory-chat/`** — reference implementations for history threading and the memory-retriever re-ranker pattern.
- **Formal spec** `spec/open-agent-spec-1.5.md` and canonical schema `spec/schema/oas-schema-1.5.json` updated with all new keys (`sandbox:`, `history` threading convention).

### Changed
- `--quiet` mode: plain-string outputs are now written directly (no `json.dumps` quoting/escaping). Dict/list outputs remain pretty-printed JSON.
- `OARunError` now propagates through the `except Exception` catch block in `_run_single_task` so structured errors (sandbox violations, delegation errors) are never re-wrapped as `RUN_ERROR`.
- `oa://` registry URL scheme formalised — the runner resolves `oa://<owner>/<name>` to `https://openagentspec.dev/registry/<owner>/<name>/latest/spec.yaml`.
- BCE `allowed_tools` field noted as a future rename to `expected_tools` (audit-not-enforcement semantics) in docs and REFERENCE.md.

### Fixed
- Banner `Panel()` replaced with `Panel.fit()` — banner no longer stretches to full terminal width.
- `--input <file.txt>` correctly maps file content to the single required string field; `.json` files are always parsed as JSON objects.
- File-reader example prompt now explicitly names required output fields (`summary`, `key_points`) to prevent the model omitting them.

## [1.4.1] - 2026-04-12

### Added
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The Open Agent Spec (OA) uses YAML files to define agent configurations. Use the

#### Basic Structure
```yaml
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: my-agent
Expand Down Expand Up @@ -52,7 +52,7 @@ intelligence:

1. Trading Agent:
```yaml
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: market-analyzer
Expand All @@ -71,7 +71,7 @@ intelligence:

2. Content Generator:
```yaml
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: content-creator
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ oa run --spec .agents/review.yaml --task review --input change.diff --quiet
Start from this shape:

```yaml
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down Expand Up @@ -236,7 +236,7 @@ The formal specification defines what a conforming OAS runtime must do, independ

| Resource | Contents |
|----------|----------|
| [spec/open-agent-spec-1.4.md](spec/open-agent-spec-1.4.md) | Formal specification — normative MUST/SHOULD/MAY requirements for OAS 1.4.0 |
| [spec/open-agent-spec-1.4.md](spec/open-agent-spec-1.4.md) | Formal specification — normative MUST/SHOULD/MAY requirements for OAS 1.5.0 |
| [spec/schema/oas-schema-1.4.json](spec/schema/oas-schema-1.4.json) | Canonical JSON Schema for validating spec documents |
| [spec/conformance/README.md](spec/conformance/README.md) | Conformance test structure and contribution guide |

Expand Down
8 changes: 4 additions & 4 deletions Website/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export default function HomePage() {
Open source · MIT
</span>
<span className="rounded-full border border-stone-400/50 bg-white/60 px-3 py-1 text-[10px] font-medium text-stone-700 backdrop-blur-sm">
Spec v1.4.0
Spec v1.5.0
</span>
<span className="rounded-full border border-stone-400/50 bg-white/60 px-3 py-1 text-[10px] font-medium text-stone-700 backdrop-blur-sm">
Python · Node.js
Expand Down Expand Up @@ -125,11 +125,11 @@ export default function HomePage() {
</Link>
</div>

{/* What's new in 1.4.0 */}
{/* What's new in 1.5.0 */}
<div id="whats-new" className="mt-8 scroll-mt-6">
<div className="mb-4 flex flex-wrap items-baseline gap-2">
<span className="inline-block rounded bg-stone-900 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-stone-100">
New in 1.4.0
New in 1.5.0
</span>
<p className="text-sm font-semibold text-stone-900">
Tool use, spec composition, and a test harness | all from YAML.
Expand Down Expand Up @@ -517,7 +517,7 @@ tasks:
Open source · MIT
</span>
<span className="rounded-full border border-stone-400/50 bg-stone-100/80 px-3 py-1">
Spec v1.4.0
Spec v1.5.0
</span>
</div>
</section>
Expand Down
2 changes: 1 addition & 1 deletion Website/app/registry/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ export default function RegistryPage() {
</span>
</div>
<pre className="overflow-x-auto px-3 py-3 font-mono text-[10px] leading-relaxed text-stone-300">
{`open_agent_spec: "1.4.0"
{`open_agent_spec: "1.5.0"

agent:
name: my-pipeline
Expand Down
2 changes: 1 addition & 1 deletion Website/content/codexSpec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Codex engine example spec. Keep in sync with codexSpec.yaml.
export const CODEX_SPEC_YAML = `open_agent_spec: "1.4.0"
export const CODEX_SPEC_YAML = `open_agent_spec: "1.5.0"

agent:
name: repo-refactor-agent
Expand Down
2 changes: 1 addition & 1 deletion Website/content/codexSpec.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: repo-refactor-agent
Expand Down
2 changes: 1 addition & 1 deletion Website/content/defaultSpec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Default YAML shown in the playground editor. Keep in sync with defaultSpec.yaml.
export const DEFAULT_SPEC_YAML = `open_agent_spec: "1.4.0"
export const DEFAULT_SPEC_YAML = `open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion Website/content/defaultSpec.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion Website/content/multiTaskSpec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const MULTI_TASK_SPEC_YAML = `open_agent_spec: "1.4.0"
export const MULTI_TASK_SPEC_YAML = `open_agent_spec: "1.5.0"

agent:
name: research-pipeline
Expand Down
2 changes: 1 addition & 1 deletion Website/content/researchAssistantSpec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Research assistant example. Keep in sync with researchAssistantSpec.yaml.
export const RESEARCH_ASSISTANT_SPEC_YAML = `open_agent_spec: "1.4.0"
export const RESEARCH_ASSISTANT_SPEC_YAML = `open_agent_spec: "1.5.0"

agent:
name: research-assistant
Expand Down
2 changes: 1 addition & 1 deletion Website/content/researchAssistantSpec.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: research-assistant
Expand Down
2 changes: 1 addition & 1 deletion Website/content/toolsSpec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const TOOLS_SPEC_YAML = `open_agent_spec: "1.4.0"
export const TOOLS_SPEC_YAML = `open_agent_spec: "1.5.0"

agent:
name: file-analyst
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: classifier
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: classifier
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: code-reviewer
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: code-reviewer
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: keyword-extractor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: keyword-extractor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: sentiment
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: sentiment
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: summariser
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: summariser
Expand Down
1 change: 1 addition & 0 deletions Website/tsconfig.tsbuildinfo

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

For a short intro, see the [README](../README.md). This page is the longer reference moved out of the main README so PyPI stays simple.

> **Formal specification:** The normative definition of OAS 1.4.0 — what a conforming runtime MUST do — lives at [`spec/open-agent-spec-1.4.md`](../spec/open-agent-spec-1.4.md). This reference guide covers practical usage of the CLI and reference implementation. When this guide and the spec disagree, the spec is authoritative.
> **Formal specification:** The normative definition of OAS 1.5.0 — what a conforming runtime MUST do — lives at [`spec/open-agent-spec-1.4.md`](../spec/open-agent-spec-1.4.md). This reference guide covers practical usage of the CLI and reference implementation. When this guide and the spec disagree, the spec is authoritative.

## Spec file structure

```yaml
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: "hello-world-agent"
Expand Down
2 changes: 1 addition & 1 deletion examples/file-reader/file-reader.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: file-reader
Expand Down
2 changes: 1 addition & 1 deletion examples/mcp-local/agent.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: text-analyser
Expand Down
2 changes: 1 addition & 1 deletion examples/mcp-search/mcp-search.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: mcp-researcher
Expand Down
2 changes: 1 addition & 1 deletion examples/registry-demo/pipeline.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: registry-demo
Expand Down
2 changes: 1 addition & 1 deletion examples/spec-composition/coordinator.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

# ─────────────────────────────────────────────────────────────────────────────
# Spec Composition demo — coordinator.yaml
Expand Down
2 changes: 1 addition & 1 deletion examples/spec-composition/shared/sentiment.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: shared-sentiment
Expand Down
2 changes: 1 addition & 1 deletion examples/spec-composition/shared/summariser.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: shared-summariser
Expand Down
2 changes: 1 addition & 1 deletion npm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ npx @prime-vector/open-agent-spec run --spec agent.yaml --task summarise --input

```yaml
# agent.yaml
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: my-agent
Expand Down
2 changes: 1 addition & 1 deletion npm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@prime-vector/open-agent-spec",
"version": "1.4.0",
"version": "1.5.0",
"description": "Run Open Agent Spec YAML files from Node.js — no Python required.",
"keywords": [
"ai",
Expand Down
2 changes: 1 addition & 1 deletion npm/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export function createCli(): Command {
program
.name("oa")
.description("Open Agent Spec runner — execute YAML agent specs from the command line.")
.version("1.4.0");
.version("1.5.0");

program
.command("run")
Expand Down
2 changes: 1 addition & 1 deletion npm/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypeScript types mirroring the Open Agent Spec 1.4.0 YAML schema.
// TypeScript types mirroring the Open Agent Spec 1.5.0 YAML schema.

export interface OASpec {
open_agent_spec: string;
Expand Down
2 changes: 1 addition & 1 deletion oas_cli/templates/aac-example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# oa run --spec .agents/example.yaml --task greet --input '{"name": "World"}' --quiet
# Or generate code into a folder with:
# oa init --spec .agents/example.yaml --output ./my-agent
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion oas_cli/templates/aac-review.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# git diff > change.diff
# oa run --spec .agents/review.yaml --task review --input change.diff --quiet
#
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: code-reviewer
Expand Down
2 changes: 1 addition & 1 deletion oas_cli/templates/minimal-agent-tool-usage.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion oas_cli/templates/minimal-agent.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion oas_cli/templates/minimal-multi-task-agent.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
open_agent_spec: "1.4.0"
open_agent_spec: "1.5.0"

agent:
name: hello-world-agent
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "hatchling.build"

[project]
name = "open-agent-spec"
version = "1.4.0"
version = "1.5.0"
description = "YAML-first agent specs: run with `oa run` or generate a full Python project with `oa init`."
authors = [{ name = "Andrew Whitehouse", email = "andrewswhitehouse@gmail.com" }]
license = { text = "MIT" }
Expand Down
Loading
Loading