spaxe-dev/zipcheck

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/spaxe-dev--zipcheck.svg).

coding

Works

README claims checked out on 2 recorded 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 26, 2026 · 4849f93a7e15 · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> --fail-on none <guest-path>

Linux / Luna: yes · Oct 26, 2026 · 4849f93a7e15 · codex / codex-cli 0.163.0
Recorded operation: <guest-path> --json /tmp/zipcheck-sample.zip

Does what it says
2 of 2 claims checked out
  • zipcheck detects a high-expansion zip bomb without extracting it: Real input produced the expected result: 1 suspicious

    Source: Static zip-bomb / archive-bomb detection that never extracts anything.

    Input: bomb.zip declaring 300000000 bytes from 291706 bytes on disk

    Expected: reported as suspicious

    Command: <guest-path> --fail-on none <guest-path>

    Observed: 1 suspicious, 0 clean, 0 unknown (0.00s) use -v for notes and member samples; --json for machine output

  • --fail-on none exits 0 even when suspicious: Real input produced the expected result: 0 dangerous, 1 suspicious

    Source: zipcheck --fail-on none archive.zip

    Input: bomb.zip

    Expected: summary line shows 1 suspicious

    Command: <guest-path> --fail-on none <guest-path>

    Observed: 0 dangerous, 1 suspicious, 0 clean, 0 unknown (0.00s) use -v for notes and member samples; --json for machine output

MCP
No
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 1 days ago; 9 commits and 0 merged PRs in 90 days; 0 open issues, 0 open PRs; latest release 2026-10-24

Last commit Oct 24, 2026

Setup time
4 min 16 s
4 min 16 s to a working result
Issue
none found in recorded check
Examples
2 of 2 ran as expected
  • JSON output reports the suspicious verdict for the bomb sample: command completed successfully

    Source: README.md ## Usage (--json, machine-readable)

    Input: --json --fail-on none bomb.zip

    Expected: verdict suspicious in JSON

    Command: <guest-path> --json --fail-on none <guest-path>

    Observed: truncated": false, "findings": [ { "code": "HIGH_EXPANSION", "severity": "medium", "severity_value": 2, "title": "Declared expansion is unusually large", "detail": "The archive declares 300000000 bytes of output from 291706 bytes on disk (1,028:1). Extract it only inside a resource-limited sandbox.", "evidence": { "declared_uncompressed": 300000000, "file_size": 291706, "ratio": 1028.4327370708863 } } ], "nested": [], "duration_ms": 3.398 } ] }

  • Repository test suite (documented Development commands): command completed successfully

    Source: README.md ## Development

    Input: python -m pytest

    Expected: tests pass

    Command: <guest-path> -m pytest -q

    Observed: ........................................................................ [ 69%] ................................ [100%]

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 26, 2026 on 4849f93a7e15

Each entry describes its recorded operation and source revision.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety.

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> --fail-on none <guest-path>

Agent-reported scope: Scan an archive for zip-bomb risk with the zipcheck CLI (static metadata check, no extraction)

Run details
run
spaxe-dev--zipcheck-claude-haiku-5-5-1793020276752815460
date
Oct 26, 2026
time to working
255.8s
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.010104
Recorded source
https://github.com/spaxe-dev/zipcheck
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "4849f93a7e1570582885deca4480d0e97e7c6aa4", "url": "https://github.com/spaxe-dev/zipcheck"}
Test version
readme-ca496ea10bb07418d1d8f1c256c2433a55547acc0fb62d8b6d86ae33c976fbfa
revision
4849f93a7e1570582885deca4480d0e97e7c6aa4
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
  • zipcheck detects a high-expansion zip bomb without extracting it: Real input produced the expected result: 1 suspicious

    Source: Static zip-bomb / archive-bomb detection that never extracts anything.

    Input: bomb.zip declaring 300000000 bytes from 291706 bytes on disk

    Expected: reported as suspicious

    Command: <guest-path> --fail-on none <guest-path>

    Observed: 1 suspicious, 0 clean, 0 unknown (0.00s) use -v for notes and member samples; --json for machine output

  • --fail-on none exits 0 even when suspicious: Real input produced the expected result: 0 dangerous, 1 suspicious

    Source: zipcheck --fail-on none archive.zip

    Input: bomb.zip

    Expected: summary line shows 1 suspicious

    Command: <guest-path> --fail-on none <guest-path>

    Observed: 0 dangerous, 1 suspicious, 0 clean, 0 unknown (0.00s) use -v for notes and member samples; --json for machine output

