{"id":51079066,"url":"https://github.com/maxgfr/git-recap","last_synced_at":"2026-06-23T16:33:10.894Z","repository":{"id":344185295,"uuid":"1180791892","full_name":"maxgfr/git-recap","owner":"maxgfr","description":"Monthly commit recap generator — AI-powered summaries, bullet points, and commit lists","archived":false,"fork":false,"pushed_at":"2026-04-01T12:02:07.000Z","size":153,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-01T14:07:20.135Z","etag":null,"topics":["ai","anthropic","bash","changelog","cli","commit-history","developer-tools","gemini","git","github","homebrew","mistral","openai"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxgfr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-13T12:17:36.000Z","updated_at":"2026-04-01T12:02:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/maxgfr/git-recap","commit_stats":null,"previous_names":["maxgfr/git-recap"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/maxgfr/git-recap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fgit-recap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fgit-recap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fgit-recap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fgit-recap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxgfr","download_url":"https://codeload.github.com/maxgfr/git-recap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fgit-recap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34698696,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","bash","changelog","cli","commit-history","developer-tools","gemini","git","github","homebrew","mistral","openai"],"created_at":"2026-06-23T16:33:10.441Z","updated_at":"2026-06-23T16:33:10.888Z","avatar_url":"https://github.com/maxgfr.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# git-recap\n\nCommit recap generator — AI-powered summaries, bullet points, and commit lists.\n\nSupports multiple AI providers: **Claude** (CLI \u0026 API), **OpenAI**, **Mistral**, **Gemini**.\n\n## Installation\n\n### Homebrew\n\n```bash\nbrew install maxgfr/tap/git-recap\n```\n\n### Manual\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/maxgfr/git-recap/main/script.sh -o /usr/local/bin/git-recap\nchmod +x /usr/local/bin/git-recap\n```\n\n## Requirements\n\n- `git`\n- `gh` (GitHub CLI, authenticated)\n- One of the AI providers (optional):\n  - `claude` CLI for Claude (default)\n  - `ANTHROPIC_API_KEY` env var for Claude API (without CLI)\n  - `OPENAI_API_KEY` env var for OpenAI/ChatGPT\n  - `MISTRAL_API_KEY` env var for Mistral\n  - `GEMINI_API_KEY` env var for Gemini\n- `jq` (required for `-f json` and `curl` fallback)\n\n## Usage\n\n```\ngit-recap [OPTIONS] \u003crepo\u003e\n\nArguments:\n  \u003crepo\u003e              GitHub URL, owner/repo, repo name, SSH URL, or local path (.)\n\nOptions:\n  -u, --user \u003cuser\u003e       GitHub username (auto-detected via gh)\n  -p, --period \u003cperiod\u003e   Period (default: current-month). Values:\n                           current-month, last-month, current-week, last-week,\n                           current-year, last-year, all, \u003cN\u003e, YYYY-MM, YYYY\n  -m, --mode \u003cmode\u003e       Mode: summary, commits, bullets, all (default: all)\n  -f, --format \u003cformat\u003e   Format: text, markdown, json (default: text)\n  -o, --output \u003cfile\u003e     Write output to file\n  -b, --branch \u003cbranch\u003e   Branch (default: auto-detected)\n  --provider \u003cprovider\u003e   AI provider: claude, claude-api, openai, mistral, gemini (default: claude)\n  --model \u003cmodel\u003e         AI model override (see defaults below)\n  --lang \u003clang\u003e           Language for AI output: en, fr, es, de, ... (default: en)\n  --voice \u003cvoice\u003e         Narrative voice: I, we, neutral, or nominal (default: neutral)\n                          neutral: noun-based English (\"Implementation of...\")\n                          nominal: noun-based French (\"Mise en place de...\")\n  --team                  Team mode: all contributors, grouped by author\n  --all-branches          Fetch commits from all branches\n  --no-ai                 Skip AI generation (summary/bullets)\n  --init                  Initialize configuration\n  -h, --help              Show this help\n  -v, --version           Show version\n```\n\n### Periods\n\n| Period | Description |\n|--------|-------------|\n| `current-month` | Current month (default) |\n| `last-month` | Previous month |\n| `current-week` | Current week (Monday to Sunday) |\n| `last-week` | Previous week |\n| `current-year` | Current year |\n| `last-year` | Previous year |\n| `all` | All commits ever |\n| `\u003cN\u003e` | Last N months |\n| `YYYY-MM` | Specific month (e.g., `2026-01`) |\n| `YYYY` | Specific year (e.g., `2025`) |\n\n### AI Providers \u0026 Default Models\n\n| Provider | Flag | Default Model | Requires |\n|----------|------|---------------|----------|\n| Claude (CLI) | `--provider claude` | `haiku` | `claude` CLI |\n| Claude (API) | `--provider claude-api` | `claude-haiku-4-5-20251001` | `ANTHROPIC_API_KEY` |\n| OpenAI | `--provider openai` | `gpt-4o-mini` | `OPENAI_API_KEY` |\n| Mistral | `--provider mistral` | `mistral-small-latest` | `MISTRAL_API_KEY` |\n| Gemini | `--provider gemini` | `gemini-2.0-flash` | `GEMINI_API_KEY` |\n\nOverride the model with `--model`:\n\n```bash\ngit-recap --provider claude --model sonnet maxgfr/subtool\ngit-recap --provider claude-api --model claude-sonnet-4-6 maxgfr/subtool\ngit-recap --provider openai --model gpt-4o maxgfr/subtool\ngit-recap --provider gemini --model gemini-1.5-pro maxgfr/subtool\n```\n\n### Language \u0026 Voice\n\nControl the language and narrative voice of AI-generated content:\n\n```bash\n# Default: noun-based neutral style (\"Implementation of...\", \"Optimization of...\")\ngit-recap maxgfr/subtool\n\n# First person singular\ngit-recap --voice I maxgfr/subtool\n\n# Team voice (\"we implemented...\", \"we fixed...\")\ngit-recap --voice we maxgfr/subtool\n\n# Noun-based French style (\"Mise en place de...\", \"Optimisation de...\")\ngit-recap --voice nominal maxgfr/subtool\n\n# French language output\ngit-recap --lang fr maxgfr/subtool\n```\n\n### Team Mode\n\nGenerate a recap for all contributors, grouped by author:\n\n```bash\n# Team recap on default branch\ngit-recap --team maxgfr/subtool\n\n# Team recap, all branches, markdown output\ngit-recap --team --all-branches -f markdown -o recap.md maxgfr/subtool\n\n# Team recap on a specific branch\ngit-recap --team -b develop maxgfr/subtool\n```\n\n## Examples\n\n```bash\n# Current month recap\ngit-recap maxgfr/subtool\n\n# Last month, markdown output\ngit-recap -p last-month -f markdown -o recap.md maxgfr/subtool\n\n# Current week recap\ngit-recap -p current-week maxgfr/subtool\n\n# All commits ever\ngit-recap -p all maxgfr/subtool\n\n# Full year 2025\ngit-recap -p 2025 maxgfr/subtool\n\n# Specific month, commits only\ngit-recap -p 2026-01 -m commits maxgfr/subtool\n\n# Use Claude API (without CLI)\ngit-recap --provider claude-api maxgfr/subtool\n\n# Use Mistral AI\ngit-recap --provider mistral maxgfr/subtool\n\n# Use Gemini with a specific model\ngit-recap --provider gemini --model gemini-1.5-pro maxgfr/subtool\n\n# JSON output\ngit-recap -f json -m commits maxgfr/subtool | jq .\n\n# No AI, just raw data\ngit-recap --no-ai -m all maxgfr/subtool\n\n# Team mode\ngit-recap --team maxgfr/subtool\n\n# French recap\ngit-recap --lang fr maxgfr/subtool\n\n# From various URL formats\ngit-recap https://github.com/maxgfr/subtool\ngit-recap git@github.com:maxgfr/subtool.git\n\n# Local repo\ngit-recap .\n\n# Also works as a git subcommand\ngit recap maxgfr/subtool\n```\n\n## Output Formats\n\n### Text (default)\n\n```\n=== Monthly Recap - subtool - March 2026 ===\n\n--- Stats ---\n  Total commits: 34\n  First commit:  2026-03-06\n  Last commit:   2026-03-13\n  Busiest day:   2026-03-08 (14 commits)\n\n--- Summary ---\n[AI-generated summary]\n\n--- Changes ---\n  * [AI-generated bullet points]\n\n--- Commits ---\n  7354b0c - fix: translate text-only (2026-03-13)\n  ...\n```\n\n### Markdown\n\nStats table, AI summary, bullet list, and commit table with clickable hashes linking to GitHub.\n\n### JSON\n\nStructured output with `repo`, `period`, `stats`, `summary`, `bullets[]`, and `commits[]` fields.\n\n## Configuration\n\nRun `git-recap --init` to create `~/.git-recaprc`:\n\n```bash\nGIT_RECAP_USER=\"maxgfr\"\nGIT_RECAP_PROVIDER=\"claude\"\nGIT_RECAP_MODEL=\"\"\nGIT_RECAP_FORMAT=\"text\"\nGIT_RECAP_LANG=\"en\"\nGIT_RECAP_VOICE=\"neutral\"\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxgfr%2Fgit-recap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxgfr%2Fgit-recap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxgfr%2Fgit-recap/lists"}