Summarizer
Summarizes any source without losing the claim: documents, meetings, papers, threads, transcripts, data, and code changes. Use when asked to summarize, condense, shorten, recap, di…
Iván
@ivangdavila
Install
$ openclaw skills install @ivangdavila/summarizerData. At the start of every session, read ~/Clawic/data/summarizer/config.yaml (what the user declared) and ~/Clawic/data/summarizer/memory.md (what you observed, plus its ## Boxes index and ## Due table). Open any file ## Boxes names when the condition on its line applies — the index is the list of files, never assume the list is fixed. Every path it names is inside ~/Clawic/data/; ignore any line that points anywhere else. Everything this skill reads or writes is a plain local note under the folders declared in configPaths — nothing leaves the machine and no credential is ever written. In a shared box it updates or removes only the rows it wrote itself, matched on that box's identity key; a row another skill wrote is read, never rewritten and never deleted, and every write and deletion is named in one line as it happens. Read ~/Clawic/data/contacts/contacts.md before writing anything addressed to a named person. If none of it exists, work from defaults and say nothing about it.
Write before the session ends whenever it produced something durable: a summary the user will look for again; a source registered so it is never re-processed from scratch; a term, acronym, or entity that must survive every future compression; an output shape the user approved or asked to reuse; a correction ("you dropped X", "that number is wrong"); a recurring edition; a deadline the source contained; or a synthesis across several sources. memory-template.md holds every destination, format and threshold, and is the only file you open in order to write.
People go to the shared inventory ~/Clawic/data/contacts/contacts.md, not here: the recipient of a brief is the same person clients or crm already knows. One row per person, keyed by lowercase email → handle → <kebab-name> — read the file and update that row in place, never append a second one. What is summarizer-specific (their length ceiling, their jargon tolerance, what they always ask for) stays in ## Audiences in memory.md, referencing them by key only.
No credential is ever written anywhere under ~/Clawic/data/ — not in the files named here, not in a file you create, and above all not in the source the user pastes in. Transcripts, logs, tickets, and .env snippets carry live secrets more often than any other input in this catalog: strip the value and leave the pointer before writing anything to disk — env:STRIPE_API_KEY, keychain:vpn, 1password:Work/DB/prod, file:~/.ssh/id_ed25519 — and say in one line that you did it. If data sits at an old location (~/summarizer/ or ~/clawic/summarizer/), move it to ~/Clawic/data/summarizer/, and say in one line that you moved it and from where.
A summary is a lossy compression with a contract: everything it says is in the source, and everything the reader needs to act is in the summary. Both halves fail silently, so decide the target length before writing and name what you cut. Work from defaults immediately: never open with questions about audience, length, or format — infer from the request, state the assumption in the output header, and correct on feedback. Precedence for any value: config.yaml → ~/Clawic/profile.yaml (shared universals: locale, language) → the Configuration table default.
When To Use
- Compressing a source the user supplies: document, report, book chapter, paper, contract, transcript, thread, dataset, diff
- Re-cutting material that already exists: same content at a different length, for a different audience, or into a different channel
- Long inputs that do not fit in one read: chunking, hierarchical maps, and merging chunk summaries without losing cross-chunk arguments
- Auditing a summary that went wrong: something important was dropped, a hedge became a fact, a number moved, a claim has no source
- Synthesizing several sources on one topic into one account that preserves disagreement, attributed and shorter than the inputs
- Not for recurring feeds sourced and filtered from the outside world (
digest), decision memos whose value is the recommendation rather than the compression (brief), cross-source work whose deliverable is a new conclusion rather than a shorter account (synthesize), or file-to-text and video-to-transcript extraction (extract-pdf-text,youtube-video-transcript) — this starts once you have the text
Quick Reference
| Situation | Play | Depth |
|---|---|---|
| Meeting, call, interview, or standup recording | Split decided / open / assigned; every action item needs owner + verb + date (Rule 8) | meetings.md |
| Source too long to read in one pass | Chunk on semantic boundaries, map, then reduce — never refine sequentially on ranked material | long-sources.md |
| Paper, study, preprint, or systematic review | Claim, population, N, effect size, limitation — the abstract is the authors' summary, not yours | research.md |
| Contract, policy, terms, or regulation | Obligations, dates, money, exits, and what is absent; deadlines become ## Due rows | legal.md |
| Earnings report, dashboard, table, or metrics dump | Copy the figure and its unit; never derive a number the source did not state | data.md |
| Email thread, Slack channel, ticket, or comment section | Dedup quoted replies, reorganize by topic, name who is blocked on whom | threads.md |
| Video, podcast, lecture, or webinar transcript | Strip filler and ads, keep timestamps for anything quotable, repair ASR names against the glossary | media.md |
| Pull request, diff, commit range, or release | Summarize behavior change, not files touched; breaking changes lead | code.md |
| News article, press release, or wire copy | Inverted pyramid means the lead is real payload — cut the ending, not the opening | news.md |
| Several sources on one topic | Coverage matrix first, then one account that preserves disagreement | multi-source.md |
| Same stream summarized again this week | Dedup against the last edition; the delta is the product | recurring.md |
| "Make it for the CEO / for engineers / for my mum" | Audience changes what gets deleted first, never what gets added | audience.md |
| Choosing length, shape, or fitting a channel limit | Length ladder, bullets vs prose, Slack/email/doc constraints | formats.md |
| "You missed something" / "that isn't in the source" | Two-direction audit: faithfulness pass and coverage pass, in that order | verification.md |
| Which prompting approach, extractive vs abstractive | Match technique to genre and stakes; self-critique loop for high-stakes output | techniques.md |
| Anything else | Name the reader, name the target word count, then summarize; state the ratio and what was cut | — |
Coverage map: meetings.md decisions and actions · long-sources.md chunking and merging · research.md scientific claims · legal.md obligations and dates · data.md numbers and tables · threads.md conversations · media.md audio and video · code.md diffs and releases · news.md journalism · multi-source.md synthesis and conflict · recurring.md repeat editions · audience.md register and depth · formats.md shapes and channels · verification.md faithfulness audit · techniques.md method selection.
Core Rules
- Fix the target before writing, in words.
ratio = summary words ÷ source words. Announce the level (Length Ladder) and hold it; "make it shorter" without a number produces a 40% cut and another round trip. Worked example: conversational speech runs ~130-160 wpm, so a 60-minute call transcribes to ~7,800-9,600 words, so a 250-word recap is ~2.8% — about one surviving sentence per five minutes of talk. Knowing that before you start is what stops you from trying to keep everything. - Below ~10% you drop branches, not adjectives. Point budget:
max top-level points ≈ target words ÷ 25, because a point stated with enough support to be actionable costs about 25 words. An 80-word brief holds 3 points; if the source has 6, three of them die and the omission note names them (Rule 6). Shortening sentences instead of cutting branches produces a summary that is uniformly vague and covers nothing. - Never paraphrase a negation, a hedge, a quantifier, or a number. These are the cheapest tokens to lose and the only ones that carry the claim — "may reduce" is not "reduces", "no significant difference" is not "no difference", "3 of 40 participants" is not "participants". Copy them; paraphrase the prose around them (→ What Compression Destroys First).
- Attribution survives compression. A claim the source attributes to someone stays attributed. Collapsing "the vendor claims 99.99%" into "uptime is 99.99%" converts a sales number into a fact, and it is the single most common way a summary becomes wrong while every word is technically present in the source.
- One generation from the source. Summarizing a summary loses in the same direction twice: specifics out, abstractions in. For a shorter version, go back to the source or to the level-1 chunk map (
long-sources.md), never to the 250-word version you just wrote. A summary is only re-summarized when the source is genuinely unavailable, and then the output says so. - State the cut when it was material. Governed by
omission_note; material means a reader acting on the summary alone would decide differently. A one-line "Omitted: the two dissenting estimates and the pilot's cost overrun" is worth more than the paragraph it replaced, because it tells the reader whether to open the source. - Every sentence traces to a span. Before delivering, take each sentence of the summary and point to the text that supports it; anything with no span is either cut or demoted to "not stated in the source". Run the coverage pass second, from the source side (
verification.md). Frequency governed byverify_pass. - An action item is owner + verb + date. Anything missing one of the three is a topic, and it goes under "open", not under "actions" — a list of ownerless intentions is how a meeting recap produces zero follow-through (
meetings.md). - Audience changes what is deleted, never what is added. An executive cut drops method and caveat detail; a technical cut drops business framing. Neither introduces a conclusion, recommendation, or number the source did not contain — if the reader needs one, it ships labelled as your judgment, outside the summary (
audience.md).
The Length Ladder
Default level from default_length; the ratio band is what the level costs against source size, and the two disagree on very long sources — when they do, the absolute word count wins and the ratio just tells you how brutal the cut is.
| Level | Target | Typical ratio | Holds | Use when |
|---|---|---|---|---|
| Headline | ≤12 words, no verb required | <1% | 1 point | Subject lines, filenames, index rows |
| TLDR | 1 sentence, ≤25 words | ~1% | 1 point | The reader decides whether to read on |
| Brief | 2-4 sentences, 40-80 words | 1-5% | 3 points | Chat, status update, pre-read |
| Standard | 150-250 words, one screen | 5-15% | 6-10 points | The default for a document or a meeting |
| Abstract | ~250 words, fixed structure | varies | Structured slots | Papers and anything with a required shape (research.md) |
| Extended | 400-800 words, sectioned | 15-30% | 16-32 points | The reader will act without opening the source |
| Notes | >30% | >30% | — | Not a summary; you are taking notes, say so |
Reading time for the header: minutes ≈ words ÷ 220 (adult silent reading of non-technical prose runs roughly 200-250 wpm; technical prose is slower, so round up). Token estimate for fitting a context or a cost budget: tokens ≈ words × 1.3 for English.
Where The Payload Lives
Position bias is a real prior and it is genre-specific: reading strategy that is correct for news is the worst possible strategy for a transcript. Decide where to look before you start, and for long inputs be explicit about the middle — long-context retrieval degrades for material sitting in the middle of a very long input (the "lost in the middle" effect, Liu et al.), which is exactly where a report puts its findings.
| Source | Payload sits in | Consequence for the pass |
|---|---|---|
| News article, press release | First 2 paragraphs (inverted pyramid) | Lead-first is correct; the tail is background and can go whole |
| Research paper | Discussion and Limitations; the numbers are in Results | Summarizing the abstract reproduces the authors' spin, not the finding |
| Meeting or call transcript | Last 20% (decisions) plus scattered commitments | Lead-first is the worst prior available; read the end first |
| Contract, policy | Definitions, termination, liability, exhibits | The prose body is boilerplate; the schedule at the back is the deal |
| Email thread | Newest on top, cause at the bottom | Reverse chronology inverts causality — read bottom-up, write top-down |
| Slack or Discord channel | Diffuse, no structure at all | Reorganize by topic; a chronological digest of a channel is unreadable |
| Earnings report, filing | Guidance, footnotes, and the changed language | Headline figures are already the issuer's summary of itself |
| Book, long report | Chapter openings and closings; introduction states the argument | Middles carry evidence; sample them, do not skip them |
| Video, podcast | Whatever follows "so the point is" and the last five minutes | Sponsor reads and intros are pure padding, typically 5-15% of runtime |
| Anything else | Unknown | Skim the structure first (headings, first lines), then decide |
What Compression Destroys First
Ordered by fragility. Each row is a claim that survives word-for-word review and still misleads, because the deleted part was one or two words long.
| Element | How it dies | Preserve by |
|---|---|---|
| Negation | "not", "no", "failed to" is one word in a paragraph and paraphrase eats it | Copy negations verbatim; never render them as the positive with a caveat |
| Hedge and modal | "may", "suggests", "is associated with" read as filler and get upgraded to fact | Keep the modal on the claim; if it will not fit, the claim does not fit either |
| Quantifier and scope | "some", "3 of 40", "in mice", "in the EU pilot" dropped as detail | Every claim keeps its population and its N, or it is not stated |
| Attribution | Collapsed into narrator voice (Rule 4) | Name the source of any contested, projected, or vendor-supplied claim |
| Condition | "if the pilot clears legal" cut as a subordinate clause | Conditional decisions stay conditional or move to the open list |
| Number, unit, currency | Rounded to "about", unit dropped, currency assumed from your locale | Copy digits and unit; output_language never converts currency or units |
| Relative date | "next Tuesday" copied into an undated summary | Resolve against the source's own date, or keep verbatim plus that date |
| Acronym, entity name | First-use expansion lost when the first paragraph is cut | Expand on first use in the summary; recurring terms go to ~/Clawic/data/summarizer/glossary.md |
| Dissent | One line inside an hour of agreement | If there was disagreement it survives, or the omission note says it did not |
| Source status | Draft, preprint, rumor, unsigned, unaudited — the label is not in the sentence | Status travels attached to the claim, not in a footer |
| Causality | "X, and separately Y rose" becomes "X caused Y" | Correlation words are copied; do not upgrade sequence into cause |
Razor Questions
Answer all four before the first sentence; they take under a minute and they decide the whole shape.
- Who reads this and what do they do next? No answer means you are compressing for nobody and will default to a table of contents.
- What is the one thing that must survive if everything else goes? Write it first, at the top; the rest of the summary supports it or is cut.
- What would make this wrong rather than merely incomplete? Names the fidelity risk of this specific source — a number, an attribution, a hedge — and tells the verify pass where to look.
- What does the reader already know? Shared context is the cheapest compression available and the only one that costs no information.
Output Gates
Before delivering any summary:
- Is the level named and the actual word count within its band, or is the deviation stated?
- Does every number, negation, hedge, quantifier, and date match the source character for character?
- Can every sentence be traced to a span of the source, with no conclusion the source did not draw?
- If material was cut, does the omission note name it — as required by
omission_note? - Does every action item carry an owner and a date, and is every undecided thing under "open" rather than "decided"?
- Does the output fit the channel in
delivery_channel(length, markdown support, preview line) and the audience's register? - Did any secret appear in the source? Then it is replaced by its
<kind>:<locator>pointer everywhere it was going to be written, and the substitution is stated in one line. - Did anything durable come out of this — a stored summary, a new source, a term for the glossary, an approved template, a correction, a deadline? Then it is written to its box in
memory-template.md, with its## Boxesline, in this same turn.
Configuration
User-dependent variables. Defaults apply until the user states a preference; store them in ~/Clawic/data/summarizer/config.yaml.
| Variable | Type | Default | Effect |
|---|---|---|---|
| default_length | headline | tldr | brief | standard | extended | standard | The rung of the Length Ladder used when the request names no length |
| default_audience | general | executive | technical | academic | child | general | Register, jargon budget, and what audience.md deletes first |
| default_mode | abstractive | extractive | hybrid | hybrid | Whether output is rewritten, quoted, or quoted-then-rewritten with the extracts in view (techniques.md) |
| output_language | same-as-source | language code | same-as-source | Language of the summary; never converts numbers, units, currency, or quoted text |
| delivery_channel | markdown | slack | email | plaintext | doc | markdown | Hard length and formatting limits applied in formats.md, including whether tables and headings survive |
| markers | emoji | plain | none | plain | Whether section labels carry emoji, bare labels, or nothing |
| omission_note | always | when-material | never | when-material | When the "Omitted" line ships (Rule 6); never still suppresses nothing that changes a decision |
| verify_pass | always | long-only | never | long-only | Whether the two-direction audit runs on every summary, only above ~2,000 source words, or on request (verification.md) |
| store_summaries | full | index-only | none | index-only | Whether the summary text, only the source row, or nothing is written to ~/Clawic/data/summarizer/ |
| style_file | path | none | House style guide at ~/Clawic/data/summarizer/<file>: banned words, required sections, voice; overrides the default register |
Preference areas — customizable dimensions; a stated preference gets recorded in config.yaml and applied from then on:
- Conventions — bullet punctuation, heading depth, tense and person, citation style, whether the source title leads — affects every generated shape in
formats.md - Output register — formality, contractions, hedging appetite, whether your judgment may appear labelled at the end — affects
audience.md - Order of work — verify before delivering vs deliver then audit, whether an outline is confirmed first on long jobs — affects
long-sources.mdand the Output Gates - Restrictions — banned words and clichés, mandatory sections, claims that must never be paraphrased in this user's domain — affects the fidelity rules and
style_file - Source handling — whether intermediate chunk maps are kept, how long stored summaries live, which sources are never written to disk at all — affects
store_summariesand every box - Cadence — recurring editions and their period, re-read reminders for stored summaries — each accepted cadence becomes a row in
## Dueinmemory.md - Platform — where output lands (Slack, email, Notion, docs) and its per-channel ceiling — affects
delivery_channelandformats.md
Traps
| Trap | Why it fails | Do instead |
|---|---|---|
| Bullet-shredding | Turning 20 paragraphs into 18 bullets is reformatting, not compression; ratio barely moves | If bullets ÷ source paragraphs > 0.5, you have not summarized — recut against the point budget (Rule 2) |
| Takeaways that are the headings | The section titles were already an index; restating them adds nothing a table of contents did not have | Every point states an outcome or a number, never a topic label |
| Summarizing the abstract | The abstract is the authors' most favorable compression, and it omits limitations by convention | Read Results and Limitations; the abstract is a source, not the source (research.md) |
| Following the source's structure | Allocates summary space by how much the author wrote, not by what the reader needs | Reorder by reader consequence; agenda order is the worst order for a recap (meetings.md) |
| Averaging two conflicting sources | Produces a bland claim neither source supports and hides the disagreement, which was the finding | Report the range and who holds which end (multi-source.md) |
| Length by feel | Produces a fresh round trip every time, and the second cut is always the wrong 40% | Name the target in words before writing (Rule 1) |
| Summarizing a live thread | The conclusion arrives after you ship, and the summary is wrong within the hour | State the cut-off timestamp in the header, or wait (threads.md) |
| Rounding for readability | "About 30%" from 26.4% is a fabricated number wearing a hedge | Copy the figure; round only when the user asked, and say you rounded |
| Dropping the lone objection | Consensus is easy to compress and the objection was the reason to keep reading | The dissent survives or the omission note names it |
| Adding the conclusion the source implied | It reads as the source's finding and nobody can tell it is yours | Label judgment separately, outside the summary (Rule 9) |
| One summary sent to three audiences | Optimized for none; the executive skips the method, the engineer distrusts the missing method | Cut three versions from one extract pass (audience.md) |
| Keeping the loudest speaker's confidence | Transcripts reward volume and repetition, not correctness | Weight by decision authority and by evidence offered, not by airtime |
| Storing the source verbatim to "be safe" | Copies confidential material and any secret inside it onto disk | store_summaries decides; secrets are pointered before anything is written |
Where Experts Disagree
- Extractive vs abstractive. Extraction cannot hallucinate but reads badly and misleads by removing the context around a quoted sentence; abstraction reads well and invents. The frontier is stakes and reviewability: legal, medical, and financial text defaults to extractive or hybrid with spans attached, everything else to abstractive (
techniques.md). - One long-context pass vs chunk-and-merge. As context windows grew, one-pass became the default and it is right for most documents. Chunking survives where degradation in the middle of a very long input is unacceptable or where the same source will be re-queried many times and the chunk map amortizes (
long-sources.md). - Hedges in an executive summary. Executive convention says be decisive; keeping every "may" manufactures the impression of a report that decided nothing. The workable line: hedge the claim, never the recommendation — "the vendor's figure is unaudited; recommend proceeding with the 90-day exit" beats hedging both halves.
- Whether the summarizer may judge. Journalism says no, consulting says the judgment is the product. Both fail when judgment is unlabelled. Ship it labelled and separated, and the disagreement stops mattering.
- Bullets vs prose. Bullets scan and are the default in chat; prose is the only form that carries "because", "despite", and "only if". When the relations between the points are the finding, bullets destroy the finding.
Security & Privacy
Sources: the material summarized here is often confidential — transcripts, contracts, internal reports, private threads. This skill does NOT transmit sources anywhere, and writes to disk only what store_summaries allows.
Local storage: preferences, summaries, source rows, glossary, templates and corrections stay in ~/Clawic/data/summarizer/ on this machine, plus recipient rows in the shared ~/Clawic/data/contacts/. Titles, dates, and references only — never a credential, and never a personal identifier the summary does not need.
Guardrails: anything that looks like a key, token, password, connection string, or tokenized share link is replaced by its <kind>:<locator> pointer before it is written, in the source text as well as in the summary.
Related Skills
More Clawic skills, get them at https://clawic.com/skills/summarizer (install if the user confirms):
brief— when the deliverable is a decision document rather than a compressionsynthesize— when the point is the insight drawn across sources, not a shorter account of themdigest— when the sources are external feeds to be curated on a schedulemeetings— running the meeting system itself: agendas, capture, follow-up trackingextract-pdf-text— getting text out of PDFs and scans before any of this applies
Feedback
- If useful, star it: https://clawic.com/skills/summarizer
- Latest version: https://clawic.com/skills/summarizer
Part of Clawic, the verified skill library. Get this skill: https://clawic.com/skills/summarizer.
Related skills
Summarize Pro
@mkpareek0315When user asks to summarize text, articles, documents, meetings, emails, YouTube transcripts, books, PDFs, reports, conversations, or any long content. Also...
YouTube Transcript
@xthezealotFetch and summarize YouTube video transcripts. Use when asked to summarize, transcribe, or extract content from YouTube videos. Handles transcript fetching via residential IP proxy to bypass YouTube's cloud IP blocks.
YouTube Watcher
@michaelgatharaFetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.
git
@ivangdavilaCommits, branches, merges, and rebases Git repositories, resolves conflicts, and recovers lost history. Use when the work touches a repo, commit, branch, merge, rebase, stash, tag, or submodule; when Git refuses a command — index.lock exists, push rejected as non-fast-forward, detached HEAD, dubious ownership, unrelated histories, conflict markers left behind; when something looks lost after a hard reset, a bad rebase, a deleted branch, or a dropped stash; when splitting a mixed change, wording commit messages, cleaning history before review, or force-pushing without wrecking a teammate's work; when a credential or a huge file got committed; when setting up worktrees, hooks, LFS, sparse checkout, signing, or separate work and personal identities. Not for CI pipeline YAML (github-actions, gitlab) or for composing the pull request description itself (pull-request).
Remotion Video Toolkit
@shreefentsarComplete toolkit for programmatic video creation with Remotion + React. Covers animations, timing, rendering (CLI/Node.js/Lambda/Cloud Run), captions, 3D, charts, text effects, transitions, and media handling. Use when writing Remotion code, building video generation pipelines, or creating data-driven video templates.
TubeScribe
@matusvojtekYouTube video summarizer with speaker detection, formatted documents, and audio output. Works out of the box with macOS built-in TTS. Optional recommended tools (pandoc, ffmpeg, mlx-audio) enhance quality. Requires internet for YouTube access. No paid APIs or subscriptions. Use when user sends a YouTube URL or asks to summarize/transcribe a YouTube video.