Skip to main content

Job toasts

Run a command — make test, swift build, a plugin — and you used to be left guessing. The job ran in a hidden shell and that was it: no progress, no count, nowhere to look. The job toast (#552) is the loud, momentary version. A small banner slides up in the bottom-right the moment a command fires and stays just long enough to tell you what happened.

What it shows

  • While it runs — a spinner and, for a test run, the pass/fail counts as they tick up, so "12 passed" climbs to "212 passed" as the run goes.
  • When it passes — a green check and the final count (or "Done" for a non-test command). It clears itself after a few seconds.
  • When it fails — a red mark and the damage: "2 failed" for a test run, "3 errors" for a build that the compiler or linter complained about, or the bare exit code when there's nothing to parse. A failed toast lingers longer than a passing one so you can't miss it, then clears itself — no banner stacks up forever. Wave it away sooner with the close button (a roomy, easy hit target).

Toasts stack — fire several commands in a row and you get a banner for each, newest at the bottom, rather than one clobbering the last.

The full report

Every toast carries a link into the run's output. At the top sit quick actions — re-run the command, hand it to the squad (the default model, or pick a tier), or copy the output — and an AI summary of the result: a sentence or two, generated on-device, leading with the outcome and, for a failure, the likely cause and next step. Below that, for a test run, a proper per-test breakdown — failures first, each with its assertion message; for anything else, the raw log. The same report opens from the toast and from the active-tasks tray, so a run reads the same wherever you find it.

The popover is a quick peek, though — when you want the run to stick around, the report's Activity button hands you off to the active-tasks tray with this run already selected, so the same report carries on in the pane next to the rest of your activity instead of vanishing when you click away.

Suggested fix

Some failures are boring and fixable, and the commonest is the one you hit on a fresh checkout: you run npm run build, the script shells out to a tool that lives in node_modules/.bin, and you get sh: docusaurus: command not found because npm install was never run. When kiln recognises that shape — a command not found in a project with a package.json, or a Python ModuleNotFoundError next to a requirements.txt — the report grows a Suggested fix card that names the cause and offers a one-click Run npm install (it reads the lockfile, so a pnpm or yarn project gets the right command). The failing banner says so too: instead of a bare exit 127 it reads `docusaurus` not found — open for the fix. kiln stays quiet when the failure isn't one it recognises — better silent than wrong.

In the active-tasks tray

A run is activity, so it also shows up as a row in the active-tasks tray (⌘J) — the persistent record next to the toast's momentary one. A running command sits in the Active band with its live progress; once it finishes it carries its outcome ("212 passed", "2 failed", "3 errors") and ages down to Stale, leaving a short "what just happened" history of recent runs. Selecting a job row fills the detail pane with its full report — the same per-test breakdown or raw log the toast's "full report" opens.

When it fires

The toast only pops for commands you deliberately ran — a palette pick or an action button. Runs fired by an IDE event (a save-triggered plugin, a steward check) stay quiet, so the banner never nags. The tray follows the same rule.

Turning it off

On by default. Settings ▸ Feedback ▸ Job toasts turns it off everywhere, and a project can shadow that choice with jobToastsEnabled in its .kiln config — the same project → user → default layering every other gated flourish uses (sound, haptics, the shipping celebration). The active-tasks tray and the diagnostics in the gutter carry on regardless — the toast is the flourish, not the only record.