@geohar/pi-cribsheet

extensionmaintained

Pi extension: run the crib (cribsheet) memory + code-index MCP server via sharedserver, inject the reach-for-crib directive, and ship the /crib recall command. Pairs with pi-mcp-adapter.

by — · v0.17.0 · published 1d ago

$ pi install npm:@geohar/pi-cribsheet
downloads/mo
1.3K
stars
1
last push
1d ago
open issues
0

Signals

license: MITtestspi manifest: missinginstall size: —deps: 0peer deps: 0

Download trend

No downloads in the last 12 weeks.

README

@geohar/pi-cribsheet

A Pi extension that makes cribsheet (the crib memory + code-index MCP server) available to Pi: it starts crib (supervised by sharedserver), injects the reach-for-crib directive into the system prompt, and ships the /crib recall command.

It is the Pi counterpart of cribsheet's Claude Code and OpenCode plugins, and shares the same crib server and sharedserver instance — so Pi, Claude Code, OpenCode, and Neovim all talk to one refcounted process.

How it fits together

Pi has no MCP of its own. Two pieces give it crib:

  1. pi-mcp-adapter — the Pi package that speaks MCP. It reads its own mcp.json and connects to crib over HTTP. Install it too (pi install npm:pi-mcp-adapter).
  2. This extension — the process + directive + command half:
    • Run crib on session_start via sharedserver use … -- crib --mcp --http …, refcounted and shared across clients; released on session_shutdown when reason === "quit".
    • Inject the directive on before_agent_start (analogue of CC's additionalContext and OpenCode's system.transform).
    • /crib <topic> — shells out to the crib CLI (note apropos + code lookup) and steers the model to summarise, mirroring commands/crib.md.

Stand-down when combiner-served

If a combiner already serves crib (the global MCP_COMBINER switch, or the per-backend MCP_COMBINER_SERVES_CRIBSHEET override, which wins), the extension does not launch a standalone backend — the combiner owns crib's lifecycle. The directive and /crib command still apply, since crib's tools are present via the combiner too. In that setup you register the combiner with pi-mcp-adapter (see the mcp-companion Pi extension), not crib directly.

Install

# build
npm --prefix plugins/pi install && npm --prefix plugins/pi run build
# install into Pi (symlink the package dir; uses "main": dist/index.js)
ln -sfn "$PWD/plugins/pi" ~/.pi/agent/extensions/cribsheet
# MCP transport (skip the mcp.json when crib is combiner-served)
pi install npm:pi-mcp-adapter
cp plugins/pi/mcp.json.example ~/.config/mcp/mcp.json   # standalone only

Build-free live dev: pi -e ./plugins/pi/src/index.ts.

Configuration

PI_CRIBSHEET_* env namespace (mirrors the OpenCode plugin's OPENCODE_CRIBSHEET_*):

VariableDefaultEffect
PI_CRIBSHEET_PORT7732HTTP port crib serves on.
PI_CRIBSHEET_HOST127.0.0.1HTTP host crib binds.
PI_CRIBSHEET_COMMAND / _ARGS(auto: crib on PATH)Override the crib invocation.
PI_CRIBSHEET_CHECKOUT—Checkout for uv run --project <checkout> crib.
PI_CRIBSHEET_NAMEcribsheetsharedserver instance name.
PI_CRIBSHEET_GRACE1hsharedserver grace period.
PI_CRIBSHEET_LOG—Capture crib's stdout/stderr (sharedserver --log-file); "none"/unset disables.
PI_CRIBSHEET_MANAGEtruefalse → don't launch (assume crib runs elsewhere).
PI_CRIBSHEET_INSTRUCTIONStruefalse → don't inject the directive.
PI_CRIBSHEET_COMMAND_ENABLEtruefalse → don't register /crib.
PI_CRIBSHEET_NOTIFYtruefalse → don't surface messages via the Pi UI.
MCP_COMBINER / MCP_COMBINER_SERVES_CRIBSHEET—Combiner serves crib → don't launch a standalone backend.
SHAREDSERVER_BIN / SHAREDSERVER_LOCKDIR(auto)sharedserver binary / lock dir.

Development

npm install && npm run typecheck && npm run build

src/sharedserver-resolve.ts is vendored byte-identical from georgeharker/sharedserver via scripts/sync-vendored.sh — edit upstream, re-sync here.

License

MIT © George Harker