内容
# 超级循环 - Sling
**自我改进人工智能代理循环的裁判。** Sling 会挖掘您过去的代理会话中实际有效的 工作流程,尝试改进它们,并在没有测量证明的情况下拒绝称任何事物为“更好”或“完成”——并且它在您停止之前永远不会停止。
`本地优先` · `零依赖` · `Node ≥18` · `MCP 通过 stdio`
---
## 一分钟了解(无术语解释)
当您将人工智能代理用于重复改进任务时——“使此提示/工作流程更好,并继续下去”——通常会出现三个问题:
- 它在还没有完成时就说 **“完成”**;
- 它会 **跳过步骤**,而这些步骤是它被指示要遵循的;
- 它会 **过早停止**,因为它“思考得很”并觉得已经完成。
**Sling 是不会允许这种情况发生的监管者。** 它位于您和人工智能之间,像一个严格的实验室裁判一样:
- 它掌握改进程序(一个 **“循环”**)并逐一为代理提供 **一步一步的指导** —— 当前步骤完成后,下一步骤才会解锁。
- 它会记录一个 **密封的记分卡**。代理无法为自己的工作评分;Sling 会自己测量结果,并在接受任何“这更好”之前 **从密封记录中重新检查**。
- 它 **永远不会宣布胜利。** 运行将继续,直到 *您* 停止为止 —— 并且它会明确表示,直到您停止:
> **警告:您是停止条件。此循环在您停止之前不会停止。**
所有操作都在 **您的机器上运行**。没有任何数据被上传。
### Sling 为您做的事情
- **挖掘您的历史记录** —— 读取您过去的代理会话,以找出真正有效的工作流程(**Strip Miner**)。
- **改进循环** —— 获取循环并尝试使其更好,代代相传(**Loop-de-loop**)。
- **只推广真正的胜利** —— 只有在冻结测试中 **可衡量地更好**,并且从密封字节中重新验证,否则将被阻止。
- **保持您的作者身份** —— 您的循环永远不会离开您的机器,并且在没有您的情况下,它永远不会覆盖您的规范循环。
---
## 快速入门
```bash
cd super-loop-mcp
npm test # 完整的 node:test 套件(118 个检查)—— 无需安装,零依赖
npm run demo # 启动真正的服务器,并通过 stdio 驱动整个活动(38/38 检查)
npm run verify # 验证捆绑的循环哈希值是否符合规定的合约
```
然后,将您的 MCP 主机(例如 **Claude Code**)指向它:
```json
{
"mcpServers": {
"super-loop": {
"command": "node",
"args": ["/path/to/super-loop-mcp/src/server.mjs"]
}
}
}
```
启动时,代理被告知要启用其运行时的 **原生连续模式**,以便运行不会过早停止 —— **Claude Code → `/loop`**,**Codex → `/goal`**(其他运行时 → 它们的等价物)。状态存储在 `SUPER_LOOP_HOME` 下(默认为 `<package>/.super-loop`)。没有任何数据离开您的机器。
---
# 开发者
以下内容是工程细节,位于一分钟总结之后。
## 为什么存在 Sling
将 300+ 行的循环放入模型的上下文中,它可能会吸收整个内容,跳过结构,并将未经验证的参数视为测试。Sling 通过硬性机制解决了这个问题:
1. **一次性询问** —— 首先进行简短的解释和几个简短的问题 *一次*:
- **目标**;
- 是 **挖掘** 新循环还是 **改进** 现有循环;
- **挖掘范围** —— 您的整个会话历史,还是在设定的循环次数后停止;
- **改进顺序** —— 先是最佳循环,还是按找到的顺序(提前警告 *运行可能需要数小时、数天或数周,具体取决于任务和挖掘深度*);
- 什么意思 **更好** (这成为冻结基准);
- 任何 **任务特定限制**;
- 以及最终的 **更深入的解释** 选项,在同一响应中得到尊重。
它永远不会要求您选择模型、推广模式或基准策略 —— 监管者根据任务决定这些,并在之后不会再次询问或自行标记活动完成。
2. **阶段门控流式传输** —— 将循环保存在 MCP 中,并在当前阶段记录证据后为您提供下一部分。不会出现 1k 行的转储。
3. **基准优先** —— 基线是哈希锁定的,记分卡在任何挑战者之前是冻结的。模型自我报告的指标永远不会被计算在内。
4. **前沿假设引擎** —— 完整的测试需要 3-5 个前沿路线的假设(俳句/迷你/纳米/精简/先前生成的拒绝);一次没有改进的运行永远不是“完美的”。
5. **推广门控** —— 只有在工具测量的、深入 **重新验证** 的结果推动质量/成本前沿超越阈值时,才会推广。否则:`BLOCKED`。
两个表面共享一个引擎:**反应式 MCP** (主机调用其工具 — 会话中的钩子)和 **自主驱动程序**(`super-loop-run` CLI / `run_campaign` 工具),它驱动整个活动本身,并且仅在操作员停止文件时停止。重点是:模型 **无法** 单纯依靠推理来推广、升级或将循环称为“完美” —— 每个决定都通过一个工具,该工具需要 **磁盘上的工具测量工件**,并且 **操作员是唯一的停止条件**。
> 全新构建,零依赖,在纯 Node ≥18 上运行。完整的私有 345 行 Strip Miner 和完整的私有 75 行 Loop-de-loop(循环 2)**内部**驻留,字节相同,哈希锁定,逐节流式传输。
---
## 捆绑的循环(哈希锁定)
| id | 文件 | 行数 | sha256 | 触发器 |
|----|------|-------|--------|---------|
| `strip-miner` | `loops/strip-miner.txt` | 345 | `5270d691…ed9ec9` | `/loop strip-miner` (Strip Miner 循环 / 跨代理源矿工) |
| `loop-de-loop` | `loops/loop-de-loop.md` | 75 | `70090e03…022b44` | `/loop loop-de-loop` (循环 2 / 改进批准的循环) |
这些是 **本地大** 源 —— 操作员的完整私有跨代理 Strip Miner(带有旧暂停/完成语言修补到检查点/继续语义),而不是简短的公共矿工。服务器拒绝启动,如果任一文件的哈希值或行数发生偏移,则测试套件也会失败 —— 因此简短的公共矿工永远不会被静默替换。
### 添加您自己的循环(本地循环库)
用户通过 **工具** 添加自己的循环,而不是手动编辑源代码:
```
loop_register { id:"my-loop", title:"My Loop", content:"<完整循环文本>" } → 哈希锁定,分段,本地持久化
loop_library → 列出规定的(哈希锁定)+ 自定义循环
loop_start { loop:"my-loop" } → 流式传输分段,完全像规定的循环一样
```
自定义循环进行 sha256 哈希锁定(每个版本写入一次;`overwrite:true` 创建新版本),获取安全 ID(无路径遍历),在 `SUPER_LOOP_HOME/custom-loops/` 下持久化,并且 **无法与规定的 Strip Miner / Loop-de-loop 冲突或覆盖**。它们通过相同的阶段门控流式传输。没有任何数据离开您的机器。
---
## 工具(25)
| 工具 | 它强制执行什么 |
|------|------------------|
| `run_campaign` | **自主监管者(选择加入 `SUPER_LOOP_ALLOW_EXEC=1`)** —— 一次调用驱动整个活动(摄入 → 目标队列挖掘 → 改进 → FullTestBatches → 重新验证 → 推广/银行 Stone → 推进/退休 → 重新挖掘),直到操作员停止文件。每个工作者的输出都经过 **验证**(汇总/提前停止/伪造指标/自我推广/阶段跳过/复制公共拒绝 + 重新输入);无效批次不计入。`maxBatches` 是一个安全上限,而不是完成。可以通过 `super-loop-run` CLI 无限制运行。如果缺少完整循环,则返回 `MISSING_FULL_PRIVATE_LOOPS`。 |
| `initialize_loop_run` | 一次性询问(简短 + 几个问题:目标,挖掘与改进,**挖掘范围**,**改进顺序**,什么意味着更好,一个硬限制,更深入的解释;不询问模型/推广/策略问题 —— 监管者根据任务决定这些);存储每个用户消息的 sha256 哈希;选择一个前沿模型;显示停止条件通知 **和原生继续通知**(`/loop`,`/goal`)并提前;尊重同一个响应中的“更深入的解释”答案 |
| `loop_register` | 将您自己的循环添加到本地 MCP:哈希锁定,安全 ID,分段,本地持久化;永远不会覆盖规定的循环 |
| `loop_library` | 列出规定的(哈希锁定)+ 自定义本地循环 |
| `loop_start` | 开始任何循环(规定或自定义)的分段流式传输;仅返回第 0 部分 |
| `request_next_phase` / `loop_next` | 下一阶段 **如果** 当前阶段有证据,否则 `PHASE_SKIP` |
| `observation_record` | 轻量级阶段证据 |
| `artifact_record` | 持久化原始工件 + sha256;`role:"baseline"` 哈希锁定(写入一次);`measurement` 使 MCP **推导出** 工具计算的测量值,从字节中;传递显式 `content`(拒绝 `sourcePath` 读取) |
| `benchmark_propose` / `benchmark_select` | 提出记分卡(≥1 个值维度,≥1 个成本维度,≥1 个案例,可选的确定性 `oracle`)并 **冻结** 一个 |
| `benchmark_run` | 设置工具 **计算** 的基准栏;拒绝调用者报告的测量值 |
| `register_hypotheses` | 3-5 个前沿假设;基准优先;拒绝禁止的路线 |
| `test_hypothesis` | 一个完整的测试 = 3-5 个前沿代理,每个工具计算;聚合 vs 基准;报告质量权威 |
| `execute_full_test` | **选择加入(`SUPER_LOOP_ALLOW_EXEC=1`)** —— 监管者本身启动 3-5 个允许列出的工作者(`execFile`,无 shell,通过 stdin 提示),捕获输出,解析真实令牌使用情况,并控制工具捕获的字节;默认关闭 → `EXEC_DISABLED` |
| `reverify_run` | **重新导出** 密封的原始字节的指标,并确认它们重现(篡改的数字无法生存) |
| `promotion_request` | 仅在测量的 + 重新验证的前沿移动时推广;质量赢得 MCP 无法通过工具验证的路由到仪表板(`QUALITY_UNVERIFIED`) |
| `cycle_decision_request` | **监管者钩子** —— 工作者提出转换数据包(推广/推进阶段/更改基准/更改基准/饱和);只有监管者接受的转换才是进展;完成/停止意图被拒绝 |
| `report_saturation` | 标记一个通道已饱和 → 监管者 **自动转换** 到下一个通道(Strip Miner → Loop-de-loop);永远不会暂停/停止 |
| `campaign_status` | 只读通道/目标队列,自动转换,30 批次退休 + 10-15 咨询会计,待仪表板审查(永远不会阻止) |
| `continue_run` | 记录下一个通道 + 第一个具体操作;它 **不会** 清除义务,直到真正的进展工具运行 |
| `human_review_request` | 队列/列表批准/淤泥项目;模型可调用的解决被阻止 |
| `update_dashboard` | 用停止条件通知渲染始终在线的本地仪表板 |
| `report_export` | 可复制的 Markdown 活动报告 |
| `host_capability_preflight` | 哪些前沿代理 CLI 已安装在 PATH 上的本地报告 —— 仅文件系统状态,永远不会执行命令,不适用于 SOTA/web 研究 |
### 您将看到的代码块
`NOT_INITIALIZED · PHASE_SKIP · BASELINE_FIRST · BASELINE_LOCKED · BENCHMARK_FIRST · BENCHMARK_FROZEN · WEAK_BENCHMARK · BASELINE_BAR_FIRST · HYPOTHESIS_COUNT · BANNED_ROUTE · BUILDER_ROUTE · FULLTEST_AGENTS · MODEL_REPORTED · MEASUREMENT_AUTHORITY · QUALITY_UNVERIFIED · NO_SCORE_MATRIX · NOT_REVERIFIED · BELOW_THRESHOLD · BELOW_FLOOR · STAGED_TRADEOFF · OPERATOR_IS_STOP · DASHBOARD_ONLY · NO_ACTIVE_LANE · EXEC_DISABLED · EXEC_FAILED · LOOP_EXISTS · LOOP_SOURCE`
### 即时执行 + 自主套件(选择加入)
默认情况下,服务器 **永远不会执行命令**(审计姿势)。设置 `SUPER_LOOP_ALLOW_EXEC=1` 以让 Sling 自己执行基准测试:`execute_full_test` 自身启动前沿工作者(仅允许列出的 `claude` / `codex` / `glm` / `gemini`,通过 `execFile`,无 shell,通过 **stdin** 传递提示),捕获每个输出,在 CLI 报告时解析真实令牌使用情况,强制执行硬超时,并将 **工具捕获的** 字节通过相同的门控。这关闭了最后一个自我报告的漏洞 —— 当监管者启动工作者时,没有模型提供的运行日志来伪造。失败/超时/非允许启动是非法的批次,不计入退休。
**自主驱动程序** 位于其上 —— “一个您调用的监管者”和“一个自行驱动的套件”之间的区别:
```bash
SUPER_LOOP_ALLOW_EXEC=1 node scripts/run-campaign.mjs --config campaign.json --stop-file ./STOP
```
它在无人值守的情况下运行整个循环(摄入 → 挖掘 → 改进目标 → 验证每个工作者 → 银行石头 → 推进/退休 → 重新挖掘),并且 **仅在您创建停止文件时停止**。相同的逻辑是 `run_campaign` MCP 工具,边界由 `maxBatches` 限制。对于调用版本,MCP 本身是反应性的(主机调用它);监管者使 Sling 具有自主性。
工作者通过 **stdin** 在真实的 CLI 上运行(`claude -p --output-format json`,`codex exec --json`)—— 提示永远不会触及 argv(无注入),并且提取真实的答案文本 + 令牌使用情况以进行基准测试。**基准测试模式:** `oracle`(确定性 → 在测量的胜利时自动推广)和 `judge`(独立的 Opus/GLM 评委根据规则评估基线与挑战者的 **真实输出** → 主观 → 排队到仪表板,从不自动推广;挑战者永远不会自我评分)。
## 设计说明
- **故意零依赖。** 没有SDK,没有需要安装的`npm`依赖,不会失败或超时,也不会向服务器发送数据。MCP传输大约90行位于`src/server.mjs`中的换行符分隔的JSON-RPC。无需安装任何内容。
- **工具计算的度量权限。** MCP **推导出** 所有指标,从记录的原始字节 — `tokenCost`始终(确定性token估计),`quality`通过冻结基准的确定性预言机(当存在时)。某些模型类型为`caller-reported`,被基准/测试门拒绝(`MEASUREMENT_AUTHORITY`)。`reverify_run`从密封字节重新推导,因此篡改的数字无法生存。 **诚实的界限,明确说明:** MCP无法证明记录的字节来自真正的边界代理运行,除非*它*启动了工作进程(选择加入实时执行器),并且它无法在没有预言机的情况下判断主观质量。主观质量路由到仪表板供人类查看,并且 **从不自动提升** (`QUALITY_UNVERIFIED`);确定性、预言机评分的质量自主提升。简而言之:确定性 → 工具测量,主观 → 仪表板。
- **主机能力预检,无执行。** `host_capability_preflight` 将已知的边界代理CLI名称与`PATH`进行匹配,并进行文件系统状态检查 — 它从不启动命令,从不探测模型提供的二进制文件,并且不是SOTA/web研究。`PATH`上存在 ≠ 工作认证,它会说明这一点。
- **防篡改。** 基线和基准在每个周期内仅写入一次;更改需要明确的新纪元 + 理由。
- **路径强化。** 在访问磁盘之前验证`runId`和工件ID,并且拒绝`sourcePath`读取,以便模型无法将MCP变成本地文件读取器。通过`content`提交工件字节。
- **仅仪表板的人工审核,具有实际应用路径。** 模型可以排队/列出批准/拒绝项(并且可以*提出*通过排队带有改进循环文本的审核),但`human_review_request { action:"resolve" }` 返回`DASHBOARD_ONLY` — 模型永远无法批准自己的工作。 **单击完成:** 自主活动提供仪表板(或运行`node scripts/dashboard-server.mjs`);打开它并单击 **批准/拒绝**。单击操作发布到本地服务器(仅限127.0.0.1,拒绝跨源),将其排队到运行收件箱,正在运行的活动 **在其下一个时间片采用它 — 没有文件,没有命令,模型独立,非阻塞。** (无头回退:将仪表板的导出保存到`runs/<runId>/inbox-decisions.json`中,供主管自动应用,或`node scripts/apply-decisions.mjs --file <export>`。)批准循环采用审核 **安装改进的循环作为新的版本化自定义循环** (先前版本通过`operator.rollbackLoop`存档以便回滚),然后`loop_start`在下一个周期中将其流式传输。强制规范循环是不可变的,从不被触及。应用是 **非阻塞的** — 活动从不为其暂停,采用从不是模型可调用的工具(它位于`api.operator`下,远离`tools/call`表面)。这就是一个已证明的改进实际成为Sling运行的循环方式。
- **继续是主机义务,诚实说明。** MCP无法强制主机代理循环继续运行 — 只有主机可以(这就是为什么代理在其启动时被告知其原生连续命令,`/loop` / `/goal`)。MCP可以而且确实做的:每个报告/仪表板/饱和度/无改进/拒绝终端事件都保留一个机器可读的 **继续义务**,具有具体的下一个工具+通道,并且`continue_run`记录意图而不清除它(只有真正的进度工具清除它)。MCP使早期停止明显不完整;它不假装是主机调度器。操作员是唯一的停止条件。
- **从不覆盖您的规范循环。** 推广记录一个 *内部冠军*;更改规范循环文件是 **人工门控**,并留给您。
- 设计为独立。
## 布局
```
loops/ 捆绑的哈希锁定循环源(+ 常量中的MANIFEST)
src/
server.mjs MCP标准输入输出JSON-RPC传输 + 工具模式
engine.mjs Sling核心 — 每个工具处理程序 + 门控
loops.mjs 注册表,哈希锁定,分区器(强制 + 自定义加载器)
measure.mjs 工具计算的度量(从字节推导成本/质量)+ 诚实边界
executor.mjs 选择加入实时工作进程执行(允许列表,execFile,stdin)— 默认关闭
supervisor.mjs 自主活动驱动器(验证 → 接受/重新进入边界)
host.mjs 主机能力预检(仅限PATH存在,无执行)
models.mjs 前沿路由策略(禁止列表/允许列表)
scorecard.mjs 推广前沿规则 + 评分矩阵
store.mjs 本地原子JSON持久性(运行 + 自定义循环)
dashboard.mjs 精致的dashboard.html + markdown报告
constants/util 共享事实 + 帮助程序
scripts/ demo.mjs(实时证明),run-campaign.mjs(自主CLI,提供仪表板),
dashboard-server.mjs(零依赖提供的仪表板:单击批准/拒绝 → 采用),
apply-decisions.mjs(仅限操作员的无头回退),verify-sources.mjs
test/ node:test套件(源,询问一次,阶段门控,基准,
假设,推广,钩子,仪表板,传输,安全,
循环库,度量权限,主机预检,执行器,
监督器,采用,仪表板服务器)
```