Skip to content

Releases: Agent-Pattern-Labs/iso

iso-harness v0.6.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 19 Apr 19:11

OpenCode emitter falls back to iso-route resolved map

Mirrors the Claude emitter's resolution pattern on the OpenCode target. When an agent source file has no inline `targets.opencode.model` (and no top-level `model:`), the OpenCode emitter now reads `opencode.json`'s `agent..model` field — written by `@razroo/iso-route` before iso-harness runs — and stamps that onto the generated `.opencode/agents/.md` frontmatter.

Resolution order (OpenCode)

  1. `targets.opencode.model` (inline on the iso agent source)
  2. Top-level `model:` on the iso agent source
  3. iso-route's resolved map (`opencode.json`'s `agent..model`)
  4. Nothing — no `model:` stamped on the emitted agent file

This matches the Claude emitter shipped in 0.4.0. Agents that hard-pin a model continue to own that decision; agents that delegate model choice to `models.yaml` no longer need their inline override duplicated.

Backwards compatibility

Behavior when iso-route hasn't run (no prior `opencode.json`) is unchanged — no model stamped unless the agent source provides one.

Also collapses a duplicate `opencode.json` read inside `emitOpenCode`: the file is now loaded once at the top and reused for both the per-agent lookup and the later merge-write.

iso-harness v0.5.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 19 Apr 18:28

Merge — not overwrite — shared config files with iso-route

@razroo/iso-route writes model routing config to .codex/config.toml (model, [profiles.*], [model_providers.*]) and opencode.json (model, agent.*). Previously iso-harness's Codex and OpenCode emitters wrote those same files from scratch, stomping everything iso-route had put there. The @razroo/iso wrapper runs iso-route first and iso-harness second, so the net effect was that Codex and OpenCode users lost all model routing config on every composed build.

Codex: the emitter now reads any existing .codex/config.toml, strips only the [mcp_servers.*] sections (iso-harness's domain), preserves everything else, and appends the freshly-rendered MCP block.

OpenCode: the emitter now reads any existing opencode.json, preserves every field except $schema and mcp, and layers its own $schema + mcp + user-declared extras on top.

Behavior when no prior file exists, or when running iso-harness standalone without iso-route, is unchanged.

@razroo/iso-harness v0.4.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 19 Apr 18:00

Composition with `@razroo/iso-route`

When `@razroo/iso-route` writes its resolved role map to
`/.claude/iso-route.resolved.json` (run `iso-route build` into
the same output directory), iso-harness now picks it up automatically
and stamps `model:` onto each Claude subagent's frontmatter.

Resolution order per subagent, highest to lowest:

  1. Per-target `targets.claude.model` from the agent's frontmatter
  2. Inline `model:` from the agent's frontmatter
  3. `roles[agent.role ?? agent.slug].model` from the resolved map
  4. Nothing — the emitted frontmatter has no `model:` field

So an author can hard-pin a model in the source file, let iso-route drive
it from policy, or leave it to Claude Code's session default — without
editing the agent body.

Non-Anthropic roles in the resolved map are skipped (Claude Code
subagents only run Anthropic models) and logged on stderr. Missing
roles are silent — not every agent needs a role entry.

New frontmatter field: `role:`

Agent source files can now declare a `role:` field in frontmatter to
bind to a role whose name differs from the filename slug:

```markdown

name: planner-agent
role: planner
description: plans the work

```

This pairs with `@razroo/iso-route`'s `models.yaml` `roles:`
section: `iso-route` declares the role's provider/model, `iso-harness`
stamps it onto the matching subagent.

Backward-compatible

Builds without a resolved map on disk emit exactly as before. This is a
pure additive change — drop in 0.4.0 and nothing changes until you
also start running `iso-route build`.

Closes INTEGRATIONS.md #1.

@razroo/iso-eval v0.1.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 19 Apr 05:36

Initial release of @razroo/iso-eval — behavioral eval runner for AI coding agents.

agentmd lints prompt structure, isolint lints prompt prose, iso-harness fans out the compiled source into every harness file layout. None of them answer did the agent actually do the task? — that's what iso-eval scores.

You give it a suite of tasks (baseline workspace + prompt + checks); it snapshots the workspace per trial, hands it to a runner, and verifies the resulting filesystem / command state against your checks.

v0.1 scope

  • Deterministic `fake` runner (executes `$ …` lines as shell in the snapshotted workspace) — exercises the orchestration layer offline and in CI
  • Checks: `command`, `file_exists`, `file_contains`, `file_not_contains`, `file_matches`, `llm_judge`
  • Real-agent runners (`claude-code`, `codex`, `cursor-agent`) coming in v0.2; the library API already accepts any `RunnerFn` today

Install

```bash
npm install -D @razroo/iso-eval
iso-eval run eval.yml
```

See the package README for the full suite shape and library API.

iso-v0.1.1

Choose a tag to compare

@CharGrnmn CharGrnmn released this 18 Apr 16:29

iso-harness-v0.3.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 18 Apr 16:29

iso-harness v0.2.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 18 Apr 15:38

What's new

iso-harness validate

Schema-check the iso/ source directory without writing anything:

iso-harness validate --source iso/
iso-harness validate --source iso/ --format json

Catches: missing command on an MCP server, non-string env values, duplicate agent names, unknown target-override keys (typos like cursor: skip written as Cursor: skip), non-string model fields, and empty descriptions/bodies.

build now gates on validation

iso-harness build runs the validator first and refuses to write output if the source has schema errors. Warnings (empty description, empty body, unknown-harness overrides) are surfaced in the build summary but do not block.

This is a behavior change: if your iso/ source had a latent schema bug, previous versions would silently generate wrong output across all four harnesses. 0.2.0 fails fast instead.

Test coverage

18 unit tests (was: 1 smoke-build script). Covers validation, build, source loading, frontmatter skip rules, TOML escaping, and the refuse-to-emit-on-error guarantee.

Full changelog: packages/iso-harness/CHANGELOG.md

agentmd v0.3.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 18 Apr 15:37

What's new

lint --format sarif

agentmd lint can now emit SARIF 2.1.0 for upload to GitHub code scanning. Same dialect as isolint --format sarif — driver name agentmd, rule IDs are the L-codes, severities map to error / warning / note.

agentmd lint prompts/*.md --format sarif > agentmd.sarif
# then upload with github/codeql-action/upload-sarif@v3

Full changelog: packages/agentmd/CHANGELOG.md

agentmd v0.2.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 18 Apr 15:21

Highlights

  • lint accepts multiple files, shell globs, and stdin (-).
  • Machine-readable lint output: --format json (for CI tools) and --format github (workflow annotations).
  • render - reads source from stdin for pipeline composition.
  • --flag=value works anywhere alongside --flag value.
  • test --timeout <ms> kills hung backends instead of stalling.
  • New: agentmd --version.

Parser

  • Strip UTF-8 BOM and normalize CRLF / bare CR so Windows and editor-exported files parse correctly (previously the # Agent: heading would silently fail).
  • Flag duplicate # Agent: headings as warning L12 instead of silently dropping them.

Linter

  • L9 split into L9a (agent heading), L9b (procedure), L9c (at least one rule) — each check is now individually filterable.
  • L3 duplicate-ID diagnostics now carry a line number and point at the first definition.

Tests

  • 85 tests (was 69). New subprocess CLI coverage for stdin, multi-file, globs, JSON/github formats, --flag=value.

agentmd v0.1.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 18 Apr 14:54

First release of @razroo/agentmd — a structured-markdown dialect for authoring agent prompts, with a linter for structure and a fixture-driven harness that measures per-rule adherence against a target model.