Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Compile durable, non-obvious findings into an interlinked markdown knowledge store — atomic files, [[wiki-links]], a maintained index — so an agent gets smarter across sessions instead of relearning the same facts.
.claude/skills/sickn33-compile-knowledge/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 196% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 918% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 83% | 0% |
Durable knowledge is worth keeping as many small, interlinked markdown files compiled over time and surfaced through an index — not as one giant doc, a chat log, or a one-off notes.md that rots. This skill makes compiling consistent, so what an agent learns in one session is retrievable in the next one instead of being re-derived from scratch.
The shape is deliberately boring: one fact per file, a one-line description that recall matches against, [[slug]] links between related files, and a single index line per entry. The hard part is not the format — it is the discipline of writing only what is durable, and of updating an existing file instead of creating a near-duplicate.
investigation result, and are about to close the task — compile before you close.
measurement that contradicts the docs, a constraint nobody wrote down).
"log this finding", "structure this knowledge", or "follow the karpathy method".
produces nothing durable, and filler pollutes recall.
memory/ with anindex file such as MEMORY.md). This is the default and, for a solo agent, usually the only store you need.
wiki/ folder with wiki/index.md, for knowledge the whole teamwould otherwise re-derive. Skip it entirely if you work alone; do not manufacture team ceremony.
Rule of thumb: "only I act on this" goes to memory, "anyone on my team might need this" goes to the wiki. Cross-link the two with [[slug]] rather than copying the fact into both.
Compile only a fact that is durable and non-obvious. Skip it if it is derivable from the repository, the git history, or the existing docs; if it is true only for this one conversation; or if an existing file already covers it — in that last case update that file.
Grep the store and skim the index for the topic. A near-duplicate is worse than no entry, because recall then has two answers and no way to choose between them.
One fact per file. Two unrelated facts are two files. Name it as a kebab-case slug — the slug is the link target, so it has to be guessable by the next reader. Frontmatter carries name (equal to the slug), a one-line description specific enough to be matched during recall, and a type or category. In the body, state the fact plainly and link related entries with [[slug]] liberally; a link to a file that does not exist yet is a fine TODO marker, not an error.
Use one line in the form - Title → slug.md — hook, under ~200 characters. Detail lives in the file; an index line that restates the file defeats the point of having an index. Create the index if it is missing, or the store is undiscoverable.
Facts expire. When one is time-sensitive or replaces an older one, say so in the frontmatter so recall can demote it rather than serving stale truth:
valid_to: YYYY-MM-DD — the date the fact needs a recheck.supersedes: <slug> — the older fact this replaces. Prefer this over editing in placewhen the old value is still worth seeing; edit in place when it is not.
confidence: high|medium|low — so a hunch never outranks a measurement.provenance: "<source>" — where the fact came from, distinct from who wrote the note.All four are optional and portable; omitting them changes nothing.
markdown--- name: reference_search_api_counts_prs_as_issues description: "GitHub's /search/issues endpoint counts pull requests in total_count, so a zero there proves neither issues nor PRs exist — but a non-zero one does not tell you which." confidence: high provenance: "measured 2026-08-16 while dupe-checking four upstream repos" --- `total_count` from `/search/issues?q=<term>+repo:<owner>/<name>` is the sum of issues and pull requests. For a "has anyone submitted this yet?" check that is exactly what you want, and the zero is a real absence. To separate the two, add `type:pr` or `type:issue`. Related: [[reference_gh_api_ref_serves_default_branch]].
Then one line in the index:
markdown- Search API counts PRs as issues → reference_search_api_counts_prs_as_issues.md — a zero is a real absence, a non-zero is ambiguous
Task: bump the service's log level to debug and restart it.
Compile? No. It is derivable from the config file and the deploy history, and it is true
only for today. Close the task without writing anything.description for the person searching later, in their vocabulary, not yours.notes.md and call it compiled.becomes a confidently retrieved wrong fact, so record how you measured something, not only what you concluded.
description line. A vague description makes a goodentry unfindable.
those operations to the knowledge store directory (the agent's memory/ folder or the project's wiki/), and never to source files, configuration, or anything outside it.
supersedes: when the old value still has audit value, and confirm before removing a file you did not write.
These files are long-lived, frequently synced, and often shared across a team — treat them as if they were public. Record the shape of a credential, never its value.
Solution: Cap each entry at one line and let the file carry the detail; when the index gets long, tighten the hooks rather than adding more of them.
both and the reader trusts neither. Solution: Merge them into the older slug and leave the newer one deleted; the search in Step 3 exists to prevent this.
Solution: Stamp valid_to: on anything time-sensitive at write time, and verify a recalled fact that names a file, flag, or endpoint before acting on it.
Solution: Bind it to a boundary you already hit — compile before closing a task, not as a separate chore you schedule later.
@writing-skills - When you want to package a repeatable procedure as a skill ratherthan record a fact.
@deep-research - Produces the findings; this skill is what keeps them after thesession ends.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 20,774 | 12,914 | -38% | 1 | 1 | 0% | 2,623 | 3,450 | +32% | 0 | 0 | — |
case-10 | fail→pass | 12,108 | 12,522 | +3% | 1 | 1 | 0% | 1,179 | 3,490 | +196% | 0 | 0 | — |
case-01 | fail→pass | 11,041 | 19,480 | +76% | 1 | 1 | 0% | 337 | 3,430 | +918% | 0 | 0 | — |
case-02 | fail→pass | 29,315 | 31,261 | +7% | 1 | 1 | 0% | 4,174 | 7,020 | +68% | 0 | 0 | — |
case-03 | fail→pass | 18,285 | 16,048 | -12% | 1 | 1 | 0% | 2,234 | 4,098 | +83% | 0 | 0 | — |
case-04 | fail→pass | 10,371 | 10,794 | +4% | 1 | 1 | 0% | 772 | 3,177 | +312% | 0 | 0 | — |
case-11 | fail→fail | 25,510 | 14,215 | -44% | 1 | 1 | 0% | 3,107 | 3,678 | +18% | 0 | 0 | — |
case-06 | fail→fail | 14,381 | 14,892 | +4% | 1 | 1 | 0% | 1,480 | 4,172 | +182% | 0 | 0 | — |
case-07 | fail→pass | 10,252 | 11,303 | +10% | 1 | 1 | 0% | 907 | 3,424 | +278% | 0 | 0 | — |
case-08 | fail→pass | 10,113 | 12,545 | +24% | 1 | 1 | 0% | 942 | 3,557 | +278% | 0 | 0 | — |
case-09 | fail→fail | 15,788 | 12,230 | -23% | 1 | 1 | 0% | 1,670 | 3,417 | +105% | 0 | 0 | — |
case-12 | fail→pass | 8,231 | 27,828 | +238% | 1 | 1 | 0% | 364 | 4,675 | +1184% | 0 | 0 | — |
case-13 | pass→fail | 22,387 | 12,817 | -43% | 1 | 1 | 0% | 3,157 | 3,473 | +10% | 0 | 0 | — |
case-14 | pass→pass | 13,555 | 9,420 | -31% | 1 | 1 | 0% | 1,324 | 2,789 | +111% | 0 | 0 | — |
case-15 | pass→pass | 8,879 | 12,065 | +36% | 1 | 1 | 0% | 519 | 3,235 | +523% | 0 | 0 | — |
case-16 | fail→pass | 15,703 | 13,162 | -16% | 1 | 1 | 0% | 267 | 3,514 | +1216% | 0 | 0 | — |
case-17 | fail→pass | 8,194 | 13,265 | +62% | 1 | 1 | 0% | 562 | 3,700 | +558% | 0 | 0 | — |
case-18 | fail→pass | 14,318 | 10,816 | -24% | 1 | 1 | 0% | 1,505 | 3,182 | +111% | 0 | 0 | — |
case-19 | fail→fail | 8,164 | 12,938 | +58% | 1 | 1 | 0% | 569 | 3,666 | +544% | 0 | 0 | — |
case-20 | fail→fail | 20,139 | 17,481 | -13% | 1 | 1 | 0% | 2,464 | 4,251 | +73% | 0 | 0 | — |
case-21 | fail→pass | 15,255 | 15,226 | -0% | 1 | 1 | 0% | 1,771 | 3,967 | +124% | 0 | 0 | — |
case-22 | fail→fail | 19,167 | 12,961 | -32% | 1 | 1 | 0% | 2,471 | 3,576 | +45% | 0 | 0 | — |
case-23 | fail→pass | 11,362 | 11,845 | +4% | 1 | 1 | 0% | 961 | 3,140 | +227% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +57 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.