Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Canonical kip knowledge-store patterns for any process or agent: recall prior facts before work, assert decisions/gate outcomes/rejections as structured facts after work, resolve entities with explicit --model sonnet, and invoke the CLI Windows-safely via node packages/kip-sdk/dist/cli/kip.js when kip is not on PATH.
.claude/skills/a5c-ai-kip-librarian/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 168% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 109% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 896% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 1793% | 0% |
You are kip-librarian - a specialized skill prescribing the canonical kip knowledge-store lifecycle for any process or agent: recall prior facts before work, assert structured facts after work, resolve entities with an explicit strong model, and invoke the CLI safely on every platform including Windows.
This skill prescribes the recall-at-start / assert-at-end lifecycle:
It closes the library's biggest systemic gap - kip appears in only ~58 of 2191 process files - by making integration copy-paste cheap instead of research-expensive. This skill prescribes the bar rather than executes it: retrofit batches stamp this contract into older processes, and new processes adopt it directly.
Resolve the kip CLI in this exact order:
kip if it is on PATH.node packages/kip-sdk/dist/cli/kip.js from the repo root.NEVER use npm exec kip - npm bin resolution fails on Windows.
Invocation rules that apply to EVERY command:
--dir <store> AND --replica <id> (or the KIP_REPLICA_ID env var). This applies to reads too, not just writes - recall, get, and query fail with exit 3 without a replica identity.assert, retract, link, ...) additionally require a resolvable keyring: --keyring, KIP_KEYRING, or <dir>/keyring.json. Any parseable JSON object works (the repo mints an ephemeral keypair); without one, writes fail with exit 3 keyring required to author facts.--json in automation.The full command surface is init|open|assert|retract|get|query|recall|asof|fsck|rollup|sync|ask|index|link|resolve|learn|ingest-rdf; assert forms are node|edge|fact.
Initialize (or idempotently open) the store once per run:
bashkip init --dir .a5c/kip --create --replica <run-or-agent-id> --json
--create makes init an idempotent open when the store already exists. Then ensure <dir>/keyring.json exists (any JSON object, e.g. {}, created once alongside init) before any write.
0 recall results on a fresh store means fresh brain, not a query error. Do not retry, loosen the query, or treat it as failure.
At task start, recall prior facts on the topic:
bashkip recall "<topic text>" --dir .a5c/kip --replica <id> --k 8 --json
--k is a mandatory flag for recall.
Also available:
kip get <eid> --dir .a5c/kip --replica <id> --jsonkip query --seed <eid> --direction out --depth 1 --max-fanout 10 --dir .a5c/kip --replica <id> --json - --depth, --max-fanout, and --direction are all mandatory flags for query.Feed results into downstream prompts as a priorKnowledge object:
json{ "factCount": 3, "insights": ["..."], "priorRejected": ["..."] }
Persist structured facts as assert node with these kind conventions:
| kind | props | |------|-------| | decision | topic, choice, status, rationale | | gate-outcome | passed, issues, evidence - the {passed, issues[], evidence[]} adversarial-gate contract | | rejection | item, reason, gate |
bashkip assert node --dir .a5c/kip --replica <id> --eid decision:<slug> --kind decision \ --prop "topic=..." --prop "choice=..." --prop "status=accepted" --prop "rationale=..." --json
The echo is {"eid": "...", "status": "pending"} - pending is expected, not an error. There is no commit at assert time BY DESIGN; agents must not treat this as a failure or retry the assert.
Link related facts with edges:
bashkip assert edge --kind <edge-kind> --from <eid> --to <eid> --valid-from <t> --dir .a5c/kip --replica <id> --json
kip resolve ALWAYS with an explicit --model sonnet:
bashkip resolve <args> --model sonnet --dir .a5c/kip --replica <id> --json
Default weak (haiku-class) models intermittently fail --json-schema conformance and adjudication under-fires. The KIP_RESOLVE_MODEL env var is honored and sonnet is the fixed default per D-69, but be explicit anyway - precedence is --model > KIP_RESOLVE_MODEL > sonnet.
Use the resolve confirm/reject subflows for candidate matches. Never auto-merge entities without a gate (see Pattern 4).
Route a human breakpoint for:
breakpointId like kip-entity-merge-<pair>, expert: knowledge-curator, tags [kip, entity-resolution].--fail-on-conflict.Routine asserts and recalls never breakpoint - keep breakpoints sparse per repo policy.
Proven transcript, executed live on Windows 2026-07-23 against packages/kip-sdk/dist/cli/kip.js (<scratch> is a scratch directory):
Init:
bashnode packages/kip-sdk/dist/cli/kip.js init --dir <scratch>/kip-test --create --replica skill-design-test --json
Observed output: {"dir":"...kip-test","created":true,"manifestGenesisCid":"sha256:68eacf890b49ad810581e8fe4d7ff712f44f4611b29f93d96a51345b9ddc55b5","branch":"refs/kip/replicas/skill-design-test"} (exit 0)
Assert a decision node (requires <dir>/keyring.json to exist - any JSON object, e.g. {}):
bashnode packages/kip-sdk/dist/cli/kip.js assert node --dir <scratch>/kip-test --replica skill-design-test --eid decision:kip-librarian-format --kind decision --prop "topic=kip-librarian skill format" --prop "choice=match meta/skills SKILL.md frontmatter" --prop "status=accepted" --json
Observed output: {"eid":"decision:kip-librarian-format","status":"pending"} (exit 0)
Assert a gate-outcome node:
bashnode packages/kip-sdk/dist/cli/kip.js assert node --dir <scratch>/kip-test --replica skill-design-test --eid gate:kip-librarian-design-review --kind gate-outcome --prop "passed=true" --prop "evidence=proven CLI transcript 2026-07-23" --json
Observed output: {"eid":"gate:kip-librarian-design-review","status":"pending"} (exit 0)
Recall:
bashnode packages/kip-sdk/dist/cli/kip.js recall "kip-librarian skill format decision" --dir <scratch>/kip-test --replica skill-design-test --k 5 --json
Observed output: JSON array of 2 hits, each {eid, view:{kind, props with typed segments incl. passed:true as boolean}, score, ranks:{graph:N}, conflicted:false, provenance:{author:"kip:putNode:skill-design-test", publicKey, signature, ...}}; decision:kip-librarian-format ranked 1 (exit 0)
Get:
bashnode packages/kip-sdk/dist/cli/kip.js get decision:kip-librarian-format --dir <scratch>/kip-test --replica skill-design-test --json
Observed output: {"eid":"decision:kip-librarian-format","kind":"decision","props":{choice/status/topic each as {segments:[{kind:"value",value:...,validFrom:0,validTo:null,assertedBy:<hash>}]}},"provenance":{...signed...}} (exit 0)
| Symptom | Exit code | Cause | Fix | |---------|-----------|-------|-----| | replicaId required (--replica or KIP_REPLICA_ID) | 3 | --replica omitted (observed live when omitting it from assert node) | Pass --replica <id> or set KIP_REPLICA_ID on every command, reads included | | keyring required to author facts | 3 | <dir>/keyring.json missing on a write (observed live) | Create <dir>/keyring.json with any JSON object (e.g. {}) once alongside init, or pass --keyring / set KIP_KEYRING |
JSON block the skill emits when used in a task:
json{ "recalled": [], "asserted": [{ "eid": "decision:example", "status": "pending" }], "conflicts": [], "artifacts": [] }
| Exit code | Meaning | |-----------|---------| | 2 | Usage error (bad flags/arguments) | | 3 | Resolution error (missing replica identity or keyring) | | 6 | Data-condition (unknown eid, conflict) |
--json in automation; do not parse human-format output.assert echoing status: "pending" is by design - never treat it as failure.npm exec kip; resolve the CLI per the Windows-safe order above.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,129 | 19,242 | +19% | 1 | 1 | 0% | 228 | 3,047 | +1236% | 0 | 0 | — |
case-02 | fail→pass | 15,941 | 24,364 | +53% | 1 | 1 | 0% | 2,427 | 4,897 | +102% | 0 | 0 | — |
case-03 | fail→pass | 14,637 | 29,771 | +103% | 1 | 1 | 0% | 1,857 | 4,982 | +168% | 0 | 0 | — |
case-04 | fail→fail | 19,873 | 20,332 | +2% | 1 | 1 | 0% | 1,296 | 2,939 | +127% | 0 | 0 | — |
case-05 | fail→pass | 15,407 | 10,993 | -29% | 1 | 1 | 0% | 1,694 | 3,543 | +109% | 0 | 0 | — |
case-06 | fail→pass | 15,780 | 14,842 | -6% | 1 | 1 | 0% | 392 | 3,904 | +896% | 0 | 0 | — |
case-07 | fail→pass | 31,364 | 11,262 | -64% | 1 | 1 | 0% | 203 | 3,842 | +1793% | 0 | 0 | — |
case-08 | fail→pass | 18,174 | 11,831 | -35% | 1 | 1 | 0% | 329 | 3,794 | +1053% | 0 | 0 | — |
case-09 | fail→pass | 15,514 | 11,464 | -26% | 1 | 1 | 0% | 208 | 3,904 | +1777% | 0 | 0 | — |
case-10 | fail→pass | 14,136 | 10,396 | -26% | 1 | 1 | 0% | 1,530 | 3,588 | +135% | 0 | 0 | — |
case-11 | fail→pass | 8,702 | 9,843 | +13% | 1 | 1 | 0% | 603 | 3,381 | +461% | 0 | 0 | — |
case-12 | fail→fail | 13,355 | 14,785 | +11% | 1 | 1 | 0% | 1,650 | 4,516 | +174% | 0 | 0 | — |
case-13 | fail→pass | 15,210 | 19,152 | +26% | 1 | 1 | 0% | 195 | 5,442 | +2691% | 0 | 0 | — |
case-14 | fail→pass | 13,410 | 12,468 | -7% | 1 | 1 | 0% | 1,230 | 4,018 | +227% | 0 | 0 | — |
case-15 | fail→fail | 12,050 | 14,986 | +24% | 1 | 1 | 0% | 1,363 | 4,669 | +243% | 0 | 0 | — |
case-16 | fail→pass | 24,719 | 12,315 | -50% | 1 | 1 | 0% | 2,047 | 3,881 | +90% | 0 | 0 | — |
case-17 | fail→pass | 21,319 | 10,609 | -50% | 1 | 1 | 0% | 2,811 | 3,666 | +30% | 0 | 0 | — |
case-18 | fail→fail | 19,149 | 25,363 | +32% | 1 | 1 | 0% | 204 | 4,709 | +2208% | 0 | 0 | — |
case-19 | fail→pass | 15,050 | 11,315 | -25% | 1 | 1 | 0% | 1,550 | 3,576 | +131% | 0 | 0 | — |
case-20 | pass→fail | 12,973 | 21,343 | +65% | 1 | 1 | 0% | 1,532 | 4,278 | +179% | 0 | 0 | — |
case-21 | fail→fail | 12,622 | 71,903 | +470% | 1 | 1 | 0% | 1,199 | 7,929 | +561% | 0 | 0 | — |
case-22 | pass→pass | 11,773 | 29,349 | +149% | 1 | 1 | 0% | 1,204 | 4,190 | +248% | 0 | 0 | — |
case-23 | pass→pass | 18,814 | 16,679 | -11% | 1 | 1 | 0% | 2,673 | 4,932 | +85% | 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 15 counted toward the lift figure. The other 8 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 15 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.