Files
my-pi/pi-tool-search/docs/dynamic-tool-loading.md
T
云服务部-叶林立andDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 56cbc83296 refactor: 移除 context-mode,Chrome 快照改为直接返回
context-mode 的 ctx_execute 系工具以真实 shell 执行且权限为 allow,绕过了
bash 策略与 protectedWrites;其每轮注入、独立 MCP 子进程与 skills 也与组合包
提示词单一所有权冲突。大输出职责已由 pi-overflow(入口截断)与
pi-compaction(压力遮蔽)承担:
- 删除 context-mode 依赖、wrapper/过滤器、skills,以及 ctx_* 的权限、
  tools.jsonc、路由规则、tool-search 常驻与 4 个分组
- better-sqlite3@12 仅为 context-mode 传递依赖,随之移除根 allowScripts
- pi-chrome:按用户决定移除快照隐私规则与 .pi/chrome-context 临时文件机制,
  快照 JSON 直接作为工具结果返回、details 只留小型元数据,超长由 pi-overflow
  截断并用 overflow_query 提取;授权生命周期不变

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-21 20:45:33 -07:00

4.8 KiB

Current dynamic tool-group loading

pi-tool-search keeps full low-frequency schemas hidden behind a compact, validated group catalog.

  1. session_start activates tool_search, the six cross-platform Pi core tools, and configured alwaysEnabled names. The my-pi defaults also pin CodeGraph exploration, LSP diagnostics, and the six Hermes memory tools. On Windows, powershell is pinned beside bash; on non-Windows hosts it is excluded. Pinned tools do not consume the dynamic-group or dynamic-tool budget.
  2. Hidden definitions are hashed with grouping constraints and matched against extensions/bundle-groups.ts. Available standard tools receive checked-in groups; unavailable optional tools are omitted.
  3. If every hidden tool is recognized, the bundle catalog is used directly. No model call or per-user cache is required.
  4. Additional tools receive immediate deterministic prefix/source groups. A matching model-enriched cache is reused only if it preserves all checked-in bundle assignments.
  5. Only a hybrid catalog with unrecognized tools can call ModelRegistry.complete(), and an exact existing group skips that enrichment so activation cannot wait on an unrelated unknown tool. Unknown-group and query lookups may still enrich the catalog. The prompt marks bundle assignments as fixed; validation rejects any response that moves them.
  6. Code validation still requires every exact tool name exactly once and rejects unknown names, duplicates, oversized generated groups, omissions, and tool-card/group mismatches. Generated text never changes executable schemas.
  7. Loading one exact group or an atomic groups batch calls setActiveTools() once with the original full tool definitions. A batch is rejected without changing active state if its requested groups alone exceed either capacity limit. Pi supplies newly added schemas on the next model request.
  8. Group load and member execution update an in-session LRU counter. Loading past the five-group or 28-tool defaults removes least-recently-used non-requested dynamic groups. /tool-search-status reports current capacity, LRU order, and the latest eviction reason.
  9. Natural-language lookup gives exact tool names and workflow aliases more weight than descriptive overlap. Weak or closely tied matches return candidates without activation.
  10. turn_start notices tool or grouping-configuration changes by hash, resets stale dynamic groups, and reconstructs the checked-in/hybrid catalog.

The standard bundle assigns the Hermes memory extension's six tools to recall and management groups: memory_search, session_search, and overflow_query join context_tree_query in memory-recall, while memory_add, memory_replace, memory_remove, and skill_manage form memory-management. All six are pinned by default, because the injected <memory-policy> tells the model to consult and write memory during normal work, and a schema the model cannot see would silently disable that loop. Third-party tff-memory_* names and the retired Hippo hippo_* names are not seeded. It also assigns Agent, get_subagent_result, and steer_subagent to the subagents orchestration group. The maintained pi-ssh tools are also split by workflow: sequential reviewed agent-controlled connection lives in ssh-connection, structured ssh_read/ssh_write/ssh_edit file operations live in ssh-remote-files, bounded ssh_find/ssh_grep discovery lives in ssh-remote-search, and sequential reviewed workspace changes plus reviewed command execution live in ssh-remote-shell. The workflows tell the model to call ssh_connect or ssh_cd separately and wait for success before issuing remote calls that depend on the new connection or cwd. The maintained ask_user_question tool has its own user-interaction group so the model can load the complete interactive schema only when a missing decision or preference must come from the user. The pinned pi-chrome bridge registers its 21 chrome_* tools only after explicit per-session authorization. Once registered, catalog refresh assigns them to chrome-navigation, chrome-interaction, and chrome-debugging; the 28-tool default allows all three groups to coexist. Revocation remains enforced inside every upstream tool execution even if a schema is later reactivated by Tool Search.

A purely additive first load receives Pi's native dynamic-tool result propagation. A replacement that evicts one group while adding another is intentionally non-additive; current Pi detects the removal and uses its safe next-request fallback instead of attaching an invalid additive-only hint.

A model cannot call a schema it had not received in an already-generated assistant response. tool_search therefore returns normally, and the next model request sees the activated group's complete schemas. No provider payload rewriting, proxy dispatch, hidden steer message, old package alias, or duplicate Pi runtime is used.