{"_id":"@avnsiva/pi-ratel","_rev":"2-f372b98d5d535976ed897b9d5036d8a0","name":"@avnsiva/pi-ratel","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@avnsiva/pi-ratel","version":"0.1.0","keywords":["pi-package"],"license":"MIT","_id":"@avnsiva/pi-ratel@0.1.0","maintainers":[{"name":"avnsiva","email":"siva215@gmail.com"}],"pi":{"extensions":["./extensions/index.ts"]},"dist":{"shasum":"27417c0abbb226cd0a4d328d63810d741bebc42b","tarball":"https://registry.npmjs.org/@avnsiva/pi-ratel/-/pi-ratel-0.1.0.tgz","fileCount":7,"integrity":"sha512-3bRECKKN1rpMlQy5+oLoosBm16qKVn8U1pquW/HXeadttYoCYywDOyuwJWDHTsJVCxdK+lsX9IXOwzM4HFDfPg==","signatures":[{"sig":"MEYCIQCbkQqJMhAKa4Dy/Q+S3bD6oxiso5EsMebgWlyvbSYLjgIhAPmY7lNB8PJThMSN0qCeOic6jh6nzYgS03H1yFxWhCOG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31403},"main":"./extensions/index.ts","type":"module","scripts":{"test":"bun test","typecheck":"tsc --noEmit"},"_npmUser":{"name":"avnsiva","email":"siva215@gmail.com"},"_npmVersion":"11.16.0","description":"Ratel context engineering plugin for Pi — progressive capability disclosure, BM25 tool/skill retrieval, dynamic deferred loading, and system prompt pruning.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"@ratel-ai/sdk":"^0.12.0","@sinclair/typebox":"^0.34.52"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.5.0","@earendil-works/pi-coding-agent":"*"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-ratel_0.1.0_1788880662700_0.032112220101587985","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@avnsiva/pi-ratel","version":"0.1.1","description":"Ratel context engineering plugin for Pi — progressive capability disclosure, BM25 tool/skill retrieval, dynamic deferred loading, and system prompt pruning.","keywords":["pi-package"],"type":"module","main":"./extensions/index.ts","pi":{"extensions":["./extensions/index.ts"]},"license":"MIT","scripts":{"typecheck":"tsc --noEmit","test":"bun test"},"dependencies":{"@ratel-ai/sdk":"^0.12.0","@sinclair/typebox":"^0.34.52"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"devDependencies":{"@earendil-works/pi-coding-agent":"*","@types/node":"^26.5.0","typescript":"^7.0.2"},"_id":"@avnsiva/pi-ratel@0.1.1","_nodeVersion":"26.3.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-qTMP2hvVJP+XU+9Mfvlp0SwGPvqEKacpep+f8KB2Glnh4cgHu6SexVyH4yxNVRa3R6r7f1RqBj9Vxx3xKpryZw==","shasum":"8acf283706ad4e990e0b49b334278cd571bd938f","tarball":"https://registry.npmjs.org/@avnsiva/pi-ratel/-/pi-ratel-0.1.1.tgz","fileCount":7,"unpackedSize":31403,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCjiEn6rGMqglrUXDFej1fU3c38rwQCAWNP+pn21IwxsQIhAJ4YKR1omlf8XplhJFxKbrS/Ds3R80jL/fri8NQWL8ni"}]},"_npmUser":{"name":"avnsiva","email":"siva215@gmail.com"},"directories":{},"maintainers":[{"name":"avnsiva","email":"siva215@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-ratel_0.1.1_1788880735793_0.4707320157476531"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-08T15:17:42.335Z","modified":"2026-09-08T15:18:56.070Z","0.1.0":"2026-09-08T15:17:42.842Z","0.1.1":"2026-09-08T15:18:55.911Z"},"license":"MIT","keywords":["pi-package"],"description":"Ratel context engineering plugin for Pi — progressive capability disclosure, BM25 tool/skill retrieval, dynamic deferred loading, and system prompt pruning.","maintainers":[{"name":"avnsiva","email":"siva215@gmail.com"}],"readme":"# pi-ratel\n\n**Context engineering plugin for the [Pi coding agent](https://github.com/earendil-works/pi-coding-agent), powered by [Ratel](https://github.com/ratel-ai/ratel).**\n\nCuts input token usage by ~70–90% on multi-skill, multi-tool agent setups by replacing up-front context loading with in-process BM25 progressive capability disclosure.\n\n---\n\n## The Problem\nDefault Pi sessions inject:\n- Every discovered skill into `<available_skills>` in the system prompt (~3,000–8,000 tokens/turn).\n- All registered tool JSON schemas into the model request (~2,500–5,000 tokens/turn).\n\nIn a session with 25 tools and 40 skills, the agent pays **5,500–13,000 tokens of input overhead on every single turn**.\n\n## How pi-ratel Fixes It\n1. **System Prompt Pruning:** Intercepts `before_agent_start`, indexes all skills into Ratel's `SkillCatalog`, and strips `<available_skills>` from the system prompt.\n2. **Lean Tool Initial State:** Keeps core tools (`read`, `bash`, `edit`, `write`) active; moves secondary & extension tools to Ratel's `ToolCatalog`.\n3. **Dynamic Capability Discovery:** Exposes `search_capabilities` (BM25 Rust engine).\n4. **Dual-Activation:**\n   - **Dynamic Tool Activation:** Automatically calls `pi.setActiveTools()` with matched tools so the model can invoke them natively.\n   - **Direct Execution:** `invoke_tool` allows instant calling within the same turn.\n   - **Skill Playbooks:** `get_skill_content` loads markdown instructions on-demand.\n\n---\n\n## Installation\n\n### Project-local (Recommended for testing)\n```bash\npi -e ./extensions/index.ts\n```\n\n### Permanent install\n```bash\npi install npm:@avnsiva/pi-ratel\n```\n\n---\n\n## Commands\n\n- `/ratel status`: View catalog sizes, active tool count, and estimated token savings.\n- `/ratel search <query>`: Test BM25 capability search directly in chat.\n- `/ratel reload`: Refresh tool and skill indexes from Pi and filesystem.\n- `/ratel toggle`: Toggle skill prompt pruning on/off for comparative benchmarks.\n\n---\n\n## Configuration\n\nOptional `.pi/ratel.json` in your project root:\n\n```json\n{\n  \"enabled\": true,\n  \"alwaysActiveTools\": [\n    \"read\",\n    \"bash\",\n    \"edit\",\n    \"write\",\n    \"search_capabilities\",\n    \"get_skill_content\",\n    \"invoke_tool\"\n  ],\n  \"prunePromptSkills\": true,\n  \"topKTools\": 5,\n  \"topKSkills\": 3,\n  \"enableDynamicActivation\": true\n}\n```\n\n---\n\n## Development & Testing\n\n```bash\nbun install\nbun run typecheck\nbun test\nnode /Users/sivaraman/.agents/skills/unlazy/scripts/gate-check.mjs GATES.md\n```\n","readmeFilename":"README.md"}