Uh oh!
There was an error while loading. Please reload this page.
Add RunPool extension - #30343
Conversation
Manage on-demand self-hosted GitHub Actions runner pools from Raycast. Three commands: a view listing pools with their live state, a pause and resume toggle, and a background command keeping a summary in its own root-search subtitle. No menu-bar command, deliberately. Wraps the runpool CLI, shelling out to its JSON output rather than reading its files. The background refresh uses a local-only mode so it makes no GitHub request on a one-minute timer. AI tools cover reading pool state and changing capacity, with typed confirmations on anything that deregisters runners or stops CI waking.
State labels are now Active, Idle and Offline, matching what GitHub shows on its own runners page. Offline is styled neutrally: it is GitHub's word for a runner that is not connected, which for an on-demand pool is the normal resting state, and colouring that as a fault teaches people to ignore the colour. Rows carry the owner's GitHub avatar, which makes the organisation versus personal distinction visible without explaining it. The standalone toggle command is gone. Disabling local CI stops every pool waking, so anything pushed afterwards queues with no signal; that is too consequential to sit one keystroke from root search. It is now an action in the pools list behind a confirmation. Adds an optional menu bar command, disabled by default, whose icon is the mark filled to the proportion of runners awake.
Every surface now shows jobs running out of total runner slots as 2/4, and the icon fills to that same fraction. Previously the icon filled by runners awake while the text described work, so a full pool sat next to the word Idle. State words are GitHub's own. Unreachable replaces Not registered. Menu bar is monochrome by default, tinted to the menu bar's text colour, on tighter assets that read larger at a fixed height. Its rows carry the same fraction and no header total, which only repeated them. Adds an optional machine load readout: load against core count, which is what distinguishes a failing test from a contended machine. Naming settled as RunPool in prose and lowercase runpool for anything typed or installed.
Menu bar dropdown rows used the padded pool-* assets in full colour: inset from the canvas edge they render small and read as misaligned against the text, and the blue fought with the monochrome bar icon above them. They now use the tighter bar-* set and follow the same colour preference. GitHub avatars are masked to a rounded rectangle. A square photograph at list-item size looks pasted in beside Raycast's own rounded iconography. Repository rows in the pool detail now carry the owner's avatar too, rather than a generic book glyph.
The menu bar mark and the dropdown rows both render a little smaller. Disable Local CI moves up next to the pool's own start and stop, with capacity below it, since capacity is changed rarely. Drops the unused padded icon set and the 1024px master, neither of which the extension referenced.
The meetsCriteria form errors here whatever the criterion says, so the suite reported 40% while the extension itself was fine. Tool-call expectations pass 5/5.
raycastbot
commented
Aug 19, 2026
Congratulations on your new Raycast extension! 🚀 We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 15 business days. Once the PR is approved and merged, the extension will be available on our Store. |
Greptile SummaryThe PR adds the RunPool extension, including pool management views, background status commands, menu-bar and machine-load displays, and AI tools for runner operations.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Reviews (4): Last reviewed commit: "Offer 1 to 6 runners, and stop asserting..." | Re-trigger Greptile |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
A status call that rejects left the list on its loading view for good once the failure toast had faded, because the empty state was chosen on whether data had arrived and never on whether the read had failed. The menu bar had the same blind spot and drew an empty pool instead. Shrinking a pool deregisters the surplus runners from GitHub rather than stopping them, and the AI tool for that operation already confirms it. The action panel now asks too.
Uh oh!
There was an error while loading. Please reload this page.
Preference values are tied to the moment a command launched and Raycast does not promise a view command remounts when they change, so the cached path meant correcting it in preferences and pressing Try Again ran the same broken executable. That is the one moment it has to work.
The capacity list was 2, 4, 6, 8, which implied a view of what a machine can take that nothing here has established, and put 1 and 3 out of reach for no reason. A plain range makes no claim. The tool input and the AI instructions both stated the one-worker-per-core argument as established fact. It is the standard argument and it has not been measured; runpool stats exists to settle it.
Description
RunPool manages pools of self-hosted GitHub Actions runners on a Mac. The pools are on-demand: they wake within about a minute of a job queueing and stand down once idle, so the machine is not carrying idle runner processes all day.
The extension drives
runpool, an MIT-licensed command line tool installable withbrew install aicayzer/tap/runpool. It shells out torunpool status --jsonand never reads the tool's state files, so the JSON is the contract and the layout on disk stays free to change.Commands
Plus five AI tools, with confirmations on anything that deregisters runners or stops CI from waking.
A couple of notes for review
runpoolis not on the machine it renders a screen with the install command and a copy action, rather than failing with a toast, since not having it is an ordinary first-run state rather than an error.--local, which skips the GitHub API entirely. A one-minute refresh calling the API would be thousands of requests a day and would make a passive readout fail whenever the network did.Screencast
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare located outside the metadata folder if they were not generated with our metadata tool