@ computesdk/ pi- loops
由皮氏自有单位所建的用于编码代理的希尔-攀接回路.
你的Pi课是家长 一个工具, loop,运行一回合:三次尝试将您的会话叉入他们自己的 git 工作树上,每次由风格代理驱动(保险, (中文(简体) ), 粗体, (中文(简体) ), 疯狂)),法官保存最优秀. 再来一次 from 从胜利者那里爬来.
> /loop make search() in search.mjs faster; check is node test.mjs; bench is node bench.mjs and prints ms
loop-20261029T141200 r1 · judging
safe done 14 tools · 61k tok — Replaced the DP table with two rolling rows
bold done 22 tools · 98k tok — Early-exit Levenshtein with a k-best bound
wild done 19 tools · 84k tok — Bit-parallel Myers distance
Round 1 — kept R1-bold
attempt style result judge
------- ----------- -------- ------------------------------------------------
CURRENT best so far 422.6 ms 422.6 ms re-measured
R1-safe safe 188.0 ms 188 ms (2.25× better) · same algorithm, less allocation
R1-bold bold 11.5 ms 11.5 ms (36.75× better) · bounded search, identical output
R1-wild wild vetoed vetoed: memoises distances across calls
R1-bold is best at 11.5 ms vs 422.6 ms now (36.75×); tests pass. 1 attempt(s) failed tests or were vetoed.
Best so far: R1-bold (3f2a9c1, branch loops/loop-20261029T141200/r1-bold) at 11.5 ms
search.mjs | 48 ++++++++++++++++++++++++++++--------------------
Apply (tracked files only): git checkout 3f2a9c1 -- search.mjs
Next round: loop({ from: "loop-20261029T141200" })
安装
pi install npm:@computesdk/pi-loops # or: pi -e /path/to/pi-extensions/packages/pi-loops/extensions/loop.ts
节点 22.18(TypeScript扩展被剥去,没有编译)和至少一个承诺的git repo. 尝试使用您 TUI 上的任何模式( 在设置中每个角色覆盖) .
供应商
摩尔夫和粒子飞船作为自己的包件,所以你可以安装任何一种,没有这个:
| 提供者 | 软件包 | 密钥 | 模型 |
|---|---|---|---|
| 第AI条 | pi-particle | PARTICLE_API_KEY (单位:千美元)pai-…(中文(简体) ) | particle-1, (中文(简体) ), deepseek-ai/deepseek-v41-flash-1017, (中文(简体) ), glm-5.3-flash |
| 墨菲语 | @computesdk/pi-morph | MORPH_API_KEY | morph-kimik3, (中文(简体) ), morph-kimik3-fast, (中文(简体) ), morph-glm53-744b, (中文(简体) ), morph-glm53flash, (中文(简体) ), morph-dsv41flash, (中文(简体) ), morph-dsv41flash-1017, (中文(简体) ), morph-dsv4flash |
他们住在这间公寓里 packages/pi-morph 财务报告和审定财务报表 packages/pi-particle; 安装它们 pi install npm:@computesdk/pi-morph (或 pi install npm:pi-particle) (中文(简体) ). 循环本身是模型-不可知论的——它运行在你的TUI上.
一个工具
loop({
goal, // what to improve
check?, // command that must pass (tests)
bench?, // command that prints the metric → bench mode
metric?, // { key: "ms", unit: "ms", better: "lower" }
protect?, // literal repo-relative files/directories; restored exactly before judging
build?, shots?, // visual mode: build writes screenshot files, a judge panel scores them
rounds? = 1, // rounds to run in this call
from?, // run id (or "last") to continue from its last judged round
rules?, // rules every attempt must follow; the judge vetoes breaches
})
/loop <ask> 是快捷键:当这些字段时,模型会通过句子并调用工具。 扩展注册命令本身(来自 prompts/loop.md因此,它就在那里与 pi -e packages/pi-loops/extensions/loop.ts 不仅之后 pi install。 。 。 .
/loop init 曾经,那么 /loop <goal> 写简报. /loop init 您的 Pi 会话已读取 package.json 和配置文件( 仅读取工具, 无 bash) 并调用 loop_init 与项目的力学—— serve (启动应用程序于 $PORT, (中文(简体) ), check, (中文(简体) ), bench + 键 metric, (中文(简体) ), protect ——在对话框(保存 / 更改 / 讨论)中显示,并写到 .pi/loops.json。第一个 /loop <goal> 在回购中,没有他们首先这样做。 每个 /loop <goal> 然后只写简报 尝试得到.. goal (什么好看起来像,), rules, (中文(简体) ), directions (安全/粗体/野生目标特定角度), routes 来截取视觉目标,并调用该工具,该工具在“批准/更改./讨论”中显示简报。 未经你批准,不得运行(无头跑; confirm: false 跳过对话框 。 与原"环行记"相同的分出:项目分出一次,每跑一句; 4; check 编号 : bench 编号 : build 编号 : shots 编号 : protect 在工具上是覆盖.
座椅模式 (单位:千美元)bench 设置 : 工作树是一种新鲜的检查结果, 所以每次尝试都会按照 repo 的 docs 说的方式设置项目, 进行修改, 然后运行 check 财务报告和审定财务报表 bench 自己来 接下来 法官 - 一个特工 read编号 :bash,不编辑 —— 重新测量每个候选人居住的地方(在第1轮中,在前面的获胜者工作树上,在自己的工作树上,每一次尝试), bench repeat 最好的样本数, protected文件首先放回,阅读每个diff和否决规则中断和作弊(特殊情况输入,截取通话,跳出工作,弱化检查). 它返回数字; pickWinner 使用检查门、否决权和 minGain循环本身对安装或运行项目一无所知.
protect 条目是尝试工作树内的文字路径,而不是 globs 或 Git 路径谱。 Directories被恢复到基线树上,包括被删除的文件以及被添加的有轨,无轨和被忽略的文件被删除. 基线中缺失的路径仍然缺失;不存在配置的测试目录是无害的。 工作树之外的道路,它的根, .git,通过对称父母的路径被拒绝.
视觉模式 (无) bench: 每次尝试运行 build 和必须离开 shots 工作树中的文件(PNG/JPEG); a 法官 面板(中间分数为3分),前两名对阵Current的正面对决,两种顺序;一名候选人以明确多数胜出,得分不低于Current's. 科伦特的镜头也是一样 build 在您的退票( 第1轮) 或之前的胜利者的工作树。 退出中未承诺的编辑是两种模式基准的一部分:工作树承诺的一叉(git stash create,你的退票是未触及的),所以尝试和当前从同一状态开始.
截图来自 lib/shot.ts: 无头 Chrome 驱动过 Chrome DevTools 协议, 没有依赖性( CDP 过节点内置) WebSocket) (中文(简体) ). 默认是 全页,而不是900px折叠——法官评分的截图应该看它的全部——用 --viewport 折叠和 --selector '#card' 一个元素。 任何铬/铬工程,包括: chrome-headless-shell无头的二进制 --screenshot 旗子是怎样的 npx playwright install chromium-headless-shell 装入 ~/.cache/ms-playwright· ; LOOPS_CHROME 超过发现。 循环寻找一个 在此之前 回合开始,当没有回合时,一次以安装提示而不是三个失败 build failed 线条。 404s或拒绝连接的路由是一个错误,从来不是浏览器错误页面的照片. 床单是 montage (ImageMagick)安装时.
选择权是你的. 每一轮评分后,你都会得到轮回牌:当跑步有 shots (两个模式)一个并列 工作表 数量和企图数量.pi/loops/<run>/r<n>.png,在终端中还显示有图像支持的内线),以及一个采取器——保持法官的取取取,取而代之的再取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取/loop-open R1-bold, (中文(简体) ), /loop-open judge) (中文(简体) ). 结果以 爬上来:每发一行相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相相接相接相接相接相接相相接相接相接相相相相接相相接相接相相接相相相接相接相相接相相相接相相相接相相接相相接相相接相相相相相相接相相相相相相相接相相相相相接相相相相相相相相相相相相相相相相相相相相相相相相相相.
何等为圆所花. 每个嵌入式模型呼叫——尝试,每个法官样本,理事会——被计数:结果带有 usage,卡片结尾 Spent 68.8k tok · $0.0000。一回合从 TUI 返回开始,然后完成,所以没有工具结果可以携带它;而Loops 写一个 type: "usage" 按模式排列到会话的条目(种类) loops,注释命名跑步),即入门类"皮"(Pi sunds)入出其符和成本总计并显示于页脚. 因此,一个背景圆 降落在 /cost 脚跟跟其他模特一样 /resume 这届大会还是这样.
运行时方向. 在TUI中,工具在回合开始后立即返回,当裁判完成后卡片作为信息到达,所以对话保持开放: loop_status (进展), loop_talk("R1-bold", "…") (为该尝试的会议发出指导信息), loop_rule("…") 由法官从本轮开始执行,留作后一轮), loop_pick("wild") (保持这一企图,或 CURRENT无论法官的成绩如何, loop_stop() (牲畜;工作树木), loop({ from }) 页:1 在牌后, loop_apply() 将运行的最好结果带入出局——胜利者从承诺中更改了跟踪文件,作为一次承诺;它所添加或删除的文件被列出,没有应用. 无头 (pi -p或与 wait: true 工具块,直到回合完成.
/loop apply <run-id> 选择精确运行( e) (/loop apply 使用会话的最后一次运行; /loop stop <run-id> 同样也只停止运行。 应用拒绝已上演或未上演的更改与胜者的文件相重叠并留下了不相干已上演的已上演的已上演的文件,在生成的承诺之外. 这些路径上相互矛盾的清洁承诺,因为运行基线也被拒绝(已经匹配的胜者内容是无害的);无关的承诺被保留. 在一回合运行时进行的出站编辑被保留下来,并根据原始基线的单独副本进行判断. 可疑的企图在离职时使该回合没有结果,并停止检查,从未自动重设或恢复。 这不是针对外部作者的跨进程交易,也不是对钩子竞速一个明确的应用.
终极状态. 启动/设置失败、判断失败、无结果的比较和无任何完成候选人的回合记录为有原因的错误,没有留下运行或标签。 候选人承诺/工作树木在失败或停止后幸存;重试可以清除旧的终端错误并重新使用已完成的工作。 不变候选人或保持现有候选人资格的有效比较是正常完成的无改进结果。 由于没有完成候选人变更,Loops不花法官电话。 在Pi的终端状态到来之前,UI中仍有一站不停地运行;仅HTTP发送并不能证明停止.
空可选命令字符串和空可选 protect编号 :shots编号 :routes 列表作为省略处理,包括在模型生成的结构化呼叫中。 它们不会抹去配置的检查/保护或恢复运行的基准。 为了有意清除这些部分,改变配置并开始新的光谱.
在第1轮长椅前 理事会 (两个提议+综合)写法官反对的题 rules 成为其中的决定性标准.
工具从不应用赢家本身:结果包括: git checkout <commit> -- <files> 对于您基线中已跟踪到的获胜者更改的文件,该行列出在工作树上留下的尝试(切入检查、帮助)的新文件,这样您就可以决定。 无头 (pi -p)无取取取者:法官取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取.
皮单位
| 什麽 | 何处 |
|---|---|
| 样式代理 | agents/safe.md, (中文(简体) ), bold.md, (中文(简体) ), wild.md - 前题 tools编号 :model身体附着在尝试的系统上 |
| 法官 | agents/judge.md —— 说 read, grep, find, ls, bash,从不编辑;在长凳模式下,一个真正的会话(在尝试旁边列出),用于衡量和审查候选人目录;在视觉模式下,一个一拍面板 |
| 理事会 | agents/council.md 没有工具; 一次性的代理会话, 从而获得 Pi 的认证、 提供者和会话头 |
| 提示 | prompts/loop.md → /loop |
| 尝试 | SessionManager.forkFrom(<your session or the winner's>, worktree, sessionDir) + 键 createAgentSession —— 说 pi --session 在你的旁边列出它们; /resume 一个看它做了什么 |
| 工作树木 | .pi/loops/<run>/r<n>-<style> 树枝 loops/<run>/r<n>-<style>;胜者留作下一轮的Current |
| 超时/预算 | 人们告诉过他们,他们的限度在前面,并提前着陆工作变化;没有默认的象征性上限(tokenBudget 计算每个转折的整个上下文,所以1M是一个十几个工具 呼叫一个大回扣—— 设置它只有你想要的一个 timeoutMin 或者说 tokenBudget 如果改变什么情况,则仍然被判罪和判决(法官负责检查);只有在没有留下任何东西时才撤销 |
| 状态 | Pi 耐用条目: a loops-state 抓图加一 loops-round 每轮评分. .pi/loops/<run>.json 是一个可重建的索引( e)status, (中文(简体) ), winner,回合,工作树路径) 写在旁边,并重建 从会话缺失。 已添加到 .gitignore 首先写. |
尝试 bash 工具超时 秒数 (支持折射秒),独立于回合的 timeoutMin。关闭或零命令超时;明确报告超时、中止和 shell 启动失败.
对于视觉候选人,配置 build 运行在保护文件恢复后及恢复之前 check,即使没有跟踪修复承诺:恢复受保护的目录也会去除其中被忽略的依赖性. 任何命令失败都会拒绝候选人.
通过设置来覆盖代理 <role>.md 内 <repo>/.pi/agents/ 或者说 ~/.pi/agent/agents/。 。 。 .
设置
一个命令. /loop <goal> 运行一圈; 赤色 /loop 显示这张repo的卡片——每个角色的模型,回合,预算,超时,最后的跑步——带有一个拾取器(模型/回合/预算/超时;esc leave); /loop models (采样者), /loop rounds 3, (中文(简体) ), /loop budget 1.5m, (中文(简体) ), /loop timeout 20, (中文(简体) ), /loop open R2-bold (或 judge:续会)和 /loop runs (每跑一次 与它的爬行) 设置或显示直接。 恰好从其中之一开始的目标,如果有更多话跟随的话,仍然可以作为一个目标.
配置是Loops自己的文件,即Pi扩展保存文件的方式: <repo>/.pi/loops.json 用于此还款( 什么 /loop … 写)和 ~/.pi/agent/loops.json 您的默认值会随处可见; 合并后, Repo 将每个键胜出。 工具参数( O)loop({ rounds: 3 }))为一通电话推翻两通.
{
"models": { "safe": "opencode-go/kimi-k3", "bold": "opencode-go/claude-haiku-5-5", "wild": "opencode-go/gpt-5.6-luna", "judge": "opencode-go/deepseek-v4-pro", "council": ["opencode-go/kimi-k3", "opencode-go/gpt-5.6-luna"] },
"serve": "npm run dev -- --port $PORT", "check": "npm test", "protect": ["test/"],
"rounds": 1, "timeoutMin": 15, "tokenBudget": null, "minGain": 0.05,
"attempts": 3, "repeat": 2, "judgeSamples": 3, "judgePairs": 2, "council": true
}
审取. 视觉回合通过截图判断,因此法官——以及每名小组成员,当面板在上——必须是能够看到图像的模型;在回合开始前不能被拒绝的模型(它会给每个候选人打出相同的分数,读作平分),在信息中固定. 子会话没有载入主机扩展:循环复制提供者注册到孤立的运行时间,因此扩展提供者可以像尝试一样判断,而不继承生命周期钩或命令. 一发式会议仍然没有工具。 每个理事会模式(默认为尝试模式)对每个候选人的分数为0至10分,标出盲目、跨模式和样本的中位数 judge 模式保持否决权和头对头对抗决定回合的Current。 牌上写着:Panel split on R1-wild: kimi-k3 3 · qwen3.8-flash 8 · glm-5.3 8) (中文(简体) ). "judgePanel": false 内 .pi/loops.json 仅由法官决定.
附加的exe.dev集成. 选择一个已经注册的附属提供者(例如) exe-dev-openai/gpt-5.4-mini@llm还选择儿童未遂、法官和议会调用到其狭窄的交通适配器中。 循环读取了反射附着的融合名称和注册来源 /models.json 用于映射 准确 化名到其原生ID,并应用目录宣布的 ChatGPT 请求默认。 异名保持会话状态/使用;只有线载荷会改变. 没有后缀剥取,模型替换,全局配置变化,证书/同意复制,或者将exe.dev扩展加载到儿童中. 无法获取的元数据,未知的计数器或未选中的别名在模型请求前明显失败;恢复附件/目录或选择另一个工作提供者,然后重试. 附属账户可能仍无法使用目录化的广告模型: 提供者错误在不自动倒置的情况下返回 。 这使用官方的 Pi 1. 4.0 公用供应商注册和流取API,而不是私有的运行时域. 其他需要会话级别请求钩子的扩展需要自己的运输适配器;任意的主机钩子没有被继承.
模特儿们. 一轮也是模型的比较:三次尝试和理事会成员应各自跑出不同的一圈. 第一个 /loop 在回放中(互动,还没有设定,不止一个模式可用),要求四次——每次尝试的模型,法官的模型(理事会是尝试的模型)——并写给 .pi/loops.json· ; /loop models 重开取取器. models 关键是角色—— safe, (中文(简体) ), bold, (中文(简体) ), wild, (中文(简体) ), judge, (中文(简体) ), scout,以及 council (一个字符串或一个列表,每个模型一个成员). 未设定的角色分布在 组合数字 : models.pool (名单) provider/id, (中文(简体) ), id 或者说 provider/* 还有Pi自己的 enabledModels,从当前模型开始;没有池,所有东西都运行在当前的模型上,结果就是如此。 圆桌和攀登展示了每次尝试的模型. "scout": false 将侦察员关上(一个赤裸的入球,然后仅在入球上以视觉模式运行).
(单位:千美元)loops 在Pi的体内 settings.json 仍为最下之源. )
停止和恢复
Ctrl+C 中止尝试并离开工作树和会话. loop({ from: "<run>" }) (或 from: "last")重新进行该回合未完成的尝试,评断,并继续进行;评断的回合决不会被再重复. 删除 .pi/loops/<run>/ 编辑 loops/<run>/* 分支git worktree prune) 当你完成了运行.
图书馆
lib/measure.ts (贝壳跑道,保护恢复,diff), lib/judge.ts (单位:千美元)pickWinner 超过法官的数字,视觉 panelJudge, (中文(简体) ), lib/rubric.ts (理事会合成,人类规则), lib/shot.ts (服务器+无头Chrome屏幕截取 CLI over CDP: 全页,取景口或一个选择器), lib/sheet.ts (标签页,通过图像Magick) montage (在安装时)。 所有的型号呼叫都是注射的 所以 pnpm test 把它们用根杆来操作 不需要模型 整个软件包是 TypeScript: Pi 加载 .ts 直接文件(无构建步骤),以及 pnpm check (或 pnpm -r check 检查他们。 没有船 main编号 :exports ——节点拒绝在内部剥去类型 node_modules,所以一个方案 import "@computesdk/pi-loops" 需要构建; Pi通过jiti加载文件, 而不会.
test/fixtures/fuzzy/bench 是测试还原 : cp -r test/fixtures/fuzzy/bench /tmp/fuzzy && cd /tmp/fuzzy && git init && git add -A && git commit -m base,然后运行 /loop 见上文.