Automatically post daily Jira progress updates from git commits
Project description
GitPulse
Automatically post daily Jira progress updates from your git commits — no manual standup notes needed.
GitPulse scans your local git repos, groups commits by Jira ticket key, uses Gemini AI to write a concise progress summary, and posts it as a Jira comment. It runs on a schedule via macOS LaunchAgent so it just happens in the background.
How it works
- Scans configured repos for commits in the last 24 hours authored by you
- Groups commits by Jira ticket key (e.g.
PROJ-123) found in branch names or commit messages - Sends commits to Gemini to generate a professional progress summary
- Posts the summary as a comment on the corresponding Jira ticket
- Sends a macOS notification with the run result
Requirements
- macOS (uses LaunchAgent for scheduling and native notifications)
- Python 3.11+
- A Jira account with API token access
- A Google Gemini API key (free tier works — get one at aistudio.google.com)
Installation
pip install gitpulse
Or install from source:
git clone https://github.com/ashishBhatnagar-16/git-pulse.git
cd git-pulse
pip install -e .
Setup
Run the interactive setup wizard once:
gitpulse setup
It will walk you through:
- Jira URL, email, and API token (credentials are validated live)
- Gemini API key (validated live)
- Your git author email
- Local repo paths to scan
- Jira project keys to watch (e.g.
PROJ,BACKEND) - Daily run time (24hr format, default
18:00) - macOS notification preferences
Config is saved to ~/.gitpulse/config.yaml. A LaunchAgent is installed automatically to run on your chosen schedule.
Commands
| Command | Description |
|---|---|
gitpulse run |
Scan repos and post updates now |
gitpulse setup |
Run the setup wizard |
gitpulse status |
Show LaunchAgent status and recent logs |
gitpulse config |
Display current config (secrets masked) |
gitpulse config --set KEY=VALUE |
Update a config value |
gitpulse schedule HH:MM |
Change the daily run time |
gitpulse logs |
Show recent log entries |
gitpulse logs -n 50 |
Show last 50 log entries |
gitpulse uninstall |
Remove all GitPulse data and the LaunchAgent |
Examples
# Run manually right now
gitpulse run
# Change schedule to 5pm
gitpulse schedule 17:00
# Update a single config value
gitpulse config --set git.lookback_hours=48
# Check what's going on
gitpulse status
Configuration reference
Config lives at ~/.gitpulse/config.yaml. Key fields:
jira:
url: https://your-org.atlassian.net
email: you@example.com
token: <your-api-token>
gemini:
api_key: <your-gemini-key>
model: gemini-2.5-flash-lite
git:
author_email: you@example.com
lookback_hours: 24 # how far back to scan commits
repos:
- path: ~/code/my-project
- path: ~/code/another-repo
project_keys:
- PROJ
- BACKEND
schedule:
time: "18:00"
notificationsConfig:
macos: true
on_success: true
on_failure: true
logging:
path: ~/.gitpulse/run.log
level: INFO
retain_days: 30
Jira ticket detection
GitPulse looks for ticket keys matching your configured project_keys in:
- The current branch name (e.g.
feature/PROJ-123-add-login) - Commit messages (e.g.
PROJ-123: fix null pointer)
Commits are grouped per ticket, so if you worked across multiple tickets in a day, each gets its own comment.
Logs
Logs are written to ~/.gitpulse/run.log in JSON format and rotated automatically after retain_days (default 30).
gitpulse logs # last 20 entries
gitpulse logs -n 100 # last 100 entries
License
MIT
Project details
Release history Release notifications | RSS feed
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 gitpulse_jira-0.1.0.tar.gz.
File metadata
- Download URL: gitpulse_jira-0.1.0.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c7a78c63d70485af566603480604ff5d57e089410d512975ee9b42798101fc5
|
|
| MD5 |
2365715693fb01eb7cdaf1aee51b7a4e
|
|
| BLAKE2b-256 |
30049b5c356cb550b41f5192e4cda4ff91b1479bc04fe565d978894254af4e81
|
File details
Details for the file gitpulse_jira-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gitpulse_jira-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf1c5cb37d2653431c94db77180cf2386176c313453934d42eeae4a7101abb10
|
|
| MD5 |
090d3780327d746087a815b4c8559da6
|
|
| BLAKE2b-256 |
6b66e974d64440ae21f298a7e7004e742c01b917d554da75bc3ef3731e56892a
|