Argos is a visual testing platform: each CI build captures screenshots and
compares them to a baseline, producing per-snapshot
diffs. A build with
is waiting for a human (or you) to decide whether each change
is intentional, a regression, or a flaky capture.
Drive Argos through the
CLI — load the
argos-cli skill for the token
model and flags. In short:
/
need a project token
(
/
); submitting a review or comment needs a
personal
access token (
/
). Always use
when parsing, and
never print token values. If no PAT is available, give the user your conclusion
and evidence instead of posting — the CLI can't submit the review.
-
Inspect the build —
argos build get <ref> --json
. Decide from status:
| Status | Meaning / next step |
|---|
| / | Already approved / no visual diff — no review needed |
| / | Not ready — stop and report it can't be reviewed yet |
| Needs a decision — fetch snapshots |
| / / / | Don't approve until the cause is understood |
-
Fetch what changed —
argos build snapshots <ref> --needs-review --json
.
For each diff inspect
(diff mask),
(before),
(after), and
, plus the flakiness signals
and,
on a change,
/
(used in step 3).
-
Judge each diff against the inferred intent:
-
Intentional — matches the code change and renders cleanly.
-
Regression — broken layout/overlap, clipping, wrong state/theme/route,
missing content, or a removed snapshot with no matching test removal.
-
Flaky — weigh two independent signals; when they agree, call it flaky
with confidence:
- Test history — (0 stable → 1 flaky) and
(how many times this exact diff has recurred over
the metrics period). A high flakiness score or a recurring change is strong
evidence the diff is environmental noise, not this PR's work;
(builds without a change), (do changes repeat identically),
and explain why it scores that way.
is already known-flaky and auto-approved — never read it as a regression.
- This capture — a spinner/skeleton, async content not yet loaded,
mid-animation, drifting dynamic values,
head.metadata.test.retry > 0
, or
identical / across browsers (both captured the same
transient state). (the configured budget) is not itself a signal.
Conversely, a
stable test (
→0, high
, a first-time
change) that changed is more likely intentional or a real regression — don't
dismiss it as flaky on the visuals alone. Tune the window with
build snapshots --metrics-period <24h|3d|7d|30d|90d>
(default
).
-
Comment on specific diffs — the highest-value output of an agent review.
A binary approve/reject is cheap; specific, anchored feedback is what makes an
agent review worth reading. For each problem diff, post a comment that names
what's wrong and how to fix it, anchored to that snapshot:
bash
argos comment create <ref> --token <pat> --diff <screenshotDiffId> \
--body "Loader still visible — capture runs before data loads. Wait for settled content (or mark the loader aria-busy)."
- is the diff from .
- Pin to a region with or
(normalized 0–1); reply in a thread with .
- Use to bundle comments into your pending review, then submit them
together in the next step.
-
Submit the review (or report if no PAT is available):
- Approve:
argos review create <ref> --token <pat> --event approve
- Request changes:
argos review create <ref> --token <pat> --event reject --body "<summary>"
- Neutral note only:
--event comment --body "<summary>"
- Add for build-number refs (not URLs).
- Silence a confirmed recurring flake so it stops blocking future builds:
argos change ignore <change.id> --token <pat> --project owner/project
(reverse with ). Only ignore flakes the metrics confirm —
never to bypass a real diff; prefer a code fix
(references/flaky-fixes.md) when one exists.
- Lead with the inferred intent, the snapshots reviewed, and the evidence. In
the PR, cite the build URL and affected snapshot names; for flakes, name the
signal and recommend a fix.