EONYX vs Claude Code: an honest comparison
EONYX and Claude Code are both terminal AI agents for working with code, and their workflow is similar: MCP, skills, hooks, subagents, plan mode, sessions. The difference is in the architecture and the freedom. Claude Code is tied to the cloud and to Anthropic models; EONYX is not. Here is what that gives you in practice.
1 How EONYX is different
Five practical differences — all of them follow from a single decision: not to be tied to a cloud or a vendor.
1.1 Model freedom
Claude Code only works with Claude models (Anthropic). EONYX connects directly to any OpenAI-compatible API and is not tied to a single vendor:
- OpenAI, OpenRouter, DeepSeek, Moonshot and other cloud providers;
- local model servers — Ollama, llama.cpp, LM Studio.
A model is just an entry in eonyx.json. You can keep a cheap fast model and a powerful expensive one side by side, switch on the fly (Ctrl+N), and run the same project on different providers.
A new provider is a few lines of config, not a change of tool:
"providers": {
"openrouter": {"type": "openai", "base_url": "https://openrouter.ai/api/v1", "api_key": "$OPENROUTER_API_KEY"}
},
"models": [
{"id": "qwen/qwen3-coder", "provider": "openrouter", "context_window": 262144}
]Save the config, restart EONYX — and the new model is already in the Ctrl+N list: the same agent, the same skills and hooks. Ctrl+N switches between models that are already in the config; to pick up one you have just added, the TUI has to be restarted.
1.2 Local and offline
Since Ollama / llama.cpp / LM Studio are supported, EONYX can run entirely on a local model — with no internet and without sending your code to someone else’s cloud. Claude Code cannot do that: it always goes to the Anthropic API.
This matters when:
- the code must not leave the perimeter (NDA, closed network, regulation);
- there is no stable internet connection;
- you need zero leak risk — the data does not leave the machine.
Where your code goes in each case.
EONYX: your choice
sequenceDiagram
participant U as Your code
participant P as EONYX Terminal
participant L as Local model
participant C as Cloud API
U->>P: sources, configs, secrets
alt by default
P->>L: processed in place
L-->>P: response
Note over P,L: data does not leave the machine
else only if you choose so
P->>C: goes to the cloud
C-->>P: response
end
P-->>U: result
Claude Code: always the cloud
sequenceDiagram
participant U as Your code
participant CC as Claude Code
participant A as api.anthropic.com
U->>CC: sources, configs, secrets
CC->>A: always goes to the cloud
A-->>CC: response
CC-->>U: result
Note over CC,A: no choice
1.3 A single binary
- Installation
- Authorization
- EONYX — the provider’s API key, for local models — no key at all
- Claude Code — OAuth (Claude Pro/Max) or
ANTHROPIC_API_KEY
- Runtime
- EONYX — nothing extra, a single process
- Claude Code — Node.js
EONYX is one process with no external services, no telemetry and no OAuth. Download the binary, set a key (or point it at a local model) — and you are working. Nothing to log into, nothing that “phones home”.
From zero to the first prompt
# EONYX
# 1. download the binary from the Releases page and put it in PATH
export DEEPSEEK_API_KEY=sk-... # 2. a key — or a local model with no key
eonyx # 3. done, the TUI is open# Claude Code
# 1. install Node.js 18+
npm install -g @anthropic-ai/claude-code # 2. install the package
claude # 3. OAuth login in the browser…
# 4. …a Pro/Max subscription or ANTHROPIC_API_KEY
# 5. only now — the first promptBottom line: 3 steps against 5, and not one of the EONYX steps requires a browser, an account or a runtime.
1.4 Shell in the process
The bash tool in EONYX works through the built-in mvdan.cc/sh interpreter — a system bash is not needed. The same command runs identically on Linux, macOS and Windows without WSL. The working directory and environment variables are preserved between calls. A small list of dangerous commands (shutdown, reboot, mkfs…) is blocked at the policy level.
1.5 Control over cost
- Your own key or free local models. You can run DeepSeek for pennies, or a local model for free. No subscription to a particular product is required.
- Transparent costs. The TUI header shows the number of input/output tokens, cached tokens and a cost estimate in dollars right as the session goes.
- Your own limits.
max_steps,context_window,retry— everything is tuned to your budget and your model.
What a month of work costs (the Claude Pro subscription is the public price; the API spend is an example and depends on the load):
2 The honest picture
What stays with you after the switch, and where Claude Code is still stronger.
2.1 What you do not lose
EONYX is not a “stripped-down clone”. The whole familiar agent toolset is there:
- MCP client (stdio and HTTP) — external services, resources and prompts;
- Agent Skills — skills in
SKILL.mdwith progressive disclosure; - Hooks around tools (
before/after, context viaEONYX_*); - Subagents — the
tasktool with an isolated context; - Sessions in JSONL with resume, fork and search;
- Permissions and plan mode (
/plan) — read-only until you approve the plan; - Auto-summarization of history when the context window fills up;
- AGENTS.md — persistent project instructions across the directory tree.
In other words, you get the same workflow, but provider-independent.
2.2 Where Claude Code is stronger
To keep the comparison honest:
- Claude models. Opus/Sonnet are top-tier models for code; at Anthropic they come out of the box and are tuned for Claude Code.
- Ecosystem and polish. An official product: desktop and IDE apps, a web version, background tasks, support.
- Zero provider setup. Log in with a subscription and everything works, no need to touch a config.
EONYX wins on other things: freedom, locality and no lock-in. If what you need is Claude models specifically and the smoothest possible official experience — Claude Code is the better fit. If you need a single local binary, any provider (including offline models) and full control over data and cost — EONYX.
3 Summary
3.1 Comparison table
| Capability | EONYX | Claude Code |
|---|---|---|
| Models | any OpenAI-compatible API | Claude only |
| Offline run | yes: Ollama, llama.cpp, LM Studio | no, cloud only |
| Installation | a single binary (Go) | Node.js 18+ / installer |
| Authorization | a key, or no key at all | OAuth / Anthropic key |
| Telemetry | no | yes |
| Shell | built-in (mvdan/sh) | system |
| MCP | yes | yes |
| Skills | yes | yes |
| Hooks | yes | yes |
| Subagents | yes | yes |
| Plan mode | yes | yes |
| Sessions | yes | yes |
| Permissions | yes | yes |
| Cost | your own key / local for free | subscription / Anthropic API |
- Model freedom — any OpenAI-compatible provider and local models.
- Local and offline — the code does not leave the machine.
- A single binary — Go, no Node, no OAuth, no telemetry and no external services.
- Shell in the process —
mvdan/sh, works on Windows without WSL. - Cost control — your own key or free local models, spend is visible in the header.
- Nothing lost — MCP, skills, hooks, subagents, sessions, plan mode and permissions are all there.