---
title: "Introducing sling: an agent-first CLI for your CI"
description: "sling is the agent-first CLI for StarSling Runners. Diagnose a failed job, rank your slowest workflows, see CI costs, and read only the log lines that matter."
date: 2026-08-27
url: https://starsling.dev/blog/introducing-sling-an-agent-first-cli-for-your-ci
canonicalUrl: https://starsling.dev/blog/introducing-sling-an-agent-first-cli-for-your-ci
---

# Introducing sling: an agent-first CLI for your CI

<figure>
  [Image: The sling command typed at a terminal prompt, answering with its block-letter SLING banner]
</figure>

Today we're releasing [**sling**](/cli), 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.

```console
curl -fsSL https://runners.starsling.dev/cli/install.sh | sh
```

*Apple Silicon macOS and glibc x64 Linux.*

Then [`sling login`](https://docs.starsling.dev/sling-cli/commands/auth#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:

```text
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.** `--agent` returns 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 --help` maps 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 doctor`](https://docs.starsling.dev/sling-cli/commands/auth#sling-doctor) checks your token, org, git remote, control-plane reachability and clock skew, and fails when something is genuinely broken.

```console
$ 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 why` classifies a failure on the server with no LLM in the loop, so your agent spends its reasoning on the fix instead of the triage.

```console
$ 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`](https://cli.github.com), 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](/cli#beside-gh).

## 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:

```console
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-score), [ci-speedup](/ci-speedup) or [ci-secure](/ci-secure) and
stops.

## Analyze your CI

Find the bottlenecks across your workflows ([`sling top`](https://docs.starsling.dev/sling-cli/commands/analyze#sling-top)):

```bash
sling top
```

Diagnose a failed job and get a suggested path to a clean run ([`sling why`](https://docs.starsling.dev/sling-cli/commands/analyze#sling-why)):

```bash
sling why <job-url>
```

```console
$ 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`](https://docs.starsling.dev/sling-cli/commands/analyze#sling-time), so you know whether the time went to a slow checkout, your own steps, or the managed infrastructure:

```bash
sling time <job-url>
```

```console
$ 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`](https://docs.starsling.dev/sling-cli/commands/analyze#sling-usage):

```bash
sling usage
```

```console
$ 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`](https://docs.starsling.dev/sling-cli/commands/inspect#sling-runs):

```bash
sling runs list
```

```console
$ 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`](https://docs.starsling.dev/sling-cli/commands/billing#sling-bill):

```bash
sling bill
```

```console
$ 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](/cli). The full reference for every flag and exit code is at [docs.starsling.dev/sling-cli](https://docs.starsling.dev/sling-cli).

sling is a client for StarSling's HTTP API, and that API is documented at [docs.starsling.dev/api](https://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](https://github.com/apps/starslingdev) to keep it in shape automatically.
