Description
@gotgenes/pi-permission-system@9.0.0 appears in /plugins list as installed and enabled, but the extension never runs. No logs are created, no permission gates fire, and tool calls proceed without any check.
Steps to Reproduce
- Install the plugin via Bun in
~/.omp/plugins/:
{
"dependencies": {
"@gotgenes/pi-permission-system": "^9.0.0"
}
}
-
Run bun install then bun pm trust --all (the plugin depends on tree-sitter-bash which needs node-gyp-build — trust and run the postinstall script).
-
Place the config at $PI_CODING_AGENT_DIR/extensions/pi-permission-system/config.json with this setup:
{
"$schema": "https://raw.githubusercontent.com/gotgenes/pi-packages/refs/tags/pi-permission-system-v9.0.0/packages/pi-permission-system/schemas/permissions.schema.json",
"debugLog": true,
"permissionReviewLog": true,
"yoloMode": false,
"toolInputPreviewMaxLength": 400,
"toolTextSummaryMaxLength": 120,
"piInfrastructureReadPaths": [],
"permission": {
"*": "deny",
"path": {
"*": "deny",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "deny"
},
"read": "deny",
"write": "deny",
"edit": "deny",
"bash": { "git status": "deny", "git *": "deny" },
"mcp": { "mcp_status": "deny" },
"skill": { "*": "deny" },
"external_directory": "deny"
}
}
-
Open OMP in any directory, ask the agent to read a file.
-
Check for logs:
ls $PI_CODING_AGENT_DIR/extensions/pi-permission-system/logs/
Expected Behavior
The read tool call should be blocked (or prompt via ask). With debugLog: true, log files should be created at startup even if no tool calls have been made yet.
Error Output
No error output anywhere — that's the problem. The extension fails silently. No crash, no warning in the OMP UI, no log files:
$ cat ~/.omp/agent/extensions/pi-permission-system/logs/pi-permission-system-debug.jsonl
cat: No such file or directory
$ cat ~/.pi/agent/extensions/pi-permission-system/logs/pi-permission-system-debug.jsonl
cat: No such file or directory
The agent reads files freely despite `"read": "deny"` in config.
Platform
Linux
omp version
15.7.2
Bun version
1.3.14
Provider
Custom (models.yml)
Area
Extensions / Plugins
Additional context
Environment:
PI_CODING_AGENT_DIR=/home/burak/.omp/agent (from ~/.omp/.env)
PI_CONFIG_DIR="/home/burak/.omp" (from ~/.omp/.env)
omp-plugins.lock.json shows the plugin as "enabled": true
Below what Claude found
The plugin's package.json uses a "pi" manifest key (not "omp"):
{
"pi": { "extensions": ["./src/index.ts"] },
"peerDependencies": {
"@earendil-works/pi-coding-agent": ">=0.75.0",
"@earendil-works/pi-tui": ">=0.75.0"
}
}
Per src/extensibility/plugins/loader.ts, OMP does fall back to the "pi" key (pluginPkg.omp || pluginPkg.pi), so the manifest is found and the entry point ./src/index.ts should resolve.
Hypothesis: src/index.ts imports from @earendil-works/pi-coding-agent. OMP ships as @oh-my-pi/pi-coding-agent. If installLegacyPiSpecifierShim() doesn't remap this at module load time, the import fails and OMP discards the extension silently with no visible error.
Questions:
- Is
installLegacyPiSpecifierShim() supposed to cover @earendil-works/pi-coding-agent → @oh-my-pi/pi-coding-agent for plugins loaded via the "pi" manifest key?
- Where would a silent extension load failure be logged? Is there any way to get verbose plugin loading output?
- Is there a supported path for running Pi-native packages in OMP, or do they need to explicitly target
@oh-my-pi/pi-coding-agent?
Related: #433 (pi-mono plugin compatibility).
Description
@gotgenes/pi-permission-system@9.0.0appears in/plugins listas installed and enabled, but the extension never runs. No logs are created, no permission gates fire, and tool calls proceed without any check.Steps to Reproduce
~/.omp/plugins/:{ "dependencies": { "@gotgenes/pi-permission-system": "^9.0.0" } }Run
bun installthenbun pm trust --all(the plugin depends ontree-sitter-bashwhich needsnode-gyp-build— trust and run the postinstall script).Place the config at
$PI_CODING_AGENT_DIR/extensions/pi-permission-system/config.jsonwith this setup:{ "$schema": "https://raw.githubusercontent.com/gotgenes/pi-packages/refs/tags/pi-permission-system-v9.0.0/packages/pi-permission-system/schemas/permissions.schema.json", "debugLog": true, "permissionReviewLog": true, "yoloMode": false, "toolInputPreviewMaxLength": 400, "toolTextSummaryMaxLength": 120, "piInfrastructureReadPaths": [], "permission": { "*": "deny", "path": { "*": "deny", "*.env": "deny", "*.env.*": "deny", "*.env.example": "deny" }, "read": "deny", "write": "deny", "edit": "deny", "bash": { "git status": "deny", "git *": "deny" }, "mcp": { "mcp_status": "deny" }, "skill": { "*": "deny" }, "external_directory": "deny" } }Open OMP in any directory, ask the agent to read a file.
Check for logs:
Expected Behavior
The
readtool call should be blocked (or prompt viaask). WithdebugLog: true, log files should be created at startup even if no tool calls have been made yet.Error Output
Platform
Linux
omp version
15.7.2
Bun version
1.3.14
Provider
Custom (models.yml)
Area
Extensions / Plugins
Additional context
Environment:
PI_CODING_AGENT_DIR=/home/burak/.omp/agent(from~/.omp/.env)PI_CONFIG_DIR="/home/burak/.omp"(from~/.omp/.env)omp-plugins.lock.jsonshows the plugin as"enabled": trueBelow what Claude found
The plugin's
package.jsonuses a"pi"manifest key (not"omp"):{ "pi": { "extensions": ["./src/index.ts"] }, "peerDependencies": { "@earendil-works/pi-coding-agent": ">=0.75.0", "@earendil-works/pi-tui": ">=0.75.0" } }Per
src/extensibility/plugins/loader.ts, OMP does fall back to the"pi"key (pluginPkg.omp || pluginPkg.pi), so the manifest is found and the entry point./src/index.tsshould resolve.Hypothesis:
src/index.tsimports from@earendil-works/pi-coding-agent. OMP ships as@oh-my-pi/pi-coding-agent. IfinstallLegacyPiSpecifierShim()doesn't remap this at module load time, the import fails and OMP discards the extension silently with no visible error.Questions:
installLegacyPiSpecifierShim()supposed to cover@earendil-works/pi-coding-agent→@oh-my-pi/pi-coding-agentfor plugins loaded via the"pi"manifest key?@oh-my-pi/pi-coding-agent?Related: #433 (pi-mono plugin compatibility).