Let your coding agent report to you.
English | δΈζ
aireport reads your local coding agent session logs, analyzes patterns, and generates daily reports and 90-day Wrapped summaries β complete with friction analysis, habit profiling, and a "Vibe Coder" personality type.
It works with Claude Code, Gemini CLI, OpenCode, and Codex. All data stays on your machine.
-
Daily Reports β Structured summaries of what you built, what broke, and what you learned. Includes "Experience Slices": distilled problem-solving stories with transferable insights.
Feishu Slack 

-
90-Day Wrapped β A Spotify Wrapped-style retrospective with session stats, hourly heatmaps, top projects, and a "Vibe Coder" personality classification (e.g. Night Ghost, Flash Raider, Refactor Addict).
-
Friction Detection β Automatically identifies retry loops, error cascades, and direction switches in your sessions.
-
Startup Reminders β Claude Code's SessionStart hook nudges you to generate yesterday's report. OpenCode gets a custom
ai_report_checktool you can invoke in chat. -
Webhook Push β Send reports to Slack, Discord, Feishu, DingTalk, WeCom, or Microsoft Teams.
-
Multi-Language β Reports generated in English, Chinese, Japanese, Korean, or Russian.
Highly Recommended: paste this into your coding agent
(Claude Code, Gemini CLI, OpenCode, or Codex) and let it handle everything:
Install and configure ai-report-to-me by following the instructions here:
curl -s https://raw.githubusercontent.com/FakeHank/ai-report-to-me/main/docs/agent-install.md
The agent will read the guide, ask for your preferences (language, webhooks), install the package, and configure hooks automatically.
Or install manually:
curl -fsSL https://raw.githubusercontent.com/FakeHank/ai-report-to-me/main/scripts/install.sh | bashOnce installed, use the built-in commands directly in your coding agent session:
| CLI Tool | Daily Report | 90-Day Wrapped |
|---|---|---|
| Claude Code | /dayreport |
/qtreport |
| Gemini CLI | /dayreport |
/qtreport |
| OpenCode | /dayreport |
/qtreport |
| Codex | $dayreport |
$qtreport |
βββββββββββββββ βββββββββββββββββ ββββββββββββββ βββββββββββββ
β Adapters ββββββΆβ Aggregator ββββββΆβ Analyzers ββββββΆβ Renderer β
β β β β β β β β
β Claude Code β β Group by day β β Friction β β Markdown β
β Gemini CLI β β Project stats β β Habits β β Vibe Card β
β OpenCode β β Token usage β β Vibe Type β β Webhooks β
β Codex β β Tool calls β β Suggestions β β β
βββββββββββββββ βββββββββββββββββ ββββββββββββββ βββββββββββββ
- Adapters parse session logs from each CLI tool into a normalized format
- Aggregator groups sessions by date and computes per-project breakdowns
- Analyzers detect friction patterns, classify coding habits, and extract personality signals
- Renderer produces Markdown reports (with LLM-generated narrative) and PNG vibe cards
Reports are saved to ~/.ai-report/reports/ with embedded metadata for incremental regeneration β only new sessions trigger a rebuild.
| CLI Tool | Session Source | Hook Support | Notes |
|---|---|---|---|
| Claude Code | ~/.claude/projects/ |
Full | SessionStart hook (startup check) |
| Gemini CLI | ~/.gemini/tmp/ |
None | Session data read directly |
| OpenCode | ~/.local/share/opencode/opencode.db |
Partial | Plugin with custom ai_report_check tool |
| Codex | ~/.codex/sessions/ |
None | Session data read directly |
aireport install # interactive setup (select sources, language, webhooks)
aireport daily # generate daily report(s)
aireport daily --date 2026-02-28 # generate for a specific date
aireport wrapped # generate 90-day Wrapped
aireport wrapped --days 30 # custom period
aireport status # show installation status and session stats
aireport config # manage configuration
aireport uninstall # remove hooks and clean up
Configuration lives at ~/.ai-report/config.json and is created during aireport install:
When a webhook URL is configured, reports are automatically pushed after generation. Each platform gets a native-formatted message:
| Platform | Format |
|---|---|
| Slack | Block Kit |
| Discord | Embeds |
| Feishu / Lark | Interactive Card |
| DingTalk | ActionCard |
| WeCom | Markdown |
| Microsoft Teams | Adaptive Card |
All session data is read from your local filesystem and never leaves your machine. Reports are stored locally at ~/.ai-report/. The optional privacy_mode setting redacts file paths and code content from report data before it reaches the LLM.
Webhooks send the generated report text (not raw session data) to your configured endpoints.
git clone https://github.com/FakeHank/ai-report-to-me.git
cd ai-report-to-me
pnpm install
pnpm dev -- status # run any CLI command in dev mode
pnpm test # run tests
pnpm typecheck # type-check without emittingThe codebase is ESM-only TypeScript (Node 20+, strict mode). Tests use Vitest.
{ "output_lang": "en", // en | zh | ja | ko | ru "sources": ["claude-code"], // which CLIs to read from "daily_reminder": true, // show startup reminder in Claude Code "backfill_limit": 7, // days to look back for pending reports "privacy_mode": false, // redact file paths and content in reports "wrapped_days": 90, // default period for Wrapped "webhooks": { "slack_url": "", // Slack Incoming Webhook URL "discord_url": "", // Discord Webhook URL "feishu_url": "", // Feishu/Lark Bot Webhook URL "dingtalk_url": "", // DingTalk Robot Webhook URL "wecom_url": "", // WeCom/WeChat Work Bot URL "teams_url": "" // Microsoft Teams Webhook URL } }