@fradser/pi-utils
Native /effort, /continue, /sessions (/recap) commands for pi — set thinking levels, resume interrupted steps, cross-session directory recap, and redirect git worktrees
Package details
Install @fradser/pi-utils from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@fradser/pi-utils- Package
@fradser/pi-utils- Version
0.4.2- Published
- Sep 2, 2026
- Downloads
- 1,737/mo · 47/wk
- Author
- fradser
- License
- MIT
- Types
- extension
- Size
- 81.7 KB
- Dependencies
- 1 dependency · 2 peers
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
Utils Pi Package
A pi-native package offering /effort for setting model thinking levels, /继续 (/continue) for resuming interrupted tasks or continuing based on recommendations, /init for creating or updating scoped AGENTS.md contributor guides, multi-session directory awareness (/sessions), git worktree session switching, plus git worktree path and @ completion isolation.
Structure
text
utils/
├── index.ts — Package-root extension entry point
├── extensions/
│ ├── continue.ts — /continue and continuation keyword interception
│ ├── effort.ts — /effort thinking-level menu
│ ├── init.ts — /init repository guide generation
│ ├── sessions.ts — /sessions directory awareness + listing tool
│ ├── worktree.ts — git worktree add path redirect
│ ├── worktree-completion.ts — worktree-aware @ filtering
│ └── worktree-session.ts — EnterWorktree / ExitWorktree session switching
├── features/ — BDD contract
├── tests/ — Package E2E tests
└── README.md
Installation
# published
pi install npm:@fradser/pi-utils
# or from this repo: pi install /path/to/pi-packages/packages/utils
Commands
init — repository contributor guides
/init asks the active agent to inspect the repository and create or update
scoped AGENTS.md files. It checks existing guides before writing, preserves
useful instructions, and keeps root and nested guides aligned without
needless duplication. An optional argument adds focus:
/init
/init focus on package release commands
sessions — cross-session directory awareness
/sessions lists active and recent Pi coding sessions in the current directory (cwd), including their PID, status, latest goal, and recent work.
/sessions # List active/recent sessions in cwd
Features:
- Cross-Session Awareness: Multiple Pi sessions in the same project directory register their status, latest goal, and touched files in
~/.pi/agent/directory-sessions/. - Automated Prompt Injection: When multiple sessions run in the same directory,
before_agent_startautomatically injects a concise directory recap into the system prompt so each agent is aware of parallel work. - Dead PID Pruning: Stale or dead process IDs are automatically detected (
process.kill(pid, 0)) and cleaned up from the directory registry. - Agent Tool (
list_directory_sessions): Exposes a tool for agents to inspect active sessions in the directory programmatically.
continue — resume or continue execution
/continue (or simply typing "continue" in conversation):
/continue # resume from interrupted step or continue based on last suggestion
/continue Please focus on performance # optional custom follow-up prompt
Behavior:
- Input Interception: Intercepts plain text
continueand routes it according to the last turn state. - Direct Recovery: For interrupted, failed, truncated, pending, or tool-error turns, starts a request from the existing conversation state without adding
continueor an internal instruction as a user message. A hidden marker is removed before the provider request, along with every trailing incomplete assistant response (automatic provider retries can stack several); an assistant tool-call message always stays paired with its saved tool results. - Current-Configuration Retry: Failures are never re-classified into permanent refusals. After switching models or fixing configuration, the very next
/continueretries on whatever model and configuration are current. - Suggestion Continuation: Only after a normally completed assistant turn does
/continuebecome a visible user request, allowing the continuation instruction to remain in the transcript and model context. - Session Recovery and Tree Selection: Before continuing, the last persisted entry is checked against the active session index. The same session file is reloaded only when another process has appended an entry the active session has never loaded. If the user navigated to an earlier tree node, the known selected leaf remains authoritative and continuation starts there instead of resuming the abandoned failed branch.
effort — set the thinking level
/effort with no argument opens a menu of the thinking levels the current
model supports (the current level is marked). With an argument it sets the
level directly:
/effort # menu
/effort max # set directly
/effort min # aliases: min, med, xh, none, 0
Valid levels: off, minimal, low, medium, high, xhigh, max.
Unknown values are rejected with a hint listing the valid levels. The level
is clamped to the model's capabilities, and the menu is narrowed to what the
model actually supports (a reasoning-off model only gets off).
Git worktree redirect
A standalone, simple git worktree add bash command is rewritten so the
linked worktree lives inside .pi/worktrees/<name> instead of a sibling
directory:
git worktree add ../foo feature/foo
# → mkdir -p .pi/worktrees && git worktree add .pi/worktrees/foo feature/foo
The redirect preserves Git's documented worktree add options, including
--lock (a flag), --reason <string>, --orphan <branch>, -b <branch>,
-B <branch>, and the optional <commit-ish>. It preserves quoted and escaped
path arguments, and leaves an already redirected path untouched.
For safety, it only rewrites the direct git worktree add form. Commands with
shell operators, redirections, substitutions, expansions, malformed quoting,
unknown options, or extra arguments are left unchanged rather than being
partially rewritten.
Git worktree-aware @ completions
Editor file suggestions (@) are filtered to the session's own git worktree:
a session in main never suggests linked worktree contents, and a session
inside a linked worktree never suggests sibling worktrees or the main
checkout. The built-in read tool also blocks direct reads from a foreign
worktree and directs the agent to enter_worktree; only a replacement session
rooted in that worktree may read its files. Worktree roots are discovered once per session via
git worktree list --porcelain; outside a git repository nothing is filtered.
Quoted and @-prefixed values are resolved (relative, absolute, and ~/
forms) before the containment check.
EnterWorktree / ExitWorktree
Pi cannot mutate the current runtime's cwd in place. These commands use Pi's
session replacement API so the built-in read, edit, bash, and @ tools
are all rebound to the selected worktree:
/enter-worktree feature-auth
/enter-worktree {"path":".pi/worktrees/existing"}
/exit-worktree
/enter-worktree creates a managed worktree at .pi/worktrees/<name> on a
pi/worktree/<name> branch, or enters an existing registered git worktree when
path is supplied. The replacement session preserves the current conversation
and records the parent session. The LLM-facing enter_worktree and
exit_worktree tools queue these commands and report queued until the session
replacement is applied. Their TUI uses the same pi-kit lifecycle style as
monitor_start: an empty tool-call row followed by one compact event row,
for example [worktree] enter · feature-auth or
[worktree] exit · current worktree.
/exit-worktree returns to the parent session. For worktrees created by Pi, it
asks whether to keep or remove the worktree; dirty work is kept unless the user
explicitly chooses forced removal. Existing worktrees are never removed by
this command.
License
MIT