Skip to main content

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:\projects overrides both, and PACTO_ROOT changes 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. .git goes into the zip, so history survives.
  • Symlinks and Windows junctions are skipped, not followed, and are listed in the output.
  • unzip refuses 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.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pacto 0.1.0
File Size Uploaded
pacto-0.1.0.tar.gz 11.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pacto 0.1.0
File Interpreter ABI Platform
pacto-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 22.8 kB

Release files / pacto-0.1.0.tar.gz

Download URL pacto-0.1.0.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4d45ead11ef232bbce7fdc403684d7fa584a7fd3ca965a46957bb7f3007a1875
BLAKE2b-256 checksum
How to use checksums
02668f5b615d8ed480adc14940ce189f576f4d4b0c6731bd99575fa66f66ad9d
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 17, 2026.

Transparency log

Release files / pacto-0.1.0-py3-none-any.whl

Download URL pacto-0.1.0-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c2dae94fbf3a0596044fe99d72fe29a4a1bd73039c1996c09ad4216c6dfdc235
BLAKE2b-256 checksum
How to use checksums
231235971907981031925fa282be4eb9a192713a30f6e390c030faaba93bcd7d
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 17, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page