| Symbol | Meaning |
|---|---|
| ● | original |
| ◐ | forked & modified |
| ○ | republished unmodified |
-
●
grounded-compaction/(README)- Replaces Pi's compaction summarizer with configurable model presets, user-editable prompt contracts, and deterministic files-touched tracking that covers Pi native tools, RepoPrompt, and bash-derived file operations; also augments branch summarization during
/treewith the same files-touched grounding and optional prompt customization - Uses the shared collector from
_shared/files-touched-core.ts; see Pi compaction docs for background - ⚠ Hooks
session_before_compact— incompatible with other extensions that do the same (e.g.agentic-compaction); having both active is a race condition
- Replaces Pi's compaction summarizer with configurable model presets, user-editable prompt contracts, and deterministic files-touched tracking that covers Pi native tools, RepoPrompt, and bash-derived file operations; also augments branch summarization during
-
●
model-aware-compaction/(README)- Triggers Pi's built-in auto-compaction at per-model percent-used thresholds (0-100), configured via
config.json(keyed by model ID, supports*wildcards) - Nudges Pi's native compaction pipeline rather than calling
ctx.compact(), preserving the compaction UI and automatic queued-message flush - Requires
compaction.enabled: truein settings; see README forreserveTokenstuning - Compatible with compaction-summary extensions (e.g.
agentic-compactionviasession_before_compact)
- Triggers Pi's built-in auto-compaction at per-model percent-used thresholds (0-100), configured via
-
●
session-ask/(README)session_ask({ question, sessionPath? })queries the current (or specified) session JSONL (including pre-compaction history) without bloating the current model context;/session-ask ...is a UI wrappersession_lineage({ ... })returns fork ancestry (parentSession chain)- Internal
session_shelluses a read-only just-bash virtual FS (/conversation.json,/transcript.txt,/session.meta.json) for precise extraction withjq/rg/awk/wc - Optional minimal fork-lineage system prompt injection via
injectForkHintSystemPrompt(see README) - Configurable model/prompt via
config.json, optionally pointing at an agent definition under~/.pi/agent/agents/
-
- Pi-compatible, token-efficient proxy for the RepoPrompt MCP server with:
- Window and tab binding that prevents user/agent or agent/agent clobbering: auto-detects by
cwd, binds to a blank existing tab or provisions a new background tab if the active tab is dirty, optional persistence and restoration per session, interactive binding resolution in case of multiple windows containing the required root, and manual selection via/rp bind(windows) or/rp tab(tabs)- Bindings are branch-safe across navigation of the session DAG via
/treeand/forked sessions; forked sessions inherit the parent node's window, tab, and auto-selected context snapshot at fork time and diverge independently from there - On rewind or session restore, the bound tab for that session tree node is deterministically restored, or a fresh background tab is provisioned if needed
- Bindings are branch-safe across navigation of the session DAG via
/rp statusshows the currently bound tab name with a[bound, in-focus]or[bound, out-of-focus]label, plus selected file/token counts when available/rp oracle [--mode chat|plan|edit|review] ...— send a message to RepoPrompt chat using the current selection context- Output rendering:
- Syntax highlighting for code blocks and codemaps
- Collapsed tool output summaries derived from request metadata for common non-mutating actions (
read_file,file_search,get_file_tree, etc.) - Adaptive diff rendering for
gitandapply_editsoutputs) - Token bloat prevented in the context window from outputs of
apply_editsandfile_actions create/delete, while their diffs are routed to Pi'sdetails.diffso they are still displayed in full in the terminal
- Safety guardrails: blocks deletes unless
allowDelete: true, optional edit confirmation gate (confirmEdits) - Optional Gurpartap/pi-readcache-like caching for RepoPrompt
read_filecalls (returns unchanged markers/diffs on repeat reads to save on tokens and prevent context bloat) - Optional auto-selection (in the RP app, e.g. for use in RP Chat) of slices/files the agent has read; these selections are also branch-safe across
/treenavigation and/forked sessions
- Window and tab binding that prevents user/agent or agent/agent clobbering: auto-detects by
- Pi-compatible, token-efficient proxy for the RepoPrompt MCP server with:
-
●
repoprompt-cli/⚠ Deprecated and not supported for Pi versions >0.64.0; userepoprompt-mcp/instead.- RepoPrompt bridge for Pi:
rp_bind+rp_exec rp_execwrapsrp-cli -e ...with safe defaults (quiet, fail-fast, timeout, output truncation)- Safety features: blocks unbound usage, delete-like commands (unless
allowDelete=true), and in-place workspace switching (unless explicitly allowed) - Uses just-bash AST parsing (requires
just-bash>= 2) for command-chain inspection (better handling of quoting/escaping/chaining edge cases) - Syntax-highlights fenced code blocks; diff blocks use
deltawhen installed (honoring the user's global git/delta color config, with graceful fallback) - Persists the current RepoPrompt window/tab binding across session; bindings are also branch-safe across navigation of the session DAG via
/treeand across/forked sessions - Optional auto-selection (in the RP app, e.g. for use in RP Chat) of slices/files the agent has read; these selections are also branch-safe across
/treenavigation and/forked session - Edit ergonomics: detects no-op edits and fails loudly by default (set
failOnNoopEdits=falseto allow intentional no-ops) - Includes optional Gurpartap/pi-readcache-like caching for RepoPrompt
read_filecalls (returns unchanged markers/diffs on repeat reads to save on tokens and prevent context bloat) - Used by Pi × RP-CLI AGENTS.md guidance, RP-CLI prompts, and this skill for keeping it all up-to-date with new RepoPrompt versions
- RepoPrompt bridge for Pi:
- ●
rp-native-tools-lock/- Disables Pi native repo-file tools (
read,write,edit,ls,find,grep) when RepoPrompt tools are available - Mode switch:
/rp-tools-lock off|autooff: no enforcementauto: preferrp(RepoPrompt MCP) if available; elserp_exec(RepoPrompt CLI); else behaves likeoff
- Advanced modes (
rp-mcp,rp-cli) are supported via config:rp-native-tools-lock/rp-native-tools-lock.json - Hotkey:
alt+Ltoggles modes (off ↔ auto) - Footer status indicator while enforced:
RP 🔒 - Intended to complement the
/toolsextension without mutatingtools/tools.json
- Disables Pi native repo-file tools (
- ●
anycopy/(README)/anycopymirrors all behaviors of Pi's native/treewhile adding a live, syntax-highlighted preview of each node's content and the ability to copy any node(s) to the clipboardEnternavigates to focused node (same semantics as/tree, including the summary chooser andbranchSummary.skipPromptsupport)Spaceselect/unselect for copy,Shift+Ccopy (selected or focused),Shift+Xclear selection,Shift+Llabel nodeShift+Up/Downscroll preview by line,Shift+PageUp/PageDownpage preview- Single-node copies use just the node's content; role prefixes are only added when copying 2+ nodes
- Multi-selected nodes are auto-sorted chronologically (by tree position)
- Configurable in
anycopy/config.json:treeFilterMode(initial filter mode),keys(overlay keybindings)
-
●
md.ts/mdexports the current Pi session to a legible Markdown transcript in~/.pi/agent/pi-sessions-extracted/; tool calls and thinking blocks are excluded by default/md tcincludes tool calls (invocations + results);/md tc -<toolname>(e.g.,/md tc -bash -read) excludes exact tool name(s);/md tc +<toolname>excludes all tool names except for the "whitelisted" exact tool name(s); filters are case-insensitive and requiretc/md tincludes thinking blocks (alsothink,thinking)/md <N>exports only the last N turns (a turn is[user message → assistant message]), e.g./md 2,/md tc t 2/md all(or/md file) exports the full session file instead of the current/treebranch; flags combine freely
-
/fork-from-firstforks the current session from its first user message and switches into the new fork immediately- If
rewind/is installed, it requests rewind's conversation-only fork mode ("keep current files") for that fork
-
/session-move <targetCwd>moves the current session to a different working directory, intended for when you started pi in one folder but come to find that you need it in another after building up valuable context- Forks the session JSONL into the target cwd bucket (
SessionManager.forkFrom(...)), clears the fork header'sparentSessionpointer, then relaunchespi --session <fork>withcwd=<targetCwd>so the footer + built-in tools resolve relative paths against the new directory - Uses
trashto delete the old session file (best-effort); iftrashisn't available, it leaves the old file in place - Supports
~expansion (e.g./session-move ~/code/my-project)
-
/roam [window-name]post-hoc moves the current live Pi session into a dedicated tmux server (tmux -L pi) for remote continuation (e.g. Termius over Tailscale) -- convenient if you find yourself wishing you had already started Pi inside tmux- Forks the session, clears the fork header's
parentSessionpointer, starts/joins tmux sessionpi, then best-effort trashes the original session file to avoid/resumeduplicates - Writes/refreshes tmux config at
~/.config/pi-tmux/tmux.confwith dual prefixes (Ctrl+S+Ctrl+B) and mobile-friendly defaults - Optional per-user Tailscale config at
~/.pi/agent/extensions/roam/config.json(example:roam/config.json.example):tailscale.account: runtailscale switch <account>beforetailscale uptailscale.binary: override Tailscale CLI path (default macOS app binary)
-
- Scrollable widget above the editor displaying all /commands from extensions, prompts, and skills
- Configure keybindings etc. via
config.json
-
/ephemeraltoggles whether the current session file is deleted on exit (otherwise only possible via pre-committingpi --no-session), preventing throwaway sessions from cluttering/resume- Shortcut:
alt+e
-
- Appends a per-model appendix to the system prompt (exact match or default), right before the "# Project Context" section that leads into the contents of AGENTS.md. Helpful, for example, for Claude models with confused identities (e.g. Opus 4.5, without a system prompt guiding it otherwise, assuming itself to be Sonnet 3.5 and low in capability)
/model-sysprompt-appendix reload|status- Configurations stored in
model-sysprompt-appendix/model-sysprompt-appendix.json
-
- Desktop / sound / Pushover notifications (e.g. to smart watch) when an agent turn completes and exceeds a duration threshold
- Sound aliases include
random(randomly picks from configured list of sounds) - Volume modes:
constantortimeScaled /notifyinteractive menu, plus quick toggles (/notify on|off|popup|pushover|volume|<seconds>|<sound>)- Config file lives at
poly-notify/notify.json(example:poly-notify/notify.json.example)
-
●
brave-search/(README)- 🔄 For general-purpose agent web search, consider pi-web-access instead (Gemini search, AI-synthesized overview + citations).
brave-searchremains useful when you specifically need individual search results with per-result previews - Token-efficient Brave web search with optional content extraction/clipping for "read the docs / answer from sources" workflows
- Manual command:
/ws <query> ... [--content](no model turn) - LLM tool:
brave_search({ query, count, country, freshness, fetchContent, format }) - With
fetchContent=true/--content: extracts readable markdown, saves full content to~/.pi/agent/extensions/brave-search/.clips/, returns a preview + aSaved:path - Direct URL mode: if
queryis a URL (includingraw.githubusercontent.com/...) andfetchContent=true, it fetches and clips directly (no search step) - Optional LLM tool:
brave_grounding({ question, enableResearch, enableCitations, enableEntities, maxAnswerChars })(requiresBRAVE_API_KEY_AI_GROUNDING) - Search results are shown to the user but filtered out of LLM context via the
contexthook - Recommendation: For general-purpose web search with agents, I now prefer nicobailon/pi-web-access — it uses Gemini search which provides better indexing and returns an AI-synthesized overview alongside citations, which works better for agent workflows.
brave-searchremains useful when you specifically need individual search results with per-result previews
- 🔄 For general-purpose agent web search, consider pi-web-access instead (Gemini search, AI-synthesized overview + citations).
-
●
protect-paths.ts- standalone directory/command protection hooks that complement upstream@aliou/pi-guardrails- 🔄 Replaces the directory protection and brew prevention hooks from the old
guardrails/directory. For.envfile protection and AST-based dangerous command gates (the other components of the oldguardrails/), install upstream:pi install npm:@aliou/pi-guardrails - Hard blocks:
.git/andnode_modules/directory access (file tools + bash command parsing), Homebrew install/upgrade commands - Uses just-bash AST analysis (requires
just-bash>= 2) to inspect nested command structures (including substitutions/functions/conditionals) - Confirm gates: broad delete commands (
rm/rmdir/unlink) and piped shell execution (... | sh) - Allowlist for Pi's Homebrew install path in
node_modules/(read-only)
- 🔄 Replaces the directory protection and brew prevention hooks from the old
-
●
reverse-thinking.ts- Adds backward (e.g. 'med' -> 'low') cycling movement through thinking levels viashift+alt+tab -
- Uses iTerm2 OSC tab-color sequences to color each Pi tab's background per two configurable states (
runningColorandnotRunningColor, for when the agent is running or not running respectively); gracefully no-ops if another terminal emulator is used
- Uses iTerm2 OSC tab-color sequences to color each Pi tab's background per two configurable states (
-
- Expands inline
!{command}snippets in normal messages before submit - Also routes leading
!command/!{command}bash-mode execution through the resolved shell, so aliases from the active shell environment can work there too - Uses the current shell when supported; for zsh it prefers
~/.pi/agent/shell/pi-inline.zsh, otherwise falls back to interactive zsh and.zshrc; unsupported or non-zsh cases fall back to bash - Sets
PI_INLINE_SHELL=1in the spawned shell so shell startup can skip noisy prompt/plugin setup while still loading aliases/functions - Example starter file:
../shell/pi-inline.zsh.example
- Expands inline
-
- Gives subagents spawned or resumed in the current orchestrator short, stable handles usable with
subagent_resumeandintercomin place of.jsonlpaths or session UUIDs; requirespi-interactive-subagentsandpi-intercom subagent_resume({ sessionPath: "idle-worker" })— handle is rewritten to the child's real session file path before upstream validationintercom({ to: "@idle-worker", ... })(parent side) — handle is rewritten to the child's current intercom target, so the orchestrator can steer a running child with the same vocabulary used for resumeintercom({ to: "@parent", ... })(child side) — rewritten to the current orchestrator's intercom target; lighter alternative tocaller_pingfor clarification questions since the child keeps running while it waits for a reply- Handles derive from the display name with deterministic collision suffixing (
-2,-3, ...) and are parent-local; the list is regenerated each turn from what this session has actually launched or resumed (not from agent definitions on disk) - Minimal factual
before_agent_starthint surfaces only the affordances actually available; sidecar state lives at<sessionDir>/subagent-bridge/<parentSessionId>/registry.json(parent) and<childSessionFile>.subagent-bridge.json(child)
- Gives subagents spawned or resumed in the current orchestrator short, stable handles usable with
-
◐
editor-enhancements/(README)- Composite editor extension that makes multiple
setEditorComponent()-based UX tweaks simultaneously compatible - Configurable via two sibling files in the extension folder:
editor-enhancements/config.jsonfor editor-level behavior such as slash command remapping anddoubleEscapeCommandeditor-enhancements/file-picker.jsonfor file picker behavior such astabCompletionMode(default:"bestMatch")
- Includes a merged, single-editor implementation of:
- ◐
file-picker(upstream: laulauland/dotfiles)- type
@to open an overlay file browser and insert@pathrefs - This version adds zsh support and enables compatibility with the other two
- Search input now uses Pi's shared
Inputediting behavior spacequeues files or enters directories;enterinserts the highlighted item plus queued selections;escat the root inserts queued selections onlyshift+tab(nottab) toggles the options paneltabis configurable viaeditor-enhancements/file-picker.json:"segment": prefix-only candidate matching, then complete one word-part at a time"bestMatch": strongest scoped fuzzy match, applied in one step
- In options mode, both
←/→and↑/↓move between options
- type
- ◐
shell-completions(upstream: laulauland/dotfiles)- native shell completions in
!/!!bash mode - This version adds zsh support and enables compatibility with the other two
- native shell completions in
- ◐
raw-paste(upstream: tmustier/pi-extensions)/pastearms raw paste for the next paste operation- This version adds
alt+vperforming both arm + paste directly from the clipboard, preserving newlines and bypassing Pi's large-paste markers (e.g.[paste #3 +122 lines])
- ◐
- When enabled, disable the standalone
shell-completions/,file-picker.ts, andraw-paste.tsextensions to avoid editor-component conflicts
- Composite editor extension that makes multiple
-
◐
rewind/(README) — Archived. Session-native rewrite developed in (b432676) now adopted upstream into nicobailon/pi-rewind-hook. Install withpi install npm:pi-rewind-hook -
◐
agentic-compaction/(README; upstream: laulauland/dotfiles)- Agentic compaction via a virtual filesystem: mounts
/conversation.jsonand lets a summarizer model explore it with portable bash/zsh commands - Emphasizes deterministic, tool-result-verified modified-file tracking (native +
rp), filters likely temp artifacts, supports/compact <note>, and can parallelize tool calls viatoolCallConcurrency - ⚠ Hooks
session_before_compact— incompatible with other extensions that do the same (e.g.grounded-compaction); having both active is a race condition
- Agentic compaction via a virtual filesystem: mounts
-
◐
files-touched.ts(upstream: badlogic/pi-mono.pi/extensions/files.ts)/files-touchedshows files read/written/edited in the active session branch and opens the selected file in VS Code- This version extends the upstream original to also detect file reads/edits/writes performed through the tools of
repoprompt-mcpandrepoprompt-cli(rp,rp_exec) and theirread_file/file_actions create/apply_editsactions - It also normalizes relative, root-prefixed, and absolute spellings of the same file before rendering, and carries touched paths through tracked file moves
- Shared core (
_shared/files-touched-core.ts) also tracks bash-level file operations:sed -i(edit),cp/rsync(write destination),tee/touch(write),patch(edit),curl -o/wget -O(write), and shell output redirections (>,>>)
-
◐
branch-out/(README) (upstream: davidgasquez/dotfiles)/branch [--model <query>] [message]forks the current session into a new terminal split pane or tab; backend-aware routing across cmux, tmux, iTerm2, Terminal.app, and Ghostty; split direction is config-driven (left/right/up/down, orclockwise/counterclockwiselayout policies for cmux/tmux) with comma-separated fallback lists for cross-backend configs; optional--modeltargets a different model in the child; optionalmessageprefills the child editor with a 10-second auto-submit countdown
-
/handover [optional purpose]generates a rich handover / rehydration message, forks from the first user message, and prefills the child editor with the final draft plus an appended files-touched block- Borrows heavily from pasky/pi-amplike and damianpdr/pi-handoff (both inspired by Amp's /handoff feature), and mitsuhiko's handoff prompt
- Unique to this
handover:- Draft is generated by the current session agent/model (via
pi.sendUserMessage(...)) rather than a directcomplete()call - Forks the session from its first message, creating parent-child lineage that helps with future discovery and tools like
session_lineageandsession_ask - Robust correlation: waits for a quiescent session + uses a per-run nonce to extract the correct assistant reply
- Uses a more opinionated continuation prompt separating verified status, decisions, surprises, rejected paths, facts vs inferences, mandatory reading, and next steps, with guardrails against exhaustive file-list restatements
- Adds prior compaction summaries from the current session JSONL when they exist
- Gives the drafting model a deterministic files-touched list derived from
_shared/files-touched-core.ts(which covers Pi native tools, RepoPrompt tools, and bash-level file operations) and appends that same list to the child draft - If
rewind/is installed, requests a conversation-only fork
- Draft is generated by the current session agent/model (via
- Optional auto-submit countdown (typing or
Esccancels;Entersubmits normally) - Plays well with
session-ask/because the preserved fork lineage letssession_askconsult parent sessions when needed
-
/extension-statsshows rolling 7/30/60/90-day usage metrics from session logs, grouped by extension and tool- Use ↑/↓ to page, press
mto toggle whether the metric is based on count of tool calls or on tokens attributed to tool calls - Adapted from
session-breakdown.tsof mitsuhiko/agent-stuff
-
◐
plan-mode.ts(upstream: pi-mono examples)/plan(andctrl+alt+p) toggles a read-only sandbox- No todo extraction or step execution prompting (planning stays on the user)
- Removes Pi-native write tools from the active Pi tool list, blocks destructive shell commands, and blocks RepoPrompt write operations while leaving other available tools alone
- Adds just-bash AST-backed bash command inspection (requires
just-bash>= 2; regex fallback if parse fails)- Covers
rp_exec,rp-cli -e ..., andrp(repoprompt-mcp)
- Covers
-
◐
oracle.ts(upstream: hjanuschka/shitty-extensions)/oraclequeries an alternate model for a second opinion, with optional file inclusion (-f) and injection into the current conversation- This version adds a thinking-level picker and fixes text-overflow crashes (CJK-safe wrapping)
-
◐
session-switch/(upstream: pi-thread-switcher)- Session switching via
/switch-session, or the same picker after interactive startup viapi --switch-session, with a live preview of the highlighted session below the picker pi --switch-sessionis an extension-driven relaunch workaround, not native pre-start--resume, so it does not provide native missing-cwd recovery or the normal in-process session-switch lifecycle / shutdown-hook cleanup semanticsShift+Up/Downscroll preview by line,Shift+PageUp/PageDownpage preview- Mirrors the native
/resumepicker's layout, behaviors, and keybindings
- Session switching via
-
◐
tools/(upstream: pi-mono examples)/toolsinteractive enable/disable UI- This version persists tool enablement globally (
tools/tools.json) and per-session via session entries
-
◐
usage-bar.ts(upstream: hjanuschka/shitty-extensions)/usagequota overlay for multiple providers, with provider status polling and reset countdowns- This version:
- Supports multiple Codex accounts with automatic workspace deduplication
- Displays used percentage with 5-band color scale (0-49% green → 95%+ red) and proper label alignment
- Provider status emoji hidden on fetch errors to avoid misleading indicators
- Adds
alt+ushortcut
-
◐
sandbox/- OS-level sandboxing using@anthropic-ai/sandbox-runtimewith per-project config (upstream: pi-mono examples)- Configured in
sandbox/sandbox.json - This version:
- Sandboxes LLM
bashcalls viatool_callinput mutation instead of re-registeringbash, so it can coexist with renderer-onlybashoverrides such asMasuRii/pi-tool-display - Has a more minimalist statusline indicator
- Allows toggling on/off via
/sandbox on//sandbox off, or/sandbox-> menu selection, or the keybindingalt+S
- Sandboxes LLM
- Configured in
-
◐
cmux/(upstream: HazAT/pi-config)- cmux integration — pushes Pi agent state (model, thinking level, tokens, cost, tool activity) into the cmux sidebar; fire-and-forget, no-op when
CMUX_SOCKET_PATHis unset - This version adds workspace auto-renaming: on
session_startandagent_end, syncs the cmux workspace name to the Pi session name usingCMUX_WORKSPACE_IDso concurrent cmux workspaces do not cross-rename (only when the workspace has exactly 1 pane and 1 surface)
- cmux integration — pushes Pi agent state (model, thinking level, tokens, cost, tool activity) into the cmux sidebar; fire-and-forget, no-op when
-
○
interactive-shell.ts(upstream: pi-mono examples) -
○
preset.ts(upstream: pi-mono examples) -
○
status-line.ts(upstream: pi-mono examples) -
○
titlebar-spinner.ts(upstream: pi-mono examples) -
○
skill-palette/(upstream: nicobailon/pi-skill-palette) -
○
pi-prompt-template-model/(upstream: nicobailon/pi-prompt-template-model) -
○
code-actions/(upstream: tmustier/pi-extensions)/codeto pick code blocks or inline code from recent assistant messages, then copy or insertrunnow executes snippets in a just-bash OverlayFs sandbox by default on non-Windows (copy-on-write over cwd), with optional fallback to real shell when sandbox commands are unsupported- Type to search; enter to copy, right arrow to insert in the command line
-
○
todos.ts(upstream: mitsuhiko/agent-stuff)






