pacto
Archive an idle project folder into a single zip that lives inside it, so the folder stays visible as a marker of what used to be there.
C:\dev\old-project\ -> C:\dev\old-project\
src/ node_modules/ ... old-project.zip
pacto unzip old-project puts it all back and deletes the zip.
Nothing is deleted until the archive has been verified: every entry is
CRC-checked and the file count and total size are compared against the folder.
If a locked file interrupts the delete, re-running pacto zip finds the good
archive and finishes the job instead of re-zipping.
Install
pip install "pacto[all]" # CLI, interactive picker, MCP server
pip install pacto # core only, no picker and no MCP
pipx install "pacto[all]" # or uv tool install, to keep it off your global env
From a checkout:
pip install -e ".[all]"
Use
pacto # interactive picker, ranked by best candidate
pacto scan # list folders: size, idle days, git state
pacto scan --min-size 500MB --idle 60d
pacto zip old-project # archive it, then delete the contents
pacto unzip old-project # restore in place
Where it works:
- the current directory when it is inside the default root (
C:\dev) - otherwise the default root itself
--root D:\projectsoverrides both, andPACTO_ROOTchanges the default
Only the direct children of that folder are candidates.
scan ranks by size × idle days, so a big folder untouched for a year
comes before a big one you edited yesterday. Idle time is the newest file
anywhere in the tree.
Safety
- The archive is verified before anything is deleted.
- Git repos with uncommitted or unpushed work are flagged, then archived anyway.
.gitgoes into the zip, so history survives. - Symlinks and Windows junctions are skipped, not followed, and are listed in the output.
unziprefuses to run when the folder holds anything besides the archive, and rejects entries whose paths point outside it.- Empty directories are preserved through the round trip.
- pacto never archives its own checkout.
MCP server
claude mcp add pacto -- pacto-mcp
Or in claude_desktop_config.json:
{ "mcpServers": { "pacto": { "command": "pacto-mcp" } } }
Tools: scan, suggest, zip, unzip. zip is gated: without
confirm=true it only reports what would happen, so an agent cannot delete a
project by accident.
Notes for synced folders
If the root is inside Dropbox, OneDrive or Syncthing, archiving deletes the
files on every synced machine and then copies the zip to all of them. That is
the intent, but it is a big transfer. For Syncthing, add (?d)*.zip.partial to
.stignore on each machine so a half-written archive never syncs.
Tests
python tests/test_core.py
MIT licensed.
Metadata
Release files for pacto 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pacto-0.1.1.tar.gz | 11.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pacto-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.4 kB
Release files / pacto-0.1.1.tar.gz
| Download URL | pacto-0.1.1.tar.gz |
|---|---|
| Size | 11.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57c39551c85144128f3e5b998d9da9f5b845aeff9c3ee58d9aea5311c07abe69
|
|
BLAKE2b-256 checksum How to use checksums |
3b9209b215cc85d636a4c6928ed407ebd866300847b23767bd498785cafdfc9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency logRelease files / pacto-0.1.1-py3-none-any.whl
| Download URL | pacto-0.1.1-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c04b3dac33d0a711a2b549c1a44f62779e078f11ded865863a6424abeb08855e
|
|
BLAKE2b-256 checksum How to use checksums |
28dede9ae4f63d86da13699faa9d0445b63504213aa2edbff51f088418fdcfc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency log