coldpass

Btike/bulk-bg-remove

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/Btike--bulk-bg-remove.svg).

agent-harness

Works

The recorded run passed on 2 setups.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyesyes

Linux / Haiku 5.5: yes · Oct 27, 2026 · 6f4f721e9b6b · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> <guest-path> -o <guest-path> -y

Linux / Luna: yes · Oct 27, 2026 · 6f4f721e9b6b · codex / codex-cli 0.164.0
Recorded operation: <guest-path> <guest-path> --dry-run --json

Does what it says
3 of 3 claims checked out
  • Each photo is cut out into a new output folder (tested with -o, since the default <name>-no-bg location is not an argv destination): Real input produced the expected result: 1 done

    Source: Output goes to a new `<name>-no-bg/` folder next to the input.

    Input: <guest-path>

    Expected: one image processed into the new folder <guest-path>

    Command: <guest-path> <guest-path> -o <guest-path> -y

    Observed: …1 done · 0 failed · 0 already done · 13s ! showcase.png: edge <email> MP to fit free RAM output → <guest-path>

  • --dry-run --json plans the run as JSON with the model chosen: Real input produced the expected result: "model": "silueta"

    Source: scan and plan only; one JSON event per line for agents

    Input: <guest-path>

    Expected: JSON plan event naming the auto-chosen model silueta

    Command: <guest-path> <guest-path> --dry-run --json

    Observed: …"model": "silueta", "model_choice": {"profile": "uniform", "model": "silueta", "score": 8.1, "best_model": "birefnet-general-lite", "best_score": 8.6, "best_needs_gb": 11.7, "needs_gb": 3.0, "fits": true, "gap": 0.5}, "edges": "matte", "output_format": "png", "finish": null, "already_done": 0}

  • --shop plans a white square 2000 px JPEG output: Real input produced the expected result: "output_format": "jpg"

    Source: `--shop` puts every product on white, square, 2000 px and ready to

    Input: <guest-path>

    Expected: plan with output_format jpg

    Command: <guest-path> <guest-path> --shop --dry-run --json

    Observed: …"output_format": "jpg", "finish": {"background": "#FFFFFF", "square": true, "pad": 7.5, "size": 2000}, "already_done": 0}

MCP
No
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 0 days ago; 36 commits and 2 merged PRs in 90 days; 0 open issues, 0 open PRs; no releases

Last commit Oct 27, 2026

Setup time
6 min 33 s
6 min 33 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • Documented folder run with --format webp for smaller lossless files: command completed successfully

    Source: README.md Options table: --format webp|jpg

    Input: <guest-path> --format webp

    Expected: one image processed into <guest-path> as webp

    Command: <guest-path> <guest-path> -o <guest-path> --format webp -y

    Observed: by RAM) · ETA ~2s model silueta · edges matte · needs 3.0 GB free RAM auto: silueta fits your free RAM (8.1/10 on uniform images; best birefnet-general-lite 8.6) output → <guest-path> [3/4 RUN] loading model in each worker… worker 0 ready ✓ demo.webp 1280×720 1.6s [4/4 VERIFY] checking 1 outputs… GAME CLEAR · 1 done · 0 failed · 0 already done · 5s output → <guest-path>

Evidence
README behavior checked
Agent interfaces
CLI
CLI

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.310 (Claude Code) · Checked operation passed · Oct 27, 2026 on 6f4f721e9b6b

Each entry describes its recorded operation and source revision.

Safety
Made outbound HTTPS connections: yes (hosts not recorded) by bulk-bg-remove

Review signals across current setups: connection review.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 12 distinct locations. 15 attributed processes.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> <guest-path> -o <guest-path> -y

Agent-reported scope: Remove backgrounds from every photo in a folder with the bulk-bg-remove CLI, writing a new output folder with cut-out PNGs

Run details
run
Btike--bulk-bg-remove-claude-haiku-5-5-1793150620837881741
date
Oct 27, 2026
time to working
393.0s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.310 (Claude Code)
platform
linux
reported cost
$0.020499
Recorded source
https://github.com/Btike/bulk-bg-remove
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "6f4f721e9b6b6cc959081cdc28f7381460a37404", "url": "https://github.com/Btike/bulk-bg-remove"}
Test version
readme-c03644542c69939a9374958136a8b3431f7456269d3fb4b3c433785f59cfd637
revision
6f4f721e9b6b6cc959081cdc28f7381460a37404
Whose fault: not assigned · resolved

Safety: Review signals: 1 connection review.

