MartinLoop is an independent governed-execution layer above the coding worker. The worker can change without changing the job contract, budget, scope rules, verifier, receipt format, or Control Plane evidence model.
The public CLI supports these engine values:
| Engine | Execution path | Typical workers |
|---|---|---|
auto |
MartinLoop resolves an available supported runtime | Recovery/default selection |
codex |
Native Codex CLI adapter | OpenAI Codex CLI |
claude |
Native Claude Code CLI adapter | Anthropic Claude Code |
gemini |
Native Gemini CLI adapter | Google Gemini CLI |
openai |
OpenAI-compatible HTTP adapter | OpenAI API and compatible hosted/local model endpoints |
The native CLI adapters let the coding-agent runtime mutate the workspace directly. MartinLoop surrounds that execution with budget, iteration, scope, verifier, receipt, and evidence controls.
The openai adapter covers raw model endpoints that do not have their own MartinLoop-integrated coding CLI. For governed coding runs, MartinLoop supplies a bounded repository snapshot and a constrained structured edit contract. It validates every proposed path before any write, applies only admitted repository-relative text edits, and then runs the same independent verifier used by the native agent paths.
Any endpoint that implements the expected OpenAI-compatible chat-completions API can be configured through the openai engine. Examples include provider routes for:
- Kimi K2
- NVIDIA Nemotron
- DeepSeek
- Qwen / Qwen Coder
- Mistral / Codestral
- Llama-family models
- other compatible models exposed by OpenRouter, Together, Fireworks, or similar services
- local models served by Ollama, LM Studio, or llama.cpp-compatible servers
Model availability and exact model IDs are provider-specific. MartinLoop does not create separate engine names such as kimi or nemotron; those models use the common openai execution contract.
Example hosted configuration:
MARTIN_OPENAI_BASE_URL=https://openrouter.ai/api
MARTIN_OPENAI_API_KEY=<secret>
MARTIN_OPENAI_MODEL=moonshotai/kimi-k2
martin-loop run "implement the task" --engine openaiExample local configuration:
MARTIN_OPENAI_BASE_URL=http://localhost:11434
MARTIN_OPENAI_MODEL=<local-model-id>
martin-loop run "implement the task" --engine openaiLocal endpoints may not require an API key. Never put API keys in task text, receipts, screenshots, or committed configuration.
For a governed coding run, the execution contract is the same regardless of worker:
- MartinLoop records the objective and acceptance criteria.
- Budget and iteration limits are fixed before execution.
- Allowed and denied file scopes are fixed before execution.
- The selected worker performs or proposes the code changes.
- MartinLoop enforces the scope boundary.
- An independent verifier runs against the resulting workspace.
- MartinLoop persists the outcome, spend/usage provenance, scope evidence, verifier evidence, and receipt integrity.
- The same evidence model can be synchronized to the Control Plane.
A model response claiming success is not sufficient. On the OpenAI-compatible path, malformed responses, no-op responses, path traversal, absolute paths, duplicate targets, or any edit outside the governed scope fail before the verifier can turn an unchanged baseline into a false success.
Model-agnostic does not mean that every model exposes identical capabilities, pricing, authentication, tool use, or quality. It means MartinLoop keeps its governance and evidence contract independent of the worker implementation.
A company can change from Claude to Codex, Gemini, Kimi, Nemotron, another compatible hosted model, or a local model without replacing the MartinLoop control plane around the job.
There is no --engine chatgpt alias. ChatGPT is a product surface, not the MartinLoop engine contract. OpenAI coding execution uses the codex CLI path or the configured openai compatible endpoint path, depending on the runtime being used.