Skip to content

Latest commit

 

History

History
394 lines (330 loc) · 21.1 KB

File metadata and controls

394 lines (330 loc) · 21.1 KB

Thinloop 安装与更新指南

返回 README

十二个 Skill 遵循同一目录契约。推荐安装方式如下:

Agent 推荐安装 更新生效
Codex 把十二个 Skill 链接到 ~/.codex/skills 新任务
OpenCode 把十二个 Skill 链接到 ~/.config/opencode/skills 重启 OpenCode
Pi 把十二个 Skill 链接到 ~/.pi/agent/skills 新会话或执行 /reload
CodeWhale 把十二个 Skill 链接到 ~/.codewhale/skills 新会话
Reasonix 把十二个 Skill 链接到 ~/.reasonix/skills 新会话
DeepSeek Harness 把十二个 Skill 链接到 ~/.dsh/skills,并在 $DSH_HOME/cordis.patch.yml 挂载 .dsh-plugin/continuity.mjs(宿主级 Cordis 插件行) 新会话(filesystem provider 的 watcher 会自动失效并更新目录)
Claude Code 安装完整插件 更新后重启或重新加载插件
WorkBuddy 安装完整插件 更新后重启 WorkBuddy
ZCode 安装完整插件 更新后新建会话

Skill 链接随源码仓库更新,但默认不启用连续性 Hook;Claude Code、WorkBuddy 和 ZCode 的完整插件会额外启用各自支持的 Hook,DeepSeek Harness 则通过把 .dsh-plugin/continuity.mjs 挂载到 DSH 的 home 级用户 patch 层启用 agent/turn-stopping 连续性闸门。不要在同一个 Agent 中同时安装完整插件和 个人 Skill 链接,以免重复暴露同名能力。

Codex、OpenCode、Pi、CodeWhale、Reasonix 与 DeepSeek Harness

Windows · Junction

$repo = "C:\path\to\thinloop"
$codeWhaleSkillRoot = if ($env:CODEWHALE_SKILLS_DIR) {
  $env:CODEWHALE_SKILLS_DIR
} else {
  "$env:USERPROFILE\.codewhale\skills"
}
$skillRoots = @(
  "$env:USERPROFILE\.codex\skills",
  "$env:USERPROFILE\.config\opencode\skills",
  "$env:USERPROFILE\.pi\agent\skills",
  $codeWhaleSkillRoot,
  "$env:USERPROFILE\.reasonix\skills",
  if ($env:DSH_HOME) { "$env:DSH_HOME\skills" } else { "$env:USERPROFILE\.dsh\skills" }
)
$skillNames = @(
  "scd-discovery", "scd-uiux", "scd-architecture",
  "scd-project", "scd-execute", "scd-quickdev", "scd-knowledge", "scd-maintenance",
  "scd-next",
  "scd-interview",
  "scd-evolve", "scd-reengineering"
)

