NemoClaw 维护者状态文件(state.json)Schema 全解析:维护循环的持久化状态设计与实践
NemoClaw 维护者状态文件state.jsonSchema 全解析维护循环的持久化状态设计与实践【免费下载链接】NemoClawRun agents like Hermes, LangChain Deep Agents, and OpenClaw more securely inside NVIDIA OpenShell with managed inference项目地址: https://gitcode.com/gh_mirrors/ne/NemoClaw导读本文围绕 NemoClaw 仓库中维护者自动化 Skill 的核心持久化机制——.nemoclaw-maintainer/state.json状态文件——展开完整解读其 JSON Schema 的每个字段、取值约束与写入规范并结合 state.ts、triage.ts、hotspots.ts 等源码说明该文件如何在 triage、merge-gate、hotspot 检测与每日维护循环之间传递状态、排除项与历史记录。读完本文你将掌握这份状态文件的完整结构、每个字段的语义与边界条件以及如何在日常维护流程中正确读写它。状态文件的定位维护循环的“单一事实来源”NemoClaw 的维护者 Skill如nemoclaw-maintainer-day以一个可重复执行的维护循环为核心每天对面向发布的 PR 与 Issue 执行一次“检查版本进度 → 选择一个动作 → 执行 → 汇报进度”的完整流程见 SKILL.md。为了让循环在多次运行之间保持连续性——知道哪些 PR 被永久排除、上一次 triage 队列长什么样、当前正在处理什么工作——维护者工具链需要一个跨进程、跨运行持久化的状态文件。STATE-SCHEMA.md即 STATE-SCHEMA.md正是这份状态文件的事实性规格说明。其核心约定有三条存储位置状态存放在.nemoclaw-maintainer/state.json相对仓库根目录。Git 排除通过.git/info/exclude将.nemoclaw-maintainer/目录排除出版本控制避免本地维护状态污染提交历史。这一点在 state.ts 的ensureExclude()中得到落实——脚本会在init时检查.git/info/exclude是否已包含.nemoclaw-maintainer/条目没有则追加。自描述版本文件带有version字段便于未来 Schema 演进时进行迁移判断。完整 Schema 示例STATE-SCHEMA.md给出了状态文件的完整骨架这是所有字段的权威参考。完整 JSON 如下含默认值{ version: 1, repo: NVIDIA/NemoClaw, updatedAt: null, priorities: [ reduce_pr_backlog, reduce_security_risk, increase_test_coverage, cool_hot_files ], gates: { greenCi: true, noConflicts: true, noMajorCodeRabbit: true, testsForTouchedRiskyCode: true, autoApprove: true, autoPushSmallFixes: true, autoMerge: false }, excluded: { prs: {}, issues: {} }, queue: { generatedAt: null, topAction: null, items: [], nearMisses: [] }, hotspots: { generatedAt: null, files: [] }, activeWork: { kind: null, target: null, branch: null, goal: null, startedAt: null }, history: [] }这份示例与 state.ts 中defaultState()函数生成的默认状态完全一致说明文档与实现保持了同步你可以把它当作“初始化后的初始状态”。顶层字段逐一解读version与repoversionSchema 版本号当前为1。它标识状态文件的格式版本供读取方做兼容性判断。repo目标仓库标识默认NVIDIA/NemoClaw。triage 等脚本会用它拼装gh查询参数如gh api repos/${repo}/pulls详见 triage.ts。updatedAt最近一次状态写入的 ISO 时间戳。每次saveState()都会把它刷新为new Date().toISOString()见 state.ts用于判断状态的新鲜度。初始值为null表示尚未写入过。priorities维护工作的优先级数组默认包含四个枚举值体现了维护者循环的关注重心优先级键含义reduce_pr_backlog减少 PR 积压reduce_security_risk降低安全风险increase_test_coverage提升测试覆盖cool_hot_files为热点文件“降温”降低冲突与改动集中的文件热度从源码结构看这一数组主要作为维护者决策的参考优先级列表实际的动作选择则由 SKILL.md 中“Step 2: Pick One Action”的有序决策链approve → salvage → security → test gap → conflicts → sequencing驱动。gates合并闸门开关gates对象用一组布尔值描述维护循环的自主行为边界这是整个状态文件中约束性最强的部分字段默认值语义greenCitrue要求 CI 全绿noConflictstrue要求无合并冲突noMajorCodeRabbittrue要求无未解决的 major/critical CodeRabbit 问题testsForTouchedRiskyCodetrue要求触及的“风险代码”有测试覆盖autoApprovetrue允许自动批准当所有闸门通过时autoPushSmallFixestrue允许在贡献者分支上推送小修复autoMergefalse禁止自动合并其中两条需要特别注意gates.autoMerge必须保持为false。维护循环可以批准approve一个 PR但绝不能合并merge它。这与 SKILL.md 的“Never merge”约束以及 MERGE-GATE.md 中“Report that the PR can proceed to a separate merge decision. Never merge in this workflow”的说明完全一致——合并决定必须交给用户。gates.autoPushSmallFixes是“小修复推送到贡献者分支”的授权开关。SKILL.md 还补充了其前置条件必须在 CI 与定时自动化评审针对“同一个未变的最新 PR commit”稳定结束之后才允许推送。excluded排除清单excluded对象包含prs与issues两个映射用于记录被 triage 永久跳过直到用户手动移除的条目键必须是数字字符串number string如1234而不是数字。值必须是{ reason: ..., excludedAt: ISO }形式excludedAt为 ISO 时间戳。triage 在构建队列时会读取该清单并过滤const excludedPrs new Set(Object.keys(state?.excluded?.prs ?? {}).map(Number))随后classified.filter((item) !excludedPrs.has(item.number))见 triage.ts。注意excluded.issues字段在 state.ts 的类型定义中存在但exclude子命令目前只写入prs源码注释明确说明“triage only processes PRs”。queue最近一次 triage 输出queue缓存最近一次 triage 的结果用于跨运行对比避免每次循环都重复完整分析字段语义generatedAttriage 输出的生成时间ISOtopAction队列中排名第一的动作项items主队列条目merge-ready / review-readynearMisses“差一点就绪”的条目有明确的小修复路径该对象由state.ts set-queue子命令从 stdin 读取 triage 的 JSON 输出并写入见 state.tsitems取triageOutput.queuenearMisses取triageOutput.nearMissestopAction取queue[0]generatedAt优先使用 triage 输出自带的时间戳。triage 输出的完整字段含rank、bucket、score、nextAction、riskyFiles等可参见 triage.ts 的QueueItem接口。hotspots热点文件缓存hotspots缓存最近一次热点检测的结果用于识别最易引发合并冲突的文件字段语义generatedAt检测结果生成时间ISOfiles热点文件条目列表该对象由state.ts set-hotspots子命令写入同样从 stdin 读取热点检测脚本的 JSON 输出见 state.ts。热点检测算法见 hotspots.ts它综合30 天origin/main上的 git churn与开放 PR 的文件重叠数按mainTouchCount openPrCount * 3 (risky ? (mainTouchCount openPrCount) * 2 : 0)打分排序其中 PR 重叠权重 3 倍作为冲突代理指标、风险文件额外 2 倍加成最终输出前 25 个热点文件。检测到的热点会路由到 HOTSPOTS.md 对应的工作流处理。activeWork当前进行中的工作activeWork记录维护者“正在处理但尚未完成”的单项工作供中断恢复与交接使用字段语义kind工作类型如 approve、salvage、test 等target目标条目如 PR 编号branch涉及的分支goal目标描述startedAt开始时间ISO初始状态为全null。从源码结构看该字段主要服务于跨循环的上下文恢复——SKILL.md 中“Readstate.jsonto avoid repeated context”的说明即与此对应。history操作历史history是一个操作审计数组记录了每次循环完成的关键动作。每个条目的格式为{ at: ISO, item: PR#1234, action: approved|salvaged|blocked|sequenced, note: one line }约束条件at为 ISO 时间戳item标识目标条目约定为PR#1234形式action是四个枚举之一approved批准、salvaged修复抢救、blocked报告阻塞、sequenced排队序列化note为一行简要说明最多保留 50 条超出时删除最旧的条目。该上限在 state.ts 的cmdHistory()中有硬性实现if (state.history.length 50) state.history state.history.slice(-50)。历史记录的典型写入方式来自 SKILL.md 的 Step 4node --no-warnings .agents/skills/nemoclaw-maintainer-day/scripts/state.ts history action item note例如node --no-warnings .agents/skills/nemoclaw-maintainer-day/scripts/state.ts history approved PR#1234 all gates passed, approved状态文件读写工具state.ts 子命令速查仓库提供了配套的 TypeScript 状态管理脚本 state.ts所有子命令均以node --no-warnings .agents/skills/nemoclaw-maintainer-day/scripts/state.ts subcommand [args]形式调用。支持七个子命令子命令参数作用init无创建.nemoclaw-maintainer/state.json若不存在并确保.git/info/exclude包含.nemoclaw-maintainer/show无打印当前完整状态JSONexcludenumber reason将 PR 加入永久排除清单记录原因与排除时间unexcludenumber从排除清单移除条目同时清理prs与issueshistoryaction item note追加一条历史记录自动控制 50 条上限set-queuestdin 传 JSON从 triage 输出更新queueitems/nearMisses/topAction/generatedAtset-hotspotsstdin 传 JSON从热点检测输出更新hotspotsfiles/generatedAt实现细节值得注意set-queue与set-hotspots通过 stdin 读取 JSONreadFileSync(0, utf-8)解析失败会向 stderr 报错并以非零码退出见 state.ts因此用法是管道形式node --no-warnings .agents/skills/nemoclaw-maintainer-day/scripts/triage.ts | \ node --no-warnings .agents/skills/nemoclaw-maintainer-day/scripts/state.ts set-queue每次写入都会自动刷新updatedAt为当前 ISO 时间。exclude的reason参数支持空格args.slice(1).join( )因此“原因”中可以包含多词描述。状态文件在维护循环中的完整流转结合 SKILL.md 的流程状态文件贯穿维护循环的各个阶段Step 1 检查版本进度运行version-target.ts与version-progress.ts前者读取本地最新 semver tag 并 bump patch 得到目标版本同时扫描带旧版本标签的开放 PR/Issue 作为“stragglers”见 version-target.ts。Step 2 选择一个动作triage 依据excluded过滤已排除条目生成queue与nearMisses随后通过set-queue写入状态文件。Step 3 执行根据动作类型走 MERGE-GATE.md批准、SALVAGE-PR.md抢救等分工作流。批准前必须运行受信任的闸门检查器run-trusted-check-gates.sh——该检查器本身也被shared.ts的RISKY_PATTERNS列为风险文件改动它需要测试覆盖见 shared.ts。Step 4 汇报进度重新运行version-progress.ts展示更新并用state.ts history追加本次动作记录。若目标版本全部完成可建议进入nemoclaw-maintainer-eveningSkill。状态文件还服务于/loop集成场景/loop 10m /nemoclaw-maintainer-day会周期性触发维护循环此时“Readstate.jsonto avoid repeated context”成为避免重复上下文的关键手段——queue与hotspots的跨运行缓存正是为此设计。实践要点与边界条件永远不要打开autoMerge循环的最高权限是 approve合并是独立决策必须由用户执行。排除项是持久化的“硬过滤”被排除的 PR/Issue 会被 triage 无条件跳过只有用户主动unexclude才会重新进入队列。因此exclude时应提供清晰的原因。history 是审计线索每个动作都应留痕且保持 50 条以内的滚动窗口旧条目优先删除。queue与hotspots是“最近一次”快照它们只反映最近一次 triage/hotspot 运行跨运行对比时要注意generatedAt的时间差异避免用旧快照做新决策。风险代码的测试闸门testsForTouchedRiskyCode与shared.ts中的风险模式安装脚本、onboard 逻辑、blueprint、policy/credential/inference 相关路径等联动——触及风险文件的 PR 必须先有测试这是批准的前置条件之一。结语.nemoclaw-maintainer/state.json虽是一个小文件却是 NemoClaw 维护者自动化体系的地基它以gates划定自主边界以excluded表达人为干预以queue/hotspots缓存分析结果以activeWork支持中断恢复以history留下审计轨迹。理解这份 Schema就等于理解了维护循环“如何记住自己做过什么、正在做什么、以及被允许做什么”。在实现层面STATE-SCHEMA.md 与 state.ts 一一对应是阅读维护者工具链代码时最值得首先掌握的入口。【免费下载链接】NemoClawRun agents like Hermes, LangChain Deep Agents, and OpenClaw more securely inside NVIDIA OpenShell with managed inference项目地址: https://gitcode.com/gh_mirrors/ne/NemoClaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

