{"_id":"@ctxr/skill-llm-wiki","_rev":"10-c037a881e0b79122b8d401c350f86495","name":"@ctxr/skill-llm-wiki","dist-tags":{"latest":"1.4.4"},"versions":{"1.0.1":{"name":"@ctxr/skill-llm-wiki","version":"1.0.1","keywords":["claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.0.1","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"ea1d4602efae3930218bbe5a9d9cae63356cc26d","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.0.1.tgz","fileCount":75,"integrity":"sha512-1MmXP1mVDo5dCZRRtoXw6ssT1vHnW+TpOmZN8VDm+77kMZmOj6J+uV8VRuLzpj4m4PmiNYp8LKcZjEkUKBV0Rg==","signatures":[{"sig":"MEYCIQDhHRZiBfvn98B3uA4XahaboqfzrN01J9hulH7vpW9yOAIhALnP/Gvfo9MSGrn2fY6hjMXwJcHhzG7ykp7WQ8V0Vj7L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":699378},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"918a058402ba2bbe20bc1676c946a79658643915","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Claude Code skill — build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.0.1_1776296186905_0.10916105323889136","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ctxr/skill-llm-wiki","version":"1.0.2","keywords":["claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.0.2","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"29b86a4db44520184ec044dd43cc3f7502dc79fb","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.0.2.tgz","fileCount":100,"integrity":"sha512-6sS9EZcciCvdnOufNVTFkNurkVBRbL237ojJI8I85v0JE3oO5VBV/ICUrQjxo7SA3hb8XruW2Mkon2Cg+GmrHA==","signatures":[{"sig":"MEYCIQChMISW5oBZD4itW3P474efW/BP21kWceHmECE4Y5QcrwIhALDG09WdDsP+7tdYTmuKz03IFxf+/llpW+HKhN4DAq6M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":820552},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"80d3e0674e9a5f155d7eb1bcbb803ddea632f4c6","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Claude Code skill — build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.0.2_1776544534080_0.9542906140085394","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ctxr/skill-llm-wiki","version":"1.1.0","keywords":["claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.1.0","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"7dc19302b8dbec6f20b8f1c833c912280f0e63c1","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.1.0.tgz","fileCount":105,"integrity":"sha512-fdMsf2UuMdsAMgSnFFa+PG3rfzvOwEyhcHUZubBSfhOaE7NuM3hYefZoPuRcfXV5rKkPeBstBp7Rvu3ouEG96w==","signatures":[{"sig":"MEUCIQCJu9f/8gGwn9y1RXJavDkklnQRa5PMF1p/rreoSAmLGwIgQjRRfTLccOkr/g8XV0HjSJKhYb1BLhxsUklVJkZ43/U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1100234},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"143e80fa0b1e7f58849eb05f7de3c52be1748c9d","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Claude Code skill — build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.1.0_1777416085959_0.6909701755593249","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ctxr/skill-llm-wiki","version":"1.2.0","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.2.0","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"3bf7d3204e56852526775efec2b36ea1ef1a531a","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.2.0.tgz","fileCount":105,"integrity":"sha512-VGZbb96J8FiPIr03ydxQjZyhGNklbyaVA+Unlx3ftx61qtVKmrbVQ12OZvGpu/NxVJjLd/J/MJY88vB8DV0FHA==","signatures":[{"sig":"MEUCIQDqba/vwGunYNfnTEi43myYcbol+Z+9C4RCA55RH91iHgIgBtfpKyT+Iyzlw5WAMX9bA1x1ypo/ATCT7krVQf73hRw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1118121},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"a02c2482e518b296de693f58fdc8e3f0c9312710","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version","prepublishOnly":"npm run lint && npm test"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.2.0_1779568826072_0.88139027764415","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ctxr/skill-llm-wiki","version":"1.3.0","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.3.0","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"6cb33776d1c0eba2267aef3855e0c90bc2d34f6f","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.3.0.tgz","fileCount":105,"integrity":"sha512-K6x8MSTlrRrX8vz5QX+cDzl+9Gy1jP/Ql8GPRqzzMVqxBPo6fDMyyH3mkbJ+seDvsgHaLakprT6j4CHrM9YGsw==","signatures":[{"sig":"MEYCIQDVG9cHUvEoG6mrxJNCoilTeHnvxP6sEUevleHT82drIQIhAPA3mnnQ1M9HxJO1vndeWkqyVuRitxecKW9rJ1YZGAvW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1120623},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"2bfc9a6a81a2921a41831af267d462e99ec94f44","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version","prepublishOnly":"npm run lint && npm test"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.3.0_1779719212042_0.875187048133349","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ctxr/skill-llm-wiki","version":"1.3.1","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.3.1","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"807493951655a7921b82304e7ed373d6b179fd0b","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.3.1.tgz","fileCount":105,"integrity":"sha512-pVpxizTApvRYGnxOdTyd3AwShlqq6XuIksL1rW5eW1f5Tp4ytjWdjiKlQw++fbXernjP1GxQ6kCf52Nd8GiJqw==","signatures":[{"sig":"MEUCIQDa5QnRaOj0zhrklVDXTzUblAPeps8yZvT8n8u/0Qh23wIgd8Zj6dszhrb4k2pry4hWXk153h+Cg+lx6O1qvsyCu34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1125365},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"df0a927e92e7bf08291cc6a2ed75deaee738a9e3","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version","prepublishOnly":"npm run lint && npm test"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.3.1_1779737650177_0.17067143393051998","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@ctxr/skill-llm-wiki","version":"1.4.1","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.4.1","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"6080926b830ea1fe9bdef04ea558078fe1f0e496","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.4.1.tgz","fileCount":105,"integrity":"sha512-Jxe+cPf4pLyt1dnsdoFQZhQcm9Xwrxfolm82E9idl/00lvyK2AlWnnv06G/v7ITmhcop2A+o7fdoaqHsLRMXbQ==","signatures":[{"sig":"MEQCIET7T5UEhB/H/ErKbM1GYazViR7PxFAgYjltr02AA+1VAiAGwScO37EZUiWW0Yz32PKLknJZHAiu4fxMxx+0iZNyhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1127988},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"828c423be6e69b602383446f3838084276d0b854","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version","prepublishOnly":"npm run lint && npm test"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.4.1_1779954296133_0.8078488086425251","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@ctxr/skill-llm-wiki","version":"1.4.2","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.4.2","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"2d9fb707d165e2a365f4252e98c46e40a02480be","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.4.2.tgz","fileCount":105,"integrity":"sha512-gJFbiBu4YS+tnL0usVDYDju++akWeHDzrcxelK7dJNsH8PwNFTGprNbDqHuztJX3qnH4UCRdWZn1WzglIelhbQ==","signatures":[{"sig":"MEQCIDDroBzP82SihvGVwSEOOBv6AT3luSD2tKjgsueqz07OAiBj3L9zvwjdTyUuBlrxyEoZ1FM24DWcYq79wsrb7SRJJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1127988},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"ccbfc84044c046a38656217e912003909f5e76de","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version","prepublishOnly":"npm run lint && npm test"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.4.2_1779956731947_0.2889606622313645","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@ctxr/skill-llm-wiki","version":"1.4.3","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"license":"MIT","_id":"@ctxr/skill-llm-wiki@1.4.3","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"ctxr":{"type":"skill","target":"folder"},"dist":{"shasum":"5d9682a9ebb93a78fc4affa1987aaf8eeef15a82","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.4.3.tgz","fileCount":105,"integrity":"sha512-AvC+gTRqOtPIF2AfIattLgA+CyhdZ+/r+i040sPa/1Z9tbkG2jwIRoSLhK+hRMnk9bTtYZ3yAjDeTfvVER8gKQ==","signatures":[{"sig":"MEYCIQCAix1hO5wuQTV31qCIQqgC2yUcq1SVwchjJ391x/DIQAIhAKWSsZFlmvE2N+3EoJ3Q2clOZi28du83l2BV+OSBroRN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1128245},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"bfaad41b7b0d369dd76ccde42c6ad23d08ce1fa0","scripts":{"lint":"markdownlint-cli2 '**/*.md' '#node_modules'","test":"node --test","prepare":"husky || true","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","validate":"node scripts/cli.mjs --version","prepublishOnly":"npm run lint && npm test"},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"repository":{"url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git","type":"git"},"_npmVersion":"10.8.2","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"p-retry":"^6.2.0","p-timeout":"^6.1.3","gray-matter":"^4.0.3","@xenova/transformers":"2.17.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/skill-llm-wiki_1.4.3_1780092633329_0.7062921367311301","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@ctxr/skill-llm-wiki","version":"1.4.4","description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git"},"homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"engines":{"node":">=18.0.0"},"keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"ctxr":{"type":"skill","target":"folder"},"publishConfig":{"access":"public"},"bin":{"skill-llm-wiki":"scripts/cli.mjs"},"scripts":{"test":"node --test","validate":"node scripts/cli.mjs --version","lint":"markdownlint-cli2 '**/*.md' '#node_modules'","lint:fix":"markdownlint-cli2 --fix '**/*.md' '#node_modules'","prepare":"husky || true","prepublishOnly":"npm run lint && npm test"},"devDependencies":{"husky":"^9.1.0","markdownlint-cli2":"^0.14.0"},"dependencies":{"@xenova/transformers":"2.17.2","gray-matter":"^4.0.3","p-retry":"^6.2.0","p-timeout":"^6.1.3"},"_id":"@ctxr/skill-llm-wiki@1.4.4","gitHead":"7f9efa0cb18f705f184258db9ade7fccdf8b5326","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-k6qDsvUE2oJA9GoIGCsutzOu4XZ2AHY0skHZzPGtFCSt1WXhHgjkkih9EqmJAJ3QXE8sqLbwl1LFX3jTKMCKqA==","shasum":"57879e9333de45a2e44dca0791e720e78be5ebfc","tarball":"https://registry.npmjs.org/@ctxr/skill-llm-wiki/-/skill-llm-wiki-1.4.4.tgz","fileCount":105,"unpackedSize":1129635,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctxr%2fskill-llm-wiki@1.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICuhQs8TLrU+3VljDoPj0ZtArkQL1cZR6oEARbpXhXcFAiEAw7qN4wixOZnQmHGA/3lhq98laVtzu4HEj4BAfMGWUkI="}]},"_npmUser":{"name":"meshin","email":"dmitri.meshin@gmail.com"},"directories":{},"maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/skill-llm-wiki_1.4.4_1780740642429_0.4544845061002645"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T23:36:26.782Z","modified":"2026-06-06T10:10:42.933Z","1.0.1":"2026-04-15T23:36:27.101Z","1.0.2":"2026-04-18T20:35:34.270Z","1.1.0":"2026-04-28T22:41:26.128Z","1.2.0":"2026-05-23T20:40:26.270Z","1.3.0":"2026-05-25T14:26:52.220Z","1.3.1":"2026-05-25T19:34:10.368Z","1.4.1":"2026-05-28T07:44:56.290Z","1.4.2":"2026-05-28T08:25:32.112Z","1.4.3":"2026-05-29T22:10:33.509Z","1.4.4":"2026-06-06T10:10:42.603Z"},"bugs":{"url":"https://github.com/ctxr-dev/skill-llm-wiki/issues"},"license":"MIT","homepage":"https://github.com/ctxr-dev/skill-llm-wiki#readme","keywords":["agent-skills","agents-md","codex","claude-code","skill","llm-wiki","knowledge-base","documentation","retrieval","ctxr","ai"],"repository":{"type":"git","url":"git+https://github.com/ctxr-dev/skill-llm-wiki.git"},"description":"Agent Skills (Claude Code, Codex CLI): build, extend, validate, rebuild, fix, and join LLM wikis from any knowledge corpus. Token-efficient retrieval via hierarchical indices, DAG parents, and deterministic rewrite operators.","maintainers":[{"name":"meshin","email":"dmitri.meshin@gmail.com"}],"readme":"# skill-llm-wiki — Structured knowledge that your AI can actually use\n\n[![npm](https://img.shields.io/npm/v/@ctxr/skill-llm-wiki)](https://www.npmjs.com/package/@ctxr/skill-llm-wiki)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![CI](https://img.shields.io/badge/CI-Ubuntu%20%2B%20Windows-green)](.github/workflows/ci.yml)\n[![Agent Skills](https://img.shields.io/badge/Agent%20Skills-Claude%20Code%20%7C%20Codex%20CLI-blue)](https://agentskills.io)\n\n> **Turn any folder of markdown, docs, or source into a deterministic, token-efficient knowledge base your AI agent reads the way you'd want it to — once, and only the parts it needs.**\n\nSupports Claude Code and OpenAI Codex CLI via the open Agent Skills standard. Tier 2 sub-agent dispatch follows the [`subagent-dispatch-v1`](https://github.com/ctxr-dev/kit/blob/main/docs/subagent-dispatch-v1.md) envelope.\n\n## The problem every AI-heavy workflow eventually hits\n\nYou want your AI pair — Claude, Cursor, an agent loop, whatever — to *know things*. Architecture decisions. Runbooks. API contracts. Prior postmortems. Team conventions. The messy folder of `.md` notes you've been keeping for eighteen months.\n\nSo you dump it into the context window. And then you watch:\n\n- **Token costs balloon** because every query re-reads the whole thing.\n- **Answers go stale** because the AI grabbed a snippet from a doc that was deprecated three sprints ago.\n- **Irrelevant context bleeds in** and your AI confidently cites something that isn't in scope for this task.\n- **The folder structure drifts** because nobody has time to keep hand-maintained README indexes in sync with reality.\n\nThe fix isn't \"more context window.\" It's **giving your AI a retrieval structure it can actually walk** — one that names what's in each subtree, routes queries to only the relevant leaves, and rewrites itself whenever the shape of the knowledge changes. That's what `skill-llm-wiki` builds.\n\n## What you get\n\nPoint this skill at a folder. It produces an **LLM wiki**: a sibling folder of markdown files organised into a deterministic, token-efficient retrieval structure. Your AI agent reads the root index, makes a semantic routing decision based on each subcategory's `focus` string, descends only into the subtrees that match the current task, and loads exactly the leaves it needs.\n\nThe wiki is **just markdown on disk**. No database, no vector store service, no lock-in. Every file is something you can read, edit, grep, and commit to your own git. The skill adds a hierarchy, a routing grammar, and a history substrate — then gets out of the way.\n\n**Effectiveness, measured on real corpora:**\n\n- **~90% of retrieval decisions resolve without reaching Claude** at all. TF-IDF + local MiniLM embeddings handle the routine cases for free, on-device, with zero API cost.\n- **Token cost scales with *ambiguity*, not corpus size.** A 10,000-entry wiki costs roughly the same per query as a 100-entry wiki when the ambiguity rate is comparable. Decisive decisions short-circuit the ladder.\n- **Dogfooded on itself.** The skill's own operational reference (`guide/`) was rebuilt by the skill. Same content, ~24% smaller on-disk after the convergence loop picked an 8-subcategory nested structure.\n- **Deterministic and reproducible.** Same source + `LLM_WIKI_FIXED_TIMESTAMP=<epoch>` → byte-identical commit and tree SHAs across runs and across machines. Your build is hermetic.\n- **Novel-corpus validated.** The 45-leaf `skill-code-review` corpus builds in one convergence iteration, 13 non-conflicting NESTs applied atomically, zero orphans, `validate` returns 0 errors / 0 warnings.\n\n## Why this matters for AI-heavy workflows\n\nIf you are building anything that involves an AI agent reading your codebase, your docs, your notes, or your decisions — you are already paying a structure tax. Either your agent re-reads too much (token bill balloons, latency climbs, context gets noisy) or it reads the wrong thing (answers drift, confidence is unjustified, debugging takes longer than writing the feature).\n\nA well-structured LLM wiki flips that. Instead of \"cram everything into the prompt and hope the model attends to the right parts,\" you get:\n\n- **Routing discipline.** Your agent walks a semantic hierarchy from the root, and only loads the leaves whose `focus` string actually matches the current task. No blind full-tree reads.\n- **Fresh history, not stale snapshots.** Every operation is a git commit inside a private repo under `<wiki>/.llmwiki/git/`. Roll back a bad rebuild with one command. Diff two operations. Blame a line in an index. Your AI's knowledge base is version-controlled with the same discipline as your code.\n- **Rewrite operators that fire themselves.** When you add 50 new docs and the tree shape drifts, the convergence loop (DESCEND → LIFT → MERGE → NEST → DECOMPOSE) detects the drift, proposes structural changes, gates each one on a routing-cost metric, and commits the ones that objectively improve retrieval. You never have to \"go fix the index table of contents\" again.\n- **It works on anything.** Markdown notes, product docs, API references, research dumps, runbooks, ADRs, policy libraries, source code, mixed folders, whole monorepos — the ingester doesn't care.\n\nThis skill is built for people who ship with AI and want their AI to ship better — AI vibe coders who have moved past \"paste the file and pray\" and want their knowledge base to compound the same way their codebase does.\n\n## How it works (the short version)\n\n1. **Ingest** — walk the source folder, compute content hashes, emit one candidate per file with byte-range provenance so nothing is silently dropped.\n2. **Draft frontmatter** — for each entry, derive `id`, `focus`, `covers[]`, `tags`, and `parents[]` from structure where possible; Claude fills in prose-heavy cases.\n3. **Layout + operator convergence** — the convergence loop applies deterministic rewrite operators (DESCEND, LIFT, MERGE, NEST, DECOMPOSE) until the tree reaches its token-minimal normal form, measured by a `routing_cost` metric. Clusters are proposed via Tier 2 sub-agents; each application is gated on whether it actually improves routing cost and rolled back otherwise.\n4. **Index generation** — every directory gets an `index.md` with machine routing metadata in frontmatter and human/LLM orientation prose in the body.\n5. **Validate + commit-finalize** — hard invariants (id uniqueness, DAG acyclicity, narrowing-chain consistency, byte-range loss check, private-git integrity) run before the operation is allowed to finalise. Any failure rolls back the entire operation to the pre-op snapshot.\n\nEvery phase is a git commit in the wiki's private history, so you can inspect, diff, roll back, and mirror exactly like a real repo — because it is one.\n\n## Features at a glance\n\n- **Git-backed history.** Every operation is a snapshot + a series of per-phase commits under an isolated private git. Rollback, diff, blame, log, reflog, and remote mirroring are first-class skill subcommands — `skill-llm-wiki diff <wiki> --op <id>` is a passthrough to `git diff --find-renames --find-copies` scoped to the op's commit range, rollback is a byte-exact `git reset --hard pre-op/<id>`, and every URL printed by the remote-sync subcommands is redacted by default.\n- **Stable sibling layout.** `<source>.wiki/` is the one folder a wiki ever lives in. No more `.llmwiki.v1`/`.v2`/`.v3` directory proliferation — prior states are reachable as git tags (`pre-op/<id>`, `op/<id>`) in the private repo.\n- **Three layout modes, never guessed.** `sibling` (default), `in-place` (source IS the wiki), and `hosted` (user-chosen path with a `.llmwiki.layout.yaml` contract). Ambiguous invocations refuse and prompt — see the \"Ask, don't guess\" rule.\n- **User-repo coexistence.** An auto-generated `.gitignore` hides the private metadata from any ancestor user git. The skill's isolation env block (`GIT_DIR`, `GIT_CONFIG_NOSYSTEM`, `core.hooksPath=/dev/null`, …) keeps the two gits from leaking into each other.\n- **Tiered AI strategy.** TF-IDF (free) → local MiniLM embeddings (required, ~23 MB one-time model download, zero-API) → Claude (only for mid-band ambiguity and decisions requiring natural-language judgment). `--quality-mode tiered-fast|claude-first|deterministic` selects the escalation policy.\n- **Deterministic slug collisions.** NEST operator auto-resolves slug-vs-member-id collisions with a deterministic `-group` suffix before apply. Your convergence loop never needs manual retries for DUP-ID.\n- **Optional interactive review.** `skill-llm-wiki rebuild <wiki> --review` prints the post-convergence diff and commit list, lets the user approve / abort / `drop:<sha>` specific iterations, and re-runs validation + index regen on the reverted tree.\n- **Windows parity.** The CI matrix runs the smoke suite on both `ubuntu-latest` and `windows-latest`; the isolation env switches `/dev/null` to `NUL` and enables `core.longpaths=true` on Windows.\n\nWorks on any corpus: markdown notes, product docs, API references, research, runbooks, architecture records, policy libraries, source code, mixed folders, whole projects.\n\n## Quick Start\n\n```bash\n# Install into your project\nnpx @ctxr/kit@latest install @ctxr/skill-llm-wiki\n```\n\nThen in Claude Code, ask for any of the six operations:\n\n```text\nBuild an LLM wiki from ./docs\nAdd ./arch to my docs wiki\nValidate my docs wiki\nRebuild my docs wiki\nFix my docs wiki\nMerge my docs and runbooks wikis into a handbook\n```\n\n## Requirements\n\nThis skill has two hard requirements. If either is missing, the skill will refuse to run and print a clear message explaining why and how to fix it.\n\n1. **An Agent Skills-compatible harness** ([Claude Code](https://claude.ai/code) CLI/IDE, OpenAI Codex CLI, or another harness implementing the [open Agent Skills standard](https://agentskills.io)).\n2. **Node.js ≥ 18.0.0.** The skill's deterministic CLI (`scripts/cli.mjs`) is a Node.js program, so Node must be available in the shell the host harness uses to run Bash commands. If Node.js is missing or below the minimum version, the harness will stop the operation before making any changes and relay platform-specific install instructions.\n\n### Verify your environment before invoking the skill\n\nOpen a terminal and run:\n\n```bash\nnode --version\n```\n\n- If you see `v18.0.0` or newer → you're ready.\n- If you see a version below `v18.0.0` → upgrade Node.js before using the skill.\n- If you see `command not found` or similar → install Node.js before using the skill.\n\n### Installing or upgrading Node.js\n\nPick the option for your platform.\n\n**macOS (Homebrew):**\n\n```bash\nbrew install node        # or: brew upgrade node\n```\n\n**macOS / Linux (nvm — recommended for dev machines):**\n\n```bash\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash\nnvm install 20\nnvm use 20\n```\n\n**Linux (Debian/Ubuntu):**\n\n```bash\ncurl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -\nsudo apt-get install -y nodejs\n```\n\n**Linux (RHEL/Fedora):**\n\n```bash\ncurl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -\nsudo dnf install -y nodejs\n```\n\n**Windows (winget):**\n\n```powershell\nwinget install OpenJS.NodeJS\n```\n\n**Windows (Chocolatey):**\n\n```powershell\nchoco install nodejs-lts\n```\n\n**Any platform:** download the official installer from <https://nodejs.org/en/download/>.\n\nAfter installing, open a **fresh** terminal (so the shell picks up the new `PATH`) and verify with `node --version` again.\n\n### Two-layer safety net\n\nThe skill checks Node.js availability before running any operation so you never see cryptic failures:\n\n1. **Preflight (Bash).** Before the first CLI invocation of every operation, Claude runs `node --version` via Bash and stops with a detailed install message if Node is missing or too old. Nothing gets mutated before this check passes.\n2. **Runtime guard (Node).** `scripts/cli.mjs` re-checks `process.version` as its very first action and exits with code 4 and a short message if somehow invoked on an unsupported Node. Defense-in-depth so even a broken shell environment cannot produce a half-finished wiki.\n\nBoth checks fail **loud and early** with a clear explanation and zero side-effects. The skill is safe to point at real folders on any machine.\n\n## Installation\n\n### Via @ctxr/kit\n\n```bash\nnpx @ctxr/kit@latest install @ctxr/skill-llm-wiki            # project-local\nnpx @ctxr/kit@latest install @ctxr/skill-llm-wiki --user     # user-global\n```\n\nInstalls canonically to `.agents/skills/ctxr-skill-llm-wiki/` (or `~/.agents/skills/…` with `--user`); `@ctxr/kit` auto-creates discovery-mirror symlinks at `.claude/skills/` (and `~/.codex/skills/` for user-scope) so Claude Code, Codex CLI, and other Agent Skills harnesses all find the artefact. No post-install wiring, no automatic hooks, no filesystem watchers; the skill is pure standby until you explicitly ask the host harness to run an operation against a specific directory.\n\nThe installed package contains `SKILL.md` (the routing entry point Claude reads at activation), `LICENSE`, `README.md`, `scripts/` (invoked via `node scripts/cli.mjs <subcommand>`, never read as source), and `guide/` (context-specific routing leaves loaded on keyword activation — `hidden-git.md` when the user asks about history or diff, `user-intent.md` when the request is ambiguous, `tiered-ai.md` when the user asks about quality modes, etc.). The internal design doc `methodology.md` is deliberately excluded from the installed package (`files[]` in `package.json` does not list it) so it is never copied into any user environment and never loaded during a session.\n\n### Manual\n\n```bash\ngit clone https://github.com/ctxr-dev/skill-llm-wiki.git /tmp/skill-llm-wiki\nmkdir -p .agents/skills\ncp -r /tmp/skill-llm-wiki .agents/skills/skill-llm-wiki\n```\n\n### Git Submodule\n\n```bash\ngit submodule add https://github.com/ctxr-dev/skill-llm-wiki.git \\\n    .agents/skills/skill-llm-wiki\n```\n\n## Usage\n\nAsk Claude for any of the six operations against a specific target directory. Examples:\n\n```text\nBuild an LLM wiki from ./docs\n# → creates ./docs.wiki/ next to ./docs, initialises the private\n#   git at ./docs.wiki/.llmwiki/git/, tags pre-op/<id> and op/<id>\n\nAdd ./arch to my docs wiki\n# → extends ./docs.wiki/ in place with a new op tag\n\nValidate ./docs.wiki\n# → read-only invariant check; prints findings with severity\n\nRebuild ./docs.wiki --review\n# → runs convergence, prints the diff + per-iteration commit list,\n#   and prompts approve / abort / drop:<sha> before validation\n\nDiff ./docs.wiki --op <op-id> --stat\n# → byte-identical native `git diff --stat` against the private repo\n\nRollback ./docs.wiki --to pre-op/<op-id>\n# → byte-exact reset to the snapshot taken before that operation\n\nFix ./docs.wiki\n# → runs AUTO-class repairs; HUMAN-class findings surface as structured prompts for the user to resolve\n\nMerge ./docs.wiki and ./runbooks.wiki into handbook\n# → creates ./handbook.wiki/ with merged content and rewired references\n```\n\nNothing happens until you ask. The skill performs exactly the operation you request against the target you name, then stops. Ambiguous invocations (two folders would both match, two layout modes are both compatible, a default sibling would stomp on a foreign directory, …) refuse with an `INT-NN` structured error rather than guessing — the skill's \"ask, don't guess\" rule is a hard contract.\n\n## Layout modes\n\nEvery operation accepts `--layout-mode <mode>`; the default is `sibling`. Ambiguous cases refuse and prompt — they are never silently resolved.\n\n### `sibling` (default)\n\n`<source>.wiki/` lives next to `<source>/`. One wiki, one sibling directory, forever. Subsequent Rebuilds update the same sibling in place; prior states are reachable as git tags in the private repo under `<wiki>/.llmwiki/git/`. No `.llmwiki.v<N>` directory proliferation — the private git is the authoritative history substrate.\n\n### `in-place`\n\nThe source folder IS the wiki. `<source>/.llmwiki/git/` is created inside the source itself; the `pre-op/<first-op>` snapshot captures the user's original content byte-for-byte; subsequent operations mutate the source directly. Rollback to the snapshot tag restores the original tree exactly. **Only runs when explicitly requested** with `--layout-mode in-place` — never inferred.\n\n### `hosted`\n\nThe wiki lives at a user-chosen path that carries a `.llmwiki.layout.yaml` contract. Pass `--layout-mode hosted --target <path>`. The contract describes the required directories, allowed entry types, dynamic subdirectory templates (e.g., `daily/{yyyy}-{mm}-{dd}/`), and any additional invariants. Hosted mode is designed for shared team wikis and for \"my wiki lives at `./memory/knowledge/`, I don't want it next to any source folder\" workflows.\n\n### User-repo coexistence\n\nA wiki's filesystem location often sits inside the user's own git repository. The skill's private git never interferes with the user's git: every `git` subprocess runs with a strict isolation env (`GIT_DIR`, `GIT_CONFIG_NOSYSTEM=1`, `GIT_CONFIG_GLOBAL=/dev/null`, `HOME=<tmpdir>`, `core.hooksPath=/dev/null`, …). An auto-generated `<wiki>/.gitignore` hides `.llmwiki/`, `.work/`, and `.shape/history/*/work/` from any ancestor user git. The wiki content itself is plain markdown the user is encouraged to commit.\n\n### Legacy `.llmwiki.v<N>/` auto-migration\n\nWhen the skill encounters a pre-2.0 versioned sibling directory, the intent resolver halts with a migration prompt. On acceptance, the latest version is copied into a new `<source>.wiki/`, the private git is initialised, and the genesis commit is tagged `op/migrated-from-v<N>`. The old folder is left untouched; users prune it manually.\n\n## The Six Operations\n\n| Operation | Purpose | Output |\n| --------- | ------- | ------ |\n| **Build** | Create a new wiki from raw sources | sibling: `<source>.wiki/` · in-place: mutates `<source>/` directly · hosted: user-chosen path under a layout contract |\n| **Extend** | Add new sources to an existing wiki | new per-phase commits + a new `op/<id>` tag on the existing `<wiki>.wiki/` |\n| **Validate** | Read-only invariant check | structured findings report (hard + soft) |\n| **Rebuild** | Optimise structure for token efficiency | new per-phase commits on the same wiki; `--review` gates the commit-finalize step on user approval |\n| **Fix** | Repair methodology divergences | new commits on the existing wiki; HUMAN-class findings surface as structured prompts for user resolution *(minimal build-forward stub for now; full fix pipeline + dedicated INT error code are future work)* |\n| **Join** | Merge two or more wikis into one | new unified wiki at the user-chosen target *(stub; full join pipeline is future work)* |\n\n### Safety envelope (all operations)\n\n- **Sources are immutable** in `sibling` and `hosted` modes; in `in-place` mode every change is anchored by the `pre-op/<op-id>` snapshot tag so rollback is byte-exact.\n- **Every operation is a git sequence.** The pipeline always runs `pre-op snapshot → phase commits → validation → commit-finalize`. Validation failure triggers `git reset --hard pre-op/<id>` + `git clean -fd`; the failed phase commits survive in the reflog for post-mortem.\n- **Rollback, diff, log, show, blame, history, reflog.** All exposed as subcommands and all byte-identical to native `git` under the isolation env. See `skill-llm-wiki diff/log/show/blame/history/reflog <wiki>`.\n- **Phase-commit audit trail.** Each operation decomposes into named phases; every phase (and every operator-convergence iteration) is a git commit so the private repo's log is a complete per-phase audit trail. An interrupted operation can be inspected via `skill-llm-wiki log --op <id>` and rolled back via `skill-llm-wiki rollback <wiki> --to pre-<op-id>`. True mid-phase resume (\"pick up from the last per-item marker\") is scoped as future work.\n- **Deterministic.** Same source + `LLM_WIKI_FIXED_TIMESTAMP=<epoch>` → byte-identical HEAD commit AND tree SHAs across runs and across machines. `newOpId` substitutes the random component for the literal `\"deterministic\"` when the env var is set, so the op-id, tag bodies, commit objects, and tree objects are all reproducible. AI calls are cached by request hash; similarity decisions are cached by content-hash pair.\n- **Atomic commit-finalize.** The final `op/<op-id>` tag is set as the last step of every operation; until that tag exists, the operation is still reversible in one command.\n- **Optional interactive review.** `rebuild --review` prints `git diff --stat` + the per-iteration commit list and prompts approve / abort / `drop:<sha>`. Drops become `git revert --no-edit` commits and the loop re-prompts so the user can drop multiple iterations.\n- **Never-auto-push remote mirroring.** `skill-llm-wiki remote <wiki> add <name> <url>` plus `skill-llm-wiki sync <wiki>` pushes tags (and optionally a branch) to a bare remote the user manages. Tag-only refspec by default; URL credentials are redacted in every echoed line and error message.\n\n## Phase-by-phase pipeline (the long version)\n\nEvery operation runs the same git-backed sequence end-to-end. Phases are explicit so you can read the private git's `log --oneline` after a run and recover the full story of what happened.\n\n1. **Preflight + pre-op snapshot** — Node and git version checks, private-git integrity check, then `git add -A && git commit -m \"pre-op <op-id>\"` + tag `pre-op/<op-id>`.\n2. **Ingest** (Build only) — walk the source tree, compute content hashes, emit entry candidates. Byte-range provenance is recorded to `<wiki>/.llmwiki/provenance.yaml` so `LOSS-01` can verify nothing was silently dropped. Extend / Rebuild / Fix / Join do not currently touch `provenance.yaml`.\n3. **Classify** — group entries into categories. Tiered AI ladder: TF-IDF → local MiniLM embeddings → Claude. Decisive Tier 0 / Tier 1 outcomes never reach Claude.\n4. **Draft frontmatter** — derive `id`, `focus`, `covers[]`, `activation`, `tags`, `parents[]` from structure where possible; Claude fallback for prose-heavy sources.\n5. **Layout** — place entries in a draft tree honouring the narrowing-chain rule.\n6. **Operator convergence** — apply DESCEND, LIFT, MERGE, NEST, DECOMPOSE in priority order until the tree reaches its normal form. One git commit per iteration so `git log pre-op/<id>..HEAD` reads like a per-iteration audit trail.\n7. **Review (optional, `--review` only)** — print `git diff --stat` + commit list; accept approve / abort / drop:<sha> from the user. Drops land as `git revert --no-edit` commits and the loop re-prompts.\n8. **Index generation** — emit a unified `index.md` at every directory with machine routing metadata in frontmatter and human/LLM orientation in the body.\n9. **Validation** — run hard invariants including the new `GIT-01` (private-git integrity under the isolation env) and `LOSS-01` (byte-range coverage equals source size). Failure triggers `git reset --hard pre-op/<id>` + `git clean -fd`.\n10. **Commit-finalize** — tag the final commit `op/<op-id>`, append to `<wiki>/.llmwiki/op-log.yaml`, delete the live `.work/` scratch directory. *(A \"golden-path\" phase that compares routing-fixture load sets against the prior op and a `.work/` → `.shape/history/<op-id>/` archive step are scoped as future work.)*\n\n## Wiki format\n\nEvery directory in a wiki holds exactly one `index.md`:\n\n```markdown\n---\nid: installation\ntype: index\ndepth_role: category\ndepth: 1\nfocus: installing the product on supported platforms\nparents:\n  - ../index.md\nshared_covers:\n  - prerequisite checks\n  - post-install validation\nentries:\n  - id: linux\n    file: linux.md\n    type: primary\n    focus: installing on Linux distributions\n  - id: macos\n    file: macos.md\n    type: primary\n    focus: installing on macOS\nchildren: []\n---\n<!-- BEGIN AUTO-GENERATED NAVIGATION -->\n# Installation\n## Children\n| File | Type | Focus |\n| ... |\n<!-- END AUTO-GENERATED NAVIGATION -->\n<!-- BEGIN AUTHORED ORIENTATION -->\nHuman/LLM-authored prose, preserved across regenerations.\n<!-- END AUTHORED ORIENTATION -->\n```\n\nLeaves are `<id>.md` files with their own frontmatter (`id`, `type`, `focus`, `covers[]`, `parents[]`, `activation`, `tags`, `aliases`, `links`, `source`). The root `index.md` additionally carries a `generator: skill-llm-wiki/v1` marker that scripts use as a safety check before mutating anything.\n\n## Architecture\n\nThe installed skill contains only what Claude needs at runtime. Everything Claude reads is in `SKILL.md`; everything it executes is in the `scripts/` CLI.\n\n```text\nskill-llm-wiki/             # installed package layout\n├── SKILL.md                # the ONLY file Claude reads — fully self-contained\n├── README.md               # human-facing docs (this file)\n├── LICENSE\n├── guide/                  # routing-time leaves loaded by Claude on keyword activation\n│   ├── hidden-git.md       #   using the private git for history / diff / blame\n│   ├── layout-modes.md     #   sibling vs in-place vs hosted\n│   ├── user-intent.md      #   \"ask, don't guess\" scenarios\n│   ├── tiered-ai.md        #   tier ladder and quality modes\n│   ├── remote-sync.md      #   remote mirroring + redaction\n│   └── …                   #   (coexistence, scale, diff, in-place-mode, safety, operations/*)\n└── scripts/\n    ├── cli.mjs             # Deterministic CLI dispatcher — invoked, never read\n    ├── commands/           # Command-level orchestrators\n    │   ├── review.mjs      #   --review flow for rebuild\n    │   ├── remote.mjs      #   remote add/list/remove\n    │   └── sync.mjs        #   remote sync (tag-only default refspec)\n    └── lib/\n        ├── git.mjs         # THE git subprocess spawner — isolation env + redaction\n        ├── git-commands.mjs     # log/show/diff/blame/history/reflog subcommand bodies\n        ├── gitignore.mjs   # auto-writer for the wiki-local `.gitignore`\n        ├── paths.mjs       # Sibling/in-place/hosted recognition + `.llmwiki/git/` detection\n        ├── snapshot.mjs    # preOpSnapshot + tag helpers\n        ├── rollback.mjs    # ref verification + reset/clean\n        ├── history.mjs     # op-log append/read, entry history traversal\n        ├── provenance.mjs  # byte-range record / verifyCoverage (LOSS-01 source)\n        ├── chunk.mjs       # Buffer-first frontmatter-only async iterator\n        ├── preflight.mjs   # Node + git + wiki-fsck checks\n        ├── intent.mjs      # layout-mode / target / op resolver (INT-NN errors)\n        ├── interactive.mjs # stdin prompts; non-TTY → hard error\n        ├── similarity.mjs  # Tier 0 — TF-IDF + cosine\n        ├── embeddings.mjs  # Tier 1 — MiniLM via @xenova/transformers (required)\n        ├── similarity-cache.mjs # pairwise memoisation\n        ├── decision-log.mjs     # .llmwiki/decisions.yaml writer\n        ├── tiered.mjs      # escalation orchestrator + quality modes\n        ├── migrate.mjs     # legacy .llmwiki.v<N> → .wiki migration flow\n        ├── operators.mjs   # The five rewrite operator primitives\n        ├── nest-applier.mjs # NEST apply + deterministic slug collision resolver\n        ├── cluster-detect.mjs # NEST candidate clusterer (affinity + threshold sweep)\n        ├── quality-metric.mjs # routing_cost metric for NEST gating\n        ├── frontmatter.mjs # Zero-dep YAML frontmatter parser/writer\n        ├── ingest.mjs      # Source walk + content hashing\n        ├── draft.mjs       # Deterministic frontmatter drafting + provenance record\n        ├── indices.mjs     # Unified index.md rebuild\n        ├── validate.mjs    # Hard-invariant checks including GIT-01 / LOSS-01\n        ├── shape-check.mjs # Operator candidate detection (hook-mode path; no git)\n        └── orchestrator.mjs # Per-phase commit pipeline\n```\n\n`SKILL.md` and the `guide/` leaves are the only files Claude reads at routing/session time; the `scripts/` source is invoked as a process, never read. Every CLI subcommand's inputs, outputs, and exit codes are documented in `SKILL.md` so no source inspection is ever necessary during a session.\n\nThe development repository also contains `methodology.md`, an internal design reference for maintainers (sections 9.4.2/9.4.3/9.9/9.10 are the normative source for this README's \"Layout modes\", \"Ask, don't guess\", \"git-backed history\", and \"tiered AI\" content respectively). It is deliberately excluded from the installed package.\n\nThe CLI subcommands you will see the skill invoke:\n\n```bash\n# Top-level operations (routed through intent.mjs)\nnode scripts/cli.mjs build <source> [--layout-mode sibling|in-place|hosted] [--target <path>]\nnode scripts/cli.mjs extend <wiki> <source>\nnode scripts/cli.mjs validate <wiki>\nnode scripts/cli.mjs rebuild <wiki> [--review]\nnode scripts/cli.mjs fix <wiki>\nnode scripts/cli.mjs join <target> <wiki-a> <wiki-b> [<wiki-c> ...]\nnode scripts/cli.mjs rollback <wiki> --to <ref>\nnode scripts/cli.mjs migrate <legacy-wiki>\n\n# Hidden-git plumbing (all run under the isolation env)\nnode scripts/cli.mjs log <wiki> [--op <id>] [git-log-args...]\nnode scripts/cli.mjs show <wiki> <ref> [-- <path>]\nnode scripts/cli.mjs diff <wiki> [--op <id>] [git-diff-args...]\nnode scripts/cli.mjs blame <wiki> <path>\nnode scripts/cli.mjs history <wiki> <entry-id>\nnode scripts/cli.mjs reflog <wiki>\n\n# Remote mirroring (never auto-pushes)\nnode scripts/cli.mjs remote <wiki> add <name> <url>\nnode scripts/cli.mjs remote <wiki> list\nnode scripts/cli.mjs remote <wiki> remove <name>\nnode scripts/cli.mjs sync <wiki> [--remote <name>] [--push-branch <branch>] [--skip-fetch] [--skip-push]\n\n# Low-level helpers (invoked by SKILL.md routing, not user-facing)\nnode scripts/cli.mjs ingest <source>\nnode scripts/cli.mjs draft-leaf <candidate-file>\nnode scripts/cli.mjs draft-category <candidate-file>\nnode scripts/cli.mjs index-rebuild <wiki>\nnode scripts/cli.mjs index-rebuild-one <dir> <wiki>\nnode scripts/cli.mjs shape-check <wiki>\n\n# Legacy helpers (still present for pre-Phase-2 `.llmwiki.vN` wikis)\nnode scripts/cli.mjs resolve-wiki <source>\nnode scripts/cli.mjs next-version <source>\nnode scripts/cli.mjs list-versions <source>\nnode scripts/cli.mjs set-current <source> <version>\n```\n\n## Validation invariants\n\nEvery wiki passes the same set of hard invariants:\n\n- `id` matches filename (leaves) or directory name (index files)\n- `depth_role` matches actual tree depth\n- **Strict narrowing** along every canonical `parents[0]` chain up to the root\n- `parents[]` required and non-empty on every non-root entry\n- **DAG acyclicity** — walking `parents[]` transitively never revisits the start\n- **Canonical-parent consistency** — the entry lives inside `parents[0]`'s directory; soft parents only cross-reference\n- No duplicate `id` anywhere; aliases do not collide with live ids\n- `overlay_targets`, `links[].id`, and `parents[]` resolve via id or alias\n- **Parent-file contract** — index bodies contain navigation and orientation only, no leaf-shaped content\n- Every directory containing entries has a valid `index.md`\n- Leaf size caps (500 lines for primaries, 200 for overlays)\n- Source integrity — if `source.hash` is set, upstream content must still match\n- **`GIT-01` — private-git integrity.** When `<wiki>/.llmwiki/git/HEAD` exists, `git fsck --no-dangling --no-reflogs` must succeed under the isolation env, and — when the op-log has at least one entry — the most recent logged op's `pre-op/<op-id>` tag must exist and be reachable from HEAD.\n- **`LOSS-01` — byte-range coverage.** When `<wiki>/.llmwiki/provenance.yaml` exists, for every source file recorded in it, the total byte coverage (`sources[].byte_range` + `discarded_ranges[].byte_range`) must equal the manifest-recorded `source_size`, with no overlapping ranges. Sizes are read from the manifest so the check runs without needing access to the original source tree.\n\nSoft shape-signals (operator candidates, golden-path regressions, coverage holes) are reported separately and drive the next Rebuild without blocking current operations.\n\n## Tiered AI strategy\n\nEvery decision the skill makes is classified against a three-tier ladder and escalated only when necessary:\n\n| Phase                              | Primary tier                              | Escalation | Notes |\n|------------------------------------|-------------------------------------------|------------|-------|\n| ingest / layout / index / validate / commit / routing | None (deterministic scripts) | —        | No similarity, no generation. |\n| classify / operator-convergence / join collisions | TF-IDF → MiniLM embeddings → Claude | Full ladder | >90% of decisions resolve at Tier 0 or 1 on typical corpora. |\n| draft-frontmatter                  | Heuristic extractor → Claude               | Skip Tier 1 | Generation, not similarity. Claude only for prose-heavy sources. |\n| Fix — AI-ASSIST class              | Claude                                    | —          | Content generation. |\n| Fix — HUMAN class                  | User prompt                               | —          | Always asks. |\n\nQuality modes select the escalation policy:\n\n- `tiered-fast` (default) — full Tier 0 → 1 → 2 ladder.\n- `claude-first` — skip Tier 1; mid-band Tier 0 escalates straight to Claude.\n- `deterministic` — no LLM in the loop; Tier 1 mid-band resolved by a static threshold, cluster naming produced from member frontmatter. Byte-reproducible builds for air-gapped / hermetic CI use.\n\nTier 1 uses `@xenova/transformers` running `Xenova/all-MiniLM-L6-v2` locally via ONNX (~23 MB one-time model download, ~50 ms per text on CPU, zero API cost). It is a **required** runtime dependency since v0.4.0 — the dependency preflight at CLI startup verifies it is resolvable, and will offer to `npm install` it on a fresh checkout if it is missing.\n\nToken cost is proportional to *ambiguity*, not to corpus size. A 10k-entry wiki takes roughly the same Claude budget as a 100-entry wiki when it produces the same number of mid-band decisions. All AI calls are cached by request hash at `.work/ai-cache/` and all pairwise similarity decisions are cached at `.llmwiki/similarity-cache/` so resumes and re-runs replay free.\n\n## Development\n\n```bash\nnpm test                         # run smoke tests\nnode scripts/cli.mjs --version   # print CLI version\nnode scripts/cli.mjs --help      # list subcommands\n```\n\nSmoke tests verify: frontmatter roundtrip, source ingest, hand-built wiki validates, index-rebuild idempotency, and the script safety net against unrelated folders.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}