Install
openclaw skills install @ivangdavila/summarizerSummarizes any source without losing the claim: documents, meetings, papers, threads, transcripts, data, and code changes. Use when asked to summarize, condense, shorten, recap, distill, or write a TLDR, abstract, or executive summary; when a source is too long to read or must hit a word count; when summarizing a call, interview, Slack channel, pull request, contract, earnings report, podcast, or a stack of sources on one topic; when a summary dropped something important, invented a detail, turned a hedge into a fact, or reads like the headings; and when the same material must be re-cut for another audience, length, or channel. Covers compression ratios, chunking, faithfulness and omission audits. Not for recurring external feeds (digest), decision documents whose point is the recommendation (brief), cross-source insight generation rather than compression (synthesize), or pulling text or a transcript out of a file or video first (extract-pdf-text, youtube-video-transcript).
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.
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| 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.
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.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.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.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.verification.md). Frequency governed by verify_pass.meetings.md).audience.md).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.
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 |
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 |
Answer all four before the first sentence; they take under a minute and they decide the whole shape.
Before delivering any summary:
omission_note?delivery_channel (length, markdown support, preview line) and the audience's register?<kind>:<locator> pointer everywhere it was going to be written, and the substitution is stated in one line.memory-template.md, with its ## Boxes line, in this same turn.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:
formats.mdaudience.mdlong-sources.md and the Output Gatesstyle_filestore_summaries and every box## Due in memory.mddelivery_channel and formats.md| 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 |
techniques.md).long-sources.md).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.
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 appliesPart of Clawic, the verified skill library. Get this skill: https://clawic.com/skills/summarizer.