Skip to content

Executors

agenix agents shows the up-to-date list. The matrix:

AgentNative configsLocal modelsAuth
claude-codeCLAUDE.md, .claude/skills/, .mcp.jsonvia gatewaysubscription / key
codexAGENTS.md, .codex/config.toml--oss / providerssubscription / key
cline.clinerules/Ollama, LM Studio, …key
openhands.openhands/microagents/repo.mdlitellmkey
aiderCONVENTIONS.md, .aider.conf.ymllitellmkey
goose.goosehintsOllama and otherskey
opencodeAGENTS.md, opencode.jsonmany providerskey
qwen-codeQWEN.md, .qwen/settings.jsonlocal Qwensubscription / key
mini-swe-agentKNOWLEDGE.md (+prompt)litellmkey
gemini-cliGEMINI.md, .gemini/settings.jsonnonesubscription / key

How an adapter works

Four operations (src/adapters/base.ts):

  • materialize(profile, kb, workspace) — write the native configs;
  • buildCommand(profile, prompt) — non-interactive single-task run;
  • buildEnv(profile, apiKey) — model/gateway connection variables;
  • run(...) — the shared loop: materialization → process → RunResult.

Adding a new executor = one file with these methods + registration in registry.ts.

Live testing status

The full smoke (2/2) has passed for seven executors: claude-code (subscription, no gateway), codex (ChatGPT subscription, model.id: builtin, no gateway), cline, openhands, goose (via the LiteLLM gateway on open-source models), mini-swe-agent and qwen-code (OpenRouter directly, key from the agenix store).

Special cases:

  • aider — applies edits flawlessly (hello-file PASS on all models), but does not execute proposed shell commands in headless mode without a TTY — that is by design; don't give it "run a command" tasks;
  • opencode — config/models/permissions compile correctly, the model returns tool calls, but headless opencode run (v1.16–1.17) doesn't execute them — an upstream bug, track via opencode releases;
  • swe-agent — deferred (the PyPI package is broken, official install is from git); gemini-cli — not exercised (requires a Google login).

Notes

  • codex: in subscription mode CODEX_HOME is not overridden (the OAuth token lives there), the model is passed via -m; in key mode CODEX_HOME points at the workspace and the profile fully controls the provider and MCP via config.toml.
  • cline (verified live on CLI 3.x): the adapter configures the provider via cline auth into an isolated --data-dir inside the workspace — global state is untouched. Cline sends stream_options, which strict providers reject — go through a LiteLLM proxy with additional_drop_params: ["stream_options"] (example: examples/gateway/litellm-ghmodels.yaml); the proxy's baseUrl must include /v1.
  • openhands (verified on CLI SDK v1.21): install the openhands package (not openhands-ai — that one has no CLI binary). The key flag is --override-with-envs: without it LLM_MODEL/LLM_API_KEY/LLM_BASE_URL are silently ignored. Mind the size of the OpenHands system prompt (>8k tokens) — models with a small request limit (e.g. the GitHub Models free tier) won't work.
  • aider: install on Python ≤ 3.12 (uv tool install --python 3.12 aider-chat) — on 3.13 it crashes due to the audioop module removed from the stdlib.
  • free cloud open-source models: GitHub Models (baseUrl: https://models.github.ai/inference, the key is a regular GitHub token, see profiles/aider-ghmodels.yaml). Mind the strict rate limits of the free tier: single runs pass, a series of back-to-back evals hits 429.
  • mini-swe-agent: intentionally minimal (no rule files or MCP) — knowledge is supplied as KNOWLEDGE.md referenced in the prompt; an ideal cheap "test subject" for evolve experiments.