Version 0.3.0 gives OpenCode and Pi separate policy files while keeping one npm package and the same fail-closed permission core.
Highlights
- OpenCode reads global and project policy from its own configuration roots.
- Pi reads global and project policy from its own agent and project roots.
- Valid shared
0.2.0configuration migrates byte for byte when the host-owned destination is absent. - Migration publishes through an exclusive same-filesystem hard link, never overwrites a destination, and never deletes the legacy source.
- Invalid roots, files, symlinks, non-regular entries, races, I/O failures, and unsupported publication fail closed.
- The public guide covers automatic and manual migration, isolation checks, cleanup, rollback, remigration, and troubleshooting.
Upgrade from 0.2.0
Keep the shared legacy file until every host you use has created and passed verification of its own destination. If automatic publication is unavailable, copy manually with create-only or no-clobber semantics. Version 0.2.0 ignores host-owned files, so retain or restore the legacy file before rolling back.
Compatibility
- OpenCode 1.18.18 remains the validated plugin baseline.
- Pi 0.84.1 remains the validated deterministic adapter baseline.
- Pi 0.84.2 remains the isolated loopback baseline for the permission-judge transport.
- Node 24.9.0 remains the test baseline.
The release preserves the 0.2.0 Pi judge behavior and OpenCode's fail-closed unavailable result for eligible judge cases.
Verification
- 219 tests passed on Windows and Ubuntu.
- TypeScript 5.9.3 strict checking passed.
- The npm package contains 20 public files and no bundled dependencies.
- The Astro/Starlight wiki built 11 pages with link and 404 checks.
- Temporary OpenCode and Pi profiles completed migration, startup, isolation, and removal without modifying active profiles.
Known limits
- Auto Mode Gate covers only calls through the validated pre-tool hooks and does not replace native host permissions.
- Automatic migration requires same-filesystem hard-link support; unsupported filesystems require manual no-clobber migration.
- The filesystem checks do not protect against a local attacker who can replace ancestor directories during a race.
- No real-model inference was used for the permission-judge validation.