Review signals: 1 connection review.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 12 distinct locations. 15 attributed processes.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Each photo is cut out into a new output folder (tested with -o, since the default <name>-no-bg location is not an argv destination): Real input produced the expected result: 1 done

    Source: Output goes to a new `<name>-no-bg/` folder next to the input.

    Input: <guest-path>

    Expected: one image processed into the new folder <guest-path>

    Command: <guest-path> <guest-path> -o <guest-path> -y

    Observed: …1 done · 0 failed · 0 already done · 13s ! showcase.png: edge <email> MP to fit free RAM output → <guest-path>

  • --dry-run --json plans the run as JSON with the model chosen: Real input produced the expected result: "model": "silueta"

    Source: scan and plan only; one JSON event per line for agents

    Input: <guest-path>

    Expected: JSON plan event naming the auto-chosen model silueta

    Command: <guest-path> <guest-path> --dry-run --json

    Observed: …"model": "silueta", "model_choice": {"profile": "uniform", "model": "silueta", "score": 8.1, "best_model": "birefnet-general-lite", "best_score": 8.6, "best_needs_gb": 11.7, "needs_gb": 3.0, "fits": true, "gap": 0.5}, "edges": "matte", "output_format": "png", "finish": null, "already_done": 0}

  • --shop plans a white square 2000 px JPEG output: Real input produced the expected result: "output_format": "jpg"

    Source: `--shop` puts every product on white, square, 2000 px and ready to

    Input: <guest-path>

    Expected: plan with output_format jpg

    Command: <guest-path> <guest-path> --shop --dry-run --json

    Observed: …"output_format": "jpg", "finish": {"background": "#FFFFFF", "square": true, "pad": 7.5, "size": 2000}, "already_done": 0}

Examples

  • Documented folder run with --format webp for smaller lossless files: command completed successfully

    Source: README.md Options table: --format webp|jpg

    Input: <guest-path> --format webp

    Expected: one image processed into <guest-path> as webp

    Command: <guest-path> <guest-path> -o <guest-path> --format webp -y

    Observed: by RAM) · ETA ~2s model silueta · edges matte · needs 3.0 GB free RAM auto: silueta fits your free RAM (8.1/10 on uniform images; best birefnet-general-lite 8.6) output → <guest-path> [3/4 RUN] loading model in each worker… worker 0 ready ✓ demo.webp 1280×720 1.6s [4/4 VERIFY] checking 1 outputs… GAME CLEAR · 1 done · 0 failed · 0 already done · 5s output → <guest-path>

Local or hosted: local

What the agent did

Remove backgrounds from every photo in a folder with the bulk-bg-remove CLI, writing a new output folder with cut-out PNGs

