#21867: feat: add email-brief extension for Gmail inbox summary via Telegram
docs
gateway
cli
commands
agents
size: XL
Cluster:
Mattermost and Zulip Enhancements
## Summary
- Add `extensions/email-brief/` — a new OpenClaw plugin extension that provides Gmail inbox summarization via Telegram
- Users invoke `/email_brief [filters] [period]` to get AI-powered email summaries directly in Telegram
- Designed for Cloud.ru FM models (GLM-4.7, Qwen3-Coder) that cannot do tool calls — all data fetching is in TypeScript, LLM used only for text generation (`disableTools: true`)
### Key features
- **Flexible argument parsing:** `/email_brief`, `/email_brief 7d`, `/email_brief from:user@company.com 3d`, `/email_brief urgent`
- **Service Account JWT auth** via `node:crypto` (zero npm dependencies) with token caching and 55-min refresh margin
- **Gmail API v1** integration: `messages.list` + `messages.get` with concurrent fetching (cap 5), 401 retry
- **MIME body extraction**: recursive multipart traversal, base64url decode, HTML stripping
- **LLM summarization** via `runEmbeddedPiAgent` with anti-injection prompt, urgency scoring, language detection
- **Graceful fallback** to metadata list on LLM failure
- **Telegram chunking** for long responses (3900 char threshold)
- **Security**: PEM/Bearer token sanitization on all error paths, `requireAuth: true`
### Files added (13)
| File | LOC | Purpose |
|------|-----|---------|
| `openclaw.plugin.json` | — | Plugin manifest with configSchema |
| `types.ts` | 48 | Shared types (ParsedArgs, EmailMessage, GmailConfig) |
| `parse-args.ts` | 59 | Argument parser (period + filters) |
| `gmail-query.ts` | 35 | Gmail search query builder |
| `gmail-body.ts` | 173 | MIME traversal, body extraction, HTML stripping |
| `gmail-client.ts` | 304 | JWT auth, token caching, Gmail API client |
| `summarize.ts` | 177 | Prompt builder, LLM invocation, fallback |
| `index.ts` | 126 | Command handler orchestration |
| `*.test.ts` (6 files) | 1371 | 78 tests across 6 test files |
### Quality artifacts (in `docs/features/email-brief/`)
Full 9-step quality cycle completed:
1. ADR (DDD) with 5 invariants
2. Shift-left testing: 19 requirements, 38 test cases, 10 risks
3. QCSD ideation: HTSM + SFDIPOT + Testability (gate: GO)
4. Milestones plan: 5 milestones, 3 parallelization waves
5. Requirements validation: 19/19 traced, CONDITIONAL YES → conditions met
6. Implementation: 5 milestones, 78 tests passing
7. Brutal honesty review: Grade B (82/100), 0 Critical issues
8. Final gap check: all gaps resolved
9. **QE Queen: SHIP (85/100)**
## Test plan
- [x] `pnpm test extensions/email-brief/` — 78/78 tests pass
- [x] `pnpm tsgo` — 0 type errors in email-brief
- [x] `pnpm lint` — 0 errors, 0 warnings
- [ ] Manual test with real Gmail account + Service Account via Telegram
- [ ] Manual test with Cloud.ru FM models (GLM-4.7, Qwen3-Coder)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Most Similar PRs
#20647: feat: add exec-passthrough extension for direct output delivery
by okuyam2y · 2026-02-19
64.0%
#21505: Fastmail CLI — Fastmail email, contacts, and calendar tools (36 too...
by omarshahine · 2026-02-20
63.9%
#20155: feat(telegram): add tg-network-guard transcript status + reply flow
by artemgetmann · 2026-02-18
63.4%
#21981: feat: Add email channel plugin with channelRuntime support
by guxiaobo · 2026-02-20
63.2%
#22260: feat(extensions/deltachat): add Delta.Chat channel extension
by alanz · 2026-02-20
63.1%
#20904: feat: Cloud.ru FM proxy, MAX Messenger extension, AI Fabric integra...
by dzhechko · 2026-02-19
62.8%
#14419: feat(extensions): add telegram-files Mini App
by audichuang · 2026-02-12
62.7%
#7088: feat: add Camb AI extension
by neilruaro-camb · 2026-02-02
62.3%
#9199: feat: Add Cisco Webex Teams channel plugin
by chrharri · 2026-02-05
61.7%
#23739: feat: Docling RAG extension — native document processing for OpenClaw
by ihsanmokhlisse · 2026-02-22
61.7%