Introducing sling: an agent-first CLI for your CI
Today we're releasing sling, the official StarSling CLI. It's an agent-first CLI for your CI.
StarSling Runners are fast, AI-native GitHub Actions runners: a one-line
swap for ubuntu-latest that our agents keep tuning. sling is how you and your
agent see what those runners are doing. Why a job failed, where the time went,
what it cost, and which workflow to fix first, without leaving the terminal.
curl -fsSL https://runners.starsling.dev/cli/install.sh | sh
Apple Silicon macOS and glibc x64 Linux.
Then sling login shows a short device code you approve in the browser with the GitHub account you're already signed into.
Or hand the whole setup to your coding agent. This prompt installs sling and the
/sling agent skill, which teaches your agent when to reach for it, and it works
in Claude Code, Codex, Cursor, OpenCode and more:
Set up the StarSling `sling` CLI and its agent skill on this machine (Apple Silicon macOS or glibc x64 Linux).
1. Install the CLI: run `curl -fsSL https://runners.starsling.dev/cli/install.sh | sh`,
then confirm it with `sling --version`.
2. Install the agent skill: run `npx skills add starslingdev/skills --skill sling -y`,
then read the installed SKILL.md end to end and follow it for every CI
question I ask from now on.
3. Signing in is mine to do: `sling login` prints a short device code I approve
in a browser. Print that command for me and wait until I tell you I am
signed in.
4. Once I confirm, run `sling doctor` and tell me what it reports about the CLI,
the login, and the StarSling GitHub App on my organization.
CLI for agents
Agents pick sling up seamlessly: it acquires the session you are already logged into. Three things make it usable from inside an agent loop:
- Machine mode, one flag.
--agentreturns JSON on stdout, refuses prompts rather than waiting on them, and turns colour off, so an agent gets a shape it can parse and an exit code it can branch on. - Discoverable by design.
sling --helpmaps every command to the question it answers, so an agent can find the right one without spending context hunting for it. - One command for what's broken.
sling doctorchecks your token, org, git remote, control-plane reachability and clock skew, and fails when something is genuinely broken.
$ sling top --agent
{
"by": "workflow",
"metric": "runner-minutes",
"window": { "from": "2026-07-25T22:47:14.312Z", "to": "2026-08-24T22:47:14.312Z" },
"rows": [
{
"key": "integration-tests",
"repo": "web-platform",
"runner_minutes": 69559,
"cost_usd": 556.472,
"runs": 12480,
"jobs": 28715,
"p50_ms": 69000,
"p95_ms": 180000,
"p99_ms": 358540,
"queue_wait_ms": 14000,
"trend_pct": 170.7
}
],
"local": { "org": "acme-corp" }
}
CLI for humans
When someone hits a failed job, they have three bad options: click through the GitHub UI, dump the whole log into an agent and pray, or pull raw data out of an API and diagnose by hand. sling lets you investigate a failed run, find the bottleneck in your pipeline, and share usage and cost with your team:
- Deterministic diagnostics.
sling whyclassifies a failure on the server with no LLM in the loop, so your agent spends its reasoning on the fix instead of the triage.
$ sling --help
USAGE
sling <command> [flags]
AUTH & SETUP COMMANDS
login: Sign in via the GitHub device authorization flow
logout: Sign out and clear the stored credential and preferences
whoami: View your identity, organizations and credential
doctor: Check your environment and know what's broken
org switch: Set your organization that other commands use by default
INSPECT CI COMMANDS
runs list: Find workflow runs by branch, status, conclusion, or trigger
runs show: See which job in a run failed, or wait for it to finish
jobs list: List jobs in a run, or across a repo
jobs show: See which step in a job failed, and how long each took
logs: Read just the log lines you need, not the whole transcript
resolve: Resolve an id or GitHub Actions URL to its target
DIAGNOSE COMMANDS
why: Diagnose why a job failed, with evidence and next steps
time: Decompose CI wall-clock into runner-lifecycle phases
COST & CAPACITY COMMANDS
usage: Attribute runner minutes and usage cost over a window
top: Rank the biggest time and cost hotspots, with a trend
bill: See what you owe so far and the month-end projection
bill history: List prior finalized billed invoices
labels list: Compare runner sizes and per-minute cost for runs-on
Alongside gh
gh, GitHub's own command-line tool, lists and acts:
it lists runs, streams logs, triggers workflows, re-runs jobs. sling reads and
explains. It gives you a verdict instead of a transcript, a ranking instead of a
list, and what CI costs, which gh does not report at all.
gh is already a prerequisite for every StarSling agent skill, so it is on every
machine sling runs on. The two are built to sit beside each other, and the
/sling skill decides which one answers each question. The full breakdown is on
the sling CLI page.
The agent skill
Calling sling agent-first means more than machine-readable output. The other half is a skill that teaches your coding agent when to reach for it, and when not to:
npx skills add starslingdev/skills --skill sling -y
The skill's whole job is picking the right tool per request. A live question
about a run, a job or your spend goes to sling. sling reads and analyzes, so
anything that changes CI state goes to gh:
- re-running a job
- cancelling a run
- triggering a workflow
- enabling or disabling one
- downloading an artifact
A repo-wide audit of your workflow files is neither, so it hands off to ci-score, ci-speedup or ci-secure and stops.
Analyze your CI
Find the bottlenecks across your workflows (sling top):
sling top
Diagnose a failed job and get a suggested path to a clean run (sling why):
sling why <job-url>
$ sling why https://github.com/acme-corp/api/actions/runs/1827/job/5274
JobName: Unit and E2E Tests / Affected UNIT Test
Failure Reason: A process ran out of memory. The runtime aborted, so the
step's exit code is a consequence, not the cause.
Evidence
Classification: oom
Logs:
node::OOMErrorHandler(char const*, v8::OOMDetails const&)
Error: [vitest-pool]: Worker forks emitted error.
Caused by: Error: Worker exited unexpectedly
Suggestions:
1. Verify the logs
sling logs 5274 --grep '##\[error\]|failures?:|FAIL|panicked'
Decompose CI wall-clock into phases with sling time, so you know whether the time went to a slow checkout, your own steps, or the managed infrastructure:
sling time <job-url>
$ sling time https://github.com/acme-corp/api/actions/runs/1831/job/5291
Job Name: Lint docs (att_5291.1) · Wall-Clock: 2m 55s · Queue-Wait: 1s
PHASES TIME %-SHARE TIMELINE
provision 3.0s 1.71% █░░░░░░░░░░░░░░░░░░░░░░░
checkout+patch 50.0s 28.57% ███████░░░░░░░░░░░░░░░░░
steps 117.0s 66.86% ░░░░░░░████████████████░
teardown 5.0s 2.86% ░░░░░░░░░░░░░░░░░░░░░░░█
Top Steps
STEP TIME
Setup pnpm and Node.js 97.0s
Check formatting 7.0s
Lint with remark 6.0s
Attribute runner minutes and cost across your repos with sling usage:
sling usage
$ sling usage
StarSling usage — by repo
2026-08-08 → 2026-09-08 (current cycle)
KEY · REPO RUNNER MIN JOBS COST $ % TOTAL
acme-corp/web-platform 975.0 1284 $7.80 52.0%
acme-corp/api-gateway 630.0 856 $5.04 33.6%
acme-corp/mobile-app 270.0 342 $2.16 14.4%
Inspect your CI
See every run and its status across the board with sling runs list:
sling runs list
$ sling runs list --limit 5
RUN WORKFLOW BRANCH EVENT STATUS DUR JOBS CREATED
18274531902 .github/workflows/integration-tests.yml main push in_progress — 0/22 2026-08-24 09:14
18274418860 .github/workflows/integration-tests.yml main push success 5m 42s 25/25 2026-08-24 08:51
18274102724 .github/workflows/changed-test-gate.yml main pull_request success 32s 1/1 2026-08-24 08:33
18273960124 .github/workflows/flag-spam-comments.yml main issue_comment success 13s 1/1 2026-08-24 08:19
18273943287 .github/workflows/codeql.yml main schedule in_progress — 0/2 2026-08-24 08:12
Billing
See what you owe so far and where the month is projected to land with sling bill:
sling bill
$ sling bill
Current cycle: 2026-08-08 → 2026-09-08
Invoice: pending (issued when the period closes)
Runner minutes 12500.0
Amount $97.20
Projected month-end $167.40
RUNNER LABEL TIME COST
starsling-ubuntu-24.04 11800.0 min $94.40
starsling-ubuntu-24.04-2 700.0 min $2.80
Every command, with the install line and the skill that teaches your agent to use it, is on the sling CLI page. The full reference for every flag and exit code is at docs.starsling.dev/sling-cli.
sling is a client for StarSling's HTTP API, and that API is documented at docs.starsling.dev/api: the same runs, jobs, logs, labels, usage and billing endpoints the commands above call, generated from the OpenAPI spec. Reach for it when you want the data somewhere the terminal is not, like a dashboard or a bot of your own.
If your team runs CI on GitHub Actions, install the StarSling GitHub App to keep it in shape automatically.