foreach ($root in $skillRoots) {
  New-Item -ItemType Directory -Force -Path $root | Out-Null

  $legacy = Join-Path $root "scd-dev-loop"
  $legacyItem = Get-Item -LiteralPath $legacy -Force -ErrorAction SilentlyContinue
  if ($null -ne $legacyItem -and
      ($legacyItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
    Remove-Item -LiteralPath $legacy
  }

  foreach ($name in $skillNames) {
    $link = Join-Path $root $name
    if (-not (Test-Path -LiteralPath $link)) {
      New-Item -ItemType Junction -Path $link -Target (Join-Path $repo "skills\$name")
    }
  }
}

$skillRoots | ForEach-Object {
  $root = $_
  Get-Item -Force ($skillNames | ForEach-Object { Join-Path $root $_ })
} | Format-Table FullName, LinkType, Target

macOS / Linux · Symbolic links

repo="/path/to/thinloop"
skill_roots=(
  "${CODEX_HOME:-$HOME/.codex}/skills"
  "${XDG_CONFIG_HOME:-$HOME/.config}/opencode/skills"
  "${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}/skills"
  "${CODEWHALE_SKILLS_DIR:-$HOME/.codewhale/skills}"
  "$HOME/.reasonix/skills"
  "${DSH_HOME:-$HOME/.dsh}/skills"
)
skills=(
  scd-discovery scd-uiux scd-architecture
  scd-project scd-execute scd-quickdev scd-knowledge scd-maintenance scd-next scd-interview scd-evolve
  scd-reengineering
)

for root in "${skill_roots[@]}"; do
  mkdir -p "$root"
  [ -L "$root/scd-dev-loop" ] && unlink "$root/scd-dev-loop"

  for name in "${skills[@]}"; do
    link="$root/$name"
    target="$repo/skills/$name"

    if [ -L "$link" ]; then
      [ "$(readlink "$link")" = "$target" ] && continue
      unlink "$link"
    elif [ -e "$link" ]; then
      echo "skip existing non-link: $link" >&2
      continue
    fi

    ln -s "$target" "$link"
  done
done

上面的脚本只移除明确的旧链接 scd-dev-loop,并修复十二个 Thinloop Skill 链接;遇到同名的真实文件或目录会跳过,不会覆盖用户内容。OpenCode 也能读取 ~/.claude/skills,Pi 也能读取 ~/.agents/skills;CodeWhale 使用 ~/.codewhale/skills,并允许 CODEWHALE_SKILLS_DIR 直接覆盖整个 Skill 根。使用各自的原生目录可以明确区分安装来源,不依赖兼容目录。

Pi 会把这些 Skill 注册为 /skill:scd-* 命令。链接更新后,在现有会话执行 /reload,或开启新会话。Thinloop 当前没有为 Pi 安装扩展,也不声明 Stop 等价的连续性阻断能力。

CodeWhale 会在新会话发现这些 Skill,可用 /skills 查看并用 /skill scd-next 激活。Thinloop 只安装标准 SKILL.md,不安装 CodeWhale Plugin Bundle 或连续性 Hook;当前 CodeWhale 的 Bundle 兼容层尚未提供 Hook 适配器。

Reasonix 会在新会话发现 ~/.reasonix/skills 下的标准 SKILL.md 目录;可直接 输入 /scd-next 激活。Thinloop 当前不为 Reasonix 写入 Hook 配置,避免把 Reasonix 已有的全局或项目 Hook 与未经验证的连续性阻断语义混合。

DeepSeek Harness 的 Skill 发现由内置的 filesystem provider 负责:它按 <projectRoot>/.dsh/skills、<projectRoot>/.agents/skills、自定义目录、 $DSH_HOME/skills(默认 ~/.dsh/skills)与 ~/.agents/skills 分层扫描 标准 SKILL.md 目录。把十二个 Skill 链接到 ~/.dsh/skills 后,新会话的 skill 工具即可发现并加载 scd-next、scd-execute、scd-project、 scd-quickdev 等全部 Skill;provider 的 watcher 会自动失效并更新模型侧 目录,不依赖重启。DeepSeek Harness 没有 Claude Code、WorkBuddy、ZCode 那种 「JSON Hook 清单 + 子进程处理程序」的声明式 Hook,但提供可编程的 Cordis 插件生命周期事件系统:Thinloop 通过 .dsh-plugin/continuity.mjs 插件注册 agent/turn-stopping(Stop 的等价物)监听器,在状态不可恢复时 agent.steer(...) 让 Agent 继续补齐,而不是在不可恢复的状态上停下。启用 方式是把挂载块写进 home 级用户 patch 层 $DSH_HOME/cordis.patch.yml (等效挂载点为各 profile 的 $DSH_HOME/profiles/<name>/cordis.patch.yml):

- insert:
    - id: thinloop-continuity
      name: file:///绝对路径/thinloop/.dsh-plugin/continuity.mjs

patch 层新增条目必须用 insert 列表;裸行会被当作按 id 更新既有条目而报 entry "thinloop-continuity" not found。该层对所有 profile 生效(含 Electron desktop 宿主与全部 agent preset),无需复制 preset;挂载细节、事件 作用域依据与 Windows 路径注意事项见 .dsh-plugin/README.md。DSH 未暴露第三方可用的 压缩前否决点,压缩后仍由 AGENTS.md 基线机制重新注入指令。

node scripts/verify-install.mjs --platform dsh 只验证上述 insert 的静态 结构及精确的 handler 路径,不以注释、裸行或禁用行作为挂载证据。检查器 保守读取文档示例中的 YAML 子集;复杂语法、覆盖操作或不确定组合返回 MANUAL。PASS 不代表运行时已加载或事件已执行,仍应通过 dsh --profile web --dump-config 和插件 README 中的行为步骤核验。

Evolve 权威源码

scd-evolve 诊断阶段不需要源码配置;用户按候选 ID 批准实施后,必须通过本次 调用的绝对路径,或用户级 .scd/config.json 中的 thinloop_source_root,定位 Thinloop 的 Git 源码仓库:

{
  "thinloop_source_root": "/absolute/path/to/thinloop"
}

不要把插件缓存或已安装 Skill 目录配置为源码。若配置文件已有其他字段,更新时 必须保留;Skill 不会自动创建或覆盖该配置。

Claude Code 完整插件

先审查仓库中的 Skill 与 hooks/check-state.mjs,然后选择本地开发加载或持久 安装:

# 本地开发:不写入插件市场配置
claude plugin validate /path/to/thinloop --strict
claude --plugin-dir /path/to/thinloop

# 持久安装:注册本地 marketplace,再安装到用户作用域
claude plugin marketplace add /path/to/thinloop
claude plugin install thinloop@thinloop --scope user

安装或更新后,在交互会话运行 /reload-plugins。完整插件中的 Skill 使用 /thinloop:scd-discovery 这类命名空间;个人 Skill 链接使用 /scd-discovery。插件会在 PreCompact 与 Stop 时检查已激活的 .scd/tasks/current.md,没有 SCD 状态文件时不产生输出。

WorkBuddy 完整插件

先审查仓库中的 Skill 与 hooks/check-state.mjs,再通过 WorkBuddy 左侧的 插件页安装:

  1. 点击插件页的 + 添加第三方插件市场。
  2. 远程安装填入 mindcarver/thinloop;本地开发填入 /path/to/thinloop。
  3. 在 Thinloop 卡片点击安装并保持启用;更新后刷新插件市场。

WorkBuddy 5.3.5 内置的 CodeBuddy 运行时读取 .codebuddy-plugin/marketplace.json 与 .codebuddy-plugin/plugin.json。 完整插件会注册十二个 Skill,并在 PreCompact 与 Stop 时通过 CODEBUDDY_PLUGIN_ROOT 运行连续性检查;状态不完整时返回原生 continue: false,让 Agent 先补齐恢复信息。

ZCode 完整插件

先审查仓库中的 Skill 与 hooks/check-state.mjs,然后打开一个工作区:

  1. 进入 Settings → Plugins,点击 Create → Add Plugin Marketplace。
  2. 本地开发填入 /path/to/thinloop;远程安装填入 mindcarver/thinloop;若远程 clone 超时,改用本地仓库路径。
  3. 自定义 Marketplace 会显示在 Personal 筛选下;切换到 Personal 后,在 thinloop 卡片点击 Install,并保持插件启用。

完整插件会注册十二个 Skill;Stop 发现激活状态不可恢复时会让主 Agent 继续 补齐,最多连续三次;压缩后的 SessionStart(compact) 会把缺失状态作为恢复 上下文注入。ZCode 不支持 Codex 专用的 PreCompact 事件,因此当前运行时会 记录一条 warning 并只跳过该事件,不影响上述两个 ZCode Hook。

每次交付核对三端

每次 Thinloop 交付后都核对已安装的 ZCode、Claude Code 和 Codex;只改 README、 测试或 CI 也不能跳过已有版本或内容漂移。源码必须是验收通过并已同步的 main。 只更新 Thinloop 插件载荷/Skill 链接,不升级宿主 App、不安装缺失客户端,也不改 无关插件设置、数据或认证。WorkBuddy 仍为 SKIP。

node scripts/verify-install.mjs --platform codex
node scripts/verify-install.mjs --platform claude-code
node scripts/verify-install.mjs --platform zcode

逐项读取状态;UNVERIFIED 不是通过。发现漂移后,只对对应的已安装端运行:

node scripts/refresh-install.mjs --platform codex
node scripts/refresh-install.mjs --platform claude-code
node scripts/refresh-install.mjs --platform zcode

刷新脚本会再次运行只读检查,必须得到 PASS 才报告成功。Codex 遵循 CODEX_HOME,只替换有 Thinloop 来源证据的 Skill 链接;碰到实体目录、其他来源 或不存在的安装会停止,不覆盖用户文件。Claude 使用原生 claude plugin marketplace update thinloop 和 claude plugin update thinloop@thinloop --scope user;插件必须已经以 user scope 安装并启用,且 Thinloop marketplace 指向当前验收源码。 Claude 会跳过已安装的同版本;若更新后已确认版本一致但 Skill/Hook/清单字节仍 漂移,脚本只执行一次原生 uninstall --keep-data 后 install,保留 Thinloop 持久数据并再次核验。原生 CLI 可能重排设置文件的 JSON 键,但不会为此修改 设置含义、认证或信任。证据缺失、安装路径异常或版本仍不匹配不触发该重装。

ZCode 0.16.5 的 plugins CLI 没有 update 子命令。脚本通过实际 app-server 协议 依次发送 plugins/marketplace/update(只指定 thinloop)和 plugins/update (只指定 thinloop@thinloop),由宿主管理缓存事务,不手工改插件数据库。 该路径要求既有 Thinloop marketplace 已指向当前验收源码的本地目录;若不是, 先核对真实市场来源,按既有设置的更新方式处理,不能静默替换市场来源。其他 插件的无关诊断不影响 Thinloop 验证。原生更新异常或超时后先重新只读检查, 不能从命令退出码推断成功或盲目重试。

新任务/会话才能可靠读取更新后的指令;正在运行的会话不自动重启。缺失客户端、 禁用插件或无法核验时保留明确缺口,不把它升级为已同步。

更新已有安装

先更新源码仓库:

git -C /path/to/thinloop pull --ff-only

随后按安装方式刷新:

# Codex / OpenCode / Pi / CodeWhale / Reasonix / DeepSeek Harness:重新运行上面的链接脚本,然后新建任务或会话、重启或 /reload

# Claude Code 完整插件
claude plugin update thinloop@thinloop --scope user

# WorkBuddy 完整插件(安装了 CodeBuddy CLI 时)
codebuddy plugin update thinloop@thinloop --scope user
  • Claude Code:命令成功后重启客户端,或在交互会话重新加载插件。
  • WorkBuddy:也可以在插件页刷新市场后更新 Thinloop;完成后重启 WorkBuddy。
  • ZCode:Settings → Plugins → Refresh → thinloop → Update;更新后新建会话。
  • 升级到 v0.13.1:确认当前列表中存在 scd-knowledge、scd-next、scd-execute、scd-reengineering、scd-project 与 scd-quickdev, 并且插件版本与当前源码仓库一致。Knowledge 仍只在用户显式调用时工作,写入前仍需确认具体草稿和目标。
  • 升级到 v0.13.3:确认当前列表中存在十二个 Skill,包括新增的 scd-interview;个人面试题默认存到 ~/.scd/interview-questions/,可用用户级 .scd/config.json 的 interview_root 覆盖。
  • 升级到 v0.13.4:QuickDev 在工程检查后直接进入独立行为验收;一个新鲜上下文 Agent 返回 PASS、FAIL 或 BLOCKED。
  • 升级到 v0.13.5:确认 QuickDev 会先询问是否需要审核完整 Issue、实施方案和 tasks;其创建或 更新的 Issue 使用中文,命令、路径和机器状态标识保持规范原值。
  • 升级到 v0.13.6:确认十二个 Skill 的 SKILL.md、Agent 提示词、参考契约和模板均使用中文; Issue 标题、正文、验收、实施任务、验证更新和评论也使用中文,机器标识保持规范原值。
  • 升级到 v0.13.7:确认 QuickDev 默认不再询问方案确认偏好,而是直接创建或更新中文 Issue 并继续;只有用户主动要求先看或先确认方案、Issue 或 tasks 时才等待明确确认。
  • 升级到 v0.14.0:确认重要 UIUX 工作会生成项目内 UI 图与必要的非生产原型,并把视觉 ID、 状态、视口和 UX 契约交给前端;重大视觉方向确认后才能 ready,QuickDev 仍默认自主实施。
  • 升级到 v0.15.0:确认 QuickDev 在独立验收前闭合 Issue 的验收、实施和交付三本账;任何 页面差异都必须执行真实浏览器交互与视觉验收,缺少必需证据时只能 BLOCKED。
  • 升级到 v0.16.0:确认 Thinloop CI、当前三臂评测、单一路由内核、README 产品表面和 Tag-only GitHub Release 链路均存在;发布范围、证据和已知限制见 docs/releases/v0.16.0.md。
  • 升级到 v0.16.1:连续性检查兼容当前中文与旧英文状态,保留明确模板占位符检查, 允许 HTML、泛型与 Markdown 自动链接。Claude Stop 首次要求纠正,重复纠正仍失败时 输出未解决状态交接并结束自动纠正;DSH 对同一 Agent 的未改变错误状态不重复 steer, 状态改变或恢复后可重新纠正。更新后新建会话使新 Hook 生效,版本与验证范围见 docs/releases/v0.16.1.md。WorkBuddy 维持 SKIP;ZCode 后续交付按三端规则核验。
  • 升级到 v0.17.0:QuickDev 按当前阶段读取 Issue、证据、页面和发布参考;清晰低风险 单交付使用五节紧凑 Issue,复杂 PRD/UI/迁移按需展开。独立验收、三本账、真实 页面证据、高风险确认、main 核验和精确清理门继续有效。评分器保留 unknown, 完整交付协议与真实模型证据分开记录;每次交付核对 ZCode、Claude Code、Codex, 同版本载荷漂移也需修复。范围和测量限制见 v0.17.0。
  • 升级到 v0.17.1:DSH 连续性插件的挂载方式改为宿主级用户 patch 层——在 $DSH_HOME/cordis.patch.yml 以 insert 列表追加 thinloop-continuity 条目即可对全部 profile 与 preset 生效,不再复制 agent preset;纠正消息的 来源标记改为 plugin。verify-install.mjs --platform dsh 会读取 home 级 与 profile 级 patch 文件核对挂载,未挂载保持 MANUAL。升级后重启 DSH 使 新组合生效,并移除旧的 standard-thinloop 之类 preset 拷贝,避免双重 纠正。范围见 v0.17.1。
  • 若从 v0.6.x 升级,另确认旧 scd-dev-loop 已消失。

更新后可以在 Thinloop 源码仓库运行只读检查器:

node scripts/verify-install.mjs

检查器从 config/platform-capabilities.json 读取九个平台的能力契约,遵循 CODEX_HOME、XDG_CONFIG_HOME、 PI_CODING_AGENT_DIR/skills、CODEWHALE_SKILLS_DIR、~/.reasonix/skills 与 DSH_HOME,只读取 Skill 链接、CodeWhale 的无网络 doctor --json 报告、Claude Code 插件清单及本地 插件内容; 不安装、修复、覆盖、重启或重新加载任何 Agent。状态和退出码见 验证指南。

手动调用示例

Codex:使用 $scd-discovery 把这个想法聊透并形成可验收 Issue。
Codex:从 0 到 1 时使用 $scd-discovery 形成批准的 `.scd/product/prd.md`;再使用 $scd-project 把批准的多交付产品契约分解为 Initiative、Delivery Issues 和依赖 DAG;不要运行实现 loop。
Codex:使用 $scd-execute 继续这个已批准的 Initiative,自动执行当前安全 READY 波次;最多并行两个。
Codex:使用 $scd-next 检查当前 Issue、PR 和 Initiative 状态,告诉我还有什么没做以及唯一建议下一步。
Codex:使用 $scd-reengineering 把这个开源项目换成 Go 重新实现,只保留批准的兼容能力,并按 READY 波次交付。
Codex:使用 $scd-quickdev 修复这个 Bug,验证后提 PR 并合并 main。
Codex:使用 $scd-evolve 复盘本次互动,只提出一个候选,不要先修改。
Claude Code Skill 链接:/scd-discovery
Claude Code 完整插件:/thinloop:scd-quickdev
OpenCode:使用 scd-quickdev skill 按 Issue 开发、验证并合并。
OpenCode:使用 scd-project skill 建立 multi-Issue 项目 DAG,只报告 READY/BLOCKED,不执行这些 Issues。
OpenCode:使用 scd-execute skill 继续已批准的 Initiative,按安全 READY 波次执行。
OpenCode:使用 scd-next skill 只读检查当前项目进度和下一步。
OpenCode:使用 scd-reengineering skill 评估并执行这个项目级重构,独立节点并行、硬依赖串行。
Pi:使用 /skill:scd-quickdev 按 Issue 开发、验证并合并。
Pi:使用 /skill:scd-project 从批准的 PRD 分解 multi-Issue 项目 DAG,不执行 Issues。
Pi:使用 /skill:scd-execute 继续已批准的 Initiative,串行合并并在每次交付后重算 DAG。
Pi:使用 /skill:scd-next 只读检查当前项目进度和下一步。
CodeWhale:使用 /skill scd-quickdev 按 Issue 开发、验证并合并。
CodeWhale:使用 /skill scd-project 从批准的 PRD 分解 multi-Issue 项目 DAG,不执行 Issues。
CodeWhale:使用 /skill scd-execute 继续已批准的 Initiative,按安全 READY 波次执行。
CodeWhale:使用 /skill scd-next 只读检查当前项目进度和下一步。
Reasonix:使用 /scd-quickdev 按 Issue 开发、验证并合并 main。
Reasonix:使用 /scd-project 从批准的 PRD 分解 multi-Issue 项目 DAG,不执行 Issues。
Reasonix:使用 /scd-execute 继续已批准的 Initiative,按安全 READY 波次执行。
Reasonix:使用 /scd-next 只读检查当前项目进度和下一步。
DeepSeek Harness:使用 $scd-quickdev 按 Issue 开发、验证并合并。
DeepSeek Harness:使用 $scd-project 从批准的 PRD 分解 multi-Issue 项目 DAG,不执行 Issues。
DeepSeek Harness:使用 $scd-execute 继续已批准的 Initiative,按安全 READY 波次执行。
DeepSeek Harness:使用 $scd-next 只读检查当前项目进度和下一步。
DeepSeek Harness:使用 $scd-reengineering 重新实现这个项目并保留选定兼容契约。
WorkBuddy 完整插件:/thinloop:scd-quickdev
ZCode:使用 $scd-quickdev 按 Issue 开发、验证并合并。
ZCode:使用 $scd-project 分解 multi-Issue 项目并验证依赖 DAG,不启动执行 loop。
ZCode:使用 $scd-execute 继续这个已批准的 Initiative,执行当前安全 READY Issues。
ZCode:使用 $scd-next 只读检查当前项目进度和下一步。
ZCode:使用 $scd-reengineering 重新实现这个项目并保留选定兼容契约。
ZCode:使用 $scd-evolve 诊断本次使用过的 Thinloop Skill。