@plannotator/artifact-server-pi
Pi coding-agent bridge for Artifact Server: receives annotation bundles as follow-up work and closes them through the comment API.
Package details
Install @plannotator/artifact-server-pi from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@plannotator/artifact-server-pi- Package
@plannotator/artifact-server-pi- Version
0.1.2- Published
- Sep 24, 2026
- Downloads
- 292/mo · 292/wk
- Author
- backnotprop
- License
- MIT
- Types
- extension
- Size
- 13.1 KB
- Dependencies
- 1 dependency · 1 peer
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@plannotator/artifact-server-pi
The Artifact Server bridge for the Pi coding agent. It
connects a live Pi session to an Artifact Server installation so that
annotation bundles sent from the review UI arrive in Pi as follow-up work,
and Pi replies to and resolves each comment thread through the
artifact_comments tool.
What it does
- Registers this Pi session as an agent (
POST /api/v1/agents), self-named after the working directory. Restarts,/new, and/resumereclaim the same agent identity, so pending bundles survive. - Long-polls the dispatch mailbox (
POST /api/v1/agents/:id/claims?wait=25). Each claimed bundle is rendered as one message and injected withpi.sendUserMessage(text, {deliverAs: "followUp"})— always follow-up delivery, never steering: Pi finishes its current work first, then receives exactly one bundle per work boundary. - Holds delivery while the session is compacting, and reports
deliveredonly after Pi accepted the message. - Registers the
artifact_commentstool withget_bundle,reply, andresolveoperations wrapping the comment HTTP routes with the same credential, so the agent can close the loop without any human action. - Fails open. Without configuration it stays dormant after one notice. With the server unreachable it backs off between 1 s and 30 s and Pi continues normally. No bridge failure is ever thrown into Pi.
Install
pi install npm:@plannotator/artifact-server-pi
or in settings.json:
{
"packages": ["npm:@plannotator/artifact-server-pi"]
}
For development inside this repository:
pi -e integrations/pi/index.ts
Configuration
Resolved once per session start, in order:
| Source | Setting | Meaning |
|---|---|---|
| Environment | ARTIFACT_SERVER_ORIGIN |
Server origin, e.g. https://artifacts.example.com. Used together with the token below. |
| Environment | ARTIFACT_SERVER_AGENT_TOKEN |
Bearer credential. Needs agent:connect plus comment read/write for the tool; the local API token carries everything. |
| Environment | ARTIFACT_SERVER_AGENT_NAME |
Optional display-name override (default: the working directory's basename). |
| Local discovery | ~/.artifact-server/local-service.json |
The managed local server's discovery record (loopback origin). |
| Local discovery | ~/.artifact-server/local-api-token |
The local installation's private API credential. |
If neither source resolves, the extension notifies once and stays dormant for the session. It never blocks a Pi event handler on the network.
Compatibility
- Pi extension API: tested against
@earendil-works/pi-coding-agent0.84.x. The bridge fails soft on missing API surface (dormant plus one notice, never a crash). - The package version tracks Artifact Server releases; it is a client of the
server's dispatch API (
project/spec/agent-dispatch-spec.md). - Ships TypeScript source; Pi loads extensions through jiti with no build step.