1. 配置分层
Process/CLI fixed input
→ User/Agent directory
→ Workspace/CWD settings
→ Project resources(受 Trust 控制)
→ Session entries/state
→ Run/Turn overrides
越靠后越接近当前运行,但不是所有字段都简单“后者覆盖前者”。具体合并由 SettingsManager、 ResourceLoader、ModelRuntime 与 AgentSession 分别负责。
2. CWD 与 Agent Directory
cwd:当前 Workspace/Session 工作目录;agentDir:用户级 Pi 配置、认证、模型与资源目录。
切换 Session CWD 时要重建 CWD-bound Services,不能只修改一个字符串。Runtime Factory 必须把
传入的 agentDir 继续传给 Services。
3. Provider 与 Model
选择模型至少涉及:
- Provider ID;
- Model ID;
- API Type;
- Base URL;
- Auth;
- Context Window;
- Thinking/Image/Tool 能力;
- Cost/Max Tokens。
模型切换会追加 Session model_change Entry,并更新相应 Settings;不是改写 JSONL Header。
4. Auth
认证数据应进入:
- ModelRuntime/Auth Storage;
- OS Credential Store 或受控文件;
- Provider 的 Resolve/Refresh 流程。
不要进入:
- Prompt;
- Custom Message;
- ToolResult Content;
- Desktop Serializable Store;
- 普通日志。
完整 Provider 的 ApiKeyAuth、OAuthAuth 与 Legacy OAuth 契约不同,见第 28 章。
5. Project Trust
正确流程:
untrusted settings
→ load global/CLI pre-trust extensions
→ project_trust decision
→ full reload project settings/resources/extensions
简单 createAgentSession() 不自动弹桌面 Trust Dialog。SDK 宿主通过
createAgentSessionServices({ resourceLoaderReloadOptions: { resolveProjectTrust } }),或
自建带 Resolver 的 ResourceLoader 再传给 createAgentSession() 接线。
Trust Project 不等于 OS Sandbox,也不等于所有 Package 均可信。
6. Resource 来源
ResourceLoader 可组合:
- 用户级目录;
- 项目级目录;
- Package;
- CLI/宿主额外路径;
- Extension 动态发现路径;
- Inline Extension。
项目来源受 Trust;冲突与错误通过各 Resource Result 的 Diagnostics 暴露。
7. Skills/Prompt/Extension 开关
宿主可以:
- 增加额外路径;
- 禁用某类资源;
- 注入 Inline Extension;
- 限制 Built-in Tool;
- 提供 Custom Tool;
- 设置 Extension Flag。
Tool tools 是全工具 Allowlist,Custom Tool 也会被它过滤;若指定
tools: ["read", "controlled_write"],Custom Tool 的实际名称必须在列表内。
8. Tool 环境
模型可调用的 Bash Tool 默认可注入:
PI_SESSION_ID
PI_SESSION_FILE # 仅持久 Session 有文件时
PI_PROVIDER
PI_MODEL
PI_REASONING_LEVEL
可用 exposeSessionEnvironment: false 关闭。这不清除进程继承的其他环境变量;生产 Sandbox
仍需 Env Allowlist。
宿主另行实现的直接 Shell 路径不自动获得上述模型 Bash Tool 环境。
9. RPC Worker 启动配置
宿主要固定:
- Worker Binary/Version;
- CWD;
- Session/Session Directory;
- Provider/Model;
- Trust Override/Policy;
- Environment Allowlist;
- Filesystem/Network Sandbox;
- stdin/stdout/stderr;
- Restart Budget。
不要从任意系统 PATH 发现未知版本 Pi。当前 RPC 没有内置 Version/Capabilities Handshake。
10. 多窗口配置
不要把 UI Preference 写进 Agent Session Entry,除非它确实属于 Agent Branch 语义。建议:
| 数据 | 保存位置 |
|---|---|
| Window Layout | App Store |
| Runtime Owner | App Runtime Registry |
| Model Change | Session Entry/Settings |
| Branch Tool State | Tool Details/Custom Entry |
| API Token | Credential Store |
| Skill/Extension Paths | Settings/Resource Config |
11. 诊断来源
getExtensions().errors;getSkills().diagnostics;getPrompts().diagnostics;getThemes().diagnostics;runtime.diagnostics;runtime.modelFallbackMessage;- Session/Replacement Exception;
- RPC Parse/Exit;
- Host Policy/Audit。
没有一个单独的 runtime.diagnostics 能覆盖全部。
12. 配置变更检查
- 是否需要 Reload;
- 是否改变 Trust;
- 是否重建 CWD-bound Services;
- 是否使旧 Extension Context 失效;
- 是否改变 Tool Allowlist;
- 是否影响 Session 恢复;
- 是否需要兼容迁移;
- 是否会把 Secret 暴露给模型或日志。