Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (pi-librarian) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
pi-librarian
GitHub-focused research subagent package for pi.
Installation
From npm (after publish):
pi install npm:pi-librarianFrom git:
pi install git:github.com/default-anton/pi-librarianOr use without installing:
pi -e npm:pi-librarian
# or
pi -e git:github.com/default-anton/pi-librarianWhat it does
- Registers a
librariantool for GitHub code investigation viagh, using known query context when provided (without guessing unknown scope). - Runs a dedicated subagent session with a strict fixed turn budget (10 turns).
- Uses only
bash+readtools in the subagent. - Instructs the subagent to use
ghdirectly for search/tree/fetch workflows. - Caches only selected files in an isolated temporary workspace under
/tmp/pi-librarian/run-*/repos/.... - Returns the subagent's final Markdown answer as-is (no extension-side post-processing).
- Selects subagent model via ordered
PI_LIBRARIAN_MODELSfailover withctx.modelfallback. - Emits compact selection diagnostics (
reason) in tool details.
Tool interface
librarian({
query: string,
repos?: string[],
owners?: string[],
maxSearchResults?: number,
})Model selection policy
Librarian uses local deterministic model routing with ordered failover.
Configure candidates with PI_LIBRARIAN_MODELS:
PI_LIBRARIAN_MODELS="provider/model:thinking,provider/model:thinking,..."Concrete example:
export PI_LIBRARIAN_MODELS="openai-codex/gpt-5.3-codex-spark:high,google-antigravity/gemini-3-flash:medium,anthropic/claude-sonnet-4-6:high"Rules:
thinkingmust be one of:off,minimal,low,medium,high,xhigh.- Tokens are parsed in order (comma-separated, trimmed, empty tokens ignored).
- Each token is filtered by:
ctx.modelRegistry.getAvailable()- Librarian's in-memory temporary-unavailable cache (reason-aware TTL)
- Librarian picks the first candidate passing both filters.
- If
PI_LIBRARIAN_MODELSis unset/blank, or no candidate passes filters, Librarian triesctx.modelfallback using the same availability + temporary-unavailable filters. - On any final non-abort model failure, Librarian fails over to the next available candidate.
- Temporary-unavailable TTLs are:
- quota-like final failures: 30 minutes
- other final failures: 10 minutes
- Librarian does not add its own retry/backoff loop for transient errors; SDK retry behavior remains the first-line retry mechanism.
- Selection diagnostics stay compact and expose only
subagentSelection.reason.
gh workflow examples (tested)
These are the same patterns encoded in the librarian system prompt.
Public repo example (cli/cli)
# code search
gh search code "NewCmdRoot" --repo cli/cli --json path,repository,sha,url,textMatches --limit 3
# repo tree
gh api "repos/cli/cli/git/trees/trunk?recursive=1"
# fetch one file into local cache
REPO='cli/cli'
REF='trunk'
FILE='pkg/cmd/root/root.go'
mkdir -p "repos/$REPO/$(dirname "$FILE")"
gh api "repos/$REPO/contents/$FILE?ref=$REF" --jq .content | tr -d '\n' | base64 --decode > "repos/$REPO/$FILE"Private repo example (default-anton/jagc)
# code search with path matching
gh search code "README.md" --repo default-anton/jagc --match path --json path,repository,sha,url --limit 3
# repo tree
gh api "repos/default-anton/jagc/git/trees/main?recursive=1"
# fetch one file into local cache
REPO='default-anton/jagc'
REF='main'
FILE='README.md'
mkdir -p "repos/$REPO/$(dirname "$FILE")"
gh api "repos/$REPO/contents/$FILE?ref=$REF" --jq .content | tr -d '\n' | base64 --decode > "repos/$REPO/$FILE"If a repo is inaccessible, gh returns 404/403; the subagent should report that constraint.
Requirements
- GitHub CLI installed.
- GitHub CLI authenticated (
gh auth login).
No proactive auth pre-check is performed; command failures from gh are surfaced directly.
The subagent runs with cwd set to that temporary workspace, so relative writes stay in /tmp/pi-librarian/run-* and do not touch your project repository.
License
Apache-2.0