More than half of all AI usage is code
Selan controls what your team spends on AI and what it sends out. Reactor puts small agents on your codebase overnight, and you steer them from your phone.
Today
A gateway between your people, tools and agents and every AI provider, where you see the spend, cap it and keep secrets in.
Micro agents, one job each, that maintain and build your system while you sleep.
Fully remote work. Agents ask, and you answer, call Selan and approve from your phone.
How it started
An agent in Podimo's Slack. It reads Sentry, GitLab, Jira and analytics, and opens merge requests.
Engineers stopped needing a key each. Every call borrowed a Claude account from a shared pool and gave it back.
The pool rebuilt as a product any company can sign in to, with limits and secret scanning.
Micro agents on a company's own codebase, started by schedules and events.
Part 01 Control
Selan sits on the request path between your team and the model provider. Because every call crosses that line, it is where you can see it, limit it and keep secrets from leaving.
The problem
One invoice, no names.
The bill says what the month cost. Not who spent it, on which model, in which repository.
Nobody notices until month end.
Opus 5.5 at max effort can cost nine times what it costs at medium. Nothing stops a runaway session.
Everyone on their own account.
Personal Max plans, personal API keys, no pooling. Seats sit idle while someone else hits a rate limit.
One provider down, team down.
A 429 or a 529 and work stops, even when the company pays for other providers too.
Provider keys on every laptop.
Someone leaves and you rotate everything. Keys end up in shell history, CI logs and dotfiles.
Secrets ride along in prompts.
An .env file read into context goes straight to the provider. So do database URLs and tokens.
One system
Add the accounts you already pay for once. Everybody signs in as themselves with Google or Microsoft and reaches the models you allow, in the tools they already use.
Failover
A rejected credential, a rate limit or an overloaded provider: Selan takes a different credential from your pool and sends the same body again. If the answer had already started, the resend is spliced into the stream the developer is reading.
opus-5 · Claude CodeSubscriptions you already bought are spent first. Per-token keys only take over when seats are busy.
Failing over during a provider outage is a company setting, off until an owner turns it on.
Every request records which credential served it and whether it failed over. The places a request may go are the accounts you connected.
Security
# what the developer's request carried AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEX # what the provider received AWS_SECRET_ACCESS_KEY=[REDACTED: aws-access-token]
Tokens, model, cost, person, repository name, status, whether it failed over.
Prompt text, source code or request bodies.
Live demo
In production
of usage in the last 30 days, at API list prices. 99% of it ran on the 92 Claude and ChatGPT subscriptions they already pay for.
new tokens, across 3.0M requests and 40 models. Cache reads left out.
distinct secrets of 34 kinds, replaced with a placeholder before the request left for the provider.
people in 13 teams, and the Reactor agents they run. Every request names who made it.
+39% from the first full week to the last.
Part 02 Reactor
Lots of small agents, each with one job, working through the night. In the morning, people review what they did and decide what ships.
Why
A Claude Code session on a laptop stops when the laptop does. An agent nobody is watching can't stop halfway to ask. So the routine work waits for someone to remember it.
Fix it and open a merge request before anyone is up.
Bump them, run the tests, leave a ready MR.
Check it and post a one-line status in Slack.
Add the test nobody wrote, one per night.
Philosophy
How we keep a fleet under control
A prompt you read in a minute, only the connectors that job needs. When it goes wrong, the transcript shows where and Revert brings back the last good version.
A schedule, a GitLab or GitHub event, Slack or a webhook wakes it. An agent can start another only if that agent allows it, and Reactor refuses a loop. Every action is a Selan MCP tool.
Workspaces and groups sort agents by team and job. A run gets a fresh VM that is thrown away after, a VM in your own Google Cloud, or your own Linux or Mac runner.
Each agent has its own model and effort, and its calls go through the Selan gateway under the same limits. A supervisor's default mission is to make its workspace cheaper without doing less.
Where we are
A morning where you only review what the agents did.
Agents that start themselves and remember the last run.
A fleet you can read, sorted by team and by job.
An agent that tunes the others in its workspace.
Fleets that keep a system current and working, with people steering.
agent runs started in the last 30 days, at Podimo and at Selan.
agents ran there, the first on 8 October.
20× in three weeks.
Live demo
How fast we ship
Every Selan repository on GitLab, the last 30 days, 27 September to 27 October.
merge requests merged, 660 of them fixes. 155 on the busiest day, 24 October.
of them by our Reactor agents, 373 of the fixes among them. We made the other 1,049 with Claude Code.
lines of code added and 228k removed. Generated files and lockfiles left out.
lines of code today, across 22 repositories.
3× from the first full week to the last.
Why Selan
Business model
A seat is a person or a CI token. Model usage stays on the customer's own provider bills, so we don't resell tokens.
Every CI token takes a seat, so seats grow with automation.
We're choosing between these three. Every agent call already goes through the gateway, so the metering is in place whichever we pick.
Next Where we're going
Agents work while you're away from the keyboard, so steering them shouldn't need one. The Reactor app puts the fleet, its questions and a voice line to Selan in your pocket.
Live demo
In one line each
selan.ai