Skip to main content

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 build
  • pipx 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
  • Directory meta: .pithy/summarize/<timestamp>/<relative_path>/_meta.md

    • Aggregates immediate files with one-line synopses
    • References subdirectories via links to their _meta.md files
    • 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 .gitignore patterns are automatically skipped
  • Nested .gitignore files are respected (follows git's hierarchy)
  • Works seamlessly with your existing git workflow
  • Use --include-ignored to 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.md files are generated programmatically (deterministic, free)
  • --max-file-bytes caps 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

pithy_cli-0.1.4.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pithy_cli-0.1.4-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

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

Hashes for pithy_cli-0.1.4.tar.gz
Algorithm Hash digest
SHA256 0546fb9e588b06a1685d41ac283736ed43fce5d73495b26a6f19b75175774a07
MD5 efb4c004fd16027767c3058b5a8f55f5
BLAKE2b-256 a4cc3f8dca5e6d8bc18628148f37737015553d757a1947ef134c167908ff52bb

See more details on using hashes here.

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

Hashes for pithy_cli-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ad7918cd5d724698bb31303bf406e3041af796253b278a5b507bd070af82a811
MD5 ec844057342e2ba2003656d64dc83f46
BLAKE2b-256 a7f4464d1c87502a1109a843a80abcaeb897ca3cebb07a5507fd54bdafab653f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page