ebb-ai

about

Smarter scheduling for AI workloads.

ebb-ai is an open-source MCP scheduler. Give it any LLM task with a deadline, and it routes the dispatch to off-peak hours — when the electricity grid is less loaded, providers' APIs are cheaper and faster, and per-task carbon is lower. A single shift with four parallel wins.

Why this exists

Grid load. US data centers are projected to consume 6.7–12 % of national electricity grid load by 2028 (DOE 2024), driven primarily by AI compute. Today, agent code dispatches synchronously by default — every "summarize this overnight" and "analyze by Friday" request piles onto peak hours. ebb-ai automates the deferral: a huge fraction of agent work (nightly digests, evaluator sweeps, batch enrichment, long-horizon research) doesn't need to run right now and shouldn't.

Cost. Anthropic and OpenAI Batch APIs are priced 50 % below their sync siblings in exchange for a 24-hour SLA. ebb-ai auto-routes through Batch when the deadline allows. The same prompt, half the bill.

Latency. Provider servers have variable queueing latency depending on global request volume. Anthropic explicitly expanded off-peak capacity in 2026 — doubling usage limits before 8 a.m. ET, after 2 p.m. ET on weekdays, and all weekend — citing smoothed demand as the goal. The implication for sync calls: shorter queues at off-peak, faster observed first-token times.

Carbon. Carbon-intensity in any given grid region swings 5-10× across a single day as solar / wind / hydro come on- and off-line. A prompt dispatched at noon in California can be six times dirtier than the same prompt at 4 AM. ebb-ai writes a per-task carbon receipt against the actual grid intensity at the moment of dispatch — auditable, region-aware, reproducible from the persistent SQLite ledger.

How it works

  1. Your agent (Claude Code, Claude Desktop, Cursor, Windsurf, Continue, Cline, Zed, Goose, OpenClaw, or any MCP host) calls one of ebb-ai's nine MCP tools — for example, schedule_task with a prompt, region, and deadline.
  2. ebb-ai fetches the live carbon-intensity forecast for that region — UK National Grid ESO (key-less), U.S. EIA, ENTSO-E for Europe, or Electricity Maps as universal fallback.
  3. It scores every hour inside the deadline and picks the cleanest one — with a 15 % tolerance band plus randomized tie-break so the global fleet doesn't converge on a single UTC hour (the "everyone at 03:00 UTC" pathology).
  4. The task is persisted to a local SQLite queue at ~/.ebb-ai/queue.db. When the chosen hour arrives, the ebb tick daemon dispatches via the provider's Batch API (50 % discount on the bill, same answer) when the deadline allows.
  5. A carbon receipt is written: timestamp, region, exact intensity used for scoring, tokens in/out, dollar cost vs peak. Inspectable via ebb stats on the CLI. The Claude Code plugin, the OpenClaw plugin, the MCP server, and the CLI all read and write this same file — defer in one host, check in another.

Who it's for

  • Builders running deferrable AI — anyone whose agent has "by tomorrow"-class workloads (nightly digest jobs, batch evaluations, research sweeps, multi-step report generation).
  • Compute infrastructure operators — anyone managing inference fleets where grid load and off-peak capacity shape provisioning decisions. ebb-ai gives them per-task telemetry about when their tasks actually run.
  • Cost-sensitive engineering teams — anyone spending non-trivial money on Anthropic / OpenAI calls. Automatic Batch-API routing pays for itself in days.
  • Engineering teams with carbon commitments — companies with internal CO2e budgets or external ESG reporting that need defensible per-job numbers rather than spreadsheet estimates.
  • Researchers — the deterministic mock grid feed makes simulations reproducible; the persistent SQLite ledger makes longitudinal study cheap.
  • MCP host implementers — ebb-ai is a reference implementation of load-aware scheduling extensions to the Model Context Protocol; the upstream PR draft spells out the schema shape.

What you can do right now

Status

v0.8.x (operator preview). The scheduler is production-grade — the even-distribution simulation routes 10 000 synthetic tasks across seven regions with under 11 % max-bucket concentration, the SQLite ledger survives process restart, and per-region routing is auto-wired. Live carbon feeds (UK National Grid ESO, US EIA, ENTSO-E, Electricity Maps) run on 7 of 7 regions; no region falls back to the mock curve.

The public surface is still pre-1.0: API shapes can change in minor versions. Deferred for v0.9: upstream MCP spec PR, opt-in aggregate leaderboard, WattTime marginal-emissions feed, cross-provider routing. v1.0 will freeze the API surface.

Maintainer

Built by Vitalii Borovyk (independent, open-source). Issues, PRs, and feature requests: github.com/Vitalini/ebb-ai/issues.