Examples

  • JSON output reports the suspicious verdict for the bomb sample: command completed successfully

    Source: README.md ## Usage (--json, machine-readable)

    Input: --json --fail-on none bomb.zip

    Expected: verdict suspicious in JSON

    Command: <guest-path> --json --fail-on none <guest-path>

    Observed: truncated": false, "findings": [ { "code": "HIGH_EXPANSION", "severity": "medium", "severity_value": 2, "title": "Declared expansion is unusually large", "detail": "The archive declares 300000000 bytes of output from 291706 bytes on disk (1,028:1). Extract it only inside a resource-limited sandbox.", "evidence": { "declared_uncompressed": 300000000, "file_size": 291706, "ratio": 1028.4327370708863 } } ], "nested": [], "duration_ms": 3.398 } ] }

  • Repository test suite (documented Development commands): command completed successfully

    Source: README.md ## Development

    Input: python -m pytest

    Expected: tests pass

    Command: <guest-path> -m pytest -q

    Observed: ........................................................................ [ 69%] ................................ [100%]

Local or hosted: local

What the agent did

Scan an archive for zip-bomb risk with the zipcheck CLI (static metadata check, no extraction)

cd <guest-path> && pwd && ls -la && id -u && python3 --version && cat README.md 2>/dev/null | head -c 6000
ls <guest-path> ; ls /inputs 2>/dev/null; echo "CDP=$CDP_URL"; curl -s -m 10 -i "$CDP_URL/json/version" | head -20
cd <guest-path> && grep -n "^## \|^### " README.md && sed -n '/^## Install/,/^## Detection rules/p' README.md | head -c 7000
cd <guest-path> && python3 -m venv <guest-path> 2>&1 | tail -3; <guest-path> -m pip install -q --upgrade pip 2>&1 | tail -3; <guest-path> -m pip install '.[aes]' 2>&1 | tail -5; ls <guest-path> | grep -i zip
mkdir -p <guest-path> && cd <guest-path> && which zip || (sudo -n apt-get -o DPkg::Lock::Timeout=300 install -y zip >/dev/null 2>&1; which zip); head -c 300000000 /dev/zero | zip -q -9 bomb.zip - ; echo "hello" > hello.txt && zip -q small.zip hello.txt; ls -la <guest-path>
mkdir -p <guest-path> && cat > <guest-path> <<'EOF'
import sys, zipfile
out = sys.argv[1]
with zipfile.ZipFile(out + "/bomb.zip", "w", zipfile.ZIP_DEFLATED, compresslevel=9) as z:
    z.writestr("zeros.bin", b"\0" * 300_000_000)
with zipfile.ZipFile(out + "/small.zip", "w", zipfile.ZIP_DEFLATED) as z:
    z.writestr("hello.txt", "hello\n")