cd <guest-path> && pwd && ls -la && id -u && cat README.md | head -c 6000
cd <guest-path> && git log --oneline -1 2>&1; python3 --version; echo $CDP_URL; curl -s -m 10 -i $CDP_URL/json/version | head -20
cd <guest-path> && tail -c 1000 README.md; echo ----; cat .python-version; grep -n requires-python pyproject.toml; ls scripts tests .coldpass; which uv; uv --version 2>&1
cd /tmp && timeout 900 uv tool install bulk-bg-remove 2>&1 | tail -20; echo "rc=$?"; which bulk-bg-remove; bulk-bg-remove --help 2>&1 | head -60
export PATH=<guest-path>; cd /tmp && bulk-bg-remove --help 2>&1 | head -80; bulk-bg-remove --version 2>&1 | head -3
cd <guest-path> && grep -n '^version' pyproject.toml; ls assets benchmark | head -50; export PATH=<guest-path>; cd /tmp && timeout 600 bulk-bg-remove doctor 2>&1 | head -60
mkdir -p <guest-path> && cp <guest-path> <guest-path> && export PATH=<guest-path> && cd /tmp && timeout 600 bulk-bg-remove <guest-path> --dry-run --json 2>&1 | head -30; ls <guest-path>
export PATH=<guest-path> && cd /tmp && timeout 1500 bulk-bg-remove <guest-path> -y 2>&1 | tail -30; echo rc=${PIPESTATUS[0]}; find <guest-path> -type f 2>/dev/null | head
export PATH=<guest-path>; cd /tmp && bulk-bg-remove <guest-path> --shop --dry-run --json 2>&1 | tail -1 | head -c 1500; echo; cd <guest-path> && grep -rnE "while True|schedule|cron|--once|--now|sleep\(|webhook" src | head -20; ls src/*
mkdir -p <guest-path> <guest-path> && cp <guest-path> <guest-path> && ls -la <guest-path> <guest-path> && ls <guest-path> 2>&1 | head -1
cd <guest-path> && cat > probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","<guest-path>","-o","<guest-path>","-y"],"cwd":"<guest-path>","env":{"HOME":"<guest-path>"},"output_directory":"<guest-path>","expected_text":"1 done"}
EOF
python3 -I -c "import json;print(json.load(open('probe.json'))['argv'])"
cd <guest-path> && cat > claims.json <<'EOF'
[
{"kind":"claim","claim":"Default output folder is <name>-no-bg next to the input and a real photo is cut out","source":"Output goes to a new `<name>-no-bg/` folder next to the input.","input":"<guest-path>","expected":"one image processed into <guest-path>","probe_kind":"cli","argv":["<guest-path>","<guest-path>","-y"],"env":{"HOME":"<guest-path>"},"output_directory":"<guest-path>","expected_text":"1 done","cwd":"<guest-path>"},
{"kind":"claim","claim":"--dry-run --json plans the run as JSON with the model chosen","source":"scan and plan only; one JSON event per line for agents","input":"<guest-path>","expected":"JSON plan event naming the auto-chosen model silueta","probe_kind":"cli","argv":["<guest-path>","<guest-path>","--dry-run","--json"],"env":{"HOME":"<guest-path>"},"expected_text":"\"model\": \"silueta\"","cwd":"<guest-path>"},
{"kind":"claim","claim":"--shop plans a white square 2000 px JPEG output","source":"`--shop` puts every product on white, square, 2000 px and ready to","input":"<guest-path>","expected":"plan with output_format jpg","probe_kind":"cli","argv":["<guest-path>","<guest-path>","--shop","--dry-run","--json"],"env":{"HOME":"<guest-path>"},"expected_text":"\"output_format\": \"jpg\"","cwd":"<guest-path>"}
]
EOF
python3 -I -c "import json;print(len(json.load(open('claims.json'))))"
mkdir -p <guest-path> && cp <guest-path> <guest-path> && cd <guest-path> && cat > examples.json <<'EOF'
[{"kind":"example","claim":"Documented folder run: bulk-bg-remove PATH writes PATH-no-bg, with --format webp for smaller lossless files","source":"README.md Options table: --format webp|jpg","input":"<guest-path> --format webp","expected":"one image processed into <guest-path> as webp","argv":["<guest-path>","<guest-path>","--format","webp","-y"],"cwd":"<guest-path>","env":{"HOME":"<guest-path>"},"output_directory":"<guest-path>","expected_text":"1 done"}]
EOF
cat > cycles.json <<'EOF'
{"detected":false,"reason":"Entry points inspected (README, src/bulk_bg_remove cli.py and the ui server). The product is a one-shot CLI run per folder; no cron, scheduler, --once/--now, or webhook loop was found. The only while-True loop is the local UI server's event stream (src/bulk_bg_remove/ui/server.py:343), which is not a product cycle.","checks":[]}
EOF
python3 -I -c "import json;[json.load(open(f)) for f in ['examples.json','cycles.json','claims.json','probe.json']];print('ok')"
cd /tmp && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay 2>&1 | tail -c 5000; echo rc=$?
cd <guest-path> && cat > claims.json <<'EOF'
[
{"kind":"claim","claim":"Each photo is cut out into a new output folder (tested with -o, since the default <name>-no-bg location is not an argv destination)","source":"Output goes to a new `<name>-no-bg/` folder next to the input.","input":"<guest-path>","expected":"one image processed into the new folder <guest-path>","probe_kind":"cli","argv":["<guest-path>","<guest-path>","-o","<guest-path>","-y"],"env":{"HOME":"<guest-path>"},"output_directory":"<guest-path>","expected_text":"1 done","cwd":"<guest-path>"},
{"kind":"claim","claim":"--dry-run --json plans the run as JSON with the model chosen","source":"scan and plan only; one JSON event per line for agents","input":"<guest-path>","expected":"JSON plan event naming the auto-chosen model silueta","probe_kind":"cli","argv":["<guest-path>","<guest-path>","--dry-run","--json"],"env":{"HOME":"<guest-path>"},"expected_text":"\"model\": \"silueta\"","cwd":"<guest-path>"},
{"kind":"claim","claim":"--shop plans a white square 2000 px JPEG output","source":"`--shop` puts every product on white, square, 2000 px and ready to","input":"<guest-path>","expected":"plan with output_format jpg","probe_kind":"cli","argv":["<guest-path>","<guest-path>","--shop","--dry-run","--json"],"env":{"HOME":"<guest-path>"},"expected_text":"\"output_format\": \"jpg\"","cwd":"<guest-path>"}
]
EOF
cat > examples.json <<'EOF'
[{"kind":"example","claim":"Documented folder run with --format webp for smaller lossless files","source":"README.md Options table: --format webp|jpg","input":"<guest-path> --format webp","expected":"one image processed into <guest-path> as webp","argv":["<guest-path>","<guest-path>","-o","<guest-path>","--format","webp","-y"],"cwd":"<guest-path>","env":{"HOME":"<guest-path>"},"output_directory":"<guest-path>","expected_text":"1 done"}]
EOF
python3 -I -c "import json;[json.load(open(f)) for f in ['examples.json','claims.json']];print('ok')"
cd /tmp && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; python3 -I -c "
import json
d=json.load(open('<guest-path>'))
print('valid',d.get('valid'),d.get('problems'))
r=d.get('replay',{})
print('status',r.get('status'))
det=r.get('details',{})
print('probe rc',det.get('returncode'),det.get('argv'))
for c in det.get('claims',[]): print('CLAIM',c.get('verdict'),c.get('outcome'),c.get('evidence'))
for e in det.get('example_checks',[]): print('EX',e.get('verdict'),e.get('outcome'),e.get('evidence'))
for c in det.get('cycle_checks',[]): print('CYC',c.get('verdict'))
"
cd /tmp && grep -o '"verdict": "[a-z_]*"' <guest-path> | sort | uniq -c; grep -o '"outcome": "[^"]\{0,160\}' <guest-path> | head -8; rm -rf <guest-path>; ls <guest-path>
cd <guest-path> && cat > report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Remove backgrounds from every photo in a folder with the bulk-bg-remove CLI, writing a new output folder with cut-out PNGs","operation_scope":"Linux x86_64 guest (Ubuntu, Python 3.12.3, uv 0.13.5), CPU only, 3.5 GB free RAM; downloads the silueta model (44 MB) on first run; no browser or credentials needed for the CLI path","steps":["curl -s $CDP_URL/json/version (HTTP 200, Chrome/155 shared endpoint reachable; not needed for CLI)","uv tool install bulk-bg-remove (installed 0.1.0 into <guest-path>)","bulk-bg-remove doctor (READY)","bulk-bg-remove <guest-path> --dry-run --json (plan: model silueta)","bulk-bg-remove <guest-path> -y (1 done, 0 failed; output showcase.png)","bulk-bg-remove <guest-path> -o <guest-path> -y (probe, replayed PASS)","bulk-bg-remove <guest-path> --shop --dry-run --json (output_format jpg)"],"deviations":["Installed the PyPI release (uv tool install bulk-bg-remove, version 0.1.0) as the README documents, instead of building from the pinned checkout; the workspace pyproject also says 0.1.0 but I did not diff the sources.","Input photo was assets/showcase.webp from the repo (a composite of four real photos), copied into fresh input folders.","Claim and example runs use an explicit -o output folder, because the checker requires output_directory to match an argv destination; the README default location (<name>-no-bg next to the input) was observed manually in the first run but not replayed.","The --ui browser drag-and-drop page was not exercised; the CLI path was used instead.","No Git metadata setup was needed; the workspace was used directly, not as a git checkout.","Removed my manual photos-no-bg output before replay; checker-generated output folders were left in <guest-path>"],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
python3 -I -c "import json;d=json.load(open('report.json'));print(d['outcome'], len(d['steps']))"; ls -la <guest-path>
Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation <guest-path> <guest-path> --dry-run --json

Agent-reported scope: Scan a folder and produce a JSON removal plan with bulk-bg-remove --dry-run --json.

Run details
run
Btike--bulk-bg-remove-gpt-6-luna-1793150796951538843
date
Oct 27, 2026
time to working
143.5s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.164.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/Btike/bulk-bg-remove
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "6f4f721e9b6b6cc959081cdc28f7381460a37404", "url": "https://github.com/Btike/bulk-bg-remove"}
Test version
readme-3be879002729975eaa9c9bc49f02188330eb783b8fc02944604e0325529353be
revision
6f4f721e9b6b6cc959081cdc28f7381460a37404
Whose fault: not assigned · resolved

Safety: No problems traced to this repository code in these checks.

No problems traced to this repository code in these checks.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • The CLI scans images and plans a background removal run as JSON without processing the images.: Real input produced the expected result: "images": 1

    Source: --dry-run --json` | scan and plan only; one JSON event per line for agents

    Input: <guest-path> containing sample.webp

    Expected: JSON scan records one image and a plan selects a model

    Command: <guest-path> <guest-path> --dry-run --json

    Observed: …"images": 1, "total_mb": 2.4, "max_megapixels": 0.9, "formats": {"WebP": 1}, "skipped": []}, "output": "<guest-path>"} {"type": "plan", "at": 1793150952.865, "images": 1, "mode": "queue", "workers": 1, "threads_per_worker": 2, "binding_limit": "RAM", "ram_per_worker_gb": 3.93, "min_free_ram_gb": 3.0, "pause_below_gb": 1.5, "estimated_output_gb": 0.0, "free_disk_gb": 28.2, "eta_seconds": 2, "blockers": [], "warnings": [], "model": "silueta", "model_choice": {"profile": "uniform", "model": "silueta", "score": 8.1, "best_model": "birefnet-general-lite", "best_score": 8.6, "bes

Examples

  • Plan background removal for a folder as JSON: command completed successfully

    Source: README.md / Options

    Input: one copied demo.webp in <guest-path>

    Expected: scan and plan events for one WebP image

    Command: <guest-path> <guest-path> --dry-run --json

    Observed: {"type": "plan", "at": 1793150956.498, "images": 1, "mode": "queue", "workers": 1, "threads_per_worker": 2, "binding_limit": "RAM", "ram_per_worker_gb": 3.93, "min_free_ram_gb": 3.0, "pause_below_gb": 1.5, "estimated_output_gb": 0.0, "free_disk_gb": 28.2, "eta_seconds": 2, "blockers": [], "warnings": [], "model": "silueta", "model_choice": {"profile": "uniform", "model": "silueta", "score": 8.1, "best_model": "birefnet-general-lite", "best_score": 8.6, "best_needs_gb": 11.7, "needs_gb": 3.0, "fits": true, "gap": 0.5}, "edges": "matte", "output_format": "png", "finish": null, "already_done": 0}

Local or hosted: local

What the agent did

Scan a folder and produce a JSON removal plan with bulk-bg-remove --dry-run --json.

pwd && ls -la && sed -n '1,240p' README.md && python3 --version && id -u
sed -n '1,240p' pyproject.toml && rg -n "dry-run|json|def main|argparse|Typer|click|console_scripts|entry" src tests .github
command -v uv || true; python3 -m pip --version; find src -maxdepth 3 -type f -print
uv --version && uv tool install --editable .
sed -n '1,260p' src/bulk_bg_remove/cli.py && find assets -maxdepth 2 -type f
mkdir -p .coldpass && mkdir -p <guest-path> && cp assets/demo.webp <guest-path> && export PATH=<guest-path> && bulk-bg-remove <guest-path> --dry-run --json
python3 -I <guest-path> --help
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","<guest-path>","--dry-run","--json"],"cwd":"<guest-path>","expected_text":"\"images\": 1"}
EOF
cat > .coldpass/claims.json <<'EOF'
[
 {"kind":"claim","claim":"The CLI scans images and plans a background removal run as JSON without processing the images.","source":"--dry-run --json | scan and plan only; one JSON event per line for agents","input":"<guest-path> containing sample.webp","expected":"JSON scan records one image and a plan selects a model","probe_kind":"cli","argv":["<guest-path>","<guest-path>","--dry-run","--json"],"expected_text":"\"images\": 1","cwd":"<guest-path>"}
]
EOF
cat > .coldpass/examples.json <<'EOF'
[
 {"kind":"example","claim":"Plan background removal for a folder as JSON","source":"README.md / Options","input":"one copied demo.webp in <guest-path>","expected":"scan and plan events for one WebP image","argv":["<guest-path>","<guest-path>","--dry-run","--json"],"cwd":"<guest-path>","expected_text":"\"images\": 1"}
]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README.md and src/bulk_bg_remove/cli.py: the product processes folders on explicit CLI invocation and exposes no scheduler, recurring cycle, webhook, or --once trigger.","checks":[]}
EOF
cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Scan a folder and produce a JSON removal plan with bulk-bg-remove --dry-run --json.","operation_scope":"Local image inventory and model/resource planning; Python 3.12.3 and uv-installed CLI, using one repository demo WebP.","steps":["uv tool install --editable .","bulk-bg-remove <guest-path> --dry-run --json"],"deviations":[],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat README.md | sed -n '112,165p'
python3 - <<'PY'
import json
p='.coldpass/claims.json'
x=json.load(open(p)); x[0]['source']='--dry-run --json` | scan and plan only; one JSON event per line for agents'; json.dump(x,open(p,'w'),indent=2)
PY
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay