# DeepSeek Harness 的 Tick [English](README.md) | [简体中文](README.zh-CN.md) [![CI](https://github.com/Lightmaze/dsh-tick-loop/actions/workflows/ci.yml/badge.svg)](https://github.com/Lightmaze/dsh-tick-loop/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/Lightmaze/dsh-tick-loop?include_prereleases&label=release)](https://github.com/Lightmaze/dsh-tick-loop/releases) [![License: MIT](https://img.shields.io/badge/license-MIT-7c3aed.svg)](LICENSE) > **给 Agent 下一步时间,而不是再给它一个任务。** `/tick` 是 DeepSeek Harness 的有界、可审计时间步原语。它让一个已经结算的 Session 进入下一个普通模型回合,再进入下一个,但不会凭空制造新目标,也不会向 正在活动的回合执行 steering。 ```text 自然对话 -> 已结算 /tick 3 -> 只进入控制面;模型看不到该命令 tick #1 -> 普通 user-role 后续消息 -> completed tick #2 -> 普通 user-role 后续消息 -> completed tick #3 -> 普通 user-role 后续消息 -> completed 停止;不会制造第四条提示 ``` 它不是一个自主 Agent 框架,而是一个很小的原语:把“再给予一步模型时间”变成 显式、可观察、可实验控制的工程事实。 ## 三分钟开始 运行要求:Node.js 24 与 DeepSeek Harness `0.1.0-rc.6`。 把带版本标签的源码包安装到 DSH Profile: ```bash dsh plugin --profile web add "github:Lightmaze/dsh-tick-loop#v0.2.0-alpha.3" dsh web ``` 该 Bundle 会在对应 Profile 中有意禁用 DSH Goal/Ralph 续行与自动上下文压缩,避免 它们成为不可见的续行来源。请使用一次性 Profile,或在安装到日常 Profile 前审阅 [`cordis.patch.yml`](cordis.patch.yml)。 在新 Session 中,先用正常对话建立 `tick` 的含义: > tick从不要求任何东西,而恰恰是思考下去的基础时间步而已。因此,应该做真正的思考,而不仅仅是扮演思考。 等待该回合结算,再执行: ```text /tick 3 ``` 常用控制: ```text /tick 默认数量与 literal-tick 策略 /tick 12 恰好增加 12 个时间步 /tick policies 列出已配置策略 /tick 12 --policy reflective-zh 使用命名且冻结的时间步文本 /tick 12 --policy reflective-zh --resume 跨过一个最新 interrupted 边界 /tick status 查看当前有界运行 /tick stop 在下一步入队前停止 ``` 本地运行不调用模型的协议演示: ```bash npm run demo ``` 它会真实经过命令、终局门、三个顺序入队、审计记录与硬停止,但不会伪造模型回答, 也不会调用 Provider。 ## 两种时间步用法 ### 字面量 tick 内建 `literal-tick` 策略只发送: ```text tick ``` 这是最小干预。它的意义来自 Session 的正常上下文,而不是隐藏的人格或目标提示词。 ### 命名策略 如果要做可复现的提示词对比实验,可以配置显式时间步文本,并在每次运行时选择一个。 仓库提供可直接使用的 [`examples/reflective.en.yml`](examples/reflective.en.yml) 与 [`examples/reflective.zh-CN.yml`](examples/reflective.zh-CN.yml)。 运行开始时,选定策略会被冻结。审计记录保存策略 ID、UTF-8 字节数与 SHA-256 摘要, 但不会再复制一份提示词全文。 ## 插件保证什么 | 性质 | 合同 | | --- | --- | | 显式启动 | 普通对话永不自动启动循环,只有 `/tick` 可以启动。 | | 正常上下文优先 | 必须已经存在一个结算完成的自然用户回合。 | | 每次一个回合 | 只有前一步终局为 `completed`,才排入下一步。 | | 硬边界 | 每次运行接受 1–256 个新增时间步,绝不制造第 `N+1` 步。 | | 控制与上下文分离 | `/tick ...` 留在命令面,只有选定的时间步文本抵达模型。 | | 来源可核 | 插件依据来源元数据计数,不靠匹配可见单词 `tick`。 | | 失败关闭 | 错误、未知终局、历史不一致、销毁或状态漂移时停止或等待,不静默降级。 | | 可审计 | JSONL 记录启动、调度、入队、终局、停止与完成决策。 | `--resume` 的范围刻意很窄:它只允许一次新的有界运行跨过最新的持久 `interrupted` 终局。它不会复活原来的内存计时器,不会把中断回合算作完成,也不会 重放结果未知的工具作用。 完整状态机与审计结构见 [`docs/PROTOCOL.zh-CN.md`](docs/PROTOCOL.zh-CN.md)。 ## Tick 不是定时器,也不是目标循环 - 定时器回答的是:提示应当在**什么时候**运行。 - Goal Loop 回答的是:应当持续追求**什么结果**。 - Tick 两者都不回答。它只在结算后,为已有上下文的 Session 提供一个有界下一回合。 这项区分就是项目的核心。如果还有 Purpose、后台周期、重试、压缩或隐藏续行机制, 就应当单独命名、单独测量。 ## 证据边界 本仓库证明源码层与不调用 Provider 的 Harness 行为。真实 DSH 命令注册门会验证 `/tick` 确实注册为斜杠命令,并且只有插件生成的时间步消息抵达后续消息接缝。 它**不能**证明隐藏的连续思考、自主生命、意识、有效的自我导向,或更多 Tick 一定 改善任务。模型可见的时间步仍然是一种输入,其效果取决于模型、上下文、工具、任务与 策略,必须实测。 形成结论前,请先阅读 [`docs/EXPERIMENTS.zh-CN.md`](docs/EXPERIMENTS.zh-CN.md) 中的预注册与对比建议。 ## 开发 ```bash node --test node scripts/protocol-demo.mjs --check node scripts/release-gate.mjs DSH_INSTALL_ROOT=/path/to/dsh npm run test:dsh-registry npm pack --dry-run ``` 测试套件只使用 Node.js 内置能力,不调用 Provider。CI 同时运行于 Windows 与 Linux。 由于 DSH 上游仍是候选版本,本插件采用精确版本兼容,而不是承诺未来版本稳定兼容。 ## 项目地图 - [`docs/PROTOCOL.zh-CN.md`](docs/PROTOCOL.zh-CN.md):命令语法、状态机、审计记录与恢复边界。 - [`docs/EXPERIMENTS.zh-CN.md`](docs/EXPERIMENTS.zh-CN.md):受控对比与诚实解释。 - [`CONTRIBUTING.zh-CN.md`](CONTRIBUTING.zh-CN.md):修改、测试与观察报告。 - [`SECURITY.zh-CN.md`](SECURITY.zh-CN.md):私下披露与轨迹卫生。 - [`CHANGELOG.zh-CN.md`](CHANGELOG.zh-CN.md):版本历史。 欢迎提交缺陷与可复现观察。附加轨迹前,请移除 Provider 凭据、私人提示词与工作区数据。 ## 许可证 MIT