
gstack Slate Host 集成全解逆向 OpenCode 分叉 Agent并落地数据驱动的宿主注册表【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack本文以 gstack 仓库的设计文档 SLATE_HOST.md 为主体完整继承其中关于 Slate 逆向分析二进制字符串证据、技能发现机制、无头 CLI、环境变量清单与会话运行器设计的核心内容并结合当前仓库的 hosts 注册表 与 worktree 测试隔离实现讲清为什么 gstack 把宿主抽象为数据驱动配置、Slate 又是如何成为一等公民宿主的。读完后你能掌握Slate 的目录/配置/环境变量事实边界、gstack 多宿主host架构的注册方式以及如何为任意 OpenCode 分叉 Agent 编写 E2E 隔离测试。1. Slate 是什么一个 OpenCode 的私有分叉设计文档对 Slate 的定位是Random Labs 出品的专有编码 Agent CLI其关键事实如下均出自 docs/designs/SLATE_HOST.md 的逆向研究结论安装方式npm i -g randomlabs/slate或 Homebrewtap 路径为anthropic/tap/slate——文档特别指出这一点值得注意Slate 的 brew 包挂在 Anthropic 的 tap 下而非 Random Labs 自己的。许可专有Proprietary。二进制为 85MB 的编译产物arm64/x64覆盖 darwin/linux/windows。npm 包randomlabs/slate1.0.25本体仅 8.8KB是一个薄启动器 平台可选依赖的结构。多模型动态选择 Claude Sonnet/Opus/Haiku 及其他模型。设计目标是swarm orchestration群体编排支持数小时级别的长会话。它是 OpenCode 分叉这一结论来自对 85MB Mach-O arm64 二进制的字符串分析证据包括二进制中直接含有字面量name: opencode所有OPENCODE_*环境变量与SLATE_*等价变量并存共享 OpenCode 的 tool/skill 架构、LSP 集成与终端管理但拥有自己的品牌、API 端点和配置路径。这个结论对集成的意义在于OpenCode 的约定大体适用但 Slate 在其上叠加了自己的路径与环境变量——所以 gstack 不能简单复用 OpenCode 宿主的配置而必须注册一个独立的 Slate 宿主。2. 技能发现机制四个目录族的扫描优先级文档从二进制的错误信息字符串中确认了 Slate 会扫描全部四个目录族每条错误消息都是二进制中的实证failed .slate directory scan for skills failed .claude directory scan for skills failed .agents directory scan for skills failed .opencode directory scan for skills发现路径按 Slate 官方文档给出的优先级排序优先级路径说明1.slate/skills/name/SKILL.md项目级最高优先级2~/.slate/skills/name/SKILL.md全局3.opencode/skills/、.agents/skills/兼容性回退4.claude/skills/Claude Code 兼容回退最低5slate.json中声明的自定义路径用户自定义配套的匹配规则与约定Glob 模式**/SKILL.md与{skill,skills}/**/SKILL.md命令commands目录结构相同只是位于commands/子目录下.slate/commands/、.claude/commands/、.agents/commands/、.opencode/commands/SKILL.md frontmatterYAML包含name与description两个字段官方文档未声明长度限制。这里藏着 gstack 集成的一个关键权衡。gstack 的 gstack 技能目录在 Claude Code 下位于.claude/skills/gstack符号链接指向仓库根。由于.claude/skills/是 Slate 的最低优先级兼容回退gstack 技能今天就能在 Slate 里工作无需任何改动——这正是文档What Already Works Today一节的核心结论安装了 gstack for Claude Code 的用户其技能在 Slate 中同样可用。但可用不等于可靠原因见第 7 节的SLATE_DISABLE_CLAUDE_CODE_SKILLS。3. 项目指令与配置CLAUDE.md 原样有效slate.json 不代管3.1 项目指令Slate 同时读取CLAUDE.md和AGENTS.md作为项目指令两个字面量均在二进制中确认。因此 gstack 项目现有的 CLAUDE.md 在 Slate 下无需任何修改即可生效。3.2 配置文件Slate 的配置文件是slate.json/slate.jsonc不是opencode.json。官方文档列出的配置项privacyboolean——关闭遥测/日志权限按工具粒度设置allow/ask/deny工具包括read、edit、bash、grep、webfetch、websearch、*模型槽位models.main、models.subagent、models.search、models.reasoningMCP 服务器本地或远程支持自定义 command 与 headers自定义命令/commands支持模板。文档在此给出了一条明确的集成边界gstack 的 setup 脚本不应该替用户创建slate.json——权限策略属于用户自己的决策工具链只负责投放技能文件。4. 无头 CLI 与 Stream-JSON会话运行器的输入侧Slate 提供了完整的无头headless模式这是 gstack 计划为其编写自动化 E2E 测试的前提--stream-json / --output-format stream-json JSONL 输出官方称与 Anthropic Claude Code SDK 兼容 --dangerously-skip-permissions 绕过所有权限检查CI/自动化场景 --input-format stream-json 程序化输入 -q 非交互模式 -w dir 指定工作区目录 --output-format text 纯文本输出默认需要如实说明的验证边界Stream-JSON 的与 Claude Code SDK 兼容是官方文档的声明在文档写作时尚未经实证。文档的判断是考虑到 OpenCode 血统很可能匹配 Claude Code 的 NDJSON 事件结构type: assistant、type: tool_result、type: result。因此文档留了一个显式的验证动作在有可用额度的环境下运行slate -q hello --stream-json抓取真实 JSONL 事件后再着手构建会话运行器解析器。4.1 会话运行器设计文档中的规划蓝图文档给出的会话运行器设计要点对应JSONL 格式验证完成后的实现约定Spawn 命令slate -q prompt --stream-json --dangerously-skip-permissions -w dir解析Claude Code SDK 兼容的 NDJSON假设需验证技能投放安装到测试夹具的.slate/skills/而不是.claude/skills/以证明高优先级路径生效认证使用SLATE_API_KEY或既有的~/.slate/凭据隔离用SLATE_TEST_HOME重定向 home 目录超时默认 300 秒与 Codex 运行器一致。文档还给出了运行器结果的结构定义export interface SlateResult { output: string; toolCalls: string[]; tokens: number; exitCode: number; durationMs: number; sessionId: string | null; rawLines: string[]; stderr: string; }5. 环境变量全景44 个 SLATE_* 变量与 3 个关键开关文档通过二进制字符串提取了完整的环境变量清单。以下为全量继承原始分类与注释5.1 Slate 专属变量变量作用SLATE_API_KEYAPI 密钥SLATE_AGENTAgent 选择SLATE_AUTO_SHARE自动共享设置SLATE_CLIENT客户端标识SLATE_CONFIG配置覆盖SLATE_CONFIG_CONTENT内联配置SLATE_CONFIG_DIR配置目录SLATE_DANGEROUSLY_SKIP_PERMISSIONS绕过权限检查SLATE_DIR数据目录覆盖SLATE_DISABLE_AUTOUPDATE禁用自动更新SLATE_DISABLE_CLAUDE_CODE完全禁用 Claude Code 集成SLATE_DISABLE_CLAUDE_CODE_PROMPT禁用 Claude Code prompt 加载SLATE_DISABLE_CLAUDE_CODE_SKILLS禁用.claude/skills/加载SLATE_DISABLE_DEFAULT_PLUGINS禁用默认插件SLATE_DISABLE_FILETIME_CHECK禁用文件时间检查SLATE_DISABLE_LSP_DOWNLOAD禁用 LSP 自动下载SLATE_DISABLE_MODELS_FETCH禁用模型配置拉取SLATE_DISABLE_PROJECT_CONFIG禁用项目级配置SLATE_DISABLE_PRUNE禁用会话清理SLATE_DISABLE_TERMINAL_TITLE禁用终端标题更新SLATE_ENABLE_EXA启用 Exa 搜索SLATE_ENABLE_EXPERIMENTAL_MODELS启用实验性模型SLATE_EXPERIMENTAL启用实验性功能SLATE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MSbash 超时覆盖SLATE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT禁用选中即复制SLATE_EXPERIMENTAL_DISABLE_FILEWATCHER禁用文件监视器SLATE_EXPERIMENTAL_EXAExa 搜索备用开关SLATE_EXPERIMENTAL_FILEWATCHER启用文件监视器SLATE_EXPERIMENTAL_ICON_DISCOVERY图标发现SLATE_EXPERIMENTAL_LSP_TOOLLSP 工具SLATE_EXPERIMENTAL_LSP_TYLSP 类型检查SLATE_EXPERIMENTAL_MARKDOWNMarkdown 模式SLATE_EXPERIMENTAL_OUTPUT_TOKEN_MAX输出 token 上限SLATE_EXPERIMENTAL_OXFMToxfmt 集成SLATE_EXPERIMENTAL_PLAN_MODEplan 模式SLATE_FAKE_VCS测试用假 VCSSLATE_GIT_BASH_PATHgit bash 路径WindowsSLATE_MODELS_URL模型配置 URLSLATE_PERMISSION权限覆盖SLATE_SERVER_PASSWORD/SLATE_SERVER_USERNAME服务器认证SLATE_TELEMETRY_DISABLED禁用遥测SLATE_TEST_HOME测试用 home 目录SLATE_TOKEN_DIRtoken 存储目录此外npm 启动器还支持SLATE_BIN_PATH跳过一切二进制发现逻辑直接运行指定路径的二进制——对多版本二进制测试很有用。5.2 OpenCode 遗留变量仍然有效OPENCODE_DISABLE_LSP_DOWNLOAD、OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER、OPENCODE_EXPERIMENTAL_FILEWATCHER、OPENCODE_EXPERIMENTAL_ICON_DISCOVERY、OPENCODE_EXPERIMENTAL_LSP_TY、OPENCODE_EXPERIMENTAL_OXFMT、OPENCODE_FAKE_VCS、OPENCODE_GIT_BASH_PATH、OPENCODE_LIBC、OPENCODE_TERMINAL。这组仍然有效的遗留变量是OpenCode 分叉结论的另一条旁证。5.3 对 gstack 集成至关重要的三个变量SLATE_DISABLE_CLAUDE_CODE_SKILLS——设置后.claude/skills/加载被禁用。这使得向.slate/skills/发布技能从优化项变成承重项load-bearing没有原生的.slate/投放一旦该标志被设置gstack 技能会整体消失。SLATE_TEST_HOME——E2E 测试利器可将 Slate 的 home 重定向到隔离临时目录与 Codex 测试使用临时 HOME 的做法同构。SLATE_DANGEROUSLY_SKIP_PERMISSIONS——无头 E2E 测试的必需项。由此推导出文档为 E2E 测试定下的验收标准测试必须设置SLATE_DISABLE_CLAUDE_CODE_SKILLS1以此证明技能确实走了.slate/高优先级路径而不是悄悄回退到.claude/。6. 模型、端点与 npm 包结构6.1 二进制中的模型引用anthropic/claude-sonnet-4.6 anthropic/claude-opus-4 anthropic/claude-haiku-4 anthropic/slate — Slate 自己的模型路由 openai/gpt-5.3-codex google/nano-banana randomlabs/fast-default-alpha6.2 二进制中的 API 端点api.randomlabs.ai主 API、api.randomlabs.ai/exaproxyExa 搜索代理、agent-worker-prod.randomlabs.workers.dev生产 worker、agent-worker-dev.randomlabs.workers.dev开发 worker、dashboard.randomlabs.ai控制台、docs.randomlabs.ai文档、randomlabs.ai/config.json远程配置。6.3 npm 包结构randomlabs/slate (8.8 kB, 薄启动器) ├── bin/slate — Node.js 启动器在 node_modules 中定位平台二进制 ├── bin/slate1 — Bun 启动器同逻辑用 import.meta.filename ├── postinstall.mjs — 校验平台二进制存在必要时建符号链接 └── package.json — 声明所有平台的 optionalDependencies 平台包各约 85MB ├── randomlabs/slate-darwin-arm64 / slate-darwin-x64 ├── randomlabs/slate-linux-arm64 / slate-linux-x64 ├── randomlabs/slate-linux-x64-musl / slate-linux-arm64-musl ├── randomlabs/slate-linux-x64-baseline / slate-linux-x64-baseline-musl ├── randomlabs/slate-darwin-x64-baseline └── randomlabs/slate-windows-x64 / slate-windows-x64-baseline7. 从被阻塞到已落地数据驱动的宿主注册表设计文档的落点是一个架构问题。文档当时的状态是Research complete,blocked on host config refactor外部评审Codex outside voice指出在 Claude、Codex、Factory 之后再加第 4 个宿主 Slate属于为一条路径别名做宿主爆炸——当时的架构存在硬编码宿主联合类型、transformFrontmatter()里的近重复 per-host 分支、EXTERNAL_HOST_CONFIG的重复配置模式、setup 脚本中的 per-host 函数等一整套需要为 Slate 复制一遍的模式。文档的结论是把宿主重构为数据驱动配置对象而非 if/else 分支后Slate 集成将变得平凡未来任何新 OpenCode 分叉/新 Agent 都是零成本。当前仓库的源码结构显示这次重构方向已经被执行Slate 已作为一等宿主注册宿主即数据hosts/define-host.ts 中的defineHost()工厂是所有宿主的唯一构造点。文件头注释直白地说明了动机——defineHost() factory — the single place the copy-paste across hosts/*.ts used to live。每个宿主不覆盖的字段都拿到通用外部宿主默认值路径从宿主名派生.{name}/skills/gstack、frontmatter 白名单只保留namedescription恰与第 2 节 Slate 的 frontmatter 约定一致、标准三组 pathRewrite~/.claude/skills/gstack→ 全局根、.claude/skills/gstack→ 本地技能根、.claude/skills→{hostSubdir}/skills、共享 runtimeRoot 资产清单、符号链接式安装。Slate 宿主定义极简hosts/slate.ts 全文只有 6 行有效代码——defineHost({ name: slate, displayName: Slate })其余全部继承默认值。这正是文档预言的集成变得平凡的实证对比 hosts/opencode.ts 需要覆盖 XDG 全局根与更宽的 runtimeRoot 资产集可见只有真实差异才需要覆盖项。注册表即唯一事实源hosts/index.ts 的ALL_HOST_CONFIGS目前登记了 10 个宿主claude、codex、factory、kiro、opencode、slate、cursor、openclaw、hermes、gbrainHost联合类型、宿主名数组、别名解析resolveHostArg全部从该数组派生——文件注释给出的加宿主流程只有两步create hosts/myhost.ts, import here, add to ALL_HOST_CONFIGS。安装入口打通setup脚本的--host参数校验列表中已包含slateclaude|codex|kiro|factory|opencode|cursor|slate|auto等见 setup 第 180 行附近的参数解析与第 233 行的取值校验即./setup --host slate是文档中setup 脚本自动探测 slate 二进制、把技能装到~/.slate/skills/这一规划项在命令行侧的落点。worktree 隔离测试的缺口已补齐文档Missing from the plan一节曾指出 lib/worktree.ts 只复制.agents/、不复制.slate/worktree 里的 E2E 测试拿不到 Slate 技能。当前实现lib/worktree.ts已改为遍历所有外部宿主的hostSubdir并逐一复制进 worktree且复制逻辑会跳过符号链接例如.claude/skills/gstack指向仓库根的链接——.slate/是否被复制完全由宿主注册表驱动无需为 Slate 写任何特判。文档生成链路已认得 Slatescripts/gen-skill-docs.ts 的注释中把 slate 与其他宿主并列为静态抑制 GBrain 解析器的宿主之一说明按宿主生成 SKILL.md 文档的管线已把 Slate 纳入统一处理。文档还提到旧bin/gstack-platform-detect已被删除宿主探测改由hosts/注册表承载并经 scripts/host-config-export.ts 导出给 shell 脚本——当前仓库的hosts/目录结构印证了这一说法hosts/下有 claude、codex、cursor、factory、gbrain、hermes、kiro、openclaw、opencode、slate 各自的.ts定义。值得说明的时序关系设计文档记录的是 2026-04-02 的调研时点与分支garrytan/slate-agent-support的状态blocked on host config refactor当前仓库快照中注册表架构与 Slate 宿主均已就位。两相对照恰好完整展示了gstack 如何用一个工厂 注册表把第 10 个宿主压缩成 6 行代码的演进路径。8. 一等支持带来的增益文档结论全量继承综合全篇一等公民支持相对今天已可用的增量文档归纳为四条可靠性——.slate/skills/是 Slate 的最高优先级路径且不受SLATE_DISABLE_CLAUDE_CODE_SKILLS影响优化的 frontmatter——剥离 Claude 专属字段allowed-tools、hooks、version只保留 Slate 实际使用的name与description这一点已被defineHost()的默认 frontmatter 策略实现setup 脚本——自动探测slate二进制把技能安装到~/.slate/skills/E2E 测试——验证技能在被 Slate 直接调用时确实工作且必须按第 5.3 节的标准设置SLATE_DISABLE_CLAUDE_CODE_SKILLS1排除回退路径的干扰。9. 关键事实与适用前提小结本文所有关于 Slate 的事实目录族、优先级、glob 模式、环境变量、模型引用、端点、npm 结构均来自 docs/designs/SLATE_HOST.md 记录的二进制字符串分析与官方文档转述其中 Stream-JSON 与 Claude Code SDK 的兼容性在文档写作时尚未实证引用时应保留该限定仓库侧的实现事实以当前快照为准Slate 宿主位于 hosts/slate.ts注册于 hosts/index.tsworktree 复制逻辑见 lib/worktree.ts安装入口见 setup 的--host参数若你要为任意新的 OpenCode 分叉 Agent 接入 gstack操作路径即 hosts/index.ts 顶部注释给出的三步新建hosts/name.ts、在ALL_HOST_CONFIGS注册、让 setup 的宿主校验列表接纳新名字——frontmatter 白名单、路径重写、runtimeRoot 资产与 worktree 复制都会从注册表自动生效。【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考