frites AI: a coordinating ensemble proxy for Claude Code & Codex.
Point your Claude Code / Codex at frites and every prompt is answered by a council of agents instead of one: frites fans the prompt out to multiple models, has them work independently, then synthesizes a single vetted answer, using the subscriptions you're already logged into (no API keys). It decides per-prompt whether fanning out is even worth the spend. The bet is that a cross-checked council yields better output than any single agent; the cost is latency and metered spend (see the tradeoff).
Two ways to use it:
- Gateway mode (transparent proxy), zero friction: run it once and every prompt goes through the council. Handles Q&A, reasoning, and code edits (it emits the tool calls your host runs). ← start here
- MCP worktree mode: for when you want N competing full implementations run in isolated git worktrees, with your test suite picking the winner → one vetted diff to apply.
📖 Full documentation: docs/ · table of contents
Prereqs: claude and/or codex installed + logged in; Node >= 22; macOS or a major Linux
distribution with systemd user services.
npm install -g @frites/cli
frites installThat starts the transparent-proxy gateway on http://127.0.0.1:6767 as an always-on background
service (launchd on macOS, systemd --user on Linux). It auto-starts on login, restarts on crash,
and idle costs nothing. Full walkthrough: Installation.
Point your host at the gateway, then open a new session:
Claude Code: add to ~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:6767", "ANTHROPIC_AUTH_TOKEN": "frites" } }Codex: add to ~/.codex/config.toml, then export FRITES_KEY=frites:
model_provider = "frites"
[model_providers.frites]
base_url = "http://127.0.0.1:6767/v1"
wire_api = "responses"
env_key = "FRITES_KEY"See Configure Claude Code and Configure Codex for details.
frites install # install/start the gateway service
frites status # installed? loaded? reachable?
frites logs -f # follow gateway logs live
frites restart # restart after config changes or upgrades
frites stop # remove the background service
frites "implement X" --repo /path/to/repo --n 2 --agents claude,codex --applyFull command + flag reference: CLI. Configuration keys: Configuration.
126/126 unit tests passing; the gateway (both surfaces, SSE streaming, fan-out + synthesis, cost
telemetry), the launchd/systemd service, and the MCP worktree path are working and verified against
a real claude client. Remaining: the fan-out quality value-gate and Codex tool-call emission
on /v1/responses. Details: Current status. First value-gate data
is in Benchmarks (solo vs. fusion on Aider polyglot — on the gateway
answer path, fusion shows no reliable quality lift yet).
- Product overview: what frites is and when to use each mode
- Architecture overview: how it's built
- Safety model: headless-child posture and current hardening gaps
- Auth & billing: subscription-first, metered programmatic use
- Benchmarks: solo-vs-fusion results on Aider polyglot + the evaluation runbook
Contributions welcome — see CONTRIBUTING.md for the full guide. frites is a pnpm
monorepo (apps/* + packages/*) targeting Node >= 22, with pnpm pinned via the root
packageManager field.
pnpm install # install workspace deps
pnpm build # compile all packages (core → agents → isolation → gateway → cli)
pnpm test # run the unit suite (vitest)
pnpm typecheck # type-check without emitting
pnpm frites ... # run the CLI from source via tsx (no build needed)Deeper guides live in docs/development/:
- Repository structure — how the workspace is laid out
- Local development — running the gateway / CLI / MCP from source
- Testing — the test suite and conventions
- Evaluation — the fan-out value-gate and benchmarks
- Release & packaging — versioning and publishing to npm
The @frites/* packages are published to npm together (fixed / lockstep versioning) using
Changesets. In the PR that makes a user-facing change:
pnpm changeset # pick the bump (patch / minor / major) + write a summary, then commit itOn merge to main, CI opens a "Version Packages" PR; merging that PR builds and publishes every
package to npm in dependency order. To publish by hand from a clean checkout, run pnpm version:packages
then pnpm release (pnpm release:dry previews exactly what would ship). The full flow — how packages
are packed and published, and the npm authentication it needs (OIDC in CI, or an OTP locally) — is in
Release & packaging.
frites is licensed under the Apache License 2.0.
Unless required by applicable law or agreed to in writing, frites is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
