Extensions for pi, the AI coding agent. Includes devtools (branch/PR/release workflow), Exa web search, Notion API integration, Ref.tools documentation search, and statusline UI.
Mixed quality across 23 tools. Strengths: all tools have descriptions (10-200 chars, mostly adequate); input schemas present with type definitions for most parameters. Weaknesses: descriptions are often generic and lack actionable context (e.g., 'Create a Git branch' vs 'Create a feature branch for isolated development; use conventional names like feature/*, bugfix/*, or hotfix/*'); many parameters lack detailed constraints or format guidance; no documented output schemas; error handling is minimal; tool annotations (readOnlyHint, destructiveHint) are absent despite clear risk levels (WRITE, DESTRUCTIVE). Composition is reasonable, tools are single-purpose, but chaining context is missing (e.g., create_branch output should include branch name for downstream push/commit calls). Exa and Ref tools delegate to external APIs, reducing local schema visibility.
Analyze commits since last tag using conventional commit format to determine version bump type
Update version field in a file (default: package.json)
Check CI/CD status for a pull request or branch
Create a Git commit with optional file selection and hook bypass
Create a new Git branch and optionally switch to it
Create a GitHub pull request with title, body, base branch, draft status, and assignees
Create a GitHub release with tag, title, notes, and draft/prerelease flags
Reset research planning state (local-only planner tool)
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. merge_pr, commit, push, bump_version are WRITE/DESTRUCTIVE but lack annotations to guide agent caution.
Output schemas not documented. Tools like repo_info, get_latest_tag, analyze_commits return structured data but LLM cannot see field names, types, or what to extract for downstream calls.
Descriptions lack actionable context and constraints. 'Create a Git branch' does not explain naming conventions, when to use vs checkout, or what happens if branch exists. 'Get current repository status' does not specify what fields are returned.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2025-06-18+ | v2 |
Get current research planning status (local-only planner tool)
Plan a single research step without executing network calls (local-only planner tool)
Get human-readable research plan summary (local-only planner tool)
Get the latest version tag and count commits since that tag
Merge a GitHub pull request with squash option, commit customization, and optional branch cleanup
Push Git branch to remote origin with optional upstream tracking
Read a documentation URL via Ref.tools and return optimized markdown. Pass the exact URL from a ref_search_documentation result or any documentation page. Client-side truncation; override with piMaxBytes/piMaxLines (clamped by config).
Search technical documentation via Ref.tools; best for API docs, library references, and framework guides. Include language/framework names in your query for best results. Client-side truncation; override with piMaxBytes/piMaxLines (clamped by config).
Get current repository status including branch, changes, worktree info, and commit details
Get direct factual answers to questions with citations using Exa AI
Fetch and read full content from a known URL using Exa AI
Discover more pages similar to a known source URL using Exa AI
Deep synthesis, comparisons, and recommendations using Exa AI (higher cost and latency)
Filtered web search with category, domain, date, text, location, and freshness controls using Exa AI
Quick web search using Exa AI to discover candidate URLs
Exa and Ref tools delegate to external APIs; output schemas are opaque. web_search_exa, web_fetch_exa, ref_search_documentation return external API responses without documented structure, forcing LLM to infer field names.
Error handling is minimal. No recovery guidance, no categorization of retryable vs fatal errors, no actionable error messages. E.g., if create_pr fails due to missing base branch, LLM has no hint to call repo_info or list branches.