{"slug": "zoomies-sh", "title": "Zoomies.sh", "summary": "Zoomies.sh launched as a free, open-source AGPL-3.0 self-hosted GitHub Actions runner controller that runs as a single binary on SQLite without Kubernetes, starting a fresh ephemeral container runner for each job and scaling across user-owned hosts. The tool includes a live web UI with fourteen pages covering live jobs, runner logs, host health, queue waits and scheduler reasons, plus an \"Ask Eli\" assistant and Model Context Protocol (MCP) connections that let Claude or other MCP clients read job history, failure explanations and runner logs, with opt-in Eli PR repairs that publish changes to an existing PR branch but never merge. Installation runs via a curl script on Linux with Docker or Podman, requiring a GitHub organization or repository the user administers.", "body_md": "Free · open source · AGPL-3.0\n\n# GitHub Actions runners \n\non machines you own.[¶](#github-actions-runners-on-machines-you-own)\n\nZoomies is a self-hosted GitHub Actions runner controller: one binary, SQLite, no Kubernetes. Put your cloud VMs, office servers or home lab to work. It starts a fresh runner for each job, scales across your hosts and shows you what is happening in one live web UI. Ask Eli about your builds, or connect your own AI assistant through MCP.\n\n[Run your first job](quickstart/) \n[Try the live demo](https://demo.zoomies.sh/)\n\n```\ncurl -fsSL https://zoomies.sh/install.sh | sh\n```\n\nStart on Linux with Docker or Podman and a GitHub organisation or repository you administer. Explore the live demo without signing in, or [run the local demo](quickstart/#just-looking) without GitHub credentials. [Read the installer first](quickstart/#1-install).\n\n## Choose your next step[¶](#choose-your-next-step)\n\n### New to self-hosted runners?[¶](#new-to-self-hosted-runners)\n\nLearn what a host and pool do, connect GitHub, then run one trusted workflow.\n\n### Moving an existing workflow?[¶](#moving-an-existing-workflow)\n\nPreview `runs-on` changes and try one repository before expanding the fleet.\n\n### Already operating a fleet?[¶](#already-operating-a-fleet)\n\nSize capacity, measure queue waits, tune resources and automate operations.\n\n## Ask your fleet. Understand your builds.[¶](#ask-your-fleet-understand-your-builds)\n\nInvestigate a failed test, find why a job is waiting, or work out whether a build needs more memory or a smaller runner. Zoomies gives assistants access to the job evidence and fleet measurements behind those questions.\n\n### Eli, right where you work[¶](#eli-right-where-you-work)\n\nPress **Ask Eli** on a job, host, pool or problem. With fleet access enabled\nfor your chosen model, Eli can read job history, failure explanations,\navailable runner logs and measured sizing advice, then explain what to try\nnext. Its answer shows what it looked at.\n\n“Why did this job fail, and what should I try next?”\n\nUse a local or hosted model you choose. Explore the built-in fixture provider\nin the [local demo](quickstart/#just-looking), without an account or API key.\n\n### Your assistant, connected over MCP[¶](#your-assistant-connected-over-mcp)\n\nBring the same live diagnostics into Claude or another Model Context Protocol client. Compare queue waits, runner sizes and usage; with separately granted AI Context access, read the verified workflow source behind a job.\n\n“Compare this workflow's runner sizes and show the evidence for a better fit.”\n\nStart with read access. Operator connections can also re-run jobs, drain runners and adjust capacity, within the role you grant.\n\n**From a failed check to a fix:** opt-in [Eli PR repairs](eli/#set-up-pr-repairs)\ncan investigate failed jobs, publish changes to the existing PR branch and\nwatch GitHub's checks. Choose when repairs run and which provider pays; Eli\nnever merges the PR. Chat itself diagnoses and advises without changing the\nfleet or repository.\n\n[Try Eli in the local demo](quickstart/#just-looking)\n[Troubleshoot jobs and improve builds](troubleshooting/#investigate-jobs-with-eli-and-mcp)\n\n## What you get[¶](#what-you-get)\n\n### See why a job is waiting[¶](#see-why-a-job-is-waiting)\n\nFourteen pages, one job each: live jobs, runner logs, host health, queue waits\nand scheduler reasons. [Tour the UI](ui/) or [diagnose a queued job](queued-job/).\n\n### A fresh runner per job[¶](#a-fresh-runner-per-job)\n\nEphemeral container runners take one job, then their containers and workspaces\nare removed. GitHub App authentication supplies single-use registrations.\n[Understand the boundaries](security/).\n\n### Scale across your machines[¶](#scale-across-your-machines)\n\nPools define labels, runner sizes and limits. Agents contribute capacity from\neligible hosts and connect outbound to the controller. [Hosts and pools](hosts-and-pools/).\n\n### Use spare resources[¶](#use-spare-resources)\n\nOptional [elastic CPU](elastic-cpu/) lends spare CPU to busy runners.\n[Elastic memory](elastic-memory/) can raise a memory limit when there is\nheadroom. Observe first, then tune from measurements.\n\n### Keep useful build caches[¶](#keep-useful-build-caches)\n\nOptional host-local caches preserve selected downloads and build data outside\nthe disposable workspace. [Add a cache](persistent-caches/) with a workflow\nrecipe that also works on a cache miss.\n\n### Operate through open interfaces[¶](#operate-through-open-interfaces)\n\nUse the [CLI](cli/), [API](api-surface/), [Prometheus metrics](metrics/)\nand [backup tools](backup-and-restore/) alongside the UI. Keep the database\nand its matching encryption key recoverable.\n\n## How it works[¶](#how-it-works)\n\nConnect a GitHub App to your organisation or to a repository on your personal account. A pool advertises the runner label your workflow requests. Zoomies sees queued work through webhooks, with polling as a fallback, and provisions capacity on a host that can run it. GitHub assigns the job to the runner.\n\n```\nflowchart LR\n    q[\"GitHub job queued<br/>webhook or fallback poll\"]\n    p[\"Controller matches a pool<br/>and chooses an eligible host\"]\n    r[\"Agent starts a fresh runner<br/>GitHub assigns the job\"]\n    e[\"Job finishes<br/>ephemeral runner is removed\"]\n    q --> p --> r --> e\n```\n\n[The fundamentals](fundamentals/) explain labels and capacity.\n[Architecture](architecture/) follows the complete lifecycle.\n\n## Your home lab belongs in the pack.[¶](#your-home-lab-belongs-in-the-pack)\n\nBuilt-in **Tailcat** connections bring private home and office hosts into the\nsame fleet as your cloud machines, without a public host IP, router port\nforwarding, Tailscale account or separate tunnel installation. Choose\n**Private connection · Tailcat** in **Hosts → Add a host**, then run the\ncommand on that machine.\n\n[Connect a private host](private-hosts/) \n[Plan a home-lab fleet](home-lab/)\n\n## From a fresh host to a running fleet[¶](#from-a-fresh-host-to-a-running-fleet)\n\nThe [quick start](quickstart/) takes you through five steps: install, choose\nnative or container deployment, connect GitHub, create a pool and run a test\nworkflow. Native setup completes in the terminal; container deployments finish\naccount, App and pool setup in the browser. Use the label printed by your pool,\nthen watch the job complete and its ephemeral runner be removed.\n\nKeep the first setup small: one host, one pool and a workflow you trust. Caches, resource elasticity and automatic pools can follow once that works.\n\n## Run it from the browser. Reach it from anywhere.[¶](#run-it-from-the-browser-reach-it-from-anywhere)\n\n| Your task | Documentation | \n|---|---|\n| Learn and install | [Start here](start-here/) ,[fundamentals](fundamentals/) ,[quick start](quickstart/) | \n| Run the fleet day to day | [Web UI](ui/) ,[hosts and pools](hosts-and-pools/) ,[troubleshooting](troubleshooting/) | \n| Deploy from files or a platform | [Docker Compose](compose/) ,[PaaS](paas/) ,[marketplace deployment](marketplace/) | \n| Scale, tune and recover | [Advanced operations](advanced/) ,[metrics](metrics/) ,[backup and restore](backup-and-restore/) | \n| Script or integrate | [CLI](cli/) ,[API](api-surface/) ,[configuration](configuration/) | \n| Investigate jobs or use an assistant | [Eli](eli/) ,[MCP guide](mcp/) ,[AI Context](ai-context/) ,[job troubleshooting](troubleshooting/#investigate-jobs-with-eli-and-mcp) | \n\n## Moving what you have now[¶](#moving-what-you-have-now)\n\n**From hosted runners:** the migration wizard maps supported hosted labels to\nyour pools, shows the diff and can open one pull request per repository. It\nneeds optional repository write permissions. It never merges the pull\nrequests; test one workflow before moving more.\n\n**From static self-hosted runners:** a pool can advertise the labels your jobs\nalready request, so workflows may need no edits. Check the installation,\nrunner group, platform and toolchain before retiring the old runners. The\nmigration wizard deliberately leaves existing self-hosted jobs alone.\n\n## What runs where[¶](#what-runs-where)\n\n| Component | Platforms and boundaries | \n|---|---|\n| **Controller and agents** | Linux x86-64 and arm64. The agent also builds for Windows x86-64; macOS builds are useful for controller development. Qualification is described below. | \n| **Container runners** | Ubuntu 24.04, Ubuntu 26.04, Ubuntu 22.04, Debian 12, Debian 13, Fedora 42 and Rocky Linux 9, each for x86-64 and arm64. See [the image catalogue](naming/#the-runner-image) . There is no macOS runner image. | \n| **Backends** | Docker, Podman (including rootless), or `process` . Windows uses`process` , which runs directly on the host with a fresh work directory and no container isolation. See[worked shapes](hosts-and-pools/#worked-shapes) . | \n\n## What is qualified[¶](#what-is-qualified)\n\nThe [support matrix](https://github.com/eyupio/zoomies/blob/main/roadmap/support-and-measurement.md)\nseparates automated evidence, manual trials and builds. It is the place to\ncheck before choosing a platform for important workloads.\n\nController, agent, join and real-workload paths are exercised on pull requests with the process backend and a fake GitHub, on amd64 and arm64. Docker is unit-tested against a fake Engine API; this repository also runs its own CI on Zoomies container runners, apart from the arm64 and Windows legs. That is useful operating evidence, with different coverage from a dedicated end-to-end test.\n\nThe Windows agent builds and is vetted and unit-tested on a hosted Windows runner. The maintainer reports a real Windows host join and job on 11 October 2026; the written qualification evidence is still pending. Treat that manual trial separately from a qualified support claim.\n\n## Why not something else[¶](#why-not-something-else)\n\nZoomies suits teams that own runner hardware or VMs and want ephemeral runners, autoscaling and a web UI without operating Kubernetes. You still own host capacity, patching, network access and recovery.\n\n| Your situation | Read before choosing | \n|---|---|\n| You already operate Kubernetes and want runners in that cluster | [Compared with ARC](actions-runner-controller/) | \n| You want CI capacity without maintaining machines | [Compared with runner services](hosted-runner-services/) | \n| You are choosing among VM-based controllers | [Alternatives](alternatives/) | \n| You are unsure the savings justify the work | [Should you self-host?](should-i-self-host/) and[costs](costs/) | \n\nZoomies charges no platform fee. Machines, storage, electricity and operator\ntime still count; [costs](costs/) records the pricing assumptions and links\nto GitHub's current billing guidance.\n\n## A word about self-hosted runners[¶](#a-word-about-self-hosted-runners)\n\nStart with workflows you trust. Ephemeral containers reduce leftover job state,\nbut share the host kernel; they are not a VM per job. The process backend runs\non the host itself. Optional Docker access and shared caches change the\nboundaries further. Read [security](security/) before running untrusted\npull requests or changing isolation settings.\n\nGive your CI the Zoomies.\n\nExplore the demo, run your first trusted job, then grow at your own pace. The documentation takes you from the basics to operating a fleet.", "url": "https://wpnews.pro/news/zoomies-sh", "canonical_source": "https://zoomies.sh/", "published_at": "2026-10-21 08:20:24+00:00", "updated_at": "2026-10-21 08:42:17.409260+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "agent-protocols", "ai-products"], "entities": ["GitHub Actions", "Eli", "Model Context Protocol", "Claude", "Docker", "Podman", "SQLite"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/zoomies-sh", "markdown": "https://wpnews.pro/news/zoomies-sh.md", "text": "https://wpnews.pro/news/zoomies-sh.txt", "jsonld": "https://wpnews.pro/news/zoomies-sh.jsonld"}}