EOF
python3 -I <guest-path> <guest-path> && ls -la <guest-path> && <guest-path> <guest-path>; echo "rc=$?"; <guest-path> <guest-path>; echo "rc=$?"
cd <guest-path> && sed -n '712,760p' README.md | head -c 4000; echo ----; grep -rniE "cron|schedul|watch|--once|daemon|webhook" src README.md | head -20; echo ----; ls tests tools; ls .coldpass
cd <guest-path> && timeout 900 <guest-path> -m pip install -q -e '.[dev]' 2>&1 | tail -3; timeout 900 <guest-path> -m pytest -q 2>&1 | tail -8
cd <guest-path> && grep -c -F "Static zip-bomb / archive-bomb detection that never extracts anything." README.md; grep -c -F "zipcheck --fail-on none archive.zip" README.md; grep -c -F "Requires Python 3.10+." README.md; <guest-path> --json --fail-on none <guest-path> | head -c 700; echo; echo rc=$?
cd <guest-path> && Z=<guest-path> && cat > probe.json <<EOF
{"kind":"cli","argv":["$Z","--fail-on","none","<guest-path>"],"cwd":"<guest-path>","env":{},"expected_text":"1 suspicious"}
EOF
cat > claims.json <<EOF
[
{"kind":"claim","claim":"zipcheck detects a high-expansion zip bomb without extracting it","source":"Static zip-bomb / archive-bomb detection that never extracts anything.","input":"bomb.zip declaring 300000000 bytes from 291706 bytes on disk","expected":"reported as suspicious","probe_kind":"cli","argv":["$Z","--fail-on","none","<guest-path>"],"cwd":"<guest-path>","env":{},"expected_text":"1 suspicious"},
{"kind":"claim","claim":"--fail-on none exits 0 even when suspicious","source":"zipcheck --fail-on none archive.zip","input":"bomb.zip","expected":"summary line shows 1 suspicious","probe_kind":"cli","argv":["$Z","--fail-on","none","<guest-path>"],"cwd":"<guest-path>","env":{},"expected_text":"0 dangerous, 1 suspicious"}
]
EOF
cat > examples.json <<EOF
[
{"kind":"example","claim":"JSON output reports the suspicious verdict for the bomb sample","source":"README.md ## Usage (--json, machine-readable)","input":"--json --fail-on none bomb.zip","expected":"verdict suspicious in JSON","argv":["$Z","--json","--fail-on","none","<guest-path>"],"cwd":"<guest-path>","env":{},"expected_text":"\"verdict\": \"suspicious\""},
{"kind":"example","claim":"Repository test suite (documented Development commands)","source":"README.md ## Development","input":"python -m pytest","expected":"tests pass","argv":["<guest-path>","-m","pytest","-q"],"cwd":"<guest-path>","env":{}}
]
EOF
cat > cycles.json <<EOF
{"detected":false,"reason":"Entry points inspected (src/zipcheck CLI, README Usage) and grep for cron/schedule/watch/--once/daemon/webhook found nothing. zipcheck is a one-shot CLI that scans the files it is given and exits; no product scheduler or loop exists.","checks":[]}
EOF
for f in probe claims examples cycles; do <guest-path> -m json.tool $f.json >/dev/null && echo "$f ok"; done
cd <guest-path> && cat > report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Scan an archive for zip-bomb risk with the zipcheck CLI (static metadata check, no extraction)","operation_scope":"Linux guest, Python 3.12.3, venv at <guest-path> with zipcheck[aes] 0.3.0 installed from the checkout; sample archives generated in <guest-path>; no browser or credentials needed","steps":["python3 -m venv <guest-path>","<guest-path> -m pip install '.[aes]'  (README Install, from checkout)","<guest-path> <guest-path>  -> CLEAN","<guest-path> --fail-on none <guest-path>  -> SUSPICIOUS, HIGH_EXPANSION, 1 suspicious","<guest-path> --json --fail-on none <guest-path>  -> verdict suspicious","python -m pip install -e '.[dev]' and python -m pytest (README Development)"],"deviations":["zip binary not present in the guest, so the bomb fixture was generated with a stdlib zipfile script (<guest-path>) instead of the zip CLI","Installed into a venv rather than pipx/uv (both documented; venv is the README pip path)","Did not run tools/generate_samples.py (needs a RAR binary and produces large files); used a 300 MB zero-filled deflate bomb instead","Browser CDP endpoint checked (HTTP 200) but not used; zipcheck is a CLI"],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":"None required for this run."}
EOF
<guest-path> -m json.tool report.json >/dev/null && echo report ok; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -40
Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation <guest-path> --json /tmp/zipcheck-sample.zip

Agent-reported scope: Scan a ZIP archive and emit a JSON verdict

