← Back to Garden

From pi-antigravity-rotator to tuxevil-rotator: a provider-agnostic rotation engine

#Node.js#AI#Infrastructure#Ollama#Open Source#tuxevil-rotator

QUOTA_BURNED // PROVIDER_AGNOSTIC // YOUR_TOOL

One day I ran out of quota. Not on one account. On all 45.

I had been using pi-antigravity-rotator for months to distribute load across a pool of Google Antigravity accounts. The rotator worked well: per-account health scoring, per-model rotation, real-time dashboard, quota polling every 5 minutes. But Antigravity has per-account quotas, and if you burn through all of them at once, you are stuck.

That is exactly what happened. And at the same time I had stopped paying for my Codex (OpenAI) subscription. No Antigravity, no Codex, zero access to frontier LLMs.


Ollama Cloud to the rescue (with an asterisk)

I remembered that Ollama has a free cloud tier. Not local inference — their public API, with hosted models and per-account quotas.

I had 45 Gmail accounts from the Antigravity pool. I tried creating Ollama Cloud accounts with all of them. I got 27. The other 18 asked for SMS verification, and I did not have more phone numbers available. With 27 accounts it was enough to build a useful pool.

The next problem was obvious: I needed a rotator for Ollama Cloud. And I already had one for Antigravity with all the logic built.


ollama-rotator: the clone that was born to die

Instead of building from scratch, I asked OpenCode to clone pi-antigravity-rotator and adapt it for the Ollama Cloud provider. It was not weeks of work. It was one agent session, adjustments, tests, and it was running.

The result was ollama-rotator: same rotation engine, same dashboard, same health scoring logic, but pointing to ollama.com/api/chat instead of Antigravity. The overlap between the two repos was 80%.

That made the problem obvious: two nearly identical repos, two codebases to keep in sync, two versions of the same engine evolving in parallel. That does not scale.


The decision to unify

Once I had ollama-rotator tested and running in production, the decision was clear: unify. But not as a simple copy-paste — redesign the engine so the provider is a plugin.

The new architecture separates the rotation engine from the provider adapter. Antigravity and Ollama are implementations of the same interface. The next free-tier provider with per-account credentials and a quota API slots in as a new --provider value without forking anything.

This also changed the credential model. Before, each row in accounts.json was an account for a specific provider. Now each row is an email that can hold credentials for multiple providers:

{
  "email": "[email protected]",
  "credentials": [
    { "provider": "antigravity", "refreshToken": "..." },
    { "provider": "ollama", "apiKey": "ollama-..." }
  ]
}

One email, N providers. The rotator picks the right credential at request time based on the destination model.


What tuxevil-rotator is

tuxevil-rotator is an OpenAI-compatible gateway for multiple free AI providers. One local endpoint, any agent can connect.

Core features:

  • Multi-provider: Google Antigravity (OAuth) and Ollama Cloud (API key) in the same pool, with an architecture designed to keep adding free providers in the future
  • Smart rotation: 4 policies (timer-first, tier-first, quota-first, hybrid) with composite health scoring per account
  • Real-time quota monitoring: independent polling per provider, Antigravity quotas consolidated by family (claude, gemini), Ollama session/weekly usage
  • Virtual Keys: rk-... keys with per-key model restrictions for teams or agents
  • Spend logging: full audit trail with real USD cost for both providers (requires PostgreSQL)
  • Dashboard: routing state, quota bars, p50/p95 latency, activity heatmap, routing inspector
  • Tool/function calling: OpenAI and Anthropic, multi-turn, parallel calls
  • Prompt compression: lite and rtk modes to reduce tokens without dropping critical content
npm install -g tuxevil-rotator
tuxevil-rotator login                    # Google Antigravity
tuxevil-rotator login --provider ollama  # Ollama Cloud
tuxevil-rotator start
# Dashboard at http://localhost:51200/dashboard

Point any agent to http://localhost:51200/v1 with API key tuxevil or a Virtual Key. Compatible with Hermes, OpenCode, Claude Code, Cursor, Aider, Cline, Open WebUI, and more.


Ollama Cloud free tier: the real picture

Ollama lists 18 models in their catalog. On the free tier you only get access to 7. The rest return HTTP 403 “this model requires a subscription”.

I ran my own consumption tests on each model, burning 30% of quota per model with a calibration tool I built with OpenCode to measure exactly how much each account gives.

The tiers Ollama documents per model (1 through 4, plus a Tier 4 + extra usage for kimi-k3), with empirical calibration data from my own burns (stopped at 30% session usage, budget extrapolated to 100%):

