Skip to main content

open-agent-compiler

Composable agent-tree compiler for OpenCode, Claude Code, Pi (via @tintinweb/pi-subagents), and the OpenAI Codex CLI. Define agents once as typed Python, compile them to any supported runtime, test them with mocks, and improve them with closed-loop optimization.

What it does

Define an agent once in Python:

from open_agent_compiler import (
    AgentDefinition, AgentHeader, AgentRegistry,
    CompilationConfig, ModelParameters,
    TemplateSlot, TemplateTree,
)

def registry() -> AgentRegistry:
    reg = AgentRegistry()
    agent = AgentDefinition(
        header=AgentHeader(agent_id="hello", name="hello",
                           description="Friendly greeter."),
        usage_explanation_long="A minimal greeting agent.",
        usage_explanation_short="greets",
        system_prompt="You are a friendly greeter. Reply in one sentence.",
    )
    aid = reg.register_agent("hello", agent,
        ModelParameters(model_name="zai-coding-plan/glm-4.5-air", temperature=0.7))
    reg.register_template(TemplateTree(name="t",
        slots=[TemplateSlot(name="primary", default_agent_id=aid)]))
    reg.create_compilation_config(CompilationConfig(name="prod", template_name="t"))
    return reg

Compile it into an opencode-loadable tree:

uv run oac compile myproj.agents:registry --config prod --target build

Run with OpenCode:

cd build && opencode run --agent primary "Hi"
> primary · glm-4.5-air
Hello there! Nice to meet you.

Or compile for Pi (requires the @tintinweb/pi-subagents extension for subagent spawning plus pi-permission-system for permission enforcement):

uv run oac compile myproj.agents:registry --config prod --target build --dialect pi
cd build && pi run --agent primary "Hi"

