Open source · free to use

Replace your morning Jira ritual
with one daily summary.

Pipeline health, what's critical, what's stuck, who's overloaded, what came in overnight — delivered to your inbox, Slack channel, or Teams channel before standup. No dashboards to babysit. No saved-filter gymnastics. No servers to run.

⚡ ~22 min/month of Actions runtime 🤖 ~20 min setup with an LLM 📦 Zero servers
🤖 The friendly handoff is ready

Don't write a single line of YAML.
Paste this prompt into your favorite AI and answer the questions.

The repo's README contains an interactive handoff prompt that turns any LLM into your personal setup assistant. It asks you which Jira board, what time of morning, which channels, then configures everything end-to-end. Setup time: ~20 minutes. No coding required.

1

Click the button

Copies the full handoff prompt to your clipboard (≈ 15 KB of step-by-step setup instructions).

2

Open your favorite AI

Claude Code, Codex, Cursor, Windsurf, Claude.ai, ChatGPT, Gemini — any of them, with your forked repo accessible.

3

Paste & reply

It interviews you in plain English. Answer the questions ("which board?", "what time?", "Slack or email?"). Done.

Works with: Claude Code Codex Cursor Windsurf Claude.ai ChatGPT Gemini any LLM with file access

The 8am ritual you didn't ask for

Every PM, EM, and support lead does the same dance each morning. This replaces it.

Before

  • Open Jira. Wait for it to load.
  • Click through five saved filters.
  • Mentally aggregate the numbers.
  • Miss the ticket that's been stuck for 47 days.
  • Walk into standup hoping nothing leaked overnight.

After

  • Open your inbox / Slack / Teams.
  • One digest. All sections. Pre-sorted by what matters.
  • Stuck items, new intake, customer-impact — already surfaced.
  • Click any section title to drill into the live Jira search.
  • Walk into standup ready.

What actually lands in your inbox

Below is a real rendering — generated by the production code — with mock data. Every section header in your real digest is a click-through to the live Jira search.

Switch channels with the tabs above · hover the purple dots for what's configurable · click anything to see the JQL behind it. Company names and tickets are fabricated.

Built for the morning use case

Opinionated where it should be. Configurable where you need it.

🎯

Six composable section types

KPI counters, prioritized issue lists, status breakdowns, stuck-item detection, recent intake, custom-field groupings. Mix any combination.

📬

Multi-channel delivery

Gmail (draft or send), generic SMTP, Slack (bot token or webhook), Microsoft Teams (incoming webhook). Use one or all.

🔗

Live deep-links everywhere

Every section title and KPI counter is a click-through to a live Jira search. No screenshots, no stale snapshots — always current.

🏷️

Custom-field aware

Write customer_account in JQL — the script swaps in customfield_XXXXX at runtime. Discover your IDs and alias them once.

🐢

Stuck-item detection

Uses the Jira changelog to compute true dwell time — no false positives from unrelated edits. Threshold-configurable per section.

⚠️

Failure notifications

If the run dies or every channel errors, get pinged on Slack DM or email. The script doesn't fail silently.

🕗

Schedule that actually fires on time

GitHub Actions cron can run 1–3 hours late. Workflow accepts repository_dispatch from cron-job.org for second-precision delivery.

📄

Browser-hosted full HTML

Optional. Each day's digest uploaded as a GitHub gist so Slack/Teams messages link to the full HTML when chat clients truncate.

🔒

No vendor lock-in

One YAML config drives everything. Swap Jira instances, projects, recipients, channels by editing a single file. Zero code changes.

Six section types, infinite arrangements

Each one is a building block. A typical digest uses four to eight.

kpi

Counters at a glance

Row of numbers — Open, New (7d), Closed (7d), Critical, whatever. Each count links to its underlying Jira search.

list

Sorted issue table

Table from any JQL. Pick columns, sort, limit. Best for "critical & high priority" and similar.

recent

What came in overnight

Same shape as list — names the intent. Pair with a time-window JQL like created >= -24h.

status_breakdown

Pipeline flow snapshot

Count per active status. Shows zero-count statuses too, so stalls jump out.

stuck

Bottleneck detection

Issues with no status change in N+ days. Uses Jira's changelog for accurate dwell time.

group_by

Grouped by any field

Group by assignee for bandwidth, by customer for impact, by component for hot-spot detection — works on any custom field.

Setup in three steps

Built for non-technical users. An LLM handles the wiring; you just answer questions.

  1. Fork the repo

    One click on GitHub. The fork is yours — your secrets stay in your account, your config stays in your repo.

  2. Paste the interactive handoff prompt into your favorite AI assistant

    The README contains a self-contained interview prompt. Paste it into any LLM with file access and it walks you through Jira credentials, custom-field discovery, section selection, delivery channels, secret setup, and scheduling — answering plain-English questions like "which board?" and "what time of morning?"

    Claude Code Codex Cursor Windsurf Claude.ai ChatGPT Gemini
  3. Answer the interview. Push. Done.

    Typical end-to-end time: 20–30 minutes, most of which is waiting on OAuth consent screens. Tomorrow morning, the first digest arrives.

Tech stack

Minimal dependencies. Boring tech, by design.

Python 3.11 GitHub Actions Jira Cloud REST v3 PyYAML OAuth 2.0 (Gmail) smtplib (SMTP) Slack Block Kit Teams MessageCard GitHub Gist API htmlpreview.github.io requests

Ready to skip the morning ritual?

Fork it, paste the handoff prompt into your favorite LLM, and let it interview you. ~20 minutes from now you're done.