What ran, how it went, what it returned

A run is mostly a list of these. So the collapsed header carries everything needed to skim it — the tool, the target, the outcome, the time — and the body carries everything needed to audit it.

Statuses

The container stays neutral, so a long run reads as a list rather than a wall of tinted cards. Only the two states someone has to act on — awaiting approval, and failed — take a coloured border as well.

read_filepackage.jsonDone0.1s
bashnpm run lintRunning
write_filesrc/app/page.tsxNeeds approval
ENOENT: no such file or directory

Arguments and result

Pass the call's detail as children and the header becomes a disclosure. With nothing to disclose it renders as a plain row instead — a row that cannot open should not look pressable.

json
{
  "path": "src/tokens/tokens-light.css",
  "pattern": "--color-status-"
}

Waiting on a person

Approval controls render outside the collapsible panel. Someone deciding whether to allow a write should not have to expand the call to find the button — and someone who wants to check the arguments first can still open it.

json
{
  "path": "src/components/Button/Button.tsx",
  "bytes": 4182
}