Key features

  • Pydantic-modeled agent/tool/skill/workflow definitions — no YAML hand-editing, types catch errors at registration time.
  • Multi-variant compilation — same agent compiled side-by-side against different providers/models via VariantSpec. SplitProfile picks per-agent presets by declared model_class.
  • Dual tool format — bash command allowlist or OpenCode-style JSON-schema custom_tool, per-agent or per-tool.
  • Built-in test frameworkCapabilityTest (introspection), ToolTest (mocked or real handler), AgentTest (end-to-end). 9 evaluator kinds. JSONL artifacts. Incremental skip via composite hash.
  • Bundled infrastructure scriptssubagent_todo.py, workspace_io.py, opencode_manager.py auto-included when the compiled tree references them.
  • Iterative improvement loopoac improve mutates prompts/tools/ resources, evaluates candidates against your OptimisationCriterion, promotes winners.
  • Per-target adaptationrun_per_target_loops tunes the same agent per (harness × model) cell — opencode/pi/codex and the in-process interactive tier — with per-target promotion slots (oac promote --target pi+fast), pluggable HarnessRunners, and LLM-as-judge scoring. History lives in a SQLite run store; browse, load, unload, and roll back versions with oac versions.
  • Native tool calling--native-tools emits each harness's native tool form for json-contract tools: .opencode/tool/*.ts shims (opencode) or a generated MCP tools server (Claude Code / Codex), all bridging deterministically to the same Python scripts.
  • Evolve a coding harnessoac evolve <repo> builds a repo-tailored harness (planner/implementer/reviewer + /plan, /implement, /review-pr skills mined from the repo's docs, commands, and change history) in a fully isolated clone, then evolves it against the repo's own commits (replay similarity) and a stronger-model teacher (gap-driven prompt AND workflow-structure mutation), shipping the result as a zip.
  • Project scaffolderoac init generates a Docker-compose'd project with FastAPI + cron + optional Postgres / Redis / Qdrant / Ollama / Langfuse. Cron POSTs JSON events to the FastAPI server which invokes the compiled agents.
  • Multi-dialect — OpenCode (default) + Claude Code + Pi (via @tintinweb/pi-subagents and pi-permission-system)
    • Codex (.codex/agents/*.toml custom agents for the OpenAI Codex CLI), with a plug-in Dialect protocol for future runtimes.
  • Developer skill bundlesoac sync-skills deploys opinionated markdown skill files into a project's .opencode/skills/ and .claude/skills/ so coding agents working in the repo know how to use the framework.

Install

pip install open-agent-compiler
# or
uv add open-agent-compiler

For development on the framework itself:

git clone https://github.com/DehydratedWater/OpenAgentCompiler
cd OpenAgentCompiler
uv sync
uv run oac --help

CLI

oac init <dir> --template web --llm anthropic …      # scaffold a new project
oac compile <factory> --config prod --target build   # compile agents
oac test <factory> --config prod                     # run embedded tests
oac improve <factory> --target X --criteria c.yaml   # iterative improvement
oac promote improved/X/LATEST.json                   # re-introduce a winner
oac sync-skills <project> --skills opencode,claude   # deploy dev skills
oac info <factory>                                   # introspect registry

Examples gallery

Example Demonstrates
examples/00_hello/ minimum working agent end-to-end with z.ai glm-4.5-air
examples/10_multi_provider/ one agent compiled three ways: z.ai glm-4.5-air + glm-5.1 + local vLLM Qwen3.5-27B
examples/20_optimization_run/ weak agent improved via oac improve with glm-5.1 as the optimiser
examples/80_pi_agents/ orchestrator + subagents compiled for Pi runtime with pi-subagents
examples/85_matrix_live_chat/ capstone: one tree → 2 harnesses × 2 models, per-target autoloops (incl. interactive tier), live chat dispatching any variant

All examples are tested end-to-end against real LLMs (see examples/README.md).

Documentation

Start with the Developer Guide — the complete walkthrough: setup, core concepts, all three dialects, the worker vs interactive tier split, tools, workflows, variants, testing, the improvement loop, CLI reference, and a full examples index. Dialect deep-dive: pi-agent-dialect.md.

Documentation: developer skills

The framework ships 14 skill bundles you can deploy into any project with oac sync-skills (highlights below; oac sync-skills --help for the full set):

  • getting-started — three commands you'll use most, agent shape
  • authoring-agents — workflow vs system_prompt, modes, todo_mode
  • authoring-tools — ScriptTool, MockableTool, AccessProfile
  • writing-tests — CapabilityTest / ToolTest / AgentTest + evaluators
  • providers-and-models — ModelPreset, per-agent model assignment
  • variants-and-profiles — VariantSpec / SplitProfile / CompilationContext
  • docker-and-compose — the scaffolded Docker setup + failure modes
  • improvement-loopoac improve + oac promote
uv run oac sync-skills ./myproject --skills opencode,claude

After this, coding agents (OpenCode or Claude Code) working in your project read the skill files and know how to add agents, write tests, debug Docker, configure providers, etc.

Project layout

open_agent_compiler/
  __init__.py                # Public API re-exports
  cli/                       # `oac` CLI subcommands
  compiler/                  # The compile pipeline + dialect registry
    dialects/{opencode,claude_code,pi_agent}/
  improvement/               # Phase 6 iterative loop
    mutators/                # Mutator implementations
  model/                     # Pydantic models (agents/tools/skills/tests/…)
  runtime.py                 # ScriptTool base class
  scaffold/                  # `oac init` template engine
    files/                   # File generators (Dockerfile, compose, app, …)
  scripts/                   # Bundled handler scripts (auto-copied)
  skills/                    # Developer skill bundles
  testing/                   # Test runner + evaluators + artifacts
tests/                       # pytest tree (mirrors open_agent_compiler/)
examples/                    # Working end-to-end examples

Status

Through Phase 36 (~36 numbered phases shipped). Headline features:

  • Composable agent trees with register_with_improvements auto-merging promoted snapshots (Phase 10).
  • Multi-turn AgentTest + sequenced / stateful MockResponse for streaming/monitoring scenarios (Phase 11).
  • Per-agent MCP allowlists + bundled MCP-server scaffold via --with-mcp-server (Phases 12 + 24).
  • Tool-targeted mutators (description, rules, bash-vs-json format) + tool_failure_rate criterion (Phase 13).
  • ScriptTool.execute(input, resources) + ResourceHandle for clean DB / API bindings (Phase 15).
  • Composable context blocks + PromptAssembler with volatility-aware ordering (Phase 19).
  • TaskHandle + SpawnAgentTool for long-running and agent-spawned-from-tool patterns (Phases 20 + 21).
  • FastAPI dispatcher with sync / async / fire-and-forget modes, variant routing, composable RetryPolicy (Phase 23).
  • oac init --interactive + auto uv sync (Phase 25).
  • Dual-compile (also_compile_as_primary): every subagent slot can also emit a primary twin reachable directly via opencode run --agent <name>-primary or via opencode_manager dispatch (Phase 31).
  • OpencodeRunner — the recommended sync eval runner with auto-retry on empty output + 0-1 score clamping (Phase 36).

19 numbered examples under examples/. 11 skills under open_agent_compiler/skills/content/ totalling 20+ documented patterns from real project pain.

Benchmark / verification

The framework's reproducibility benchmark is a complete spec for building a real multi-agent media-tracking service (7 agents, 5 tools, Postgres, MCP, FastAPI dispatch) with the framework. Use it to verify that a fresh agentic-coding instance can one-shot a real project on top of open_agent_compiler. The reference implementation is verified end-to-end (live search API, live z.ai agent runs, live autoresearch producing a positive baseline delta).

License

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

open_agent_compiler-1.13.0.tar.gz (839.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

open_agent_compiler-1.13.0-py3-none-any.whl (508.7 kB view details)

Uploaded Python 3

File details

Details for the file open_agent_compiler-1.13.0.tar.gz.

File metadata

  • Download URL: open_agent_compiler-1.13.0.tar.gz
  • Upload date:
  • Size: 839.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for open_agent_compiler-1.13.0.tar.gz
Algorithm Hash digest
SHA256 6910aac171804816bc72f02cea273f476920d343e9e4d0e6533eb0c228ac833c
MD5 19bfe4ea3d563e25af8aaef1aabf9142
BLAKE2b-256 484f746d321296fdb40996fb59c459e601d2b14c557a2eac82c47adbff63a99c

See more details on using hashes here.

Provenance

The following attestation bundles were made for open_agent_compiler-1.13.0.tar.gz:

Publisher: publish.yml on DehydratedWater/OpenAgentCompiler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file open_agent_compiler-1.13.0-py3-none-any.whl.

File metadata

File hashes

Hashes for open_agent_compiler-1.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 57dc7c800ada31ba97e46307a3756c713ef9f52189c38f6ff444adc7e331c936
MD5 a2b872f0fcb5fe095c92f93ca0959a70
BLAKE2b-256 8f8299a2d6f1bcab37873567a7382970adbd81c04146822bdd65944267af5f5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for open_agent_compiler-1.13.0-py3-none-any.whl:

Publisher: publish.yml on DehydratedWater/OpenAgentCompiler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page