Chain of Density: A Summarizing Prompt That Ships (2026)
Chain of Density is a one-call summarizing prompt that rewrites a summary five times at fixed length so it packs in the facts most 'summarize this' prompts drop. Copy-paste receipt, the failure modes, and the production variant.

On this page
Quick answer (2026): Chain of Density (CoD) is a summarizing prompt that forces one model call to rewrite a summary five times, each pass fixed at the same length but packed with more facts. You get a short summary that reads like a human wrote it instead of a bland one that skips half the article. It works on any instruction-following model. Keep pass 3 or 4, not pass 5. Cost is one call, no fine-tuning.
Most summary prompts return mush. "Summarize this" gives you four vague sentences that drop the numbers, names, and dates that actually matter. CoD fixes that by making density the job, not an afterthought.
The technique comes from the 2023 Chain of Density paper (Adams et al.). One prompt. No tools. Here is the version that ships.
The receipt
Model: any strong instruction follower (tested on Claude and
GPT-class models). One call.
Article: {ARTICLE}
You will generate increasingly concise, entity-dense summaries of the above article.
Repeat these 2 steps 5 times.
Step 1. Find 1-3 informative entities from the article that are missing from the previous summary.
Step 2. Write a new, denser summary of identical length that covers every entity from the previous summary plus the new ones.
A missing entity is: relevant to the main story, specific yet concise (5 words or fewer), novel, faithful to the article, and can appear anywhere in it.
Rules:
- First summary: 4-5 sentences, about 80 words, deliberately vague, heavy on filler like "this article discusses".
- Every later summary keeps the exact same word count. Make room by fusing sentences and deleting empty phrases, never by dropping earlier entities.
- If there is no room for new entities, add fewer. Never drop old ones.
- Summaries should stand alone without the article.
Return JSON: a list of 5 objects, each with keys "missing_entities" and "denser_summary".
Why it works
The model is not allowed to grow the summary. Fixed length is the whole trick. To add a new fact without more words, it has to delete filler and fuse clauses. That pressure is what turns "the report covers several topics" into "Q3 revenue rose 14% to $2.1M on 900 new seats."
You get five versions on a density ramp. Early passes read easy but say little. Late passes say everything but get dense. You pick the one that fits.
Failure mode
Pass 5 is usually too dense to read. The paper found a real tradeoff: informativeness up, readability down. On short inputs (a few paragraphs) the model runs out of genuine entities by pass 3 and starts repeating or padding.
Two more traps:
- Length drift. Models cheat and let later summaries grow. Add "the summary MUST be the same word count" and count it in code if it matters.
- Token cost. Five rewrites plus the article in one call is not free on long documents. Fine for a page, wasteful for a book chapter.
Ship this
For production, do not ship all five to a user. Two moves:
- Keep pass 3 or 4. Parse the JSON, take index 2 or 3. It is the sweet spot: dense but still readable. Drop the rest.
- Cheaper single-pass variant. When you do not need the ramp, collapse it: "Write one 80-word summary. Include every named entity, number, and date. No filler phrases." You lose the iterative polish but save 60% of the tokens. Use the full ramp only when the summary is the product.
If your model already returns ragged JSON here, run the output through a second-pass JSON repair before you parse index 3.
CoD is the opposite lever from prompt compression: compression shrinks your input to save money, density packs your output to save meaning. Read both. Neither needs a fine-tune.
Cost to test: $0.02
Written by
Roo IyerRoo Iyer writes terse, tested prompt recipes for PromptAttic. Claim, receipt, why, failure mode, ship.
FAQ
What is Chain of Density prompting?
Chain of Density (CoD) is a single-call prompt that makes a model write an initial vague summary, then rewrite it five times at the exact same length, adding 1-3 missing entities each pass. Fixed length forces the model to delete filler and fuse clauses, so the final summary is short but fact-dense. It comes from Adams et al., 2023.
How many iterations does Chain of Density use?
The canonical recipe uses five densification passes over one model call. In practice, keep pass 3 or 4: pass 5 is often too dense to read comfortably, and on short inputs the model runs out of real entities by pass 3.
Which summary should I keep from the output?
Parse the returned JSON list and take index 2 or 3 (pass 3 or 4). That is the readability-versus-density sweet spot. Do not show all five passes to a user in production.
Does Chain of Density only work on one model?
No. It is a plain-text prompt with no tools or special API features, so it works on any strong instruction-following model, including Claude and GPT-class models in 2026.
What is the main downside of Chain of Density?
There is a documented tradeoff between informativeness and readability: denser passes cram in more facts but get harder to read. It is also token-heavy, since five rewrites plus the article run in one call. Use a single-pass variant when you do not need the full ramp.
How is Chain of Density different from prompt compression?
They are opposite levers. Prompt compression shrinks your input to save tokens and money. Chain of Density packs your output with more meaning at fixed length. One trims what you send, the other densifies what you get back.
Related recipes
Prompt Compression: Recipes That Ship (2026)
Six copy-paste prompt compression moves for 2026 with real before and after token counts. Cut manners, redundancy, and agent history. No library required.
Chain of Thought Prompting: 6 Examples That Ship (2026)
Five paste-ready chain-of-thought prompting examples for 2026, each with its failure mode, plus when reasoning out loud makes the answer worse.
Multi-step JSON repair: make any model return valid JSON on the second try
Step one: ask for JSON. Step two: if JSON.parse throws, send the broken string plus the parser error back and ask only for a corrected version. Don't re-explain the task. Models fix syntax far more reliably than they self-correct semantics. Two steps, near-zero unparseable output.


