A CLI tool that analyzes git commits from multiple repositories, categorizes them, and generates summaries in markdown.
npm install -g devrecgit clone <repo-url>
cd devrec
npm install
npm run build
npm linkdrec --version-
Initialize configuration
drec init
This command interactively prompts you for:
- Your git email addresses
- Repository paths to track
- Main branch name (default: main)
- Branch scanning strategy (all or remote-only)
-
View today's commits
drec today
-
Generate markdown summary
drec today --format markdown --summary
Create or update configuration interactively.
Show commits from today (since midnight).
Show commits from yesterday (previous calendar day).
Show commits from current week (Monday to today). On Monday, shows the previous complete week (last Monday to Sunday).
Show commits from current sprint. Sprint length is configurable (default: 2 weeks).
Show all commits from all time.
All time-range commands support these flags:
| Flag | Description | Values | Default |
|---|---|---|---|
--format |
Output format | plain, markdown |
plain |
--color |
Color mode | always, never, auto |
auto |
--summary |
Show statistics | (boolean) | false |
--repo |
Filter by repository | Repository name from config | All |
--category |
Filter by category | Category name | All |
--highlight |
Boost matching commits to Key Contributions | Branch name or keyword | None |
Commits are automatically categorized based on prefixes:
- Feature:
feat:,feat/,feat( - Bug:
fix:,fix/,fix(,bugfix: - Refactor:
refactor:,refactor/,refactor( - Test:
test:,test/,test( - Chore:
chore:,chore/,chore( - Documentation:
docs:,docs/,docs(,documentation: - CI:
ci:,ci/,ci( - Other: Commits not matching any pattern
Merge commits are automatically excluded. Jira-formatted commits (such as
Resolve TICKET-123 "message") are handled by extracting the actual message for
categorization.
Commits are automatically scored by importance and grouped into tiers:
- Key Contributions (high + medium importance) -- surfaced at the top of the output
- Other Work (low importance) -- shown below
Importance is determined by two signals:
| Signal | High | Medium | Low |
|---|---|---|---|
| Keywords in message | security, critical, breaking, hotfix, vulnerability, urgent |
performance, migration, deprecate, regression |
Everything else |
| Merge status | -- | Merged to main | Unmerged |
The two signals combine: a medium keyword on a merged commit becomes high. A commit with no keywords that is merged becomes medium.
The --highlight flag lets you manually override scoring: any commit whose message
or branch matches the given value is force-boosted to high importance, bypassing the
automatic scoring logic. The match is a case-insensitive substring check.
Tier headers only appear when both tiers have commits. When all commits land in a single tier, the output renders flat without tier headers.
Within the output, merged commits are prefixed with a checkmark, while unmerged commits show their branch name.
Configuration is stored at ~/.config/devrec/config.json.
{
"authorEmails": ["your-email@example.com"],
"branchStrategy": "all",
"groupBy": "repo",
"locale": "en-US",
"mainBranch": "main",
"repos": [
{
"name": "my-project",
"path": "/Users/you/projects/my-project"
}
],
"sprintLength": 2
}See docs/sample-config.json for a complete example.
| Field | Type | Description | Default |
|---|---|---|---|
authorEmails |
string[] |
Git email addresses to filter commits | Required |
repos |
Repo[] |
Repositories to scan | Required |
sprintLength |
number |
Sprint duration in weeks | 2 |
groupBy |
"repo" | "category" |
How to group output | "repo" |
locale |
string |
Date formatting locale (for example, en-US, it-IT) |
"en-US" |
mainBranch |
string |
Main branch name for merge tracking | "main" |
branchStrategy |
"all" | "remote" |
Which branches to scan | "all" |
{
"mainBranch": "main",
"name": "project-name",
"path": "/absolute/path/to/repo"
}The mainBranch field is optional and overrides the global mainBranch setting for
this specific repository.
all: Scans all local and remote branchesremote: Scans only remote branches (commits pushed to origin)
Use remote to exclude local work-in-progress commits.
drec today --format markdown --summaryOutput:
# Dev Log: February 17, 2026
## Summary
- **Total Commits**: 8
- **Merged to Main**: 5
- **In Progress**: 3
- **Key Contributions**: 3
- **Repositories**: api, web-app
---
## Key Contributions
### Feature
#### api
- ✓ [a1b2c3d] feat: add user authentication endpoint _(8:30 AM)_
- ✓ [d4e5f6a] feat: implement rate limiting _(9:15 AM)_
### Bug
#### api
- [g7h8i9j] fix: critical login vulnerability `[hotfix/login]` _(10:00 AM)_
## Other Work
### Feature
#### web-app
- [k0l1m2n] feat: add dashboard analytics `[feature/analytics]` _(11:00 AM)_
### Chore
#### api
- ✓ [o3p4q5r] chore: update dependencies _(2:00 PM)_drec sprint --format markdown --summary > sprint-summary.mdThis command generates a markdown file containing all commits from the current sprint.
drec week --repo apiShows only commits from the repository named "api" in your config.
drec week --repo api --category FeatureShows only Feature commits from the "api" repository.
drec week --highlight feat/authBoosts any commit whose message or branch contains "feat/auth" to Key Contributions, regardless of automatic scoring.
drec all --summaryShows all commits from all repositories with summary statistics.
Error: Config file not found
Solution: Run drec init to create configuration.
Error: Not a git repository
Solution: Ensure the path in config.json points to a git repository root
(contains .git/).
Possible causes:
- Author email doesn't match git config
- No commits in date range
- Wrong branch strategy (try
"all"instead of"remote")
Check your git email:
git config user.emailEnsure this email matches one of the emails in your authorEmails array.
Error: No read permission
Solution: Check file permissions on repository path:
ls -la /path/to/repoSolution: Force color mode:
drec today --color alwaysSolutions:
- Use
--repoflag to filter to specific repositories - Use
branchStrategy: "remote"in config to scan fewer branches - Reduce date range with specific commands (today versus all)
Built with:
- Commander.js - CLI framework
- simple-git - Git operations
- Zod - Schema validation
- Inquirer - Interactive prompts
- Chalk - Terminal colors