makecindy / makecindy/cindy

feat(pi): 收口 harness 能力装配、工具上下文与性能效率

Open
#1,729 0 comments 0 reactions 0 assignees View on GitHub
feature
Dominant language
TypeScript
Stars
2.7k
Forks
395
Avg merge
21h 48m
Merged PRs (30d)
776

Description

## 使用场景 / Use case

PR #1718 已为 Cindy 托管的 Pi harness 接通离线 `grep/find/ls`,并避免主 Pi 的工具白名单误删动态 MCP / subagent。基础代码检索闭环恢复后,Pi 在 Cindy 中的整体性能效率仍未稳定优于 Codex,且部分 Pi 原生能力、Cindy 能力和运行时配置之间仍有断层。

需要一个 umbrella issue 统一记录已确认问题、不可突破的安全边界,以及后续可拆分为多个 PR 的实施路线。

## 已确认基线

- #1718 已解决:
- 使用 Cindy 校验并托管的私有 `rg` 提供 `grep/find/ls`
- 主 Pi 不使用会过滤动态工具的 `--tools` allowlist
- 保留动态 MCP 与 Cindy subagent
- 接通 MCP approval policy 与挂起权限请求的收口
- `PI_OFFLINE=1` 本身只应关闭 Pi 启动期版本检查、包更新/安装和相关遥测;不应关闭 provider 请求、已安装本地技能或宿主显式注册的工具。本 Issue 不建议通过关闭 offline 模式解决能力问题。
- 当前本机可用 Pi 历史任务都早于 #1718 合并,因此尚无合并后的同任务 benchmark;下文工具数量与耗时数据仅作为诊断基线,不作为最终性能结论。

## 当前问题 / Current limitations

### P0:运行时能力装配、配置发现与项目 trust 不一致

Pi 每个会话使用新的 `PI_CODING_AGENT_DIR=pi-agent-home/run-tmp/`,目前主要写入 `models.json`、Cindy bridge 与 Cindy subagent extension。

需要继续核对并收口:

- 用户级 `~/.pi/agent/settings.json`、Pi-native skills 与项目级 `.pi/.agents` 资源实际是否进入运行时
- RPC 模式不能弹 Pi 自带 project trust prompt,且临时 config home 不持久化 trust decision;没有 Cindy trust 映射时,项目资源可能被忽略
- customization scanner / 设置界面显示的资源与 Pi runtime 实际加载结果可能不一致
- 缺少“已发现 / 已批准 / 已装配 / 加载失败”的可见诊断与 capability manifest

安全边界:

- 只允许 Cindy 已批准的项目 trust 决定映射,不得无条件传 `--approve`
- 不得通过复用整个用户 Pi 目录泄露 auth、provider 配置或凭证
- #1705 已确认通用 extensions/packages 在非 TUI 宿主下存在呈现契约缺失和完整系统权限风险,并被关闭为暂不实施。本 Issue **不无条件重开 #1705**;skills、project trust 与运行时诊断可以独立推进,extensions/packages 必须等待明确的非 TUI 能力契约、显式 opt-in 和安全模型

### P0:工具 schema 常驻过多,抵消 Pi 的极简优势

Pi 上游默认核心工具只有 `read/write/edit/bash`。Cindy 历史日志样本中,一个 Pi 会话连接约 43 个 MCP 工具,再加当前本地工具后约 51 个 schema;其中 Orca 一组约 16 个。

即使模型不调用这些能力,常驻 schema 仍会增加:

- 首轮输入与 prompt cache 负担
- 模型工具选择难度
- 长会话历史和 compaction 压力
- 低频工具对高频代码任务的干扰

需要设计按任务/能力 slot 的渐进暴露:

- 默认保留代码核心工具与少量能力发现入口
- Orca、社交平台、通讯录等低频工具按用户意图或显式动作加载
- 能力仍应可发现,不应通过永久删除工具换取 benchmark
- 动态加载需要兼顾 provider prompt-cache 前缀稳定性

### P1:OpenAI / ChatGPT 未使用 Pi 原生 Responses transport

当前 Cindy/Gateway 内置 Pi provider 统一导出为 `anthropic-messages`,ChatGPT/OpenAI 请求经过本地兼容层完成 Anthropic Messages ↔ OpenAI Responses 转换。

