Maintainer Pulse
Maintainer Pulse turns GitHub issue and pull request data into a short, actionable maintenance report. It is built for open-source maintainers who need to answer:
- What should I review before the next release?
- Which pull requests are stuck?
- Which issues have not received a maintainer response?
- What can a new contributor safely pick up?
The tool is offline-first. You can run it against exported GitHub JSON without a token, or fetch live issue and pull request data from the GitHub API.
Features
- Release blocker, stuck pull request, stale item, first-response, and quick-win queues.
- Milestone-aware release blocker grouping for release planning.
- Markdown, HTML, JSON, and CSV output.
- Reusable GitHub Action for scheduled reports.
- No runtime dependencies.
- Deterministic scoring that can be reviewed and changed by maintainers.
- GitHub Actions CI and fixture-based tests.
Install
From PyPI:
python -m pip install oss-maintainer-pulse
From GitHub:
python -m pip install git+https://github.com/alibert99/oss-maintainer-pulse.git
From a local checkout:
python -m pip install .
For local development:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
pytest
Usage
Analyze an exported GitHub issues payload:
maintainer-pulse example/project \
--input examples/github_items.json \
--output maintainer-pulse-report.md
Fetch live data from GitHub:
export GITHUB_TOKEN=github_pat_your_token_here
maintainer-pulse octo-org/octo-repo --format html --output report.html
Generate machine-readable output:
maintainer-pulse octo-org/octo-repo --format json
Generate spreadsheet-friendly output:
maintainer-pulse octo-org/octo-repo --format csv --output maintainer-pulse-report.csv
See examples/sample-report.md for a generated report. See examples/sample-report.csv for spreadsheet-friendly output.
GitHub Action
Run Maintainer Pulse weekly and upload a report artifact:
name: Maintainer Pulse
on:
workflow_dispatch:
schedule:
- cron: "17 9 * * 1"
permissions:
contents: read
issues: read
pull-requests: read
jobs:
report:
runs-on: ubuntu-latest
steps:
- uses: alibert99/oss-maintainer-pulse@v0.1.5
id: pulse
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
output: maintainer-pulse-report.md
- uses: actions/upload-artifact@v7
with:
name: maintainer-pulse-report
path: ${{ steps.pulse.outputs.report-path }}
See docs/github-action.md for all inputs.
Distribution
- GitHub Action listing draft: docs/marketplace-listing.md
- PyPI publishing guide: docs/pypi-publishing.md
Output Queues
Maintainer Pulse groups work into five queues:
release_blockers: open issues and pull requests with labels such assecurity,regression,critical,release,p0, orp1. Markdown reports group release blockers by GitHub milestone when milestone data is present.stuck_pull_requests: pull requests idle for at least seven days or labeled for review.response_debt: open items with zero comments and at least three idle days.stale_items: open items idle beyond the configured stale threshold.quick_wins: small contributor-friendly issues labeledgood first issue,help wanted,documentation, orstarter.
CSV output includes one row per queued item with the queue name, item number, type, state, labels, author, comment count, idle days, age days, timestamps, and URL.
Project Status
This project is alpha. The CLI and report fields may change as maintainers test it against real repositories.
Metadata
Release files for oss-maintainer-pulse 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| oss_maintainer_pulse-0.1.5.tar.gz | 14.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| oss_maintainer_pulse-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.6 kB
Release files / oss_maintainer_pulse-0.1.5.tar.gz
| Download URL | oss_maintainer_pulse-0.1.5.tar.gz |
|---|---|
| Size | 14.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a5b5bdf7e4af7f63ce61b14f0d3472efda50f773c664f1d34bf8d04f8843981a
|
|
BLAKE2b-256 checksum How to use checksums |
bec515d190c2cb3b6ec9cc1c21759fbf7fc344e7247e74094828cd58eca2c5dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 30, 2026.
Transparency logRelease files / oss_maintainer_pulse-0.1.5-py3-none-any.whl
| Download URL | oss_maintainer_pulse-0.1.5-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
305ebbbf25a189085d68405dc18b1cbd6e69f2d015276d0bf346defec9ab100c
|
|
BLAKE2b-256 checksum How to use checksums |
3453f3b57acdb64f268da41c206c2d6e12f2561517c7a7585be4396e38eef845
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 30, 2026.
Transparency log