executor-pi
`executor-pi` is a first-class Pi extension for running Executor from inside Pi with native approval, elicitation, rendering, and project-aware Executor configuration.
Package details
Install executor-pi from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:executor-pi- Package
executor-pi- Version
0.2.0- Published
- May 23, 2026
- Downloads
- not available
- Author
- aryasaatvik
- License
- MIT
- Types
- extension
- Size
- 167.6 KB
- Dependencies
- 15 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
executor-pi
executor-pi is a first-class Pi extension for running Executor from inside Pi
with native approval, elicitation, rendering, and project-aware Executor
configuration.
It is not a generic MCP adapter. Pi exposes a small Executor-specific surface, while Executor remains responsible for tools, sources, secrets, policies, plugins, and execution semantics.
Features
Executor-Native Execution
- Run Executor TypeScript snippets directly from Pi.
- Use Executor SDK semantics instead of shelling out to a daemon.
- Keep two primary tools:
searchfor discovery andexecutefor execution. - Use the active project cwd as the Executor scope.
Local Executor Config Semantics
- Load Executor's static plugin defaults.
- Load project-level
executor.jsonc. - Preserve Executor plugin merge behavior.
- Use stable cwd-derived scope IDs.
- Reuse local Executor storage semantics.
Pi-Native Elicitation
- Render approval prompts as Pi confirmations.
- Render form elicitation as Pi form UI or a structured editor fallback.
- Render URL elicitation with clear domain and action context.
- Treat accept, decline, and cancel as explicit outcomes.
- Fail loudly for unsupported elicitation shapes.
Rich Rendering
- Syntax-highlight Executor code before execution.
- Render Executor search results with paths, descriptions, and pagination hints.
- Render structured JSON cleanly.
- Separate summaries, logs, errors, and outputs.
- Show paused or elicitation states clearly.
- Keep large results readable inside Pi.
Commands And Guidance
- Provide
/executorstatus and diagnostics. - Add focused settings and help commands for Executor workflows.
- Include Executor usage guidance directly in the
searchandexecutetool prompts. - Avoid generic MCP search, describe, and invoke tool sprawl.
Architecture
flowchart TB
Pi["Pi ExtensionAPI"] --> Runtime["Effect ManagedRuntime"]
Runtime --> Tools["Pi search + execute tools"]
Runtime --> Commands["/executor commands"]
Runtime --> UX["Pi elicitation UI"]
Runtime --> Host["ExecutorHostService"]
Host --> LocalHost["Executor local host"]
LocalHost --> SDK["Executor SDK"]
LocalHost --> Engine["Execution Engine + QuickJS"]
LocalHost --> Config["static plugins + executor.jsonc"]
LocalHost --> Storage["~/.executor storage"]
SDK --> Sources["Executor sources/plugins/secrets"]
Engine --> UX
Pi owns the interaction surface. Executor owns execution, configuration, tools, sources, secrets, and policy.
Usage
Install the extension into Pi, then use the Executor tool from a project with
the desired executor.jsonc configuration.
await tools.search({
query: "github issues",
includeDetails: true,
});
await tools.execute({
code: `
const { items } = await tools.search({ query: "github issues", limit: 5 });
return items;
`,
});
Use /executor inside Pi to inspect extension status, active scope, loaded
configuration, and available diagnostics.
Configuration
executor-pi follows Executor's local project configuration model:
- Project config:
executor.jsoncin the active project. - Storage: local Executor storage under
~/.executor. - Scope: derived from the active project cwd.
- Plugins: Executor defaults merged with project plugins.
Pi-specific settings only control the Pi extension experience, such as rendering preferences and command behavior. Tool sources, secrets, policies, and plugin configuration stay in Executor.
Pi Executor settings files:
- Global:
~/.pi/agent/executor-pi.json - Project override:
.pi/executor-pi.json
Use /executor config in the Pi TUI to adjust display density (concise,
balanced, verbose, or custom), search defaults, and render limits.
/executor settings is accepted as an alias for config.
Development
This package uses Bun, Effect v4, tsgo, oxlint, and oxfmt.
bun install
bun run typecheck
bun run lint
bun run format:check
bun run test
bun run verify:host
bun run check
Formatting:
bun run format
The TypeScript config is local to this package. There is no shared tsconfig package.
Effect services use Context.Service, Layer, scoped resources, and typed
errors. Pi callbacks are thin Promise adapters around the Effect runtime.
Host contract and local package notes live in:
docs/executor-host.mddocs/local-fumadb.md
Non-Goals
- Building a generic MCP adapter for Pi.
- Running Executor's Bun server inside the extension.
- Serving Executor's React web UI from this package.
- Reimplementing Executor sources, plugins, secrets, or policy in Pi.
- Exposing every upstream MCP tool directly to the agent context.