洁净室建造中强制性条文的核心要点与工程落地实践

洁净室建造中强制性条文的核心要点与工程落地实践

简介:聚焦洁净室建造标准与规范中强制性条文的专业解析PPT,面向洁净室设计、施工、验收及医药电子等行业相关工程技术人员。内容系统梳理了我国洁净室建造的主要标准规范,如《洁净厂房设计规范》GB50073-2001、《洁净室施工及验收规范》JGJ71…

2026/9/20 14:03:40 阅读更多 →
Tree-sitter 语法发布指南:从版本号到 crates.io / npm / PyPI 的全流程实践

Tree-sitter 语法发布指南:从版本号到 crates.io / npm / PyPI 的全流程实践

开发工具 【免费下载链接】tree-sitter An incremental parsing system for programming tools 项目地址: https://gitcode.com/gh_mirrors/tr/tree-sitter 点击查看 免费下载 本文基于仓库文档 docs/src/creating-parsers/6-publishing.md 展开,面向已…

2026/9/20 14:03:40 阅读更多 →
BrewUI:给Homebrew套上图形化界面,让包管理更简单

BrewUI:给Homebrew套上图形化界面,让包管理更简单

1. 项目概述:BrewUI 到底解决什么问题?1.1 终端管理 Homebrew 的痛点如果你用过 macOS 或者长期折腾 Linux,大概率离不开 Homebrew。它是目前 macOS 上最主流的包管理器,Linux 下也有 Linuxbrew 的分支玩法。但 Homebrew 的本质是…

