Skip to content
innotelincPublic

About

Onyx — terminal coding agent that runs on your own OpenAI-compatible gateway. No account, no telemetry, no ads.

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

9,448 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⬢ ONYX

The terminal coding agent that runs on your gateway.

Any model. Any provider. No account. No telemetry. No ads.

Landing Page · Docs · Docker Quickstart · Report an Issue

License Language Runtime Docker Gateway Telemetry PRs Welcome CI License: Apache-2.0 Publish Onyx image Release Docker image

ONYX is the terminal coding agent of the Innotel Platform Stack: it speaks any OpenAI-compatible gateway — the bundled OmniRoute, or one you already run — so any model or provider can drive it, with no account, no telemetry and no hosted backend. The agent, its tools and its token counting run locally; only the gateway sees a request, and the compose stack brings that gateway up beside it. Landing page: innotelinc.github.io/freebuff


Why ONYX

Problem Answer
A hosted coding agent holds the code and the account. Run the agent locally against a gateway you control.
Every agent wants a different provider. One OpenAI-compatible gateway serves them all.
Observability usually means phoning home. There is no telemetry and no user account.

Its place in the stack is docs/stack.md; the canonical definition of the shared layers is the Innotel Platform Stack.

What is Onyx?

Onyx is a multi-agent coding agent for your terminal that ditches the hosted backend entirely. Point it at any OpenAI-compatible gateway — OmniRoute, LiteLLM, OpenRouter, Ollama, vLLM, your own router — and every request goes to your infrastructure:

┌──────────────┐        ┌─────────────────────┐        ┌──────────────────┐
│   Onyx TUI   │──────▶│  Your gateway        │──────▶│  Any provider     │
│  (this repo) │ ◀────── │  :20128/v1           │ ◀────── │  free & paid      │
└──────────────┘        └─────────────────────┘        └──────────────────┘
        ▲                          ▲
        └── zero hosted-backend    └── one API key, one endpoint,
            traffic — ever             350+ providers behind it
  • 🧠 Specialized agents — context gathering, planning, editing, review, and research agents divide the work instead of one monolithic prompt
  • 🔀 Any model, any agent — every mode (DEFAULT / LITE / MAX / PLAN) is unlocked; route them all through one model or let the gateway decide
  • 🐳 One-command stack — docker compose up brings the gateway, a key generator, and Onyx up together
  • 🔒 Nothing leaves the machine — no analytics, no health pings, no ad auctions, no update checks; verified by tests
  • ⚡ Fast & local-first — built on Bun, tools run in-process, token counting is local

Quick start

Docker (the whole stack)

git clone https://github.com/innotelinc/freebuff.git
cd freebuff
docker compose up -d --build omniroute   # start the gateway
docker compose run --rm onyx             # open the Onyx TUI

The entrypoint waits for the gateway, auto-generates an API key, selects the free coding model pool (auto/coding:free), and drops you into the TUI with your project mounted at /workspace.

Or pull the prebuilt client image instead of building (pinned to the latest verified release): ghcr.io/innotelinc/onyx:v0.1.0 — see docs/omniroute-docker.md. latest tracks main; every release gets its own v* tag. The publish workflow builds and pushes the image, and runs the live round-trip smoke test on the way where a gateway is declared for the repository (ONYX_SMOKE_GATEWAY=true) — a hosted runner has no providers of its own to round-trip through.

From source (point at any gateway)

bun install

export OMNIROUTE_BASE_URL='http://localhost:20128/v1'   # your gateway, /v1 included
export OMNIROUTE_API_KEY='...'                          # optional
export OMNIROUTE_MODEL='anthropic/claude-sonnet-4'      # optional: pin one model

bun start-cli

That's it — no login, no session admission, no credits. The CLI boots straight into chat and talks only to your gateway.

Configuration

Variable Required What it does
OMNIROUTE_BASE_URL yes Gateway base URL including the version path (…/v1)
OMNIROUTE_API_KEY no Bearer token for the gateway (defaults to a local placeholder)
OMNIROUTE_MODEL no Force every agent onto one model id; unset = gateway decides

What gets disabled in gateway mode

Because there is no hosted backend, everything that would have talked to one is refused locally (and pinned by tests):

Surface Behavior in gateway mode
PostHog analytics + log mirror never created / never ships
Free-session admission, login wall, ads switched off
Usage/subscription/streak queries never fire
Feedback, sponsored proposals refuse locally with a message
Health pings, remote agent validation local answers only
Self-update + binary downloads disabled

Full details in docs/omniroute.md.

Running a gateway

Don't have one? The bundled OmniRoute submodule is pinned and containerized — see docs/omniroute-docker.md for the two-minute setup, or bring your own OpenAI-compatible endpoint.

Project layout

Path What lives there
cli/ the terminal UI (OpenTUI + React)
sdk/ the agent SDK — model & backend routing
common/ shared types, tools, schemas, gateway cfg
packages/agent-runtime agent loop, tool handlers, web APIs
agents/ bundled agent definitions
docker/ container entrypoint (key generation)
docs/ gateway mode + docker guides

Images

The client image is published to GHCR by CI. Where a live gateway is configured for the repository, the round-trip smoke test runs before the push. Pin to a release tag:

docker pull ghcr.io/innotelinc/onyx:v0.1.0

Releases are cut with Actions → Release (enter a version like 0.1.1); it tags the repo, opens the GitHub release with generated notes, and the publish workflow pushes the matching ghcr.io/innotelinc/onyx:v… image. The package is public: docker pull ghcr.io/innotelinc/onyx needs no docker login.

Contributing

This is a TypeScript monorepo built with Bun:

git clone https://github.com/innotelinc/freebuff.git
cd freebuff
bun install
bun start-cli

Run the checks before opening a PR:

cd cli && bun run typecheck && bun test

License

Apache-2.0

About

Onyx — terminal coding agent that runs on your own OpenAI-compatible gateway. No account, no telemetry, no ads.

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages