Skip to main content

StandupGuy (standupguy)

Kill the tracker trap without leaking data.

Engineers lose up to 2/5 of the week to reporting busywork — duplicating updates across Jira, Slack, Confluence, and slide decks. AI note-takers are cloud SaaS with data-leak concerns. standupguy is the local-first alternative: it reads your git history (ground truth) and drafts your standup notes, weekly summary, and sprint-review bullets as Markdown. Your history never leaves your laptop — except to the model endpoint you configure (Ollama on localhost by default).

Install

Zero dependencies — Python 3.10+ stdlib only.

git clone <repo> && cd standupguy
# no-install alias (run from the repo root):
alias standupguy="python3 -m standupguy"
# or: pip install .   # provides the `standupguy` console script

Usage

standupguy                          # yesterday's digest (deterministic, offline)
standupguy --week                   # last 7 days
standupguy --sprint                 # sprint-review bullets
standupguy --since 2026-10-01       # custom range
standupguy --draft                  # LLM prose: Yesterday / Today / Blockers
standupguy --format json            # machine-readable digest
standupguy --author "teammate@co"   # filter (default: your git user)
standupguy --all                    # everyone
standupguy --push-slack             # POST to AUTOSTANDUP_SLACK_WEBHOOK
standupguy mcp                      # MCP server on stdio
standupguy serve                    # HTTP bridge for Activepieces / workflow tools

Activepieces

standupguy serve exposes the digest over HTTP so Activepieces' HTTP Request piece can pull it on a schedule:

standupguy serve --root /path/to/repo   # localhost:8765
  • GET /digest?since=yesterday&author=&format=json|markdown
  • GET /week?author=&format=json|markdown
  • GET /health

workflows/activepieces-standup-digest.json is a documented flow definition (it's a human-readable spec, not a native export — build it in Activepieces by adding the steps in order; the file carries the exact config for each step and setup notes at the top): weekday 9am Schedule trigger → HTTP Request → Branch (skip quiet days) → Slack. Connect your Slack connection, set the channel, done. The same serve endpoints work from n8n's HTTP Request node too — nothing in the bridge is platform-specific.

Example output:

# Standup — myrepo
_since 2026-10-14_

## Shipped
### Features
- add login flow (1 files) `6785c87`
### Fixes
- null pointer on logout (1 files) `8ce2731`

## In progress (uncommitted)
- `wip.py`

## Blockers
_none reported — fill in yours_

How it works

  • Digest mode (default): pure Python, fully offline. Commits grouped by conventional-commit prefix (feat/fix/docs/refactor/test/chore); merge commits surface as shipped PRs; git status feeds the In-progress section.
  • Draft mode (--draft): sends the digest to your local model via an OpenAI-compatible endpoint and gets back Yesterday/Today/Blockers prose. Configure with env vars (Ollama defaults shown):
export AUTOSTANDUP_BASE_URL="http://localhost:11434/v1"
export AUTOSTANDUP_MODEL="llama3.1"
# freellmapi works too — it's OpenAI-compatible:
export AUTOSTANDUP_BASE_URL="https://api.freellmapi.com/v1"
export AUTOSTANDUP_API_KEY="<your key>"
  • MCP server: exposes what_did_i_ship {since?, author?, root?} so your coding agent can answer "what did I ship this week" from local git.
  • Push: --push-slack POSTs the Markdown to a Slack incoming webhook (URL from the flag or AUTOSTANDUP_SLACK_WEBHOOK). Commit-derived text is sanitized before posting: control characters stripped, lines truncated at 500 chars, and @channel/@here/@everyone neutralized to [at]channel-style text — so a hostile commit message can never ping the channel or inject payloads. Jira/Confluence push is intentionally not built in — paste the Markdown, keep your tokens out of another integration.

Date handling

Bare dates and words are normalized to explicit midnight (2026-10-14 → 2026-10-14 00:00, yesterday → yesterday 00:00) because git's date parser treats them as noon — silently dropping morning commits.

Tests

python3 -m unittest discover -s tests   # 36 tests, no network, no model

License

TBD

Metadata

Release files for standupguy 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for standupguy 0.1.0
File Size Uploaded Provenance
standupguy-0.1.0.tar.gz 19.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for standupguy 0.1.0
File Interpreter ABI Platform
standupguy-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.8 kB

Release files / standupguy-0.1.0.tar.gz

Download URL standupguy-0.1.0.tar.gz
Size 19.9 kB
Tags Source
SHA-256 checksum
How to use checksums
8479a99a2c12685a2c9d6d99e11282e2bb5833745a48fd6278798d9c9d903d40
BLAKE2b-256 checksum
How to use checksums
6210d8b7f82d1200809dddd743bb153f4d062b9552835bd01fced33537f6f43a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / standupguy-0.1.0-py3-none-any.whl

Download URL standupguy-0.1.0-py3-none-any.whl
Size 16.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da3433f82ca89da63dce5428b1b3f5db6bef0f7c6e840bf1185fad1a7671ac80
BLAKE2b-256 checksum
How to use checksums
a517bc0636db9aad6f07dd9d21a8c80bce8fc85303b164c6c3c4b49beab442bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for standupguy 0.1.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page