2026/9/20 14:02:40 阅读更多 →

最新新闻

MicroPython pyboard 入门指南:硬件布局、供电方式与首次上电

MicroPython pyboard 入门指南:硬件布局、供电方式与首次上电

嵌入式语言运行时编程语言解释器编译器物联网系统编程 【免费下载链接】micropython MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems 项目地址: https://gitcode.com/gh_mirrors/mi/micropython 点击查看…

2026/9/20 18:08:11 阅读更多 →
Flow 中利用 match 表达式一次初始化多个变量:以 applyTheme 为主题的实战指南

Flow 中利用 match 表达式一次初始化多个变量:以 applyTheme 为主题的实战指南

开发工具静态分析代码质量 【免费下载链接】flow Adds static typing to JavaScript to improve developer productivity and code quality. 项目地址: https://gitcode.com/gh_mirrors/flow30/flow 点击查看 免费下载 本指南以 Flow(项目根目录&#x…

2026/9/20 18:08:11 阅读更多 →
SpringBoot智能仓储系统实战:从毕设到工业级落地

SpringBoot智能仓储系统实战:从毕设到工业级落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:08:11 阅读更多 →
微信Windows旧版本回退指南:历史安装包获取、兼容性验证与数据迁移

微信Windows旧版本回退指南:历史安装包获取、兼容性验证与数据迁移

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:08:11 阅读更多 →
安桥TX-NR636说明书实战:接线、AccuEQ校准与常见故障排查

安桥TX-NR636说明书实战:接线、AccuEQ校准与常见故障排查

简介:这是一份安桥TX-NR636功放的中文高级使用说明书,面向拥有该型号功放、希望充分挖掘其功能的中高级用户及家庭影院爱好者。内容涵盖AM/FM自动与手动调台、RDS电台信息显示、USB存储设备音乐播放、网络收音机(TuneIn)与DLNA串流…

2026/9/20 18:08:11 阅读更多 →
Flow 模式匹配实战:用 Tuple Pattern 同时匹配多个参数(tooltipPosition 示例剖析)

Flow 模式匹配实战:用 Tuple Pattern 同时匹配多个参数(tooltipPosition 示例剖析)

开发工具静态分析代码质量 【免费下载链接】flow Adds static typing to JavaScript to improve developer productivity and code quality. 项目地址: https://gitcode.com/gh_mirrors/flow30/flow 点击查看 免费下载 导读 本文以 Flow 官方评估套件(…

2026/9/20 18:07:11 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →