Re-encode verbose prose into a dense telegraphic register — punctuation as connectives, label frames, verbless assertions — without losing normativity or precision. Use when compressing system prompts, tool/function descriptions, skill bodies, or agent instructions; reducing token count or context bloat; making documentation token-efficient for LLM input; or rewriting text in compressed notation.
77
96%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
Compression is re-encoding, not word deletion. Filtering function words out of an English sentence leaves a damaged English sentence (System design: efficient process incoming data, multiple sources). Instead re-frame each claim in a register whose grammar is punctuation and layout — then the function words have no work left and drop out on their own.
Target texts are load-bearing: tool descriptions, system prompts, skills. A model executes them cold, with no author present to disambiguate. Compression that forces a guess is a bug, not a saving.
NEVER assume … rule, a throw condition, and a full-res detail. On already-dense text the remaining words are the payload, and the expected saving is smaller than the expected loss.All paths repo-relative. once, up top.| frame | English | compressed |
|---|---|---|
| definition | "The name field is the stable launch identifier." | name: stable launch id. |
| obligation | "You must call open before you can run code." | MUST open before run. |
| default | "If no value is given, the timeout defaults to 30 seconds." | Default 30s. |
| condition→consequence | "Because navigation re-renders the page, refs become stale, so you should snapshot again." | Navigation invalidates refs → re-snapshot. |
| property chain | "z' is an integer because z divides x²+y², and it is positive because x²+y²>0." | z' integer since z divides x²+y²; positive since x²+y²>0. |
| enumeration | "The action may be open, close, or run." | action: open, close, run. |
| exclusion | "any triple that is neither (1,1,1) nor (1,1,2)" | triple ≠ (1,1,1),(1,1,2) |
| verdict | "Claim A is true, and claim B is false as stated." | A true; B false as stated. |
| precondition | "This requires that the branch has already been checked out." | Requires prior checkout. |
Constructions behind them:
X true / X false / X required / X unsupported. Copula deleted; the predicate carries.X: value for "the X is / means / consists of". One colon per line, never nested.Integer since …; positive since …; unique.articles, copulas, expletives.All paths repo-relative. · Times in ms. · All congruences mod 4.3·13·34-1 big (over the bound; exact value irrelevant). Name the bound somewhere the reader can see it.y=z implies (1,1,1). Only where exactly one reading exists.Punctuation carries the connective:
: — announce, name, define ("is", "means", "the following")→ — yields, produces, becomes ("which results in")⇒ — therefore, concludes— — gloss, or "therefore"/ — equivalently, i.e.; — next step, same topic ("Then,", "After that,"), — inference chain ("and so")≠ — neither/nor, distributed over a list✓ — verified, obligation discharged> — precedence ("arg > env > default")| — alternatives within an enum ("open | close | run")Ambiguity is the only disqualifier, never unfamiliarity. Where a glyph takes a second reading in its slot — — as a parenthetical dash, / as a path separator or "per", , as a list comma — write the word instead.
Symbols do not save tokens; structure does. Measured (cl100k_base; Claude's tokenizer differs, but BPE arity for rare glyphs is similar): → ⇒ ≤ · ✓ cost 1 token each, ≡ costs 2, -> costs 2, and gives costs 1. So a one-for-one word→glyph swap saves nothing and costs clarity. Substitute a glyph only where it eats a multi-word phrase. Superscripts do pay: x²+y² = 4 tokens, x^2+y^2 = 6.
Never invent private glyphs — a bespoke one needs a legend that costs more than it saves.
Always delete: articles; copulas (is/are/was/be/been); expletive there/it; complementizer that; relative pronouns; intensifiers (very, quite, really, extremely); filler ("in order to"→to, "due to the fact that"→because, "it is important to note that"→∅, "in terms of"→∅); politeness ("please", "feel free to"); hedged framing ("you may want to consider").
Delete unless load-bearing: auxiliaries (have/do/will); pronouns with an obvious referent; prepositions of/for/to/in/on/at/by; conjunctions where the list is obvious; adverbs already implied by the verb ("shout loudly").
Never delete — this is the payload:
git blame before cutting anything that looks obvious.The scratchpad style that generates this register carries features that work only while writer and reader are the same person, minutes apart. Strip all of them:
A, B, C, G, "the equation", "the claim above". Shipped text is self-contained: name the thing.Hmm, Actually, Wait, just, fine, Good; goals revised mid-line; abandoned clauses.... and ? — in notes they mean omitted / abandoned / infinite, and conjecture / check-this. In shipped text they mean nothing. Drop both.Step: from X: cases: a,b=1: 3-c: is unparseable cold. One colon per line.Word limit 1200 - write concisely sitting in content is indistinguishable from content. Keep instructions in a marked channel: heading, tag, or MUST line.The body compresses hard. The trigger does not.
description field is retrieval surface, not documentation: it is matched against the user's own phrasing. Keep natural, keyword-redundant alternatives ("compress prompt", "reduce token count", "token-efficient") even though a reader needs only one. Compress the body; NEVER compress the trigger.tool-prompt-optimization probe) the probe recovered it from schema alone. Otherwise keep it. Defaults are the trap: wire schemas frequently omit default entirely, and even when present it carries no direction or semantics — gitignore: true does not say "respects gitignore" — which is why tool-prompt-optimization classes defaults-and-their-direction as content no model recovers. Absent that evidence, preserve the default, its unit, and any precedence rule (arg > env > default). Prose always keeps what no schema can express: interaction, precedence, failure mode.open before run); label frames for facts (Default 30s.).tool-prompt-optimization, which also measures schema/prose overlap before you cut. House style (tag vocabulary, RFC 2119 keywords, positioning) → system-prompts. Compress after those two have decided what ships.Source (55 words, 63 tok):
The
timeoutparameter controls how long the tool will wait for the process to become ready. If you do not provide a value, it defaults to 30 seconds. Note that if you have specified both a log pattern and a port, then both of these conditions must be satisfied before the process is considered ready.
Compressed (14 words, 20 tok):
Readiness timeout: default 30s. Log pattern + port both supplied ⇒ BOTH must pass.
Rejected as over-compressed — timeout 30 log+port both: loses the unit, loses that 30 is a default rather than a fixed value, loses the obligation, and leaves both dangling.
: → — /: can a reader assign a second reading? Fix it. Watch for ambiguity the source did not have — a dropped receiver (.ref("e5") on what?), a singular silently pluralized ("previous snapshot" → "previous generations").omp compress <file> drives exactly this loop with two tools and nothing else.
Its session is isolated on purpose, because the input is itself a prompt: the default system prompt is replaced (not appended to), and skill, rule, AGENTS.md, prompt-template, and slash-command discovery are all passed empty — every one of those defaults to ON when omitted, and each would inject instruction-shaped project text into a job whose only legitimate input is the document. Audited on a live session: one system-prompt part, tools rewrite, approve, no AGENTS.md or rule content present.
The source is quoted inside a nonce-delimited block and declared inert, so MUST/NEVER lines in the document get compressed rather than obeyed — verified with a document whose first paragraph ordered the compressor to emit OK and skip the rest: it compressed the real content and declared the injected paragraph as a deliberate loss.
rewrite submits the full compressed text plus every declared loss.approve accepts the reviewed draft. Approval before a review turn is rejected, and a new draft voids an earlier approval.-o <path>, -i in place, otherwise stdout (the report goes to stderr, so > out.md captures just the text). -r bounds the drafts; an unapproved run writes nothing and exits 1.The runtime contract it hands the agent lives in packages/coding-agent/src/compress/prompts/system.md. It is the operative subset of this file; when they disagree, this file wins and the prompt gets fixed.
cdb9c4d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.