该路径不一定增加网络 hop,但会带来协议双向转换,并可能无法完整利用 Pi/OpenAI Responses 的原生工具、推理、缓存或 compaction 语义。Pi 本身支持 `openai-responses`,需要在保持 Gateway、xAI、BYOM 兼容的前提下做同模型 A/B,而不是全 provider 一刀切。

### P1:缺少性能分段观测和可复现实验

目前无法可靠区分耗时来自:

- Pi binary spawn / RPC ready
- skills/extensions/config discovery
- 各 MCP server init / list tools
- provider 首字节与首个模型 delta
- tool round-trip
- retry / provider stall
- compaction 与超长会话恢复

需要在改变工具面和 transport 前后使用同一模型、provider、workdir 与固定任务集对比,记录至少:

- spawn-to-ready、MCP-ready
- initial prompt / tool-schema tokens
- provider TTFT、首个 tool、首段可见输出
- 每类 tool latency 与调用次数
- 完整轮次耗时、retry、compaction

### P1:高价值能力入口不够直接

- Web search / browser 目前主要依赖 plugin ghost 或通用 gateway;相比 Codex 的直接入口,模型发现和正确调用成本更高
- 可以复用 Cindy 已批准的插件能力或受管 skill,但应提供清晰、渐进式的 search/fetch/browser 能力入口
- 不应为了补搜索能力默认安装联网第三方 Pi package

### P2:其余 harness parity 缺口

- Pi extension 的结构化 Ask User / questionnaire 尚未完整映射到 Cindy UI,无法交互的 extension UI 可能被取消
- Cindy Pi subagent 目前是只读 `read/grep/find/ls` 且无 MCP;这符合上游安全默认,但主 Pi 必须串行承担所有写入/执行,可评估显式授权的执行型 profile
- `remoteHostId` 对 Pi 仍不支持
- 当前 Pi binary 不可用时不回退到已验证的缓存旧版本;这是离线可用性问题,不是单轮性能问题
- 外部 MCP 兼容面仍应核对 legacy SSE 等非当前主路径

## 建议拆分 / Suggested PR series

1. **PR 0 — 基线与观测**
增加 Pi 启动、MCP、provider TTFT、tool latency、retry/compaction 的分段指标,并建立 #1718 后的固定任务 benchmark。

2. **PR 1 — Runtime capability manifest 与 trust 对齐**
明确 scanner、Cindy approval、Pi runtime 的资源状态;接通安全的 project trust / skills 装配与失败诊断。不包含通用第三方 extension/package 执行。

3. **PR 2 — Tool surface routing**
收敛默认工具集;将 Orca 和低频 MCP 家族改为按需/渐进发现,并验证 prompt cache 与工具可发现性。

4. **PR 3 — Native Responses path**
为满足 capability 的 OpenAI/ChatGPT 路径使用 Pi 原生 `openai-responses`,保留其他 provider 的协议选择和安全降级。

5. **PR 4 — Search / browser parity**
通过 Cindy 已批准的插件或受管能力提供一等、渐进式 web search/fetch/browser 入口。

6. **PR 5+ — 交互与执行 parity**
分别评估 Ask User bridge、受限执行型 subagent、remote session、offline binary fallback 和额外 MCP transport;不要合成一个高风险大 PR。

## 验收原则 / Acceptance principles

- 保留 `PI_OFFLINE=1`,不恢复启动期自动联网安装/更新
- 不绕过 Cindy permission gate、project trust、secret-env 剥离和 MCP approval
- 不把“工具少”实现成能力永久不可达
- 不把 #1705 已否决的通用第三方 extension/package 加载夹带进低风险 PR
- 所有性能结论使用 #1718 之后、同模型同 provider 的可复现实验
- 每个 PR 独立可回滚,并在本 Issue 维护 checklist、benchmark 与关联关系

## 关联

- #1718 — 离线 `grep/find/ls` 与动态工具保留
- #1705 — 用户 Pi extensions/packages;因非 TUI 呈现契约和安全边界暂不实施
- #1265 — Pi harness、权限与 MCP bridge 基线

Contributor guide

Open the contributing guide

Research direction

Start with PR #1718 and the runtime paths named here: PI_CODING_AGENT_DIR=pi-agent-home/run-tmp/, models.json, ~/.pi/agent/settings.json, and project .pi/.agents resources. First map how RPC startup, trust, skills, MCP tools, and provider transport are assembled; this umbrella is done only when its benchmark, capability manifest, security boundaries, and independently scoped PR checklist are established.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
ai-infra-agents, backend, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.