{"_id":"@bacnh85/pi-selfskills","_rev":"8-106c81fe69117d2a87e55403d28d6e71","name":"@bacnh85/pi-selfskills","dist-tags":{"latest":"0.3.6"},"versions":{"0.2.0":{"name":"@bacnh85/pi-selfskills","version":"0.2.0","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.2.0","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"6f8acbd6377ec4aa8e7674e5d2342a0f5690cc08","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.2.0.tgz","fileCount":10,"integrity":"sha512-muTD2JDCLIhal4g5VLHh3VGm+jeYvw3DwvSxFktANLVZOIzjmgUmOMPm5AAFEeQUUliFwU1McKKeEFH8GRRimA==","signatures":[{"sig":"MEQCIDEpq0lHc/otInYkPjsp9L0/lS6cVoUYOLhSipMDjfnrAiAWa1700VbV5atrmBwFeWpv0VltnQ/2UfCJLPYg0u1eyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83992},"gitHead":"3a1ee71015f97c645ed4aff0bff780a167449683","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.2.0_1788941529103_0.8721423369564776","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bacnh85/pi-selfskills","version":"0.3.0","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.3.0","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"5b3365b055583f29a0a7e08640146525cfcfd44c","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.0.tgz","fileCount":10,"integrity":"sha512-Q1f07v7f9AB8src+FM7yNYqHAqcTma3Y+4ArXDLtxhIXHT2eIdlcrEJ84EjyFt38yJk+LR4UfgIfYZszoSL5aA==","signatures":[{"sig":"MEYCIQD7LQnlMCbjiHC8/wRl4GKqUXsvBM18jz47//XH55sxQQIhAMiaGHPgy4MpTqlF8Hh5t+JCxp6tUF3bYAVfPz1PbtaJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCKgg8bJVZzXRINtLk8xmvN0IHXDclN/udGxwsgIgUwVQIhAOolbpBMPUcaJJs4r9HoPb6+7oeOHgcMCexovR9PkPX9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88381},"gitHead":"6497d5348316c955a56b3e36a1fd00960fa7cde8","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.3.0_1789098016301_0.027122351195546957","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bacnh85/pi-selfskills","version":"0.3.1","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.3.1","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"d7fb8bfe740cb394f4f49c5b42a52e3aff2d42a7","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.1.tgz","fileCount":10,"integrity":"sha512-NyaHbScg5LIFXr1WyIyHlCu2AwVB9NlG/BLuMw2VO4eryfmNdkqbsGOiLIHt7hzY1SchQTyj8KDjiEIY8fTiPQ==","signatures":[{"sig":"MEUCIETkeey5P7ALKlCiiy8zbQQMGraDl7BFHXRr+8pPJFAAAiEA7J9MP/x7KI4ldjnm64Ri6xXA7+ZxF/mHHyWuAD27jPY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHa5EJvid8vDvzx730/xyYhdCn9kkXwAD36ZqSTAmx3nAiAhvpl6+LR0WfANba58CDJt1n0KTWAPxwOr6ueuwhLnyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88885},"gitHead":"e7d842305eee372c453f3df9e30c44b394ab56d5","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.3.1_1789098278552_0.1328549912424799","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bacnh85/pi-selfskills","version":"0.3.2","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.3.2","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"79397cee7a99c6db01620776c2f663340232ce8f","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.2.tgz","fileCount":10,"integrity":"sha512-Yd93TZvdzv81yt0b4A5q9oMjLkgt9YWtrFoR5poUYV9lDMh0AlLn1nZu8F/HtFrzUr1DF491gtdv8Ljy9r3Qwg==","signatures":[{"sig":"MEUCIQDG8ZAbJhuo0o33PNi5PPbe+h3tpaMKYj14GIswUfhcpwIgNIsty3UoKoV7am+Uxo3AM9J7CaPAo6DW74YukfUsFVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDuBmo9oKA79w3VXkYl4DL5i2+CTqilVGEcUbosQHuDBQIhAITJ4WMqS4tbDbO/w+4/bAFGEW1LolKQhtuEISWYAUgX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89365},"gitHead":"d00c3deaa5f3423b44adc2e160397b2feaf8465f","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/write/delete/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.3.2_1789881037840_0.86372218677497","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@bacnh85/pi-selfskills","version":"0.3.3","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.3.3","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"ecafd80410715a8f4d27df19e8b107760700aaf0","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.3.tgz","fileCount":10,"integrity":"sha512-/wkNoT/33mJd0w/vA00Nho0DFsmcUExFw4Yu85QGI5MU2kSmzVHFRmd17a5TiAxPkZj8h5G5ic9RhPlBo6dIDA==","signatures":[{"sig":"MEYCIQDvqWkvU+P+53CgnQTgC718YbajlT/mO9BPhUVUj9bK4gIhALzqD49ZAj3WZ5CmBnnWhFxNVdkvsJb7Ud3hIP2IYXzU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFkOtz0lHWAPc7XE5tecmCIzrs4mqBwWJu1QsSynGGkYAiBzROz5+ICVuPtQ2Bk3fCCfW2zMbEE6FpTShn9pCcUTog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89498},"gitHead":"b5330ac3d014f92dff97a2b90cd9ebdbf0de22fd","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/write/delete/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.3.3_1789962648581_0.6770618019278518","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@bacnh85/pi-selfskills","version":"0.3.4","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.3.4","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"ca522380d693807ee1482fef3c502b85490fbafe","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.4.tgz","fileCount":10,"integrity":"sha512-qrD8GeaifSrbhWW6e2Vrvufn/sZilLHNYsGAndXfmN1mYboz1STFmpIKKB+aIKKkeQ7EK/Hpp/BceApTQpTVHw==","signatures":[{"sig":"MEUCIQCU1A9VN72hUUx4mFQbPQWVCCTbcxt5BqkSsxDi9bwtTAIgVfv9Iee/nEUSI4w4s7kX+L6UJ1BbQPOSGgtI1RwAMnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCP6bDrV+0DThigO/80L+YFl4TzQk+Ufz167qX2CyJ4xwIhAOIeRo0b/dWPi/K3BgabQh30QA9tyH375pbsAvmYF1ER","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91997},"gitHead":"e0ab9215e2df54e5fa42f1c6cc6f616124fdea95","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/write/delete/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.3.4_1790123287641_0.33181626463814484","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@bacnh85/pi-selfskills","version":"0.3.5","keywords":["pi-package","pi-extension","self-improvement","skills"],"license":"MIT","_id":"@bacnh85/pi-selfskills@0.3.5","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"dist":{"shasum":"f5017ec038fd91b5d295a64f440d361526af6a4d","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.5.tgz","fileCount":10,"integrity":"sha512-ttmQpAJOKq5AEDGGGMwguacp+n8M8i8xspoYuSedX6plNehKMp+ea+Ka68+wfMrJq9kNqP9VoXaCmfXgnTXF8w==","signatures":[{"sig":"MEUCIDZW3wMdBP2SSSV8HncrBO/LZeA1pu3Q2hW7ap7MFjC3AiEA+fPlqmPHiMa7WNWus3fZe9x+y9R+ITDZoTmjjP5Kqtc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICErlOeeExzhCIWUuh3Na3cs1EQvJtdoMnx8FnbaTqkdAiAtT2GR7OCyOZVGyNKMHWJCny2xZyuAfG1Pn+jYHozGvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93091},"gitHead":"47ee5073837a97916572d769f13d86f55d54ef00","scripts":{"test":"cd extensions && npx mocha"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/write/delete/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-selfskills_0.3.5_1790209496291_0.6121000645210386","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"pi":{"skills":["./skills"],"extensions":["./extensions/index.ts"]},"_id":"@bacnh85/pi-selfskills@0.3.6","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"dist":{"shasum":"0eb4244d46c7e9a4646873500ac79b1c33027a0f","tarball":"https://registry.npmjs.org/@bacnh85/pi-selfskills/-/pi-selfskills-0.3.6.tgz","fileCount":10,"integrity":"sha512-pgyn5I0eJ/5IBiwUEBxS5Etda3ZDIlCrIwHc8ZazxoWMlW38T5Vdcmq5rwa0n0IhFyT5UIR45K7Ekzgul2eriQ==","signatures":[{"sig":"MEUCIQC4xRgdZAlgqP4IJOhc/NvcJ6RlB6NO2pHwZdjms/r9hgIgSfOA6tjgAL/E5hzzd+zQnOIU6OqBVc1PH8wI6kdhDaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDXoHsyP5iK4gDg48X9oYhsqiIg5fhSj3M5jLgCPIS55QIgJAlBuBotqqDUzxPVT7woVibX6W17k7WWfA6GWZfAO98="}],"unpackedSize":93912},"name":"@bacnh85/pi-selfskills","gitHead":"90930b50f5fc0a4491a748ee1692db40f7ec358a","license":"MIT","scripts":{"test":"cd extensions && npx mocha"},"version":"0.3.6","_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","keywords":["pi-package","pi-extension","self-improvement","skills"],"overrides":{"serialize-javascript":"7.0.7"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"_npmVersion":"10.9.8","description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/write/delete/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","directories":{},"maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","chai":"^4.3.0","mocha":"^10.8.2","@types/node":"^20.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-selfskills_0.3.6_1790555353400_0.5153635310857929"}}},"time":{"created":"2026-09-09T08:12:08.844Z","modified":"2026-09-28T00:29:13.665Z","0.2.0":"2026-09-09T08:12:09.224Z","0.3.0":"2026-09-11T03:40:16.391Z","0.3.1":"2026-09-11T03:44:38.633Z","0.3.2":"2026-09-20T05:10:37.933Z","0.3.3":"2026-09-21T03:50:48.673Z","0.3.4":"2026-09-23T00:28:07.726Z","0.3.5":"2026-09-24T00:24:56.371Z","0.3.6":"2026-09-28T00:29:13.499Z"},"bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"license":"MIT","homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-selfskills","keywords":["pi-package","pi-extension","self-improvement","skills"],"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git","directory":"pi-selfskills"},"description":"Pi extension for skill self-improvement — one skill_manage tool (list/read/patch/create/write/delete/restore) to patch gaps in loaded skills and create new ones, with a writable-root allowlist, SDK validation, and content-addressed backups.","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"readme":"# @bacnh85/pi-selfskills\n\nPi extension for **skill self-improvement**: one `skill_manage` tool that lets\nthe agent patch gaps in its own loaded skills and create new skills for\nrecurring procedures — with a writable-root allowlist, real SDK validation,\natomic writes, and content-addressed backups. Ships a `selfskills` doc-skill\n(long-form patch/create discipline) and injects a compact standing-rules block\neach turn (patch-by-exception default: most tasks end with no skill write).\n\n## Why\n\nSkills rot the first time reality disagrees with them. Without tooling the\nagent either silently works around a stale skill or rewrites the whole file by\nhand. `pi-selfskills` makes the fix a first-class, guarded action: targeted\npatch in the same turn the gap surfaces, validated against the same loader pi\nuses at startup, with an automatic backup and a one-step restore.\n\n## Tool: `skill_manage`\n\n| Action | Params | What it does |\n|---|---|---|\n| `list` | `skill?` (filter) | Discovered skills: name — description (first 100 chars) — path — patchable yes/no |\n| `read` | `skill` \\| `path`, `file?` | SKILL.md (default) or a bundled file; truncated at 30k chars; records THAT file as read — reading a bundled file does not unlock patch/write/delete (those gate on the SKILL.md read state). Scoped to discovered skill dirs — no arbitrary-file reads |\n| `patch` | `skill`\\|`path`, `old_string`, `new_string` | Targeted replacement; backup first; refuses non-unique matches and invalid results |\n| `create` | `name`, `description`, `body` | New skill `<skillsDir>/<name>/SKILL.md`, SDK-validated |\n| `write` | `skill`\\|`path`, `file`, `content` | Create/overwrite a bundled file (`references/*.md`, `scripts/…`); SKILL.md is patch-only; overwrites backed up |\n| `delete` | `skill`\\|`path`, `file?` | Delete a bundled file — or the whole skill (omit `file`): full snapshot first, always restorable |\n| `restore` | `skill`\\|`path`, `file?`, `backup?` | Revert SKILL.md or a bundled file to latest/named backup; recreate a deleted skill from its deletion snapshot; current content backed up first |\n| `operations` | `[{action: patch\\|write\\|delete, …}]` | All-or-nothing batch: planned on an in-memory overlay, fully validated, committed together — any PLANNING failure writes NOTHING. A commit-time filesystem failure (hash re-check against a file changed on disk mid-flight, unreadable target) may partially apply and is reported with what landed |\n\n```text\nskill_manage { \"action\": \"list\" }\nskill_manage { \"action\": \"read\",  \"skill\": \"my-skill\" }\nskill_manage { \"action\": \"patch\", \"skill\": \"my-skill\",\n               \"old_string\": \"Run npm build.\", \"new_string\": \"Run npm run build.\" }\nskill_manage { \"action\": \"create\", \"name\": \"deploy-checks\",\n               \"description\": \"Use when deploying. Verifies health after rollout.\",\n               \"body\": \"1. ...\\n2. ...\" }\nskill_manage { \"action\": \"restore\", \"skill\": \"my-skill\" }\n```\n\nPatch gates, in order: non-empty `old_string` ≠ `new_string` → file was read\nthis session → **file unchanged since read** (hash precondition — re-read and\nretry on mismatch) → path inside a writable root → `old_string` occurs exactly\nonce → patched result passes real SDK skill validation → backup → atomic write\nunder the shared file-mutation queue.\n\n**Writable roots** (everything else is refused):\n\n- `<agentDir>/skills` (i.e. `$PI_CODING_AGENT_DIR/skills` or `~/.pi/agent/skills`)\n- `<cwd>/.pi/skills` — only when the project is trusted (`isProjectTrusted()`)\n- project `.agents/skills` (cwd + ancestors up to the git root) — trusted projects,\n  unless `patchProjectAgents: false`\n- local package skill dirs from settings `packages` — unless `patchPackages: false`\n- the `selfskills.skillsDir` override\n\n**Read-only by policy:** user-level `~/.agents/skills`, `npm:`/`node_modules`\npackage skills, skills from settings skill arrays / `--skill` flags, anything in\n**untrusted** projects (including their declared packages — never scanned), and\nanything outside the roots above.\n\n## Command\n\n`/selfskills` — status: enabled, inject, skills dir, discovered skills, backup count.\n\n## Configuration (`settings.json`, key `selfskills`)\n\n| Key | Default | Meaning |\n|---|---|---|\n| `enabled` | `true` | Master switch; `false` disables the tool and injection |\n| `inject` | `true` | Prepend the standing-rules block to the system prompt each turn |\n| `skillsDir` | `~/.pi/agent/skills` | Create target dir (tilde-expanded); also a writable root |\n| `backupCap` | `10` | Backups kept per skill (oldest pruned) |\n| `patchPackages` | `true` | Patch skills in LOCAL packages from settings `packages` (monorepo source; git + backups make it safe). `npm:`/`node_modules` package skills are always read-only. |\n| `patchProjectAgents` | `true` | Patch project `.agents/skills` in trusted projects, within the git boundary (the project dir itself when not git-tracked). User-level `~/.agents/skills` stays read-only. |\n\nSettings resolve `<cwd>/.pi/settings.json` (trusted projects only — mirrors\nPi's own trust gating, so an untrusted repo cannot steer this extension)\n`→` `<agentDir>/settings.json` where `<agentDir>` is `$PI_CODING_AGENT_DIR`\nor `~/.pi/agent`; first found wins.\n\nnpm-installed package skills and skills from settings skill arrays / `--skill`\nflags may be absent from `list` (read-only regardless). LOCAL package skills\n(monorepo checkouts) are listed and patchable unless `patchPackages: false`.\n\n## Backups\n\nContent-addressed snapshots live under\n`~/.pi/agent/selfskills/backups/<skill>/<relpath>/<yyyyMMdd-HHmmss.mmm>-<sha256[:10]>.md`\nwhere `<relpath>` mirrors the file inside the skill dir (`SKILL.md` for the\nskill file; v0.1 flat SKILL.md backups remain restorable). Whole-skill\ndeletions snapshot to `<skill>/__deleted__/<stamp>/…`. Manual restore is just\na copy:\n\n```bash\ncp ~/.pi/agent/selfskills/backups/my-skill/SKILL.md/<yyyyMMdd-HHmmss.mmm>-<hash>.md \\\n   ~/.pi/agent/skills/my-skill/SKILL.md\n```\n\n## Install\n\n```bash\npi install @bacnh85/pi-selfskills\n```\n\n## Test\n\n```bash\nnpm ci && npm test   # mocha + tsx, tmpdir-isolated\n```\n","readmeFilename":"README.md"}