---
name: oma-recap
description: Analyze conversation histories from multiple AI tools (Claude, Codex, Gemini, Qwen, Cursor) and generate themed daily/period work summaries. Filter by date or time window.
---

# AI Tool Conversation History Summary

Analyze AI tool conversation histories for a given period and generate themed work summaries.

## Scheduling

### Goal
Collect AI tool conversation history for a date or window and synthesize it into a themed, project-oriented recap with saved Markdown output.

### Intent signature
- User asks for daily recap, weekly/monthly summary, standup notes, work log, tool usage pattern, or AI conversation history analysis.
- User wants conversation histories grouped by work content rather than raw chronological logs.

### When to use
- Summarizing a day or period of work activity
- Understanding the overall flow of work across multiple AI tools
- Analyzing tool-switching patterns between sessions
- Preparing daily standups, weekly retros, or work logs

### When NOT to use
- Git commit-based code change retrospective -> use `oma retro`
- Real-time agent monitoring -> use `oma dashboard`
- Productivity metrics -> use `oma stats`

### Expected inputs
- Date, relative date, time window, or tool filter
- Conversation history available through `oma recap --json` or fallback sources
- Desired daily or multi-day recap scope

### Expected outputs
- Markdown recap saved to `.agents/results/recap/{date}.md` or range filename
- TL;DR, overview, themes/projects, miscellaneous or side projects, and tool usage patterns
- User-facing summary in configured response language

### Dependencies
- `oma recap --json`
- Optional Claude fallback history at `~/.claude/history.jsonl`
- `.agents/oma-config.yaml` for language behavior

### Control-flow features
- Branches by date resolution, window length, available tool history, and daily vs multi-day output shape
- Reads local history data and writes Markdown recap files
- Groups by content, not by tool

## Structural Flow

### Entry
1. Resolve requested date or window.
2. Collect normalized conversation history.
3. Decide daily versus multi-day output structure.

### Scenes
1. **PREPARE**: Resolve time range and tool filters.
2. **ACQUIRE**: Collect history through CLI or fallback.
3. **REASON**: Group by content, infer themes/projects, decisions, artifacts, and tool-switching patterns.
4. **ACT**: Write recap Markdown in the required format.
5. **VERIFY**: Check TL;DR, grouping, language, and output path.
6. **FINALIZE**: Save and display summary.

### Transitions
- If no date is specified, use today.
- If window is 3 days or longer, group by project instead of day chronology.
- If CLI is unavailable, use Claude fallback only and report scope limits.
- If tasks are under threshold, group them into Miscellaneous or Side Projects.

### Failure and recovery
- If history is unavailable, report missing source and requested range.
- If timestamps are ambiguous, use configured timezone and state assumption.
- If extracted data is sparse, produce a concise recap and note limited coverage.

### Exit
- Success: recap file exists and summary is displayed.
- Partial success: missing tools/history or fallback-only coverage is explicit.

## Logical Operations

### Actions
| Action | SSL primitive | Evidence |
|--------|---------------|----------|
| Resolve date/window | `INFER` | Natural-language date rules |
| Collect history | `CALL_TOOL` | `oma recap --json` or `jq` fallback |
| Read extracted records | `READ` | Conversation history |
| Group themes/projects | `INFER` | Time/content grouping rules |
| Validate output shape | `VALIDATE` | Daily or multi-day template |
| Write recap | `WRITE` | `.agents/results/recap/` |
| Report summary | `NOTIFY` | Displayed recap |

### Tools and instruments
- `oma recap --json`
- `jq` fallback for Claude history
- Markdown output templates

### Canonical command path
```bash
oma recap --json
oma recap --window 7d --json
oma recap --date YYYY-MM-DD --json
```

### Resource scope
| Scope | Resource target |
|-------|-----------------|
| `LOCAL_FS` | Conversation history and recap output files |
| `PROCESS` | `oma recap`, `jq`, date commands |
| `USER_DATA` | Conversation prompts and project activity |
| `MEMORY` | Theme grouping and summary notes |

### Preconditions
- Requested time range can be resolved.
- At least one history source is available.

### Effects and side effects
- Writes recap Markdown under `.agents/results/recap/`.
- Reads local conversation history data.

### Guardrails

### Process

### 1. Resolve Date

Determine the target date or window from the user's natural language input. Default is today.

**Resolution rules:**
- Relative day references (today, yesterday, day before yesterday, etc.) → calculate `--date YYYY-MM-DD`
- Specific date mentions (month + day, or full date) → convert to `--date YYYY-MM-DD`
- Relative weekday references (last Monday, this Friday, etc.) → calculate the date
- Period references (this week, last 3 days, past 2 weeks, etc.) → convert to `--window Nd`
- No date specified → today (`--window 1d`)

### 2. Collect Data

Extract normalized conversation history via CLI.

```bash
# Default (today, all tools)
oma recap --json

# Time window
oma recap --window 7d --json

# Specific date
oma recap --date 2026-04-10 --json

# Tool filter
oma recap --tool claude,gemini --json
```

**Fallback when CLI is not installed** — process Claude history only via inline jq:

