npx skills add ...
npx skills add alwaysmeticulous/skills --skill meticulous-test
Run a Meticulous test run after implementing a frontend change, then hand off to the `meticulous-review` skill to classify each visual change as intended or unintended. Uploads the build once — the same build can be re-triggered against different bases without rebuilding — and it works with uncommitted changes. Use when implementing a feature autonomously end-to-end before creating a PR.
npx skills add alwaysmeticulous/skills --skill meticulous-test
To test a frontend change using Meticulous, follow the workflow below step by step, using the CLI or MCP commands as described.
Before starting, run the
meticulous-cli-updateskill to ensure the Meticulous CLI and skills are up to date — unless it has already run earlier in this conversation, in which case skip it.
If you are already given a test run id, skip to Step 4.
.github/workflows/*.yml for uses: alwaysmeticulous/report-diffs-action/upload-assets@v1 (build assets) or upload-container@v1 (docker image).gitlab-ci.yml (or an included .gitlab/ci/*.yml) for npx @alwaysmeticulous/cli ci upload-assets (build assets) or ci upload-container (docker image)bitbucket-pipelines.yml for the same npx @alwaysmeticulous/cli ci upload-assets / ci upload-container stepRegister the build as a reusable deployment with agent upload-build. This uploads the artefact and prints a deploymentId to stdout — it does not trigger a run yet.
--appDirectory points to the build output directory (e.g. a dist/ subfolder); --localImageTag is the local Docker image tag. The build mode is auto-detected.commitSha (local, ephemeral due to dirty working tree): …) — see the uncommitted-changes note below.git add them first.deploymentId from stdout (pass --verbose to also see progress on stderr).Trigger a run for the deployment, comparing against a base. Run it from the repo directory to infer both the base (merge-base with the origin default branch) and the git diff automatically:
--baseSha <sha> (and optionally --gitDiffOutput) to set it explicitly.--deploymentId to use the most recent deployment already uploaded for the local HEAD commit instead — this requires a clean working tree (no uncommitted changes).testRunId to stdout; the final status is Failure when visual differences were detected (a normal completed verdict, not an error). Pass --dontWaitForTestRunToComplete to return as soon as the run is triggered.deploymentId can be re-triggered against different bases — just run agent trigger-test-run again with a different --baseSha. No rebuild or re-upload needed.Note the testRunId from the output.
Follow the meticulous-review skill, passing the testRunId from Step 3. It fetches the diff summary, inspects representative screenshots / DOM diffs / timelines, and produces a final report classifying each visual change as intended or unintended.
Uncommitted changes: if you built/tested with a dirty working tree, the run is recorded against an ephemeral commit that is not your HEAD (and isn't pushed). Commands that resolve a run from the local checkout —
meticulous-review/agent test-run-diffsrun with no--testRunId— won't find it by commit, so always pass the explicit--testRunIdto the review step in that case.
# CLI
meticulous agent trigger-test-run --deploymentId <deploymentId>
# MCP (never infers `baseSha`/`gitDiffOutput` — pass them explicitly — and always returns immediately without waiting for the run to finish)
trigger_test_run(deploymentId="<deploymentId>", baseSha="<sha>")