Skip to content

Executors

An executor is what actually runs an agent node. Azhi does not hide the differences between them. Each one declares its capabilities, and the run plan checks the workflow against them.

ExecutorProvidersNotes
model-agent (default)Anthropic, OpenAIA platform-owned tool loop. Every tool call goes through the gateway; no ambient tools exist
opencodeAnthropic, GitHub Copilot, ChatGPT planGateway bridged over MCP, built-in tools restricted by deny-all permissions, isolated HOME
claude-agent-sdkAnthropicThe SDK driving the Claude Code runtime. Verified against a scripted endpoint; not yet against a live model
codexOpenAIExperimental, off by default
CapabilityValues
streamingyes / no
resumenative / checkpoint-only / none
cancellationconfirmed / best-effort / none
gateway toolsnative-mcp / bridged / none
ambient toolsdisableable / restrictable / uncontrolled
structured outputenforced / validated / none
usagereported / partial / unavailable
platformslinux, macos, windows
compacts contextyes / no. If yes, the platform does not compact

Anything not yet confirmed by a conformance run is listed as unverified and the plan says so. For example, OpenCode’s usage, structured output, cancellation and platform support are declared unverified.

OpenCode and the Claude Agent SDK are strong interactive tools. Azhi runs them as steps and adds what they leave to you: durability, scheduling, approvals, the action ledger, taint checks and cost limits.

An agent step can get a fresh git checkout on a worker, with isolated git and HOME, deleted after the step. The checkout token is read-only and never written. At most 2 runs work on one repository at once by default.

npm run compare runs 30 fixtures through two executors and writes docs/executor-comparison.md. It states which numbers are estimated and that OpenCode’s usage is incomplete.