Command-line tool to select code/docs for LLMs with secret masking and a hard cap on final output size.
Project description
chunkwrap
LLM workflow utility: split large files into chunks with secret masking, state tracking, and custom prompts. Perfect for code review, documentation analysis, and web-only AI access.
Overview
chunkwrap helps you prepare large files for LLM workflows by:
- Splitting them into smaller, prompt-ready chunks
- Redacting secrets via TruffleHog-style regexes
- Tracking progress across invocations
- Supporting multiple output modes: clipboard, stdout, or file
Features
- Configurable chunking: Choose chunk size (default: 10,000 characters)
- Multi-file support: Concatenate multiple inputs into a single stream
- Secret masking: Redact sensitive patterns using configurable regexes
- Prompt wrapping: Use distinct prompts for intermediate and final chunks
- Clipboard integration: Copy output chunk directly to your paste buffer
- Output flexibility: Send wrapped output to stdout or a file
- State tracking: Progress is remembered across runs using a local
.chunkwrap_statefile - Optional prompt suffix: Append boilerplate only to intermediate chunks
Installation
-
To install from source, clone the repository:
git clone https://github.com/magicalbob/chunkwrap.git cd chunkwrap
Or just install from PyPI:
pip install chunkwrap
✅ Tested on Python 3.11+ across macOS, Linux, and Windows 11 (in UTM on ARM64).
🧪 Windows x86 feedback welcome — if you've used it successfully, please let me know!
-
Install dependencies (if installed from source):
pip install -e .
Or for developer tools:
pip install -e ".[dev]"
-
On first run, a default config file will be created at:
- Linux/macOS:
~/.config/chunkwrap/config.json - Windows:
%APPDATA%\chunkwrap\config.json
- Linux/macOS:
Usage
Minimal example
chunkwrap --prompt "Analyze this:" --file myscript.py
Multiple files
chunkwrap --prompt "Review each file:" --file a.py b.md
Secret masking
Place a truffleHogRegexes.json file in the same directory:
{
"AWS": "AKIA[0-9A-Z]{16}",
"Slack": "xox[baprs]-[0-9a-zA-Z]{10,48}"
}
Each match will be replaced with ***MASKED-<KEY>***.
Custom chunk size
chunkwrap --prompt "Summarize section:" --file notes.txt --size 5000
Final chunk prompt
chunkwrap --prompt "Analyze chunk:" --lastprompt "Now summarize everything:" --file long.txt
Disable prompt suffix
chunkwrap --prompt "Chunk:" --file script.py --no-suffix
Show config path
chunkwrap --config-path
Reset state
chunkwrap --reset
Output options
chunkwrap --prompt "Analyze:" --file myfile.txt --output stdout
chunkwrap --prompt "Analyze:" --file myfile.txt --output file --output-file output.txt
--output clipboard(default): copy the output chunk to the clipboard--output stdout: print the output chunk to standard output--output file: write the output chunk to the file specified by--output-file
Output Format
Each chunk is wrapped like:
Your prompt (chunk 2 of 4)
"""
[redacted content]
"""
Final chunk omits the index and uses --lastprompt if provided.
Configuration File
On first run, chunkwrap creates a configuration file at the following path:
- Linux/macOS:
~/.config/chunkwrap/config.json - Windows:
%APPDATA%\chunkwrap\config.json
This file allows you to customize the default behavior of the tool. You can edit it manually to override any of the options below.
Available Options
{
"default_chunk_size": 10000,
"intermediate_chunk_suffix": " Please provide only a brief acknowledgment that you've received this chunk. Save your detailed analysis for the final chunk.",
"final_chunk_suffix": "Please now provide your full, considered response to all previous chunks.",
"output": "clipboard",
"output_file": null
}
-
default_chunk_size: (integer)
Sets the default number of characters per chunk when--sizeis not specified on the command line. -
intermediate_chunk_suffix: (string)
This text is appended to the--prompton all intermediate (non-final) chunks unless the--no-suffixflag is used. -
final_chunk_suffix: (string)
This text is appended to the--lastprompt(or--prompt, if--lastpromptis not used) for the final chunk. It's intended to signal to the LLM that a full, detailed response is now appropriate. -
output: (string: clipboard, stdout, file)
Default output destination for processed chunks. Can be overridden via --output. -
output_file: (string or null)
File path used when output is set to "file". Can be overridden via --output-file.
Example
You might modify your config to create tighter chunking and less verbose suffixes:
{
"default_chunk_size": 5000,
"intermediate_chunk_suffix": "Brief reply only, please.",
"final_chunk_suffix": "Full summary now."
}
These values will be automatically merged with any defaults added in future releases, so missing keys will not cause errors.
Roadmap
Future considerations
- Chunk overlap: Add optional overlap between chunks to preserve context across boundaries
- Output formats: Support for different wrapper formats (XML tags, markdown blocks, etc.)
- Parallel processing: For very large file sets, allow processing multiple chunks simultaneously
- Integration modes: Direct API integration with popular LLM services
Requirements
- Python 3.11+
pyperclip
License
GNU General Public License v3.0 --- see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chunkwrap-2.4.1.tar.gz.
File metadata
- Download URL: chunkwrap-2.4.1.tar.gz
- Upload date:
- Size: 54.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f96f8ccc299f7cd1f071f76ba72d9bf3a9fe5da63a9bace7d87bd17b9756950
|
|
| MD5 |
6538beb3fb1a7005bcf978928d79c57f
|
|
| BLAKE2b-256 |
a216e745b0848f8941116ec075198c4a550e5a33845d52fa1896f761459ff230
|
File details
Details for the file chunkwrap-2.4.1-py3-none-any.whl.
File metadata
- Download URL: chunkwrap-2.4.1-py3-none-any.whl
- Upload date:
- Size: 39.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1435ee478c7b0359523c0213b91e849bd374e2a38b01c2840d067609b6747393
|
|
| MD5 |
4aa96004ce4364d6defddc4a8f7408d4
|
|
| BLAKE2b-256 |
d898d869a53872ab6b76919df15360197205d20f388336c0dc5fd967a14ec662
|