Single-purpose CLI that gathers work activity from GitHub, Gmail, Calendar, and Linear into structured JSON. Designed as a data layer for AI-powered work automation — Claude (or any consumer) synthesizes the raw data into morning briefs, weekly digests, and status reports.
Each tool must be installed and authenticated before running Kora.
make install # builds and installs to ~/.local/binkora --since 8h # activity from last 8 hours
kora --since 168h # activity from last 7 days (week)Output is JSON to stdout:
{
"fetched_at": "2026-03-29T08:00:00Z",
"since": "8h0m0s",
"sources": {
"github": { "review_requests": [...], "authored_prs": [...], ... },
"gmail": { "messages": [...] },
"calendar": { "events": {...} },
"linear": { "assigned_issues": {...}, "cycles": {...}, ... }
}
}Exits 0 on success, 1 if any source fails. Errors go to stderr as JSON.
make test # unit tests
make test-integration # real CLI tools (requires auth)
make test-e2e # compiled binary tests
make lint # golangci-lintKora delegates to existing CLI tools rather than reimplementing API clients:
| Source | CLI Tool | Data |
|---|---|---|
| GitHub | gh |
PRs to review, authored PRs, assigned issues |
| Gmail | gws |
Unread messages with metadata |
| Calendar | gws |
Events in time window |
| Linear | linear + linear api |
Assigned issues, cycles, comments, completions |
All sources are fetched in parallel. Each source runs its own sub-queries in parallel too.