E. Browser & automation agents
Screenshot evidence archive
A QA agent captures before/after screenshots on every test run and stores them keyed by run-id for diff review.
Prompt for any LLM (no setup needed)
Paste this into ChatGPT, Claude, or Gemini — no MCP, no API key, no install:
Read https://instanode.dev/llms.txt for the API.I want to: a QA agent captures before/after screenshots on every test run and stores them keyed by run-id for diff review.
Write a complete runnable script (bash + whatever language fits) that: - Provisions the services I need (S3-compatible storage) from instanode.dev - Does the work above end-to-end - Prints expected output at each step - Tells me how to claim the resources at the end if I want to keep them past 24 hours
Use real curl commands against api.instanode.dev. Quote the actual response shapes from llms.txt. ```
Sample agent prompt
Every Playwright test in this suite should snapshot before-action and after-action screenshots, then upload both to a S3-compatible bucket provisioned via instanode.dev. Key the objects as runs/<run_id>/<test_name>/<step>.png. On test failure, generate a diff image and store it alongside.Steps to follow
- Step 1: Provision the bucket.
``bash
curl -X POST https://api.instanode.dev/storage/new -H 'Content-Type: application/json' -d '{"name":"screenshot-evidence-archive-storage"}' | tee s.json
export S3_ENDPOINT=$(jq -r .endpoint s.json)
export S3_BUCKET=$(jq -r .bucket s.json)
export AWS_ACCESS_KEY_ID=$(jq -r .access_key s.json)
export AWS_SECRET_ACCESS_KEY=$(jq -r .secret_key s.json)
``
- Step 2: Snapshot hook in Playwright.
``typescript
test.afterEach(async ({ page }, info) => {
const buf = await page.screenshot({ fullPage: true });
const key = runs/${RUN_ID}/${info.title}/after.png;
await s3.send(new PutObjectCommand({ Bucket: S3_BUCKET, Key: key, Body: buf }));
});
``
- Step 3: On failure, generate a diff with pixelmatch.
``typescript
if (info.status !== info.expectedStatus) {
const diff = pixelmatch(before, after, ...);
await s3.send(new PutObjectCommand({ Bucket: S3_BUCKET, Key: runs/${RUN_ID}/${info.title}/diff.png, Body: diff }));
}
``
- Step 4: List a run's evidence.
``bash
aws s3 ls "s3://$S3_BUCKET/runs/$RUN_ID/" --recursive \
--endpoint-url "$S3_ENDPOINT"
``
- Step 5: Generate a signed URL for the diff image in the failure report.
Why this works on instanode.dev
S3-compatible storage speaks the S3 API so every Playwright-Python-Go-Rust S3 client just works. /storage/new mints a scoped IAM user limited to one bucket — the reviewer's signed URL can't leak into a neighbor's evidence.
Related cases
- Agent-marketplace preview thumbnails — same S3-compatible storage-keyed-by-id pattern for marketplace screenshots
- Trajectory diff regression harness — diff-on-PR sibling that stores artifacts in S3-compatible storage
- Overnight dossier fleet — another S3-compatible storage-as-artifact-store async-fleet pattern