oma-recap

Installation
SKILL.md

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

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.

# 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:

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)

## {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.

## {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.

# 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:0018: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
Related skills

More from first-fluke/oh-my-agent

Installs
8
GitHub Stars
918
First Seen
Apr 18, 2026