目录
48 章已发布
查阅索引
- abandoned branch summary
- 压缩与回到旧分支怎样改变上下文
- abort propagation
- 重试、溢出与中止在哪一层收口
- acceptance versus completion
- RPC 模式如何把会话变成可控制进程
- accepted mutation
- 运行中改配置,什么时候才真正生效
- active context usage
- 自动压缩、重试与用量统计怎样协作
- active leaf
- JSONL 会话文件怎样记录一棵树
- active leaf pointer
- Session 保存的是树,不是一串消息
- active run ownership
- `Agent` 怎样把事件还原成状态
- active tool set
- 七个内置工具为什么默认只开四个
- agent run
- 两层循环为什么缺一不可
- agent turn
- 两层循环为什么缺一不可
- AgentMessage
- AgentMessage 为什么不能直接发给模型
- allowlist and denylist
- 七个内置工具为什么默认只开四个
- API dispatch
- 不同模型 API 怎样被压到同一接口
- append log versus tree topology
- Session 保存的是树,不是一串消息
- append-only JSONL
- JSONL 会话文件怎样记录一棵树
- AppMode
- 一个 pi 命令,四种运行方式
- argument coercion
- 工具执行前先经过哪些检查
- assistant retry
- 重试、溢出与中止在哪一层收口
- auth resolution
- 密钥与 OAuth 怎样落到一次请求
- auto compaction
- 自动压缩、重试与用量统计怎样协作
- behavioral evaluation
- Evals 怎样把 Agent 行为变成可检查结果
- bind-mount write-through
- Pi 没有内置沙箱,这意味着什么
- bootstrap extension set
- 扩展代码从哪里加载,信任边界在哪里
- bounded streaming output
- Bash 输出太长时,完整结果去了哪里
- bracketed paste
- 键盘输入怎样穿过终端协议到达编辑器
- branch navigation
- 压缩与回到旧分支怎样改变上下文
- branch-scoped context
- Session 保存的是树,不是一串消息
- canonical path key
- 读写文件时,Pi 怎样避免相互踩踏
- capability clamping
- 模型切换与设置热更新怎样保持一致
- chained transform
- Extension Runner 怎样串起事件与变换
- command short circuit
- 一条 Prompt 在调用模型前还要过多少关
- compaction barrier
- 压缩与回到旧分支怎样改变上下文
- completion order
- 并行工具为什么仍要保留原始顺序
- context overflow recovery
- 重试、溢出与中止在哪一层收口
- context projection
- JSONL 会话文件怎样记录一棵树
- Context projection
- 请求发出前,Context 还会经历什么
- context token clamp
- 请求发出前,Context 还会经历什么
- continuation
- 一次 Run 怎样停止、失败与继续
- control plane
- `AgentSession` 如何成为 Coding Agent 的控制面
- cooperative abort
- 一次 Run 怎样停止、失败与继续读写文件时,Pi 怎样避免相互踩踏
- crash recovery boundary
- 持久会话为什么还不等于持久运行
- credential storage
- 密钥与 OAuth 怎样落到一次请求
- cross-model replay
- 不同模型 API 怎样被压到同一接口
- cumulative usage
- 自动压缩、重试与用量统计怎样协作
- current runtime state
- 模型切换与设置热更新怎样保持一致
- cwd-bound services
- 启动阶段到底组装了什么不启动 TUI,怎样把 Pi 嵌进自己的程序
- declaration merging
- AgentMessage 为什么不能直接发给模型
- default discovery
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- delayed persistence
- JSONL 会话文件怎样记录一棵树
- dependency defaults
- `createAgentSession()` 怎样交出一个可运行会话
- design versus shipped behavior
- 怎样验证本册结论,并看清 Harness v2 的边界
- drain point
- Steering 与 Follow-up 不是同一种排队
- durable conversation state
- 持久会话为什么还不等于持久运行
- dynamic models
- 模型目录与 Provider Registry 各管什么
- effective session cwd
- 启动阶段到底组装了什么
- entry projection
- Session 保存的是树,不是一串消息
- escape-sequence framing
- 键盘输入怎样穿过终端协议到达编辑器
- event projection
- `AgentSession` 如何成为 Coding Agent 的控制面
- event-reduced state
- `Agent` 怎样把事件还原成状态
- event-to-view projection
- 流式消息与工具结果怎样出现在屏幕上
- evidence hierarchy
- 怎样验证本册结论,并看清 Harness v2 的边界
- executable extension
- 扩展代码从哪里加载,信任边界在哪里
- extension event projection
- Extension Runner 怎样串起事件与变换
- external isolation boundary
- Pi 没有内置沙箱,这意味着什么
- final-line diff
- Pi 为什么不用每次重画整个终端
- fixed source version
- 先固定版本,再谈 Pi 的架构
- focused input routing
- 键盘输入怎样穿过终端协议到达编辑器
- follow-up queue
- Steering 与 Follow-up 不是同一种排队
- full redraw fallback
- Pi 为什么不用每次重画整个终端
- global defaults
- 模型切换与设置热更新怎样保持一致
- global settings
- 配置、信任与资源从哪里进入
- graceful stop
- 一次 Run 怎样停止、失败与继续
- grapheme-aware editing
- 键盘输入怎样穿过终端协议到达编辑器
- hardware cursor marker
- TUI 组件、焦点与覆盖层怎样配合
- hardware cursor projection
- Pi 为什么不用每次重画整个终端
- hook settlement
- 运行中改配置,什么时候才真正生效
- host ownership
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- I/O adapter
- 启动阶段到底组装了什么
- immediate tool outcome
- 工具执行前先经过哪些检查
- in-flight immutability
- 一轮请求为什么需要快照与保存点
- inner tool loop
- 两层循环为什么缺一不可
- input loading trust
- Pi 没有内置沙箱,这意味着什么
- input transformation
- 一条 Prompt 在调用模型前还要过多少关
- instance metadata
- `pi-server` 管的是进程,还是 Agent
- isolated AgentSession
- Evals 怎样把 Agent 行为变成可检查结果
- JSON event stream
- 一个 pi 命令,四种运行方式
- JSONL event stream
- 同一场运行怎样投影成文本与 JSON
- JSONL RPC protocol
- 一个 pi 命令,四种运行方式
- keyboard protocol negotiation
- 键盘输入怎样穿过终端协议到达编辑器
- lazy spill file
- Bash 输出太长时,完整结果去了哪里
- lazy stream setup
- 流式响应怎样变成可消费事件
- line-oriented component tree
- TUI 组件、焦点与覆盖层怎样配合
- listener settlement
- `Agent` 怎样把事件还原成状态
- live config versus request config
- 一轮请求为什么需要快照与保存点
- load-order precedence
- 扩展代码从哪里加载,信任边界在哪里
- logical branch
- 恢复、分叉与切换会话不是同一个动作
- Message
- AgentMessage 为什么不能直接发给模型
- migration boundary
- `AgentHarness` 为什么没有包住 `Agent`
- model boundary
- AgentMessage 为什么不能直接发给模型
- model catalog
- 模型目录与 Provider Registry 各管什么
- model variability
- Evals 怎样把 Agent 行为变成可检查结果
- model-visible repair
- 工具执行前先经过哪些检查
- monorepo workspace
- 先固定版本,再谈 Pi 的架构
- mutation ownership
- 读写文件时,Pi 怎样避免相互踩踏
- name collision precedence
- 自定义工具、Provider 与渲染器谁覆盖谁
- non-capturing overlay
- TUI 组件、焦点与覆盖层怎样配合
- OAuth refresh locking
- 密钥与 OAuth 怎样落到一次请求
- observable proof
- Evals 怎样把 Agent 行为变成可检查结果
- offline build verification
- 怎样验证本册结论,并看清 Harness v2 的边界
- ordered settlement
- 并行工具为什么仍要保留原始顺序
- outer follow-up loop
- 两层循环为什么缺一不可
- output projection
- 同一场运行怎样投影成文本与 JSON
- overlay composition
- TUI 组件、焦点与覆盖层怎样配合
- package boundary
- 先固定版本,再谈 Pi 的架构
- parallel orchestration surfaces
- `AgentHarness` 为什么没有包住 `Agent`
- parallel tool batch
- 并行工具为什么仍要保留原始顺序
- parent-linked tree
- JSONL 会话文件怎样记录一棵树
- partial message
- 流式响应怎样变成可消费事件
- per-entry atomicity
- 持久会话为什么还不等于持久运行
- per-file serialization
- 读写文件时,Pi 怎样避免相互踩踏
- persisted branch state
- 运行中改配置,什么时候才真正生效
- physical fork
- 恢复、分叉与切换会话不是同一个动作
- pinned source identity
- 怎样验证本册结论,并看清 Harness v2 的边界
- post-run recovery
- 自动压缩、重试与用量统计怎样协作
- preflight
- 一条 Prompt 在调用模型前还要过多少关
- process control plane
- RPC 模式如何把会话变成可控制进程
- process permission inheritance
- Pi 没有内置沙箱,这意味着什么
- process supervisor
- `pi-server` 管的是进程,还是 Agent
- project context
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- project settings
- 配置、信任与资源从哪里进入
- project trust
- 配置、信任与资源从哪里进入扩展代码从哪里加载,信任边界在哪里
- prompt pipeline
- 一条 Prompt 在调用模型前还要过多少关
- prompt template
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- provider composition
- 自定义工具、Provider 与渲染器谁覆盖谁
- provider normalization
- 不同模型 API 怎样被压到同一接口
- provider payload
- 请求发出前,Context 还会经历什么
- provider registry
- 模型目录与 Provider Registry 各管什么
- queue mode
- Steering 与 Follow-up 不是同一种排队
- raw terminal input
- 键盘输入怎样穿过终端协议到达编辑器
- release archive completeness
- 怎样验证本册结论,并看清 Harness v2 的边界
- render request coalescing
- Pi 为什么不用每次重画整个终端
- renderer lookup
- 自定义工具、Provider 与渲染器谁覆盖谁
- request auth
- 密钥与 OAuth 怎样落到一次请求
- request correlation
- RPC 模式如何把会话变成可控制进程
- request option normalization
- 请求发出前,Context 还会经历什么
- resource discovery
- 配置、信任与资源从哪里进入
- restart recovery
- `pi-server` 管的是进程,还是 Agent
- retained recent context
- 压缩与回到旧分支怎样改变上下文
- retry budget
- 自动压缩、重试与用量统计怎样协作
- RPC child process
- `pi-server` 管的是进程,还是 Agent
- run settlement
- 一次 Run 怎样停止、失败与继续`AgentSession` 如何成为 Coding Agent 的控制面
- run snapshot
- `Agent` 怎样把事件还原成状态
- runnable session
- `createAgentSession()` 怎样交出一个可运行会话
- runtime call chain
- 先固定版本,再谈 Pi 的架构
- runtime composition
- 模型目录与 Provider Registry 各管什么
- runtime factory
- 启动阶段到底组装了什么
- runtime ownership
- `AgentHarness` 为什么没有包住 `Agent``pi-server` 管的是进程,还是 Agent
- runtime replacement
- 恢复、分叉与切换会话不是同一个动作不启动 TUI,怎样把 Pi 嵌进自己的程序
- runtime visibility
- 运行中改配置,什么时候才真正生效
- save-point ordering
- 一轮请求为什么需要快照与保存点
- SDK embedding
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- session persistence
- `AgentSession` 如何成为 Coding Agent 的控制面
- session rebinding
- RPC 模式如何把会话变成可控制进程
- session restoration
- `createAgentSession()` 怎样交出一个可运行会话
- session resume
- 恢复、分叉与切换会话不是同一个动作
- session-backed reconstruction
- 流式消息与工具结果怎样出现在屏幕上
- session-local history
- 模型切换与设置热更新怎样保持一致
- settings reload
- 模型切换与设置热更新怎样保持一致
- short-circuit hook
- Extension Runner 怎样串起事件与变换
- single input focus
- TUI 组件、焦点与覆盖层怎样配合
- single-shot execution
- 同一场运行怎样投影成文本与 JSON
- skill metadata
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- source order
- 并行工具为什么仍要保留原始顺序
- source precedence
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- stale context
- Extension Runner 怎样串起事件与变换
- stale extension context
- 恢复、分叉与切换会话不是同一个动作
- state wrapper versus session harness
- `AgentHarness` 为什么没有包住 `Agent`
- status event projection
- 流式消息与工具结果怎样出现在屏幕上
- stdout isolation
- 同一场运行怎样投影成文本与 JSON
- steering queue
- Steering 与 Follow-up 不是同一种排队
- streaming protocol
- 流式响应怎样变成可消费事件
- strict JSONL framing
- RPC 模式如何把会话变成可控制进程
- synchronized terminal output
- Pi 为什么不用每次重画整个终端
- synthetic failure message
- 一次 Run 怎样停止、失败与继续
- tail truncation
- Bash 输出太长时,完整结果去了哪里
- terminal event
- 流式响应怎样变成可消费事件
- tool allowlist
- `createAgentSession()` 怎样交出一个可运行会话
- tool call repair
- 不同模型 API 怎样被压到同一接口
- tool definition
- 七个内置工具为什么默认只开四个
- tool override
- 自定义工具、Provider 与渲染器谁覆盖谁
- tool preflight
- 工具执行前先经过哪些检查
- tool registry
- 七个内置工具为什么默认只开四个
- tool-call correlation
- 流式消息与工具结果怎样出现在屏幕上
- tool-routing isolation
- Pi 没有内置沙箱,这意味着什么
- transcript normalization
- Evals 怎样把 Agent 行为变成可检查结果
- transient streaming state
- 流式消息与工具结果怎样出现在屏幕上
- transport retry
- 重试、溢出与中止在哪一层收口
- TTY detection
- 一个 pi 命令,四种运行方式
- turn snapshot
- 一轮请求为什么需要快照与保存点
- turn-local system prompt
- 一条 Prompt 在调用模型前还要过多少关
- UTF-8 stream decoding
- Bash 输出太长时,完整结果去了哪里
- viewport-aware cursor movement
- Pi 为什么不用每次重画整个终端
- volatile orchestration state
- 持久会话为什么还不等于持久运行
- abort active wait
- 重试、溢出与中止在哪一层收口
- abort and settle old session
- 恢复、分叉与切换会话不是同一个动作
- accept JSONL commands
- RPC 模式如何把会话变成可控制进程
- aggregate session usage
- 自动压缩、重试与用量统计怎样协作
- append child entry
- JSONL 会话文件怎样记录一棵树
- append session change
- 模型切换与设置热更新怎样保持一致
- append stdout and stderr chunks
- Bash 输出太长时,完整结果去了哪里
- append tool results
- 并行工具为什么仍要保留原始顺序
- apply and rebind session
- 恢复、分叉与切换会话不是同一个动作
- apply result or emit diagnostic
- Extension Runner 怎样串起事件与变换
- argument parsing
- 一个 pi 命令,四种运行方式
- assemble tools and extensions
- Pi 没有内置沙箱,这意味着什么
- assemble turn messages
- 一条 Prompt 在调用模型前还要过多少关
- assert scenario outcome
- Evals 怎样把 Agent 行为变成可检查结果
- assign editor focus
- TUI 组件、焦点与覆盖层怎样配合
- await previous mutation
- 读写文件时,Pi 怎样避免相互踩踏
- await subscribers
- `Agent` 怎样把事件还原成状态
- back off or compact
- 自动压缩、重试与用量统计怎样协作
- bind current session
- 同一场运行怎样投影成文本与 JSONRPC 模式如何把会话变成可控制进程
- bind runtime actions
- Extension Runner 怎样串起事件与变换
- bind runtime and tools
- `AgentSession` 如何成为 Coding Agent 的控制面
- bootstrap settings
- 启动阶段到底组装了什么
- branch divergence collection
- 压缩与回到旧分支怎样改变上下文
- branch path selection
- Session 保存的是树,不是一串消息
- bridge commands and events
- `pi-server` 管的是进程,还是 Agent
- buffer stdin chunks
- 键盘输入怎样穿过终端协议到达编辑器
- build from hydrated data
- 怎样验证本册结论,并看清 Harness v2 的边界
- build pi-ai Context
- 请求发出前,Context 还会经历什么
- build provider payload
- 请求发出前,Context 还会经历什么
- build runtime registry
- 七个内置工具为什么默认只开四个
- choose batch mode
- 并行工具为什么仍要保留原始顺序
- clamp thinking level
- 模型切换与设置热更新怎样保持一致
- classify provider failure
- 重试、溢出与中止在哪一层收口
- classify retry or overflow
- 自动压缩、重试与用量统计怎样协作
- CLI entry
- 先固定版本,再谈 Pi 的架构
- clone coerce and validate
- 工具执行前先经过哪些检查
- collect extension registrations
- 自定义工具、Provider 与渲染器谁覆盖谁
- compact or retry turn
- 重试、溢出与中止在哪一层收口
- compaction entry append
- 压缩与回到旧分支怎样改变上下文
- compaction preparation
- 压缩与回到旧分支怎样改变上下文
- compare previous lines
- Pi 为什么不用每次重画整个终端
- compose provider overlays
- 自定义工具、Provider 与渲染器谁覆盖谁
- compose runtime overlays
- 模型目录与 Provider Registry 各管什么
- composite overlays
- Pi 为什么不用每次重画整个终端
- composite screen lines
- TUI 组件、焦点与覆盖层怎样配合
- config update and notification
- 运行中改配置,什么时候才真正生效
- construct Agent
- `createAgentSession()` 怎样交出一个可运行会话
- construct AgentSession
- `createAgentSession()` 怎样交出一个可运行会话`AgentSession` 如何成为 Coding Agent 的控制面不启动 TUI,怎样把 Pi 嵌进自己的程序
- construct model context
- AgentMessage 为什么不能直接发给模型
- construct providers
- 模型目录与 Provider Registry 各管什么
- context construction
- `AgentHarness` 为什么没有包住 `Agent`
- context projection
- Session 保存的是树,不是一串消息
- continue from transcript
- 一次 Run 怎样停止、失败与继续
- continue queued work
- 自动压缩、重试与用量统计怎样协作
- convert messages
- AgentMessage 为什么不能直接发给模型
- correlate tool execution
- 流式消息与工具结果怎样出现在屏幕上
- create all built-in definitions
- 七个内置工具为什么默认只开四个
- create assistant component
- 流式消息与工具结果怎样出现在屏幕上
- create cwd-bound runtime
- 恢复、分叉与切换会话不是同一个动作
- create model and settings runtime
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- create pending message
- 流式响应怎样变成可消费事件
- create session header
- JSONL 会话文件怎样记录一棵树
- create temporary session services
- Evals 怎样把 Agent 行为变成可检查结果
- decode provider response
- 不同模型 API 怎样被压到同一接口
- detect context overflow
- 重试、溢出与中止在哪一层收口
- detect project resources
- 扩展代码从哪里加载,信任边界在哪里
- direct agent-loop invocation
- `AgentHarness` 为什么没有包住 `Agent`
- discover project resources
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- dispatch extension command
- 一条 Prompt 在调用模型前还要过多少关
- dispose process runtime
- RPC 模式如何把会话变成可控制进程
- dispose runtime
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- dispose runtime and flush output
- 同一场运行怎样投影成文本与 JSON
- dispose session and temporary files
- Evals 怎样把 Agent 行为变成可检查结果
- drain follow-up
- Steering 与 Follow-up 不是同一种排队
- drain steering
- Steering 与 Follow-up 不是同一种排队
- emit error result or execute
- 工具执行前先经过哪些检查
- emit input hook
- 一条 Prompt 在调用模型前还要过多少关
- emit responses and events
- RPC 模式如何把会话变成可控制进程
- emit run start
- 两层循环为什么缺一不可
- emit shutdown
- 恢复、分叉与切换会话不是同一个动作
- emit terminal event
- 流式响应怎样变成可消费事件
- emit throttled partial update
- Bash 输出太长时,完整结果去了哪里
- emit updates and completion events
- 并行工具为什么仍要保留原始顺序
- enable raw mode
- 键盘输入怎样穿过终端协议到达编辑器
- encode provider request
- 不同模型 API 怎样被压到同一接口
- enqueue steering
- Steering 与 Follow-up 不是同一种排队
- entry creation
- Session 保存的是树,不是一串消息
- evaluate terminate hints
- 一次 Run 怎样停止、失败与继续
- event reduction and persistence
- `AgentHarness` 为什么没有包住 `Agent`
- execute prompt and reload steps
- Evals 怎样把 Agent 行为变成可检查结果
- execute tool batch
- 两层循环为什么缺一不可
- execute with process permissions
- Pi 没有内置沙箱,这意味着什么
- expand skill and template
- 一条 Prompt 在调用模型前还要过多少关
- filter terminal responses
- 键盘输入怎样穿过终端协议到达编辑器
- finalize visible result
- 流式消息与工具结果怎样出现在屏幕上
- finish current turn
- Steering 与 Follow-up 不是同一种排队
- finish decoder
- Bash 输出太长时,完整结果去了哪里
- finish normal turn
- 一次 Run 怎样停止、失败与继续
- flush after first assistant
- JSONL 会话文件怎样记录一棵树
- host runtime reconstruction
- 持久会话为什么还不等于持久运行
- import final extension set
- 扩展代码从哪里加载,信任边界在哪里
- initial snapshot creation
- 一轮请求为什么需要快照与保存点
- initialize mutable state
- `Agent` 怎样把事件还原成状态
- inject pending messages
- 两层循环为什么缺一不可
- inspect project resources
- Pi 没有内置沙箱,这意味着什么
- install without lifecycle scripts
- 怎样验证本册结论,并看清 Harness v2 的边界
- invoke ordered handlers
- Extension Runner 怎样串起事件与变换
- invoke provider
- 密钥与 OAuth 怎样落到一次请求
- invoke response hooks
- 请求发出前,Context 还会经历什么
- leaf advancement
- Session 保存的是树,不是一串消息
- leaf move and summary append
- 压缩与回到旧分支怎样改变上下文
- load catalog metadata
- 模型目录与 Provider Registry 各管什么
- load context ancestors
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- load extension handlers
- Extension Runner 怎样串起事件与变换
- main dispatch
- 先固定版本,再谈 Pi 的架构
- map provider deltas
- 流式响应怎样变成可消费事件
- match keybinding
- 键盘输入怎样穿过终端协议到达编辑器
- merge custom definitions
- 七个内置工具为什么默认只开四个
- merge request auth
- 密钥与 OAuth 怎样落到一次请求
- merge SDK custom tools
- 自定义工具、Provider 与渲染器谁覆盖谁
- mode binding
- 启动阶段到底组装了什么
- mode dispatch
- 一个 pi 命令,四种运行方式
- mode resolution
- 一个 pi 命令,四种运行方式
- mount component containers
- TUI 组件、焦点与覆盖层怎样配合
- mutate Agent state
- 模型切换与设置热更新怎样保持一致
- mutate editor state
- 键盘输入怎样穿过终端协议到达编辑器
- negotiate keyboard protocol
- 键盘输入怎样穿过终端协议到达编辑器
- next snapshot application
- 运行中改配置,什么时候才真正生效
- next-turn refresh
- 一轮请求为什么需要快照与保存点
- normalize conversation history
- 不同模型 API 怎样被压到同一接口
- normalize stream options
- 请求发出前,Context 还会经历什么
- normalize thrown failure
- 一次 Run 怎样停止、失败与继续
- normalize transcript and usage
- Evals 怎样把 Agent 行为变成可检查结果
- optionally route through isolation
- Pi 没有内置沙箱,这意味着什么
- parent binding
- Session 保存的是树,不是一串消息
- parse skills and prompts
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- pending write enqueue
- 运行中改配置,什么时候才真正生效
- pending write flush
- 一轮请求为什么需要快照与保存点
- perform edit or write
- 读写文件时,Pi 怎样避免相互踩踏
- persist assistant terminal message
- 自动压缩、重试与用量统计怎样协作
- persist completed messages
- `AgentSession` 如何成为 Coding Agent 的控制面
- persist full output when truncated
- Bash 输出太长时,完整结果去了哪里
- persist global default
- 模型切换与设置热更新怎样保持一致
- persist starting instance
- `pi-server` 管的是进程,还是 Agent
- poll follow-up
- 两层循环为什么缺一不可
- poll steering
- 两层循环为什么缺一不可
- position hardware cursor
- Pi 为什么不用每次重画整个终端
- preflight compaction
- 一条 Prompt 在调用模型前还要过多少关
- preflight in source order
- 并行工具为什么仍要保留原始顺序
- preload trusted and CLI extensions
- 扩展代码从哪里加载,信任边界在哪里
- prepare raw arguments
- 工具执行前先经过哪些检查
- project agent events
- Extension Runner 怎样串起事件与变换
- project Agent events
- `AgentSession` 如何成为 Coding Agent 的控制面
- project compacted context
- JSONL 会话文件怎样记录一棵树
- project text or events
- 同一场运行怎样投影成文本与 JSON
- prompt acceptance
- `AgentHarness` 为什么没有包住 `Agent`
- prompt entry persistence
- 持久会话为什么还不等于持久运行
- propagate abort signal
- 一次 Run 怎样停止、失败与继续
- provider interruption
- 持久会话为什么还不等于持久运行
- provider request
- 一轮请求为什么需要快照与保存点
- queue or validate
- 一条 Prompt 在调用模型前还要过多少关
- reach natural stop
- Steering 与 Follow-up 不是同一种排队
- read request override
- 密钥与 OAuth 怎样落到一次请求
- reassess future versions
- 怎样验证本册结论,并看清 Harness v2 的边界
- rebind after replacement
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- rebind replacement session
- RPC 模式如何把会话变成可控制进程
- rebuild active context
- 自动压缩、重试与用量统计怎样协作
- rebuild from session items
- 流式消息与工具结果怎样出现在屏幕上
- rebuild system prompt
- 七个内置工具为什么默认只开四个
- rebuild system prompt or expand command
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- reduce agent events
- `Agent` 怎样把事件还原成状态
- refresh expiring OAuth
- 密钥与 OAuth 怎样落到一次请求
- register queue position
- 读写文件时,Pi 怎样避免相互踩踏
- reject truncated tool calls
- 工具执行前先经过哪些检查
- release and clean queue
- 读写文件时,Pi 怎样避免相互踩踏
- reload project settings
- 扩展代码从哪里加载,信任边界在哪里
- render components
- Pi 为什么不用每次重画整个终端
- report collisions
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- request graceful stop
- 一次 Run 怎样停止、失败与继续
- request render
- Pi 为什么不用每次重画整个终端
- resolve application mode
- 同一场运行怎样投影成文本与 JSON
- resolve dependencies
- `createAgentSession()` 怎样交出一个可运行会话
- resolve path
- 读写文件时,Pi 怎样避免相互踩踏
- resolve project trust
- Pi 没有内置沙箱,这意味着什么
- resolve provider for request
- 模型目录与 Provider Registry 各管什么
- resolve renderer at display time
- 自定义工具、Provider 与渲染器谁覆盖谁
- resolve resource paths
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- resolve stored credential
- 密钥与 OAuth 怎样落到一次请求
- resolve tool by name
- 工具执行前先经过哪些检查
- resolve trust decision
- 扩展代码从哪里加载,信任边界在哪里
- resource materialization
- 配置、信任与资源从哪里进入
- restore model state
- `createAgentSession()` 怎样交出一个可运行会话
- restore on new runtime
- 模型切换与设置热更新怎样保持一致
- restore previous focus
- TUI 组件、焦点与覆盖层怎样配合
- restore source order
- 并行工具为什么仍要保留原始顺序
- retain agent state
- AgentMessage 为什么不能直接发给模型
- return session handle
- `createAgentSession()` 怎样交出一个可运行会话
- return tail and metadata
- Bash 输出太长时,完整结果去了哪里
- return unified event stream
- 不同模型 API 怎样被压到同一接口
- run before hook
- 工具执行前先经过哪些检查
- run pinned tests
- 怎样验证本册结论,并看清 Harness v2 的边界
- run pre-switch hook
- 恢复、分叉与切换会话不是同一个动作
- run prompts sequentially
- 同一场运行怎样投影成文本与 JSON
- save next render baseline
- Pi 为什么不用每次重画整个终端
- save-point flush
- 运行中改配置,什么时候才真正生效
- select active tools
- 七个内置工具为什么默认只开四个
- select API implementation
- 不同模型 API 怎样被压到同一接口
- select current leaf path
- JSONL 会话文件怎样记录一棵树
- select provider and model
- Evals 怎样把 Agent 行为变成可检查结果
- service creation
- 启动阶段到底组装了什么
- session construction
- 先固定版本,再谈 Pi 的架构
- session creation
- 启动阶段到底组装了什么
- session selection
- 启动阶段到底组装了什么
- setter validation
- 运行中改配置,什么时候才真正生效
- settings reload
- 配置、信任与资源从哪里进入
- settle active run
- `Agent` 怎样把事件还原成状态
- settle final result
- 流式响应怎样变成可消费事件
- settle retry and compaction
- `AgentSession` 如何成为 Coding Agent 的控制面
- show overlay
- TUI 组件、焦点与覆盖层怎样配合
- snapshot loop context
- `Agent` 怎样把事件还原成状态
- spawn command
- Bash 输出太长时,完整结果去了哪里
- spawn RPC child
- `pi-server` 管的是进程,还是 Agent
- start Agent run
- 一条 Prompt 在调用模型前还要过多少关
- start allowed executions
- 并行工具为什么仍要保留原始顺序
- start local IPC server
- `pi-server` 管的是进程,还是 Agent
- start RPC process
- RPC 模式如何把会话变成可控制进程
- stdin routing
- 一个 pi 命令,四种运行方式
- stop child and remove instance
- `pi-server` 管的是进程,还是 Agent
- storage reopen
- 持久会话为什么还不等于持久运行
- stream assistant response
- 两层循环为什么缺一不可
- submit expanded prompt
- 键盘输入怎样穿过终端协议到达编辑器
- subscribe and prompt
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- subscribe to session
- 流式消息与工具结果怎样出现在屏幕上
- summary generation
- 压缩与回到旧分支怎样改变上下文
- tool batch completion
- 一轮请求为什么需要快照与保存点
- transfer or preserve focus
- TUI 组件、焦点与覆盖层怎样配合
- transform agent context
- AgentMessage 为什么不能直接发给模型
- transform agent messages
- 请求发出前,Context 还会经历什么
- trust resolution
- 配置、信任与资源从哪里进入
- unfinished tool call
- 持久会话为什么还不等于持久运行
- untrusted preload
- 配置、信任与资源从哪里进入
- update partial message
- 流式响应怎样变成可消费事件
- update streaming content
- 流式消息与工具结果怎样出现在屏幕上
- validate model auth
- 模型切换与设置热更新怎样保持一致
- verify archive digest
- 怎样验证本册结论,并看清 Harness v2 的边界
- verify tag and commit
- 怎样验证本册结论,并看清 Harness v2 的边界
- wait with bounded backoff
- 重试、溢出与中止在哪一层收口
- write changed interval
- Pi 为什么不用每次重画整个终端
- _appendEntry
- JSONL 会话文件怎样记录一棵树
- _checkCompaction
- 重试、溢出与中止在哪一层收口自动压缩、重试与用量统计怎样协作
- _expandSkillCommand
- 一条 Prompt 在调用模型前还要过多少关
- _handleAgentEvent
- `AgentSession` 如何成为 Coding Agent 的控制面
- _handlePostAgentRun
- 自动压缩、重试与用量统计怎样协作
- _prepareRetry
- 重试、溢出与中止在哪一层收口自动压缩、重试与用量统计怎样协作
- _refreshToolRegistry
- 七个内置工具为什么默认只开四个自定义工具、Provider 与渲染器谁覆盖谁
- _runAgentPrompt
- `AgentSession` 如何成为 Coding Agent 的控制面
- _runAutoCompaction
- 自动压缩、重试与用量统计怎样协作
- _tryExecuteExtensionCommand
- 一条 Prompt 在调用模型前还要过多少关
- Agent
- 先固定版本,再谈 Pi 的架构`createAgentSession()` 怎样交出一个可运行会话`Agent` 怎样把事件还原成状态`AgentHarness` 为什么没有包住 `Agent`
- agent_settled
- RPC 模式如何把会话变成可控制进程
- Agent.abort
- 一次 Run 怎样停止、失败与继续
- Agent.continue
- 一次 Run 怎样停止、失败与继续
- AgentContext
- AgentMessage 为什么不能直接发给模型
- AgentHarness
- `AgentHarness` 为什么没有包住 `Agent`持久会话为什么还不等于持久运行
- AgentSession
- 先固定版本,再谈 Pi 的架构`createAgentSession()` 怎样交出一个可运行会话`AgentHarness` 为什么没有包住 `Agent``AgentSession` 如何成为 Coding Agent 的控制面不启动 TUI,怎样把 Pi 嵌进自己的程序
- AgentSession._handleAgentEvent
- 流式消息与工具结果怎样出现在屏幕上
- AgentSession.prompt
- 一条 Prompt 在调用模型前还要过多少关
- AgentSession.reload
- 模型切换与设置热更新怎样保持一致
- AgentSessionConfig
- `AgentSession` 如何成为 Coding Agent 的控制面
- AgentSessionEvent
- `AgentSession` 如何成为 Coding Agent 的控制面流式消息与工具结果怎样出现在屏幕上
- AgentSessionRuntime
- 恢复、分叉与切换会话不是同一个动作不启动 TUI,怎样把 Pi 嵌进自己的程序
- AgentState
- `Agent` 怎样把事件还原成状态
- anthropicProvider
- 不同模型 API 怎样被压到同一接口
- applyAuth
- 密钥与 OAuth 怎样落到一次请求
- AssistantMessageEvent
- 流式响应怎样变成可消费事件
- AssistantMessageEventStream
- 流式响应怎样变成可消费事件
- attachJsonlLineReader
- RPC 模式如何把会话变成可控制进程
- BashOperations
- Pi 没有内置沙箱,这意味着什么
- BashToolDetails
- Bash 输出太长时,完整结果去了哪里
- beforeToolCall
- 工具执行前先经过哪些检查
- bindCore
- Extension Runner 怎样串起事件与变换
- build:offline
- 怎样验证本册结论,并看清 Harness v2 的边界
- buildBaseOptions
- 请求发出前,Context 还会经历什么
- buildParams
- 请求发出前,Context 还会经历什么
- buildSessionContext
- Session 保存的是树,不是一串消息JSONL 会话文件怎样记录一棵树
- builtinModels
- 模型目录与 Provider Registry 各管什么
- builtinProviders
- 模型目录与 Provider Registry 各管什么
- clampMaxTokensToContext
- 请求发出前,Context 还会经历什么
- collectEntriesForBranchSummary
- 压缩与回到旧分支怎样改变上下文
- combineAbortSignals
- 重试、溢出与中止在哪一层收口
- compact
- 压缩与回到旧分支怎样改变上下文
- Component
- TUI 组件、焦点与覆盖层怎样配合
- Container
- TUI 组件、焦点与覆盖层怎样配合
- Context
- 请求发出前,Context 还会经历什么
- continue
- Steering 与 Follow-up 不是同一种排队
- convertToLlm
- AgentMessage 为什么不能直接发给模型
- create-source-archive.sh
- 怎样验证本册结论,并看清 Harness v2 的边界
- createAgentSession
- 先固定版本,再谈 Pi 的架构`createAgentSession()` 怎样交出一个可运行会话`AgentHarness` 为什么没有包住 `Agent`不启动 TUI,怎样把 Pi 嵌进自己的程序
- createAgentSessionFromServices
- 启动阶段到底组装了什么
- CreateAgentSessionOptions
- `createAgentSession()` 怎样交出一个可运行会话
- createAgentSessionRuntime
- 启动阶段到底组装了什么不启动 TUI,怎样把 Pi 嵌进自己的程序
- createAgentSessionServices
- 启动阶段到底组装了什么不启动 TUI,怎样把 Pi 嵌进自己的程序
- createAllToolDefinitions
- 七个内置工具为什么默认只开四个
- createBranchedSession
- 恢复、分叉与切换会话不是同一个动作
- createEditToolDefinition
- 读写文件时,Pi 怎样避免相互踩踏
- createErrorToolResult
- 工具执行前先经过哪些检查
- createLocalBashOperations
- Pi 没有内置沙箱,这意味着什么
- createLoopConfig
- 一轮请求为什么需要快照与保存点
- createMutableAgentState
- `Agent` 怎样把事件还原成状态
- createPiCodingAgentHarness
- Evals 怎样把 Agent 行为变成可检查结果
- createProvider
- 不同模型 API 怎样被压到同一接口
- createRuntime
- 启动阶段到底组装了什么
- createTurnState
- 一轮请求为什么需要快照与保存点
- createWriteToolDefinition
- 读写文件时,Pi 怎样避免相互踩踏
- CredentialStore
- 密钥与 OAuth 怎样落到一次请求
- CURSOR_MARKER
- Pi 为什么不用每次重画整个终端
- CustomAgentMessages
- AgentMessage 为什么不能直接发给模型
- cycleModel
- 模型切换与设置热更新怎样保持一致
- defaultContextEntryTransform
- 压缩与回到旧分支怎样改变上下文
- DefaultResourceLoader
- 配置、信任与资源从哪里进入AGENTS.md、Skills 与 Prompt 模板怎样被发现
- describeEval
- Evals 怎样把 Agent 行为变成可检查结果
- Durable AgentHarness design
- 怎样验证本册结论,并看清 Harness v2 的边界
- Editor.handleInput
- 键盘输入怎样穿过终端协议到达编辑器
- emitAny
- 运行中改配置,什么时候才真正生效
- emitBeforeAgentStart
- 一条 Prompt 在调用模型前还要过多少关
- emitContext
- Extension Runner 怎样串起事件与变换
- emitHook
- 运行中改配置,什么时候才真正生效
- emitToolCall
- Extension Runner 怎样串起事件与变换
- EventStream
- 流式响应怎样变成可消费事件
- executePreparedToolCall
- 并行工具为什么仍要保留原始顺序
- executeToolCalls
- 并行工具为什么仍要保留原始顺序
- executeToolCallsParallel
- 并行工具为什么仍要保留原始顺序
- executeToolCallsSequential
- 并行工具为什么仍要保留原始顺序
- expandPromptTemplate
- 一条 Prompt 在调用模型前还要过多少关
- ExtensionRunner
- Extension Runner 怎样串起事件与变换
- failToolCallsFromTruncatedMessage
- 工具执行前先经过哪些检查
- finalizeExecutedToolCall
- 并行工具为什么仍要保留原始顺序
- finishOutput
- Bash 输出太长时,完整结果去了哪里
- firstChanged
- Pi 为什么不用每次重画整个终端
- flushPendingSessionWrites
- 运行中改配置,什么时候才真正生效
- Focusable
- TUI 组件、焦点与覆盖层怎样配合
- followUp
- Steering 与 Follow-up 不是同一种排队
- getAllRegisteredTools
- 自定义工具、Provider 与渲染器谁覆盖谁
- getFollowUpMessages
- Steering 与 Follow-up 不是同一种排队
- getMessageRenderer
- 自定义工具、Provider 与渲染器谁覆盖谁
- getMutationQueueKey
- 读写文件时,Pi 怎样避免相互踩踏
- getPathToRootOrCompaction
- Session 保存的是树,不是一串消息
- getSessionStats
- 自动压缩、重试与用量统计怎样协作
- getSteeringMessages
- Steering 与 Follow-up 不是同一种排队
- Gondolin extension
- Pi 没有内置沙箱,这意味着什么
- googleProvider
- 不同模型 API 怎样被压到同一接口
- handleAgentEvent
- 一轮请求为什么需要快照与保存点
- handleRunFailure
- 一次 Run 怎样停止、失败与继续
- hasMoreToolCalls
- 两层循环为什么缺一不可
- InteractiveMode
- 一个 pi 命令,四种运行方式
- InteractiveMode.handleEvent
- 流式消息与工具结果怎样出现在屏幕上
- isContextOverflow
- 重试、溢出与中止在哪一层收口
- JsonlSessionStorage
- 持久会话为什么还不等于持久运行
- KeybindingsManager
- 键盘输入怎样穿过终端协议到达编辑器
- lastChanged
- Pi 为什么不用每次重画整个终端
- lazyStream
- 流式响应怎样变成可消费事件
- loadExtensionModule
- 扩展代码从哪里加载,信任边界在哪里
- loadFinalExtensionSet
- 扩展代码从哪里加载,信任边界在哪里
- loadProjectContextFiles
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- loadProjectTrustExtensions
- 扩展代码从哪里加载,信任边界在哪里
- loadPromptTemplates
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- loadSkills
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- main
- 先固定版本,再谈 Pi 的架构
- matchesKey
- 键盘输入怎样穿过终端协议到达编辑器
- ModelAuth
- 密钥与 OAuth 怎样落到一次请求
- ModelRegistry
- 模型目录与 Provider Registry 各管什么
- ModelRuntime
- 模型目录与 Provider Registry 各管什么
- ModelsImpl
- 模型目录与 Provider Registry 各管什么
- navigateTree
- 压缩与回到旧分支怎样改变上下文
- newSession
- 恢复、分叉与切换会话不是同一个动作
- openaiProvider
- 不同模型 API 怎样被压到同一接口
- openRpcStream
- `pi-server` 管的是进程,还是 Agent
- OutputAccumulator
- Bash 输出太长时,完整结果去了哪里
- OverlayHandle
- TUI 组件、焦点与覆盖层怎样配合
- PendingMessageQueue
- Steering 与 Follow-up 不是同一种排队
- pendingMessages
- 两层循环为什么缺一不可
- pendingSessionWrites
- 持久会话为什么还不等于持久运行
- pendingTools
- 流式消息与工具结果怎样出现在屏幕上
- PINNED_PI_COMMIT
- 怎样验证本册结论,并看清 Harness v2 的边界
- prepareCompaction
- 压缩与回到旧分支怎样改变上下文
- prepareNextTurn
- 一轮请求为什么需要快照与保存点
- prepareToolCall
- 工具执行前先经过哪些检查
- prepareToolCallArguments
- 工具执行前先经过哪些检查
- previousLines
- Pi 为什么不用每次重画整个终端
- processEvents
- `Agent` 怎样把事件还原成状态
- processResponsesStream
- 流式响应怎样变成可消费事件
- ProcessTerminal
- 键盘输入怎样穿过终端协议到达编辑器
- ProjectTrustStore
- 配置、信任与资源从哪里进入
- Promise.all
- 并行工具为什么仍要保留原始顺序
- ProviderStreams
- 不同模型 API 怎样被压到同一接口
- recoverAfterRestart
- `pi-server` 管的是进程,还是 Agent
- registerProvider
- 自定义工具、Provider 与渲染器谁覆盖谁
- renderSessionItems
- 流式消息与工具结果怎样出现在屏幕上
- resolveAppMode
- 一个 pi 命令,四种运行方式同一场运行怎样投影成文本与 JSON
- resolveProjectTrusted
- 配置、信任与资源从哪里进入扩展代码从哪里加载,信任边界在哪里Pi 没有内置沙箱,这意味着什么
- resolveProviderAuth
- 密钥与 OAuth 怎样落到一次请求
- resolveStoredOAuth
- 密钥与 OAuth 怎样落到一次请求
- retryAssistantCall
- 重试、溢出与中止在哪一层收口
- retryProviderRequest
- 重试、溢出与中止在哪一层收口
- RpcClient
- RPC 模式如何把会话变成可控制进程
- RpcProcessInstance
- `pi-server` 管的是进程,还是 Agent
- runAgentLoop
- 两层循环为什么缺一不可`AgentHarness` 为什么没有包住 `Agent`
- runAgentLoopContinue
- 两层循环为什么缺一不可一次 Run 怎样停止、失败与继续
- runLoop
- 两层循环为什么缺一不可
- runPiCodingAgent
- Evals 怎样把 Agent 行为变成可检查结果
- runPrintMode
- 一个 pi 命令,四种运行方式同一场运行怎样投影成文本与 JSON
- runRpcMode
- 一个 pi 命令,四种运行方式RPC 模式如何把会话变成可控制进程
- RuntimeCredentials
- 密钥与 OAuth 怎样落到一次请求
- runWithLifecycle
- `Agent` 怎样把事件还原成状态一次 Run 怎样停止、失败与继续
- SavePointEvent
- 一轮请求为什么需要快照与保存点
- ServerSupervisor
- `pi-server` 管的是进程,还是 Agent
- Session
- Session 保存的是树,不是一串消息
- SessionEntry
- JSONL 会话文件怎样记录一棵树
- SessionHeader
- JSONL 会话文件怎样记录一棵树
- SessionManager
- JSONL 会话文件怎样记录一棵树
- SessionStorage
- 持久会话为什么还不等于持久运行
- SessionTreeEntry
- Session 保存的是树,不是一串消息
- setActiveTools
- 运行中改配置,什么时候才真正生效
- setActiveToolsByName
- 七个内置工具为什么默认只开四个
- setLeafId
- Session 保存的是树,不是一串消息
- setModel
- 运行中改配置,什么时候才真正生效模型切换与设置热更新怎样保持一致
- setThinkingLevel
- 模型切换与设置热更新怎样保持一致
- SettingsManager
- 配置、信任与资源从哪里进入模型切换与设置热更新怎样保持一致
- shouldStopAfterTurn
- 一次 Run 怎样停止、失败与继续
- SimpleStreamOptions
- 请求发出前,Context 还会经历什么
- spawnInstance
- `pi-server` 管的是进程,还是 Agent
- SqliteSessionStorage
- 持久会话为什么还不等于持久运行
- StdinBuffer
- 键盘输入怎样穿过终端协议到达编辑器
- streamingComponent
- 流式消息与工具结果怎样出现在屏幕上
- StreamOptions
- 请求发出前,Context 还会经历什么
- switchSession
- 恢复、分叉与切换会话不是同一个动作
- takeOverStdout
- 同一场运行怎样投影成文本与 JSON
- toolCalls
- Evals 怎样把 Agent 行为变成可检查结果
- ToolName
- 七个内置工具为什么默认只开四个
- toTranscriptEvents
- Evals 怎样把 Agent 行为变成可检查结果
- transformContext
- AgentMessage 为什么不能直接发给模型
- transformMessages
- 不同模型 API 怎样被压到同一接口
- truncateTail
- Bash 输出太长时,完整结果去了哪里
- TrustManager
- Pi 没有内置沙箱,这意味着什么
- TUI.doRender
- Pi 为什么不用每次重画整个终端
- TUI.handleInput
- 键盘输入怎样穿过终端协议到达编辑器
- TUI.requestRender
- Pi 为什么不用每次重画整个终端
- TUI.setFocus
- TUI 组件、焦点与覆盖层怎样配合
- TUI.showOverlay
- TUI 组件、焦点与覆盖层怎样配合
- validateToolArguments
- 工具执行前先经过哪些检查
- verifyPiHandbookE2E
- 怎样验证本册结论,并看清 Harness v2 的边界
- waitForIdle
- `Agent` 怎样把事件还原成状态
- withFileMutationQueue
- 读写文件时,Pi 怎样避免相互踩踏
- writeRawStdout
- 同一场运行怎样投影成文本与 JSON
- 比较 print JSON 与 RPC stdin
- 一个 pi 命令,四种运行方式
- 定位 Full output 提示与临时文件路径
- Bash 输出太长时,完整结果去了哪里
- 定位两个队列的实际轮询点
- Steering 与 Follow-up 不是同一种排队
- 对比 generic emit 与专用 emit 的错误处理
- Extension Runner 怎样串起事件与变换
- 对比 provider merge 与 renderer first-match
- 自定义工具、Provider 与渲染器谁覆盖谁
- 对比 Skill 索引与 Prompt 模板展开
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- 对比 text 与 JSON mode 的 stdout 合同
- 同一场运行怎样投影成文本与 JSON
- 对照 completion order 与 source order 测试
- 并行工具为什么仍要保留原始顺序
- 对照 turn 事件定义
- 两层循环为什么缺一不可
- 对照六种退出路径的事件边界
- 一次 Run 怎样停止、失败与继续
- 对照事件类型与状态归约分支
- `Agent` 怎样把事件还原成状态
- 对照同文件与不同文件的排队合同
- 读写文件时,Pi 怎样避免相互踩踏
- 对照消息落盘与运行结算顺序
- `AgentSession` 如何成为 Coding Agent 的控制面
- 对照异常退出与重启恢复路径
- `pi-server` 管的是进程,还是 Agent
- 对照最小 SDK 与完全显式装配
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- 构造最小内存会话树
- JSONL 会话文件怎样记录一棵树
- 观察 ResourceLoader 两阶段 reload
- 配置、信任与资源从哪里进入
- 核对 2000 行与 50KB 默认阈值
- Bash 输出太长时,完整结果去了哪里
- 核对 Agent 与 AgentSession 边界
- `createAgentSession()` 怎样交出一个可运行会话
- 核对 services 与 session 分界
- 启动阶段到底组装了什么
- 核对 settings 双作用域路径
- 配置、信任与资源从哪里进入
- 核对多个 prompt 的顺序与最终文本选择
- 同一场运行怎样投影成文本与 JSON
- 核对七个定义与四个默认启用项
- 七个内置工具为什么默认只开四个
- 核对无 UI 模式的默认拒绝
- 扩展代码从哪里加载,信任边界在哪里
- 检查 Agent 状态的复制边界
- `Agent` 怎样把事件还原成状态
- 检查 symlink 与不存在路径的 queue key
- 读写文件时,Pi 怎样避免相互踩踏
- 检查并发命令的 correlation id
- RPC 模式如何把会话变成可控制进程
- 静态打印 prompt 管线的短路顺序
- 一条 Prompt 在调用模型前还要过多少关
- 静态对照 resume 与 fork 的重建路径
- 恢复、分叉与切换会话不是同一个动作
- 静态对照模型切换的三层写入
- 模型切换与设置热更新怎样保持一致
- 静态还原失败后的结算顺序
- 自动压缩、重试与用量统计怎样协作
- 静态核对 server 进程所有权
- `pi-server` 管的是进程,还是 Agent
- 静态核对 session replacement 的宿主责任
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- 静态核对四种 AppMode 分支
- 一个 pi 命令,四种运行方式
- 静态追踪并行批次四个阶段
- 并行工具为什么仍要保留原始顺序
- 列出工具执行前的守卫顺序
- 工具执行前先经过哪些检查
- 枚举固定 tag 的全部 eval case
- Evals 怎样把 Agent 行为变成可检查结果
- 模拟 all 与 one-at-a-time 的 drain 结果
- Steering 与 Follow-up 不是同一种排队
- 提取两层 while 与队列轮询位置
- 两层循环为什么缺一不可
- 推导 built-in extension SDK tool 覆盖顺序
- 自定义工具、Provider 与渲染器谁覆盖谁
- 校验 v0.83.0 tag 与 commit
- 先固定版本,再谈 Pi 的架构
- 验证 LF-only JSONL framing
- RPC 模式如何把会话变成可控制进程
- 用 git grep 追运行时调用
- 先固定版本,再谈 Pi 的架构
- 用指定 provider 与 model 运行单条行为评测
- Evals 怎样把 Agent 行为变成可检查结果
- 运行 abort 与 thrown failure 测试
- 一次 Run 怎样停止、失败与继续
- 运行 faux model characterization 测试
- 模型切换与设置热更新怎样保持一致
- 运行 faux provider 的 prompt characterization 测试
- 一条 Prompt 在调用模型前还要过多少关
- 运行 faux provider 的 session lifecycle 事件测试
- 恢复、分叉与切换会话不是同一个动作
- 运行 Models 注册与刷新测试
- 模型目录与 Provider Registry 各管什么
- 运行 retry 与 overflow 的确定性测试
- 重试、溢出与中止在哪一层收口
- 运行 retry 与 session stats 的 faux 测试
- 自动压缩、重试与用量统计怎样协作
- 运行截断参数与准备参数测试
- 工具执行前先经过哪些检查
- 运行跨模型消息转换测试
- 不同模型 API 怎样被压到同一接口
- 运行认证解析的内存测试
- 密钥与 OAuth 怎样落到一次请求
- 运行上下文估算的确定性测试
- 请求发出前,Context 还会经历什么
- 运行终态事件的确定性测试
- 流式响应怎样变成可消费事件
- 运行自定义消息转换的确定性测试
- AgentMessage 为什么不能直接发给模型
- 只读比较三种 provider factory
- 不同模型 API 怎样被压到同一接口
- 只读抽取 main 启动主干
- 启动阶段到底组装了什么
- 只读对照目录与 provider 构造
- 模型目录与 Provider Registry 各管什么
- 只读对照三层失败策略
- 重试、溢出与中止在哪一层收口
- 只读核对 JSONL 延迟写入规则
- JSONL 会话文件怎样记录一棵树
- 只读核对消息联合类型与调用顺序
- AgentMessage 为什么不能直接发给模型
- 只读重建 AgentSession 所有权图
- `AgentSession` 如何成为 Coding Agent 的控制面
- 只读追踪 Context 与 options 字段
- 请求发出前,Context 还会经历什么
- 只读追踪 SDK 构造路径
- `createAgentSession()` 怎样交出一个可运行会话
- 只读追踪流事件映射
- 流式响应怎样变成可消费事件
- 只读追踪认证优先级
- 密钥与 OAuth 怎样落到一次请求
- 追踪 AGENTS.md 的祖先顺序
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- 追踪 allowlist 和 denylist 的应用顺序
- 七个内置工具为什么默认只开四个
- 追踪 message_end replacement 到 session persistence
- Extension Runner 怎样串起事件与变换
- 追踪 pre-trust 与 final extension set
- 扩展代码从哪里加载,信任边界在哪里
- 追踪 prompt response 与 agent_settled 的先后
- RPC 模式如何把会话变成可控制进程
- bracketed paste and editor test
- 键盘输入怎样穿过终端协议到达编辑器
- branch navigation retry test
- 压缩与回到旧分支怎样改变上下文
- branch navigation session test
- Session 保存的是树,不是一串消息
- coding-agent constructor trace
- `AgentHarness` 为什么没有包住 `Agent`
- compaction context projection test
- 压缩与回到旧分支怎样改变上下文
- compare live and reconstructed tool blocks
- 流式消息与工具结果怎样出现在屏幕上
- direct call-site search
- `AgentHarness` 为什么没有包住 `Agent`
- inspect event projection switch
- 流式消息与工具结果怎样出现在屏幕上
- inspect local bash spawn permissions
- Pi 没有内置沙箱,这意味着什么
- JSONL parent-link inspection
- Session 保存的是树,不是一串消息
- JSONL reopen inspection
- 持久会话为什么还不等于持久运行
- non-capturing input routing test
- TUI 组件、焦点与覆盖层怎样配合
- ordinary-checkout completeness check
- 怎样验证本册结论,并看清 Harness v2 的边界
- overlay focus restoration test
- TUI 组件、焦点与覆盖层怎样配合
- pending listener write ordering test
- 运行中改配置,什么时候才真正生效
- pinned release end-to-end verification
- 怎样验证本册结论,并看清 Harness v2 的边界
- save-point refresh test
- 一轮请求为什么需要快照与保存点
- setter timeline trace
- 运行中改配置,什么时候才真正生效
- source-order trace
- 一轮请求为什么需要快照与保存点
- spinner middle-line update
- Pi 为什么不用每次重画整个终端
- split CSI sequence test
- 键盘输入怎样穿过终端协议到达编辑器
- storage schema audit
- 持久会话为什么还不等于持久运行
- terminal resize full-redraw test
- Pi 为什么不用每次重画整个终端
- trace trust decision order
- Pi 没有内置沙箱,这意味着什么
- 按文件行号把所有消息拼进上下文
- Session 保存的是树,不是一串消息
- 把 --mode text 当强制 print
- 一个 pi 命令,四种运行方式
- 把 AbortSignal 当作强制取消
- 一次 Run 怎样停止、失败与继续
- 把 agent_end 当作运行已经空闲
- `Agent` 怎样把事件还原成状态
- 把 AgentContext 当作最终 HTTP payload
- 请求发出前,Context 还会经历什么
- 把 AgentHarness 写成 Agent 的外层包装
- `AgentHarness` 为什么没有包住 `Agent`
- 把 AgentMessage 直接当 provider Message
- `createAgentSession()` 怎样交出一个可运行会话
- 把 AgentSession 当作 Agent 的状态包装器
- `AgentSession` 如何成为 Coding Agent 的控制面
- 把 AgentState 当作不可变快照
- `Agent` 怎样把事件还原成状态
- 把 append-only 误解成运行时事务日志
- JSONL 会话文件怎样记录一棵树
- 把 auth.json 条目直接当 Authorization 头
- 密钥与 OAuth 怎样落到一次请求
- 把 branch summary 当成旧分支复制
- 压缩与回到旧分支怎样改变上下文
- 把 CLI 资源路径混入项目自动发现
- 配置、信任与资源从哪里进入
- 把 collision diagnostic 当成拒绝加载
- 自定义工具、Provider 与渲染器谁覆盖谁
- 把 context overflow 交给普通 retry
- 自动压缩、重试与用量统计怎样协作
- 把 continue 当作恢复旧的 active run
- 一次 Run 怎样停止、失败与继续
- 把 custom entry 注入模型上下文
- JSONL 会话文件怎样记录一棵树
- 把 error 终态误当作同步 throw
- 流式响应怎样变成可消费事件
- 把 follow-up 轮询放进内层循环
- 两层循环为什么缺一不可
- 把 getter 可见当成 Session 已落盘
- 运行中改配置,什么时候才真正生效
- 把 Harness v2 设计当作 v0.83.0 已交付行为
- 持久会话为什么还不等于持久运行
- 把 Hook 错误理解为事务回滚
- 运行中改配置,什么时候才真正生效
- 把 InteractiveMode 当 runtime owner
- 启动阶段到底组装了什么
- 把 JSON 输出当成 RPC
- 一个 pi 命令,四种运行方式
- 把 JSON mode 当成最终答案对象
- 同一场运行怎样投影成文本与 JSON
- 把 JSONL 可重开写成 run 可续跑
- 持久会话为什么还不等于持久运行
- 把 key release 当成第二次按下
- 键盘输入怎样穿过终端协议到达编辑器
- 把 leaf entry 当成对话节点
- Session 保存的是树,不是一串消息
- 把 main 分支文档倒灌成固定版本事实
- 怎样验证本册结论,并看清 Harness v2 的边界
- 把 ModelRegistry 当作内部唯一事实源
- 模型目录与 Provider Registry 各管什么
- 把 mutation queue 当成文件系统事务
- 读写文件时,Pi 怎样避免相互踩踏
- 把 no-builtin-tools 当成禁用扩展工具
- 七个内置工具为什么默认只开四个
- 把 package dependencies 当函数调用
- 先固定版本,再谈 Pi 的架构
- 把 preflightResult 当作模型成功回执
- 一条 Prompt 在调用模型前还要过多少关
- 把 project trust 当成 extension sandbox
- 扩展代码从哪里加载,信任边界在哪里
- 把 prompt 成功回执当成运行完成
- RPC 模式如何把会话变成可控制进程
- 把 Prompt 模板当成 system prompt
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- 把 requestRender 当成同步写终端
- Pi 为什么不用每次重画整个终端
- 把 resume 说成恢复正在运行的 turn
- 恢复、分叉与切换会话不是同一个动作
- 把 save_point 事件当成磁盘事务提交
- 一轮请求为什么需要快照与保存点
- 把 server 重启写成自动恢复运行
- `pi-server` 管的是进程,还是 Agent
- 把 settings 默认值当作当前会话事实
- 模型切换与设置热更新怎样保持一致
- 把 Skill 正文当成启动时全部注入
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- 把 SQLite transaction 扩大成跨工具 exactly-once
- 持久会话为什么还不等于持久运行
- 把 steering 当作立即中断
- Steering 与 Follow-up 不是同一种排队
- 把 tool result 当成新 run
- 两层循环为什么缺一不可
- 把 tool result 尾部当成完整输出
- Bash 输出太长时,完整结果去了哪里
- 把 tool_execution_start 当作 execute 已调用
- 工具执行前先经过哪些检查
- 把 UI 事件误当成持久化完成证明
- `AgentSession` 如何成为 Coding Agent 的控制面
- 把 UI 组件当成持久会话记录
- 流式消息与工具结果怎样出现在屏幕上
- 把 workspace 顺序当运行时顺序
- 先固定版本,再谈 Pi 的架构
- 把包名误当成实际 CLI 命令
- `pi-server` 管的是进程,还是 Agent
- 把并行模式误解为并行预检
- 并行工具为什么仍要保留原始顺序
- 把不启动 TUI 误认为无资源发现
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- 把工具 terminate 当作无条件 agent_end
- 一次 Run 怎样停止、失败与继续
- 把画面可见误认为拥有输入焦点
- TUI 组件、焦点与覆盖层怎样配合
- 把会话持久化说成运行恢复
- `AgentSession` 如何成为 Coding Agent 的控制面
- 把两条 eval 写成完整能力覆盖
- Evals 怎样把 Agent 行为变成可检查结果
- 把排队消息当作已写入 transcript
- Steering 与 Follow-up 不是同一种排队
- 把实例记录当成活跃 Agent 快照
- `pi-server` 管的是进程,还是 Agent
- 把实验性 Harness 当成稳定 CLI 的运行时
- `AgentHarness` 为什么没有包住 `Agent`
- 把事件归约误写成完整事件溯源
- `Agent` 怎样把事件还原成状态
- 把所有 hook 当成广播通知
- Extension Runner 怎样串起事件与变换
- 把所有重试算作同一预算
- 重试、溢出与中止在哪一层收口
- 把同包导出误当成同一对象层级
- `AgentHarness` 为什么没有包住 `Agent`
- 把同文件 branch 与新文件 fork 混用
- 恢复、分叉与切换会话不是同一个动作
- 把未知工具名当成启动错误
- 七个内置工具为什么默认只开四个
- 把文件行顺序直接当作当前上下文
- JSONL 会话文件怎样记录一棵树
- 把项目 trust 当 shell sandbox
- 配置、信任与资源从哪里进入
- 把项目 trust 当成运行沙箱
- Pi 没有内置沙箱,这意味着什么
- 把压缩后的未知 context usage 显示成零
- 自动压缩、重试与用量统计怎样协作
- 把一次 prompt 当成一个不可变快照
- 一轮请求为什么需要快照与保存点
- 把一次 run 当成一次模型请求
- 两层循环为什么缺一不可
- 把一次性进程当成长驻控制面
- 同一场运行怎样投影成文本与 JSON
- 把一个 stdin data event 当成一个按键
- 键盘输入怎样穿过终端协议到达编辑器
- 把已注册工具当成已暴露给模型
- 七个内置工具为什么默认只开四个
- 把真实模型结果当成确定性单元测试
- Evals 怎样把 Agent 行为变成可检查结果
- 把自定义 AgentMessage 序列化进模型请求
- AgentMessage 为什么不能直接发给模型
- 把组件树顺序当成 z-index
- TUI 组件、焦点与覆盖层怎样配合
- 并发命令省略 correlation id
- RPC 模式如何把会话变成可控制进程
- 捕获 reload 前的 stale context 继续调用
- Extension Runner 怎样串起事件与变换
- 成功响应溢出后重复生成答案
- 重试、溢出与中止在哪一层收口
- 从活动 Context 删除失败消息时也删除历史
- 自动压缩、重试与用量统计怎样协作
- 大段 paste marker 未在提交前展开
- 键盘输入怎样穿过终端协议到达编辑器
- 对不可见 scrollback 做局部改写
- Pi 为什么不用每次重画整个终端
- 对上下文溢出执行普通瞬时错误重试
- 重试、溢出与中止在哪一层收口
- 给所有 registry 套同一条 last-wins 规则
- 自定义工具、Provider 与渲染器谁覆盖谁
- 忽略 allowlist 先过滤覆盖项
- 自定义工具、Provider 与渲染器谁覆盖谁
- 忽略 leaf move 与 summary append 的非事务边界
- 压缩与回到旧分支怎样改变上下文
- 忽略 post-run 可能继续同一场运行
- `AgentSession` 如何成为 Coding Agent 的控制面
- 忽略 RPC 子进程退出后的 pending request 失败
- `pi-server` 管的是进程,还是 Agent
- 忽略 thinking level 的能力裁剪
- 模型切换与设置热更新怎样保持一致
- 忽略单个 sequential 工具对整批的影响
- 并行工具为什么仍要保留原始顺序
- 忽略动态模型对同 id 条目的覆盖
- 模型目录与 Provider Registry 各管什么
- 忽略读写 bind mount 会修改宿主文件
- Pi 没有内置沙箱,这意味着什么
- 忽略临时文件的生命周期与敏感内容
- Bash 输出太长时,完整结果去了哪里
- 忽略默认持久化 SessionManager
- `createAgentSession()` 怎样交出一个可运行会话
- 忽略输入上下文对 maxTokens 的运行时收紧
- 请求发出前,Context 还会经历什么
- 忽略同名资源 first-wins 诊断
- AGENTS.md、Skills 与 Prompt 模板怎样被发现
- 混用不同 tag 的源码行号
- 先固定版本,再谈 Pi 的架构
- 假设 RPC 等价于完整 TUI
- RPC 模式如何把会话变成可控制进程
- 假设新 runtime 创建失败会自动回滚
- 恢复、分叉与切换会话不是同一个动作
- 将 partial result 当作最终结果
- 流式消息与工具结果怎样出现在屏幕上
- 跨模型重放私有 thinking signature
- 不同模型 API 怎样被压到同一接口
- 流式运行中遗漏 streamingBehavior
- 一条 Prompt 在调用模型前还要过多少关
- 留下没有对应结果的工具调用
- 不同模型 API 怎样被压到同一接口
- 切换到无认证模型后才发现请求失败
- 模型切换与设置热更新怎样保持一致
- 让 ToolResult 按完成顺序进入上下文
- 并行工具为什么仍要保留原始顺序
- 让普通日志污染机器可读 stdout
- 同一场运行怎样投影成文本与 JSON
- 让运行中配置污染已发出的请求
- 一轮请求为什么需要快照与保存点
- 绕过 Harness 直接写 Session 破坏顺序
- 运行中改配置,什么时候才真正生效
- 认为 compaction 会删除旧 JSONL 行
- 压缩与回到旧分支怎样改变上下文
- 认为 createAgentSession 会自动发送 prompt
- `createAgentSession()` 怎样交出一个可运行会话
- 认为 no-extensions 会忽略显式 CLI 路径
- 扩展代码从哪里加载,信任边界在哪里
- 认为 one-at-a-time 每次 run 只消费一条
- Steering 与 Follow-up 不是同一种排队
- 认为 read 也被同一队列保护
- 读写文件时,Pi 怎样避免相互踩踏
- 认为 reload 会替换整个 AgentSession
- 模型切换与设置热更新怎样保持一致
- 认为第一条 user message 必然立即建文件
- JSONL 会话文件怎样记录一棵树
- 认为目录中的模型天然可调用
- 模型目录与 Provider Registry 各管什么
- 认为所有 Bash 输出都会写临时文件
- Bash 输出太长时,完整结果去了哪里
- 认为所有 custom entry 都能被模型看见
- Session 保存的是树,不是一串消息
- 认为所有 provider 都支持每个 StreamOptions 字段
- 请求发出前,Context 还会经历什么
- 认为所有斜杠输入都会进入模型
- 一条 Prompt 在调用模型前还要过多少关
- 认为统一接口意味着 payload 完全相同
- 不同模型 API 怎样被压到同一接口
- 退避等待忽略 AbortSignal
- 重试、溢出与中止在哪一层收口
- 未信任时加载项目 settings
- 配置、信任与资源从哪里进入
- 误以为 Agent 状态只含三种模型角色
- AgentMessage 为什么不能直接发给模型
- 误以为 handler 异常都会中止 Agent
- Extension Runner 怎样串起事件与变换
- 误以为 JSON mode 会回放既有会话
- 同一场运行怎样投影成文本与 JSON
- 先转换消息再执行上下文变换
- AgentMessage 为什么不能直接发给模型
- 向隔离环境注入过量凭据
- Pi 没有内置沙箱,这意味着什么
- 协议协商响应泄漏进编辑器
- 键盘输入怎样穿过终端协议到达编辑器
- 新 runtime 创建失败后继续使用已销毁 session
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- 压缩后重算累计账单
- 自动压缩、重试与用量统计怎样协作
- 以为 tool-routing extension 隔离全部 extension
- Pi 没有内置沙箱,这意味着什么
- 用测试通过扩大未覆盖能力结论
- 怎样验证本册结论,并看清 Harness v2 的边界
- 用非 LF 分隔规则拆 JSONL
- RPC 模式如何把会话变成可控制进程
- 用进程 cwd 解析恢复会话资源
- 启动阶段到底组装了什么
- 用内存会话误判工具没有文件副作用
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- 用普通 checkout 代替完整发布源码包
- 怎样验证本册结论,并看清 Harness v2 的边界
- 允许 runner 静默回退到另一模型
- Evals 怎样把 Agent 行为变成可检查结果
- 在 beforeToolCall 中改坏已校验参数
- 工具执行前先经过哪些检查
- 在 extension factory 加载阶段调用未绑定 action
- 扩展代码从哪里加载,信任边界在哪里
- 在 input hook 之前展开 Skill
- 一条 Prompt 在调用模型前还要过多少关
- 在 replacement 后继续使用旧 extension context
- 恢复、分叉与切换会话不是同一个动作
- 在 RPC 模式读取普通管道 prompt
- 一个 pi 命令,四种运行方式
- 在日志或实验中输出真实密钥
- 密钥与 OAuth 怎样落到一次请求
- 在信任决定前创建 AgentSession
- 启动阶段到底组装了什么
- 执行被 length 截断的参数
- 工具执行前先经过哪些检查
- 只按工具名称关联并行调用
- 流式消息与工具结果怎样出现在屏幕上
- 只比较业务组件而漏掉 overlay
- Pi 为什么不用每次重画整个终端
- 只检查最终文本而忽略工具轨迹
- Evals 怎样把 Agent 行为变成可检查结果
- 只拼接 text delta 而丢失工具与 thinking
- 流式响应怎样变成可消费事件
- 只锁 tag 不锁 commit
- 怎样验证本册结论,并看清 Harness v2 的边界
- 子进程退出后继续等待旧请求
- RPC 模式如何把会话变成可控制进程
- 自定义行宽超过 terminal columns
- Pi 为什么不用每次重画整个终端
- 自定义组件输出超过声明宽度
- TUI 组件、焦点与覆盖层怎样配合
- abort 时过早释放同文件队列
- 读写文件时,Pi 怎样避免相互踩踏
- OAuth 刷新失败后静默回退环境变量
- 密钥与 OAuth 怎样落到一次请求
- overlay 关闭后把焦点还给已卸载组件
- TUI 组件、焦点与覆盖层怎样配合
- provider 提前 EOF 时错误结算成功
- 流式响应怎样变成可消费事件
- replacement 后继续监听旧 AgentSession
- 不启动 TUI,怎样把 Pi 嵌进自己的程序
- session 切换后继续监听旧会话
- 流式消息与工具结果怎样出现在屏幕上