Run details
run
spaxe-dev--zipcheck-gpt-6-luna-1793020318121689603
date
Oct 26, 2026
time to working
42.1s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/spaxe-dev/zipcheck
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "4849f93a7e1570582885deca4480d0e97e7c6aa4", "url": "https://github.com/spaxe-dev/zipcheck"}
Test version
readme-a17389bda4cc696f9601c0c4ff1b2c16e23bfa1d907883b715ccdd9e92ddec56
revision
4849f93a7e1570582885deca4480d0e97e7c6aa4
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
  • zipcheck reports an archive verdict in JSON: Real input produced the expected result: "verdict": "clean"

    Source: # machine-readable

    Input: /tmp/zipcheck-sample.zip

    Expected: clean verdict

    Command: <guest-path> --json /tmp/zipcheck-sample.zip

    Observed: "verdict": "clean", "severity": "info", "severity_value": 0, "complete": true, "error": null, "verified": null, "verified_uncompressed": null, "verification_capped": false, "verification_detail": "", "nested_unverified": false, "notes": [], "entries": [ { "name": "hello.txt", "usize": 14, "csize": 14, "ratio": 1.0, "method": "stored", "is_dir": false, "encrypted": false, "sparse": false } ], "entries_truncated": false,

Examples

  • Scan an archive and emit machine-readable results: command completed successfully

    Source: README.md Usage: zipcheck --json archive.rar

    Input: sample ZIP

    Expected: JSON report with clean verdict

    Command: <guest-path> --json /tmp/zipcheck-sample.zip

    Observed: "complete": true, "error": null, "verified": null, "verified_uncompressed": null, "verification_capped": false, "verification_detail": "", "nested_unverified": false, "notes": [], "entries": [ { "name": "hello.txt", "usize": 14, "csize": 14, "ratio": 1.0, "method": "stored", "is_dir": false, "encrypted": false, "sparse": false } ], "entries_truncated": false, "findings": [], "nested": [], "duration_ms": 2.845 } ] }

Local or hosted: local

What the agent did

Scan a ZIP archive and emit a JSON verdict

pwd && ls -la && sed -n '1,240p' README.md
python3 --version && rg -n "zipcheck .*|python -m pip|## Development|quick|example|cycle|schedule" README.md && ls -la .coldpass && sed -n '1,200p' pyproject.toml
grep -nE 'zipcheck |python -m pip|## Development|quick|example|cycle|schedule' README.md; ls -la .coldpass; sed -n '1,100p' pyproject.toml; sed -n '1,200p' src/zipcheck/__main__.py
python3 -m venv .venv && .venv/bin/python -m pip install -e . && mkdir -p .coldpass && python3 - <<'PY'
import zipfile
with zipfile.ZipFile('/tmp/zipcheck-sample.zip','w') as z: z.writestr('hello.txt','hello zipcheck')
PY
.venv/bin/zipcheck --json /tmp/zipcheck-sample.zip
sed -n '700,750p' README.md; sed -n '1,120p' .coldpass/* 2>/dev/null || true
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","--json","/tmp/zipcheck-sample.zip"],"cwd":"<guest-path>","expected_text":"\"verdict\": \"clean\""}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"zipcheck reports an archive verdict in JSON","source":"# machine-readable","input":"/tmp/zipcheck-sample.zip","expected":"clean verdict","probe_kind":"cli","argv":["<guest-path>","--json","/tmp/zipcheck-sample.zip"],"expected_text":"\"verdict\": \"clean\"","cwd":"<guest-path>"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Scan an archive and emit machine-readable results","source":"README.md Usage: zipcheck --json archive.rar","input":"sample ZIP","expected":"JSON report with clean verdict","argv":["<guest-path>","--json","/tmp/zipcheck-sample.zip"],"cwd":"<guest-path>","expected_text":"\"verdict\": \"clean\""}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README Usage and Development entry points; zipcheck is a one-shot archive scanning CLI and documents no product scheduler or recurring cycle.","checks":[]}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Scan a ZIP archive and emit a JSON verdict","operation_scope":"Python 3.12.3 (README requires Python 3.10+); editable checkout install; one-shot archive scan","steps":["python3 -m venv .venv",".venv/bin/python -m pip install -e .",".venv/bin/zipcheck --json /tmp/zipcheck-sample.zip","<env-var>=<guest-path> python3 -I <guest-path> --validate --replay"],"deviations":[],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF