Your pithy python pair programmer CLI tool
Project description
Pithy
Your pithy python pair programmer
Dependencies
- uv
- Python version >=3.12
- pipx
Development Setup
# Install dev dependencies
uv sync --extra dev
# Install pre-commit hooks
uv run pre-commit install
# Run hooks manually on all files (optional)
uv run pre-commit run --all-files
Pre-commit Hooks
This project uses pre-commit hooks for code quality:
- File linting: trailing whitespace, end-of-file fixes, YAML/TOML validation
- Ruff: Python linting and formatting
- Mypy: Static type checking
Hooks run automatically on git commit. To skip hooks temporarily:
git commit --no-verify -m "your message"
Build steps
uv buildpipx install .
Features
Code Summarization
Generate structured markdown summaries of your source code files and directories using AI.
Quick Start
# Summarize a single file
pithy summarize path/to/file.py
# Summarize an entire directory
pithy summarize src/
# Summarize current directory
pithy summarize .
Output Structure
Summaries are written to timestamped subdirectories under .pithy/summarize/ at your git repository root. Each run creates a new timestamp directory in the format YYYY-MM-DD_HH-MM-SS:
.pithy/
└── summarize/
├── 2025-01-15_14-30-22/
│ ├── src/
│ │ ├── app.py.md
│ │ ├── utils.py.md
│ │ └── _meta.md
│ └── README.md.md
└── 2025-01-15_15-45-10/
└── ...
-
File summaries:
.pithy/summarize/<timestamp>/<relative_path>.<ext>.md- Example:
src/app.py→.pithy/summarize/2025-01-15_14-30-22/src/app.py.md - Contains AI-generated summary with key points, purpose, dependencies, and notes
- Example:
-
Directory meta:
.pithy/summarize/<timestamp>/<relative_path>/_meta.md- Aggregates immediate files with one-line synopses
- References subdirectories via links to their
_meta.mdfiles - Generated programmatically (no LLM calls)
Benefits of timestamped directories:
- Track evolution of your codebase over time
- Compare summaries from different points in development
- Never overwrite previous summaries
- Easy to identify when summaries were generated
Options
| Option | Default | Description |
|---|---|---|
path |
. |
File or directory to summarize |
--exclude, -x |
(none) | Glob patterns to exclude (repeatable) |
--depth |
-1 |
Maximum recursion depth (-1 = unlimited) |
--force |
False |
Regenerate even if outputs are up-to-date |
--dry-run |
False |
Show planned actions without writing files |
--max-file-bytes |
120000 |
Read limit per file (caps token usage) |
--quiet |
False |
Reduce console output |
--include-ignored |
False |
Process gitignored files |
Default Exclusions
Gitignored files are automatically excluded by default. The summarize command respects your .gitignore file(s) and skips any files or directories that git would ignore. Use --include-ignored to override this behavior.
Additionally, the following patterns are always excluded:
.git/,.pithy/node_modules/,dist/,build/,.venv/*.lock,*.min.*
Examples
Exclude specific files or patterns:
pithy summarize . --exclude "tests/*" --exclude "*.tmp"
Limit recursion depth:
pithy summarize src/ --depth 2
Force regeneration of all summaries:
pithy summarize . --force
Preview actions without writing:
pithy summarize src/ --dry-run
Quiet mode for scripting:
pithy summarize . --quiet
Include gitignored files:
pithy summarize . --include-ignored
# Processes everything, including files matched by .gitignore
Gitignore Integration
By default, pithy summarize respects your .gitignore files:
- Files and directories matched by
.gitignorepatterns are automatically skipped - Nested
.gitignorefiles are respected (follows git's hierarchy) - Works seamlessly with your existing git workflow
- Use
--include-ignoredto process ignored files when needed (e.g., for documentation of build artifacts)
Example:
# .gitignore contains:
# build/
# *.pyc
# .env
# Default behavior - skips build/, *.pyc, .env
pithy summarize .
# Process everything, including gitignored files
pithy summarize . --include-ignored
Incremental Updates
By default, summaries are only regenerated when the source file is newer than the existing summary. This saves API calls and time on repeated runs. Use --force to override this behavior.
Cost Control
- Only file-level summaries invoke the LLM
- Directory
_meta.mdfiles are generated programmatically (deterministic, free) --max-file-bytescaps the amount of content sent per file (default: 120KB)- Binary files are detected and skipped automatically
API Key Setup
Before using summarization, configure your LLM provider API key:
# For Anthropic Claude
pithy keys set anthropic
# For OpenAI GPT
pithy keys set openai
# Check provider status
pithy keys providers
Project details
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 pithy_cli-0.1.4.tar.gz.
File metadata
- Download URL: pithy_cli-0.1.4.tar.gz
- Upload date:
- Size: 38.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.31
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0546fb9e588b06a1685d41ac283736ed43fce5d73495b26a6f19b75175774a07
|
|
| MD5 |
efb4c004fd16027767c3058b5a8f55f5
|
|
| BLAKE2b-256 |
a4cc3f8dca5e6d8bc18628148f37737015553d757a1947ef134c167908ff52bb
|
File details
Details for the file pithy_cli-0.1.4-py3-none-any.whl.
File metadata
- Download URL: pithy_cli-0.1.4-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.31
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad7918cd5d724698bb31303bf406e3041af796253b278a5b507bd070af82a811
|
|
| MD5 |
ec844057342e2ba2003656d64dc83f46
|
|
| BLAKE2b-256 |
a7f4464d1c87502a1109a843a80abcaeb897ca3cebb07a5507fd54bdafab653f
|