Skip to main content

dirpluck

dirpluck is a tool that records decisions about which files belong together in TOML and builds a ZIP Archive from that declaration. The CLI is the primary entry point, and the same invocation model is also available through a small Python API.

Rather than copying everything around it like a backup, it is intended to repeatedly gather only the files needed for a particular purpose, such as review, handoff, research, recurring work, or a working context handled with an LLM.

Where it fits

Gather the material you need into one Archive

Material spread across multiple directories can be collected into one Archive when it serves the same purpose.

For example, a review package might bring together:

  • the source of the project being reviewed
  • review guidelines
  • reference material

You can gather only fixed material, or attach fixed material to a Target selected at runtime.

Apply the same extraction to different Targets

If you record decisions such as "collect README, src/, and tests/" or "exclude secrets and generated files" in a Configuration, you can reuse the same rules while changing the project being handled.

The Scope from which a Target is selected is defined separately, so the Configuration and the actual project tree do not need to live in the same place.

Inclusion references and Target references that could denote either a file or a directory declare the type in their syntax. No trailing / means file; a trailing / means directory. Dirpluck does not infer that type from the current filesystem. For example, Selection "pyproject.toml" denotes a file while "src/" denotes a directory. Target references follow the same principle: a default-Scope directory Target is written as ./project/, while a named-Scope directory Target can be written as work/project/. If a may entry misses because the opposite entry type exists, its optional semantics do not change. Dirpluck records a source-labelled diagnostic suggesting the relevant trailing-/ adjustment; the CLI prints it as a warning in both normal builds and --preview, while the Python API returns it in RunResult.warnings. A must entry keeps its normal build-time error semantics, but preview reports the same hint as a warning while leaving the entry missing. Literal-Target errors include the same type-marker hint.

ignore is intentionally broader on the exclusion side. A normal ignore string or concrete ignore path without a trailing / excludes matching files and directories; a trailing / narrows it to directories only. Use structured { match = "..." } when an exclusion must be file-only.

Directory-Target must, may, and ignore strings use a restricted Selection pattern language so directory-tree traversal stays predictable. When a Selection needs more expressive matching, { match = "..." } can apply a Python-compatible regular expression to full root-relative paths. Scope <...> Target selectors also use regular expressions, but only to filter normalized eligible direct-child Target names. This separation is intentional. See Configuration selection and Targets and Cases for details.

Why keep it declarative

For a one-off task, creating a ZIP by hand may be simpler.

dirpluck is useful when the same kind of decision needs to be made again later.

A Configuration lets you record:

  • what must always be included
  • what should be included only when present
  • what should be excluded
  • which fixed material should be collected alongside the Target

without relying on shell history, conversation history, or human memory.

Use --preview to inspect what would be selected from the current filesystem before writing an Archive.

When Configurations need to be shared across related uses, one Configuration can also reuse another as its base. See docs/configuration/INDEX.md for authoring guidance and docs/specification/INDEX.md for exact composition and resolution rules.

Before sharing an Archive

dirpluck does not infer which files contain sensitive information.

Before creating an Archive that will leave the local environment, use --preview to review its contents and explicitly exclude anything that should not be included.

For example, .env files, private keys, credentials, and project-specific sensitive files may use different names and locations in different projects.

See docs/TRUST.md for the trust boundary around Configurations and filesystem operations, including absolute paths, overwrite behavior, and Archives intended to leave the local environment.

Getting started

The shortest end-to-end walkthrough is docs/GETTING_STARTED.md. It creates a default.dirpluck, previews the planned Archive contents, and then builds the Archive.

For Configuration fields and composition, see Configuration guide. For CLI options and Invocation Templates, see CLI guide.

Installation

The current version is 0.13.0.

Python 3.11 or later is required.

pip install dirpluck
dirpluck --version

dirpluck has no third-party runtime dependencies.

Documentation

The documentation is separated by purpose:

License

dirpluck is released under the MIT License.

See LICENSE for details.

Metadata

Release files for dirpluck 0.13.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 dirpluck 0.13.0
File Size Uploaded
dirpluck-0.13.0.tar.gz 310.1 kB Details

Built distribution (wheel)

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

Total release size: 448.0 kB

Release files / dirpluck-0.13.0.tar.gz

Download URL dirpluck-0.13.0.tar.gz
Size 310.1 kB
Tags Source
SHA-256 checksum
How to use checksums
7e248643b5ba22c0577c7c39f3f09251e8847a966a30f2135ff95a205c9579ef
BLAKE2b-256 checksum
How to use checksums
918c6a0998143cebe1b7e2b7e1cc166cba427ba18264f091aa5ca8da30a8c954
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / dirpluck-0.13.0-py3-none-any.whl

Download URL dirpluck-0.13.0-py3-none-any.whl
Size 137.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0f784e975d4599b4ee5338eca69d7d4e6860e635fb6ccbcf500eedea361b967f
BLAKE2b-256 checksum
How to use checksums
971bf8e273c4017d41598fbdb599559933b738c013203dd75e3327704df9fda1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release history Release notifications | RSS feed

0.14.0

2 release files

0.13.1

2 release files

This release

0.13.0 This release

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

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