ZipPy builds clean archive packs for code review and LLM context.
Note
This is a passion project of mine and I use it daily to prepare context for my own development workflows.
- Scans a target folder
- Keeps high-signal files
- Builds context chunks
- Writes size-limited zip archives with metadata
auto: tries decompilation/analyzers for binaries, then merges text outputauto-all: full-auto pack of all packable non-visual files (bypasses ignore rules and disables heuristics; hard excludes still apply)context: merges readable files into context chunksdirect: archives original files directly (merges.pyccontext unless--pureis used)
llm_min(default): token-minimal review pack (intent chunks, binary stubs, lockfile exclusion, compact git summary)llm_forensic: richer metadata profile (for reproducibility/audits)
- Runtime output goes to an OS user cache dir:
- Windows:
%LOCALAPPDATA%\\ZipPy\\archives\\<target>\\<run_id>\\ - Linux:
$XDG_CACHE_HOME/zippy/archives/<target>/<run_id>/(or~/.cache/zippy/...) - macOS:
~/Library/Caches/zippy/archives/<target>/<run_id>/
- Windows:
- Temporary files go to the matching cache
tmp/directory. - Hard excludes always apply (
.git,__pycache__,.cache,.ruff_cache,.pytest_cache,node_modules,*.egg-info, build folders, etc.) - Smart filtering applies
.gitignoreplus ZipPy-specific.zipignorerules (.zippyignoreis still supported for compatibility); using--allbypasses ignore rules for both profiles (hard excludes still apply) llm_minexcludesLICENSE/NOTICEtext bodies by default- If the source folder is the repo root, ZipPy prefers git-tracked files.
- New: If no files are tracked, it automatically falls back to all files.
- Binary evidence defaults:
llm_min:summaryllm_forensic:decompiled
- Test payload defaults:
llm_min:sample(plusTEST_INDEX.md)llm_forensic:all
- Clone the repo
- Use Python
3.9+
git clone https://github.com/FelixCAxO/ZipPy.git
cd ZipPy
python --versionWindows:
- Use
scripts/run_zippy.bat(drag and drop a folder, or enter a path)
Linux/macOS:
chmod +x scripts/run_zippy.sh
./scripts/run_zippy.sh /path/to/targetCLI:
pip install -e .[auto]
zippy /path/to/target --mode auto --max-size 100 --output ./my_packsAdvanced:
zippy /path/to/target --mode auto --smart
zippy /path/to/target --mode auto-all
zippy /path/to/target --json
zippy /path/to/target --mode direct --pure
zippy /path/to/target --mode context --profile llm_forensic
zippy /path/to/target --mode direct --profile llm_forensic --all --no-heuristic-filterWithout installation (from repo root):
PYTHONPATH=src python -m zippy /path/to/target --mode contextFlags:
--output <dir>: specify where to save archives and reports--size <MB>: max ZIP archive size in MB--max-size <MB>: max uncompressed context budget in MB (for generated context chunks)--json: prints a machine-readable summary JSON to stdout--pure: (direct mode) skip.pycdecompilation/merging--smart: smart filtering mode (default)--all: force scanner include-all mode (bypasses ignore rules); hard excludes and profile-level pruning still apply--heuristic-filter: enable heuristic noise filtering (default)--no-heuristic-filter: disable heuristic noise filtering--include-untracked: include untracked files undersrc/,tests/,docs/,scripts/(default)--tracked-only: strict tracked-only mode (plus minimal allowlist)--follow-symlinks: follow symlinked directories/files during scan--no-follow-symlinks: do not follow symlinks (default)--no-wait: do not wait for user input (useful for automation)--profile <llm_min|llm_forensic>: choose token-minimal or forensic metadata profile--binary-evidence <none|summary|strings|extracted_only|text_extracted|decompiled|disasm>: recovered binary evidence level (profile default when omitted)--tests-policy <none|sample|all>: test payload policy (profile default when omitted)--allow-incomplete-pack: allow output when internal import closure remains incomplete
auto-all behavior:
- bypasses ignore rules
- disables heuristics automatically
- defaults test payload selection to
all - keeps hard excludes for images/visual media, caches, builds, and tool/runtime noise
- keeps non-visual artifacts such as PDFs in the end product via recovered text evidence when possible
Ignore files:
.gitignorekeeps standard Git semantics.zipignoreuses Git-style pattern syntax for ZipPy packing rules.zippyignoreremains supported as a backward-compatible alias
Context/auto run folder:
00_ROUTER.txtFILES.txtPACK_STATS.txtTEST_INDEX.md(when tests policy is notall)DEPENDENCIES_SUMMARY.txt(whenpackage.jsonexists)LLM_README.mdENTRYPOINTS.mdARCHITECTURE_MAP.mdMANIFEST.jsonl(llm_forensic)GIT_SUMMARY.txt(llm_min) orGIT_METADATA.md(llm_forensic)
Direct run folder:
- one or more
direct_project_*.ziparchives GIT_SUMMARY.txt(llm_min) orGIT_METADATA.md(llm_forensic)report.txt,report.jsonSET_INDEX.md(llm_forensic)
Zip-level index:
INDEX_THIS_ZIP.jsonin every archive
Run-level full index:
SET_INDEX.mdinautoanddirectruns (llm_forensic)
LLM chunk format:
- Compact framing:
@@ FILE <path>...@@ END - Lockfiles are excluded in
llm_min(kept inllm_forensic) - Binary/media files are emitted as
@@ BINARYstubs insources/90_BINARY_STUBS.txt
python -m pytest -qZipPy/
|-- src/
|-- tests/
|-- scripts/
|-- docs/
|-- README.md
|-- pyproject.toml
|-- .gitignore
|-- .zipignore
|-- .pre-commit-config.yaml
|-- LICENSE
|-- NOTICE
|-- LEGAL.md
`-- CONTRIBUTING.md
- Artifact Support Matrix:
docs/support_matrix.md - Architecture:
docs/architecture.md - Output contract:
docs/output_contract.md - Contributing:
CONTRIBUTING.md - Legal use:
LEGAL.md
Apache License 2.0 (LICENSE)