Model Context Tier Session budget Weekly budget Free tier
gpt-oss:20b 131,072 1 ~1.56M tokens ~4.21M tokens yes
gemma4:31b 262,144 1 ~1.15M tokens ~3.11M tokens yes - standout
nemotron-3-nano:30b 262,144 1 ~1.93M tokens ~5.19M tokens yes
gpt-oss:120b 131,072 2 ~0.76M tokens ~2.05M tokens yes
minimax-m2.7 196,608 2 - - subscription
nemotron-3-super 262,144 2 ~0.74M tokens ~2.01M tokens yes
mistral-large-3:675b 262,144 2 - - subscription
qwen3.5:397b 262,144 2 - - subscription
deepseek-v4-flash 1,048,576 2 - - subscription
nemotron-3-ultra 262,144 3 ~0.12M tokens ~0.33M tokens yes
kimi-k2.6 / k2.7 262,144 3 - - subscription
minimax-m3 524,288 3 ~0.19M tokens ~0.52M tokens yes - standout
glm-5.1 / 5.2 up to 1M 3 - - subscription
deepseek-v4-pro 524,288 4 - - subscription
kimi-k3 1,048,576 4 + extra usage - - subscription

Of the ones available on the free tier, the ones worth using based on my tests: gemma4:31b (Tier 1) and minimax-m3 (Tier 3). The rest do not justify the quota consumption compared to what they deliver, according to ArtificialAnalysis benchmarks.

With multiple accounts in rotation, those two models become serious tools for daily use.


The rename: why tuxevil-rotator

The original name pi-antigravity-rotator had two problems:

  1. pi: the project was born to be a package inside the pi.dev ecosystem. It is not that anymore. It is a standalone tool.
  2. antigravity: it pointed at a single provider. With Ollama Cloud inside, that name was now a lie.

I had wanted to change the name for a long time but had a reason not to: the npm package had accumulated download history and the repo was already showing up in recommendations from Google, Gemini, and ChatGPT when people asked about Antigravity account rotation. Losing that SEO meant losing real traction.

But with a second provider absorbed, the old name became an active lie. It had to change.

The new name is my nickname: tuxevil. It is the project I built to solve my problem, and I maintain and direct its direction. I make it open source because if it is useful to someone else, great. And over time, contributions from other people (PRs, issues, suggestions) have shaped it and made it more robust, and that is appreciated and worth encouraging.

On GitHub the rename auto-redirects from the old name to the new one, stars and forks are preserved (34 stars and 9 forks at the time of this post, and I want more). On npm the history is sacrificed: the old package is deprecated, the new one starts from zero.


The ToS disclaimer: honest documentation of real risk

The tuxevil-rotator README has a visible warning:

Using this proxy may put connected accounts at risk of Terms of Service enforcement, including restriction, suspension, or permanent bans.

That is not legal boilerplate. It is honest documentation based on personal experience.

I have been through two massive ban waves across all my Antigravity accounts. What you learn quickly: they do not lock you out of your email, they do not touch your files, the ban is specific to Antigravity. And with a recovery form, in about a week you get the accounts back if you are not an extreme repeat offender.

The risk is real but contained. Each user decides whether they accept it. The tool is public, the risks are documented, the decision is yours.


What comes next

The pluggable architecture is not decorative. There is at least one more provider on the horizon: Codex (OpenAI). I have 3-4 accounts created with the phone numbers I have available. The monthly quota is low but the current model (gpt-5.6-luna) is the best I have tested: it beats everything available on Ollama Cloud’s free tier and everything available on Antigravity. The only ones that come close are kimi-k3 and glm-5.2, which require a paid Ollama subscription.

The SMS-per-account wall means Codex will not scale to 27+ accounts like Ollama did, but with a small pool and fixed monthly quota it can be a useful complement, especially for tasks where you need quality over volume.

I am also looking at other free providers. Nothing concrete yet, but the architecture is ready to receive them.


ollama-rotator: archived

ollama-rotator served its purpose: proving the concept worked with Ollama Cloud as the sole provider. Now tuxevil-rotator does exactly the same and more. The repo goes private and gets archived. There is no reason to maintain two parallel engines.

If you were using ollama-rotator, the migration is straightforward:

npm install -g tuxevil-rotator
tuxevil-rotator login --provider ollama
tuxevil-rotator start

Accounts from ~/.ollama-rotator/accounts.json are imported automatically on startup. You lose nothing.


tuxevil-rotator is at github.com/tuxevil/tuxevil-rotator.

If it saves you cost or time, a star helps. If you find a bug or want to contribute, open a PR.