```bash
TARGET_DATE=$(date +%Y-%m-%d)
TZ=Asia/Seoul start_ts=$(date -j -f "%Y-%m-%d %H:%M:%S" "${TARGET_DATE} 00:00:00" +%s)000
end_ts=$((start_ts + 86400000))

TZ=Asia/Seoul jq -r --argjson start "$start_ts" --argjson end "$end_ts" '
  select(.timestamp >= $start and .timestamp < $end and .display != null and .display != "") |
  {
    time: (.timestamp / 1000 | localtime | strftime("%H:%M")),
    project: (.project | split("/") | .[-1]),
    prompt: (.display | gsub("\n"; " ") | if length > 150 then .[0:150] + "..." else . end)
  }
' ~/.claude/history.jsonl
```

### 3. Theme Analysis and Grouping

Read **all** extracted data and analyze with the following criteria:

**Grouping rules:**
- Only classify as a separate theme if the work spans **15+ minutes** (based on timestamp gaps and prompt count)
- Merge consecutive prompts on the same topic into one theme
- Collect sub-15-minute tasks into a "Miscellaneous" section
- Group by **work content**, not by tool

**Cross-tool analysis:**
- Track workflow when multiple tools are used in the same time window
- Example: "Designed in Gemini -> Implemented in Claude -> Reviewed in Codex"
- Derive insights from tool-switching patterns

**Extract from each theme:**
- Core work performed
- Key decisions made
- Tool combinations used
- Artifacts produced (docs, code, config, etc.)

### 4. Output Format

Save results to `.agents/results/recap/{date}.md` and display simultaneously.

Output in the following markdown format. **Response language follows `language` setting in `.agents/oma-config.yaml`.**

#### Daily format (1d or specific date)

```markdown
## {date} Recap

> **TL;DR**
> - {What I accomplished 1 — project name + outcome}
> - {What I accomplished 2}
> - {What I accomplished 3}

### Overview
2-3 sentence summary of the day. Written from "I did X" perspective.
Focus on outcomes and progress, not tool ratios or technical details.

### {Theme 1} (AM 09:36~11:30)
- Core work performed
- Key decisions
- 2-4 bullets per theme

### {Theme 2} (PM 13:33~15:21)
- Core work performed
- Key decisions

### Miscellaneous
- Brief summary of sub-15-minute tasks

### Tool Usage Patterns
- Tool usage ratios and primary purposes
- Notable tool-switching patterns
```

#### Multi-day format (3d, 7d, 2w, 30d)

For any multi-day window, use a **project-driven structure** like a sprint report.
Focus on what was accomplished per project, not day-by-day chronology.

```markdown
## {start} ~ {end} Monthly Recap

> **TL;DR**
> - {What I accomplished 1 — project name + outcome}
> - {What I accomplished 2}
> - {What I accomplished 3}

### Overview
3-5 sentence narrative of the month. Major focus shifts week-by-week,
key milestones achieved, and overall direction. Written from "I did X" perspective.

### {Project A}
What this project is, what was accomplished during the period.
- Key milestone or deliverable 1
- Key milestone or deliverable 2
- Key decision made
- Current status (shipped / in progress / blocked)

### {Project B}
- ...

### Side Projects
Projects with <30 prompts, summarized briefly.
- {project}: one-line summary
- {project}: one-line summary

### Tool Usage Patterns
- Tool usage ratios and how they evolved over the month
- Notable shifts (e.g., "started using Codex mid-month")
```

**Multi-day grouping rules:**
- Group by **project**, not by date
- Order projects by activity volume (most active first)
- Each project section: what it is, what was accomplished, key decisions, current status
- Do NOT include prompt counts or date ranges in project headers — those are internal metrics
- Small projects (<30 prompts) go into "Side Projects" as one-liners
- Overview should read like a sprint report narrative, not a log

### 5. Save Results

Save to `.agents/results/recap/{date}.md`.
For window ranges, use `{start-date}~{end-date}.md` format.

```bash
# Example paths
.agents/results/recap/2026-04-12.md
.agents/results/recap/2026-04-06~2026-04-12.md
```

### Core Rules

1. **TL;DR required**: Top 3 lines of "what I accomplished". Project name + outcome. No tool names or technical details.
2. **Overview**: After TL;DR, describe the flow. Start with "I" as subject.
3. **Daily**: themes by time block (15+ min). Rest goes to "Miscellaneous".
4. **Multi-day (3d+)**: sections by project, ordered by activity. Read like a sprint report, not a daily log.
5. **2-4 bullets per theme/project**: Concise essentials only. Don't enumerate every step.
6. **Themes by content**: Group by actual work, not by tool.
7. **Time range (daily only)**: `(AM/PM/Evening HH:MM~HH:MM)`. AM: ~12:00, PM: 12:00~18:00, Evening: 18:00~.
8. **Save results**: Write markdown to `.agents/results/recap/`.
9. **Response language**: Follows `language` setting in `.agents/oma-config.yaml` if configured.
10. **No em dashes**: Use commas, periods, or parentheses instead of `—` (em dash).

## References

- Recap CLI: `oma recap --json`
- Output directory: `.agents/results/recap/`
- Language config: `.agents/oma-config.yaml`
- Claude fallback history: `~/.claude/history.jsonl`
