Skip to content
Back to skills

Summarize Meeting

ASecurity

Summarize a Kleoth meeting in this Claude Code session — you read the transcript and write summary.json (the MeetingSummary shape) and summary.md yourself, with no API key and no API cost. Use when the user wants a Kleoth meeting directory summarized here, by you, rather than through one of Kleoth's AI providers.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
ai-agentsswiftapi

Works with

  • claude code
  • cli
  • api

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add ofcRS/kleoth --skill summarize-meeting --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Summarize Meeting?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Summarize Meeting
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ofcrs-summarize-meeting/badge)](https://www.skillsdirectory.com/skills/ofcrs-summarize-meeting)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: summarize-meeting
description: Summarize a Kleoth meeting in this Claude Code session — you read the transcript and write summary.json (the MeetingSummary shape) and summary.md yourself, with no API key and no API cost. Use when the user wants a Kleoth meeting directory summarized here, by you, rather than through one of Kleoth's AI providers.
---

# Summarize a Kleoth meeting in this session

Kleoth normally summarizes through an AI provider: the app does it after each transcription, and
the CLI does it with `kleoth summarize <dir> --provider openrouter|local|claude-code|codex`. This
skill is the in-session alternative: **you — Claude Code — read the transcript and write the
summary directly**. The output is interchangeable with the provider path: the same `summary.json`
shape, and a `summary.md` rendered by the `kleoth` CLI.

## Input

A **meeting directory** written by the Kleoth app or by `kleoth transcribe`
(`meeting-yyyy-MM-dd-HHmmss/`, containing `transcript.md` and `meta.json`). The directory path is
the argument to this skill. If none was provided, ask the user which meeting to summarize.

If the meeting has no transcript yet (neither `transcript.md` nor `transcript.json`: the app shows
it as *Untranscribed*; it may already have a `meta.json`, which the app writes when the recording
stops), stop and say so: transcribe it first, in the app or with the
`transcribe-meeting` skill.

## Steps

1. **Read the transcript.** Read `<dir>/transcript.md` (speaker-tagged `Name: text` lines). If it
   is missing but `<dir>/transcript.json` exists, reconstruct the dialogue from its `words[]` /
   `transcripts[]` and `speaker_id`. Read `<dir>/meta.json` for the title, date and participants,
   and `<dir>/speakers.json` (if present) for the display names.

2. **Summarize**, following the same rules as Kleoth's `Summarizer`:
   - Write every value (title, tldr, overview, each task, each highlight) in the **same language
     as the transcript**. Don't translate it into English or anything else.
   - Keep speaker and owner names exactly as they appear in the transcript.
   - Be precise and factual. **Do not invent information.** If something is ambiguous, say so.
   - Include an action item only if a concrete task was stated or clearly implied. If the owner is
     unstated use `"unassigned"`; if the due date is unstated use `null`.

3. **Write `<dir>/summary.json`** with the Write tool: valid JSON, **snake_case keys exactly as
   below** (what `MeetingStore` and `kleoth render` read), every key present. No prose, no
   markdown fences:
   ```json
   {
     "title": "a concise, specific 4-8 word meeting title",
     "tldr": "2-4 sentences capturing the essence of the meeting",
     "overview": "a detailed, faithful account of the whole meeting as flowing prose in several paragraphs separated by blank lines (no bullets, no headings): what was discussed and in what order, the context and reasoning, concrete specifics (names, numbers, dates, agreements and who made them), and how things were left",
     "action_items": [{ "owner": "name or \"unassigned\"", "task": "...", "due": "date or null" }],
     "per_speaker_highlights": [{ "speaker": "name", "highlights": ["their most important statements, positions and commitments"] }]
   }
   ```
   `action_items` may be an empty array; the other values may not be blank.

4. **Record who wrote it.** In `<dir>/meta.json`, set `"summary_provider": "claude-code"` and
   remove `"model"`, so the meeting doesn't credit an earlier model with this summary. Leave every
   other field as it is.

5. **Render `summary.md`** with the CLI (no API call, so the formatting matches the provider path
   exactly):
   ```sh
   swift run kleoth render <dir>          # add --no-transcript to omit the transcript appendix
   ```
   If the binary isn't built yet, run `swift build` first.

6. **Report**: tell the user the summary was written in this Claude Code session at no API cost,
   and print the path to `summary.md`.

## Notes

- No API key is needed; this uses your Claude Code session.
- `kleoth summarize <dir> --provider claude-code` gets a summary from Claude Code without this
  session: it runs `claude -p` in isolation and writes the same files.
- Never read or echo `.env` or any API key.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…