Turn commit history into a human story
Now written in Rust for blazing-fast performance and single-binary distribution!
Binary Name: whisper (not git-whisperer)
Git Whisperer exists to solve a quiet but universal hacker problem: we build things faster than we can explain them. Commits are written for machines and teammates-in-the-moment. Demos, READMEs, and changelogs are written under pressure, often at the last minute. Git Whisperer reads the development history of a project and translates it into plain English: what problem the project tried to solve, how it evolved, and what actually matters. This is not code analysis. This is engineering storytelling.
# Clone the repository
git clone <repository-url>
cd git-whisperer
# Start with Docker (includes MongoDB)
docker-compose -f docker/compose.yaml up -d
# Run setup wizard
docker-compose -f docker/compose.yaml exec app whisper setup
# Analyze a repository
docker-compose -f docker/compose.yaml exec app whisper add <repo-url>
docker-compose -f docker/compose.yaml exec app whisper summary# Clone the repository
git clone <repository-url>
cd git-whisperer
# Build release binary
cargo build --release
# Run setup wizard
./target/release/whisper setup
# Analyze a repository
./target/release/whisper add <repo-url>
./target/release/whisper summary
./target/release/whisper summary# Install globally
cargo install --git https://github.com/atharhive/git-whisperer
# Run setup
whisper setup
# Use
whisper add <repo-url>
whisper summaryGit Whisperer uses environment variables for configuration. The interactive setup creates a .env file with:
GEMINI_API_KEY: Your Google Gemini API key (Get one here)MONGODB_URL: MongoDB connection string- Docker:
mongodb://admin:password@mongodb:27017/(internal container networking) - Local:
mongodb://admin:password@localhost:27017/ - Atlas:
mongodb+srv://user:[email protected]/...
- Docker:
MONGODB_DB: Database name (default:git_whisperer_db)MONGODB_COLLECTION: Collection name (default:project_history)LOG_LEVEL: Logging verbosity (default:INFO)
When using Docker, the setup automatically configures the correct MongoDB URL for container networking. The .env file is mounted into the container.
For development with live code reloading:
docker-compose -f docker/compose.yaml -f docker-compose.override.yaml up -dSee docker/README.md for detailed Docker setup instructions and SETUP_GUIDE.md for manual configuration.
Git Whisperer features a beautiful, colored CLI interface with automatic setup prompting:
whisper --helpAvailable Commands:
whisper setup- Interactive setup wizard (runs automatically if needed)whisper add <repo>- Add/clone and analyze a repositorywhisper summary- Generate full project story from git historywhisper demo- Create a 60-90 second demo scriptwhisper last [count]- Explain recent commits (default: 5)whisper since <ref>- Changes since commit/tag/datewhisper changelog- Generate clean changelog by typewhisper <repo-url>- Quick mode: add repo and show summary
Example Usage:
# Quick analysis
whisper https://github.com/microsoft/vscode
# Step-by-step workflow
whisper add https://github.com/microsoft/vscode
whisper summary
whisper demo
whisper changelog
# Analyze recent work
whisper last 10
whisper since v1.0.0
whisper since "2024-01-01"Features:
- Colored Output: Informative messages with emojis and colors
- Progress Indicators: Real-time spinners during analysis
- Formatted Panels: Clean, bordered output for results
- Error Handling: Clear error messages with troubleshooting tips
- Auto-Setup: Automatically prompts for configuration if not set up
This is a complete rewrite from Python with significant improvements:
| Feature | Python | Rust |
|---|---|---|
| Startup time | ~500ms | ~10ms |
| Distribution | Requires Python + deps | Single binary |
| Performance | Good | Excellent |
| Memory usage | Higher | Lower |
| Cross-platform | pip install | Compile once, run anywhere |
The Rust version is production-ready and can be distributed via cargo install or as a standalone binary.
Git Whisperer includes complete Docker support for easy deployment:
# Full stack with MongoDB
docker-compose -f docker/compose.yaml up -d
# Development with live reloading
docker-compose -f docker/compose.yaml -f docker-compose.override.yaml up -d
# Run commands
docker-compose -f docker/compose.yaml exec app whisper add <repo-url>- Zero Configuration: Everything included and configured
- Database Included: MongoDB runs automatically in container
- Development Ready: Volume mounts for live code reloading
- Production Ready: Multi-stage builds for minimal images
- Cross-Platform: Same setup on Linux, Mac, Windows
See docker/README.md for detailed Docker instructions.
- π Blazing Fast: Written in Rust for maximum performance
- π¦ Single Binary: No dependencies, just download and run
- π³ Docker Ready: Complete containerized setup with MongoDB
- π― Auto-Setup Wizard: First-run configuration with API key and database setup
- π URL Support: Analyze repos directly from GitHub/GitLab URLs or local paths
- π€ AI-Powered Storytelling: Uses Google's Gemini AI to generate human-readable project narratives
- πΎ Flexible Database: Supports local MongoDB (Docker), MongoDB Atlas (cloud), or custom instances
- π¨ Beautiful CLI Interface: Colored output with progress indicators and formatted panels
- π Git History Analysis: Deep analysis of commit patterns and evolution using libgit2
- π§ Smart Configuration: Environment-based configuration with automatic .env generation
- π Secure: Password masking in output, no credentials exposed
- β‘ Quick Mode: Single command to analyze and summarize any repository
# Run in dev mode
cargo run -- /path/to/repo
# Run setup
cargo run -- setup
# Build release
cargo build --release
# Run tests
cargo test
# Check code
cargo check# Start development environment
docker-compose -f docker/compose.yaml -f docker-compose.override.yaml up -d
# Run commands in container
docker-compose -f docker/compose.yaml exec app whisper setup
docker-compose -f docker/compose.yaml exec app whisper add <repo-url>
# View logs
docker-compose -f docker/compose.yaml logs -f app
# Stop services
docker-compose -f docker/compose.yaml down# Build for local testing
docker build -f docker/Dockerfile -t whisper .
# Run locally
docker run -it --rm \
-e GEMINI_API_KEY=your_key \
-e MONGODB_URL=mongodb://host:port \
whisper --helpgit-whisperer/
βββ src/
β βββ main.rs # CLI entry point with clap
β βββ cli/ # Command handlers
β β βββ setup.rs # Interactive setup wizard
β β βββ add.rs # Repository addition
β β βββ analyze.rs # Repository analysis
β β βββ summary.rs # Project summary generation
β β βββ demo.rs # Demo script creation
β β βββ last.rs # Recent commits analysis
β β βββ since.rs # Changes since reference
β β βββ changelog.rs # Changelog generation
β β βββ mod.rs # Module declarations
β βββ repository.rs # Git parsing with libgit2
β βββ gemini.rs # Gemini API client
β βββ storage.rs # MongoDB operations
β βββ config.rs # Configuration management
β βββ workspace.rs # Workspace management
βββ docker/
β βββ compose.yaml # Full stack (app + mongodb)
β βββ core/compose.yaml # App only (requires external mongodb)
β βββ mongo/compose.yaml# MongoDB only
β βββ Dockerfile # Rust application build
β βββ README.md # Docker setup guide
βββ Cargo.toml # Rust dependencies
βββ Cargo.lock # Dependency lock file
βββ .env.example # Environment template
βββ .dockerignore # Docker build exclusions
βββ docker-compose.override.yaml # Development overrides
βββ README.md # This file
βββ SETUP_GUIDE.md # Detailed setup instructions
The original Python implementation is preserved in python-legacy/ for reference. The Rust version is feature-complete and recommended for all use cases.
- Repos grow faster than documentation
- Hackers forget why decisions were made
- Demos become fragile explanations instead of clear narratives
- README files are often written after the fact and feel disconnected from reality
- Git already contains the truth β itβs just fragmented.
Git Whisperer is a local-first AI tool that:
- Reads commit history and PR-like context
- Builds a structured memory of the projectβs evolution
- Uses AI to extract intent, milestones, and impact
- Outputs human-readable artifacts instantly
No CI. No GitHub auth. No cloud dependency for ingestion.
-
Commit History Analyzer
- Parses local git repositories using
git log - Extracts:
- Commit messages
- File change summaries
- Timestamps (chronology matters)
- Ignores raw code to stay fast and reliable
- Parses local git repositories using
-
Project Memory Store (MongoDB)
- Stores commits as structured βeventsβ
- Groups changes into phases:
- Setup
- Feature additions
- Fixes
- Refactors
- This becomes long-term project memory, not just logs
-
AI Story Engine (Gemini)
- From commit history alone, Git Whisperer generates:
- A plain-English project summary
- A clean, readable CHANGELOG
- A 60β90 second demo narration script
- The AI is prompted to explain intent and evolution, not implementation details.
- From commit history alone, Git Whisperer generates:
-
Instant Outputs
- README summary section
CHANGELOG.mddraft- Demo script you can literally read during submission
- User runs Git Whisperer locally inside a git repo
- Example:
whisper add <repo-url>orwhisper summary
- Example:
- Git Whisperer executes:
git log --oneline --stat
- Parses commit messages and change stats
- Parsed data is structured into events and stored in MongoDB:
- Each commit becomes a timeline entry
- Related commits are grouped by intent
- Structured history is sent to Gemini with a storytelling-focused prompt
- Gemini generates:
- Project narrative
- Changelog
- Demo script
- Results are displayed in a beautiful CLI interface
- Works offline
- No GitHub permissions required
- Faster iteration for hackathons
- More honest: focuses on whatβs actually in the repo This also makes Git Whisperer usable in private repos and early-stage projects.
Project Summary βThis project evolved from an initial scaffold into a functional application with authentication, performance optimizations, and a refined developer experience.β
Changelog Entry βAdded JWT-based authentication and refactored middleware to support scaling.β
Demo Script Excerpt βI started with a basic scaffold, then focused on user authentication. After hitting performance issues, I refactored the core logic, which shaped the final architecture.β
- Reads history, not static code
- Explains
why, not justwhat - Designed for demos, hackathons, and open source
- Turns engineering exhaust into clarity
This is a tool hackers immediately understand because it solves their own pain.
- GitHub PR ingestion
- Visual timeline of project evolution
- Team-level narrative (who did what, when)
- Auto-generated release notes per tag
- Continuous βproject memoryβ over time
Git Whisperer turns git history into human stories β READMEs, changelogs, and demo scripts generated straight from how a project actually evolved.