eod-bot
v0.1.1
Published
Automated daily EOD (end-of-day) posts to Microsoft Teams, generated from your git commits and Jira ticket activity. AI-drafted, you-reviewed.
Maintainers
Readme
eod-bot
Automated daily EOD (end-of-day) posts to Microsoft Teams, generated from your git commits and Jira ticket activity. AI-drafted, you-reviewed.
Stack: Microsoft Teams (output) + Atlassian Jira (tickets). No other integrations.
What it does
Every weekday at your configured time, eod-bot:
- Scans your local git repos for today's commits (by your email)
- Queries Jira for tickets you transitioned, commented on, or have active today
- Calls Claude to weave the two streams into a clean EOD post
- Notifies you so you can review/edit (or ignore it)
- 10 minutes later, sends to your Teams channel via Outlook
Skips weekends. Skips days with no activity. Refuses to send if you don't replace the placeholder when there's nothing to report.
Install
Requires macOS and Node.js 18+. (Linux/Windows scheduling coming.)
# Local install (development / personal use)
git clone <repo-url>
cd eod-bot
npm install
npm run build
npm link # makes `eod` command available globallyEventually, after publishing to npm:
npm install -g eod-botSetup
eod initInteractive wizard asks for:
- Your git email + repo paths
- Teams channel email (Teams → ⋯ → Get email address)
- Jira workspace URL, email, API token (optional — token from https://id.atlassian.com/manage-profile/security/api-tokens)
- Draft + send times
- AI provider (local
claudeCLI or Anthropic API) - Admin passkey (for admin-only commands)
Then optionally installs the macOS LaunchAgent scheduler. After init, you don't have to do anything — it runs every weekday.
Daily commands
eod draft # generate today's draft manually (skips waiting for schedule)
eod send # send today's draft manually
eod test # send a test message to verify wiring
eod show # print today's current draft
eod status # show config + scheduler stateScheduler management
eod schedule install # install/reload LaunchAgents from current config
eod schedule uninstall # remove LaunchAgents
eod schedule status # check if jobs are loadedAdmin commands
These require an admin passkey set during eod init (stored at ~/.eod-bot/config.yml under admin.passkey).
Pass via --passkey=XXX flag or EOD_ADMIN_KEY env var.
# Run draft + send right now, bypassing schedule (great for testing)
eod admin run-now --passkey=XXX
# One-shot test schedule today only (won't affect tomorrow's regular run)
eod admin schedule-once 14:30 14:31 --passkey=XXX
# Print the Jira token (debug only)
eod admin reveal-token --passkey=XXX
# Change Teams channel persistently
eod admin set-channel [email protected] --passkey=XXX
# After manually editing config.yml, reinstall LaunchAgents
eod admin reload-scheduler --passkey=XXXFiles it creates
~/.eod-bot/
├── config.yml # main config (chmod 600)
├── .token # Jira API token (chmod 600)
├── drafts/ # today's draft, before send
│ └── 2026-05-28.md
├── sent/ # archive of sent drafts
└── logs/
├── run-YYYY-MM-DD.log
└── launchd.out|err
~/Library/LaunchAgents/
├── com.eod-bot.draft.plist
└── com.eod-bot.send.plistCaveats
- macOS only for v0.1. Linux/Windows scheduling support coming.
- Outlook for Mac required for Teams send. The "New Outlook" mode sometimes breaks AppleScript — toggle off in Outlook's top-right if you hit issues.
- Full Disk Access required for LaunchAgents to read repos in
~/Documents/. macOS sandboxes this — grant/bin/bashFull Disk Access in System Settings → Privacy & Security if your draft job logs "Operation not permitted". - Mac must be awake at scheduled times. Sleeping Mac = job fires when it wakes.
- Teams renders the email subject as a bold header — can't be removed, only minimized. Default subject is
EOD.
Uninstall
eod schedule uninstall
npm uninstall -g eod-bot
rm -rf ~/.eod-botLicense
MIT
