{"_id":"@deltafleet/codex-goalkeeper","_rev":"4-a8c65d513a5bdfcb047c1668bff4ff21","name":"@deltafleet/codex-goalkeeper","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@deltafleet/codex-goalkeeper","version":"0.1.0","keywords":["codex","codex-skill","ai-agents","context","compaction","checkpoint","goal"],"license":"MIT","_id":"@deltafleet/codex-goalkeeper@0.1.0","maintainers":[{"name":"deltafleet","email":"fazomo@deltafleet.io"}],"homepage":"https://github.com/deltafleet/codex-goalkeeper#readme","bugs":{"url":"https://github.com/deltafleet/codex-goalkeeper/issues"},"bin":{"codex-goalkeeper-init":"src/scripts/goalkeeper-init.mjs","codex-goalkeeper-doctor":"src/scripts/goalkeeper-doctor.mjs","codex-goalkeeper-turn-start":"src/scripts/goalkeeper-turn-start.mjs","codex-goalkeeper-append-event":"src/scripts/goalkeeper-append-event.mjs","codex-goalkeeper-update-checkpoint":"src/scripts/goalkeeper-update-checkpoint.mjs"},"dist":{"shasum":"1224b910bed4b854fed34f9cfb9815ac9c12cfa9","tarball":"https://registry.npmjs.org/@deltafleet/codex-goalkeeper/-/codex-goalkeeper-0.1.0.tgz","fileCount":31,"integrity":"sha512-bx6jVXlY2tTX6B7aYGOhANUoofzpkQ5A9Pn5inXq0kz28T2UBBDTIc+T6qkEKCzrW8tOzN8KLQiJFExlaX2mFw==","signatures":[{"sig":"MEQCIBbfBwu5OX2Q37dm3561fq6nDexB4HUB6MYx44pEeWTTAiAFg5E7MMjCDMVpZbPnumP00CCzVYEvA8cONHvpaUJ1rQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115607},"type":"module","engines":{"node":">=18"},"gitHead":"9df30c535972f1d9f68efe45e356c48e287c0b7a","scripts":{"test":"node src/scripts/test-goalkeeper-update-checkpoint.mjs","validate":"npm run check:scripts && npm test && npm run validate:examples && npm run validate:skill","check:scripts":"find src/scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check","validate:skill":"npx skills add . --list","validate:examples":"find examples -name '*.jsonl' -print0 | xargs -0 -n1 jq -c . >/dev/null"},"_npmUser":{"name":"deltafleet","email":"fazomo@deltafleet.io"},"deprecated":"Superseded by 0.1.1 with corrected skill payload packaging.","repository":{"url":"git+https://github.com/deltafleet/codex-goalkeeper.git","type":"git"},"_npmVersion":"11.12.1","description":"A small Codex skill for keeping long-running goals oriented across compaction, resumes, and handoffs.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codex-goalkeeper_0.1.0_1779086572894_0.9078968513609547","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@deltafleet/codex-goalkeeper","version":"0.1.1","keywords":["codex","codex-skill","ai-agents","context","compaction","checkpoint","goal"],"license":"MIT","_id":"@deltafleet/codex-goalkeeper@0.1.1","maintainers":[{"name":"deltafleet","email":"fazomo@deltafleet.io"}],"homepage":"https://github.com/deltafleet/codex-goalkeeper#readme","bugs":{"url":"https://github.com/deltafleet/codex-goalkeeper/issues"},"bin":{"codex-goalkeeper-init":"src/codex-goalkeeper/scripts/goalkeeper-init.mjs","codex-goalkeeper-doctor":"src/codex-goalkeeper/scripts/goalkeeper-doctor.mjs","codex-goalkeeper-turn-start":"src/codex-goalkeeper/scripts/goalkeeper-turn-start.mjs","codex-goalkeeper-append-event":"src/codex-goalkeeper/scripts/goalkeeper-append-event.mjs","codex-goalkeeper-update-checkpoint":"src/codex-goalkeeper/scripts/goalkeeper-update-checkpoint.mjs"},"dist":{"shasum":"d24298f73fee2204344998d5bf780f10db3da88c","tarball":"https://registry.npmjs.org/@deltafleet/codex-goalkeeper/-/codex-goalkeeper-0.1.1.tgz","fileCount":30,"integrity":"sha512-zZysWJbc0wKgZ98qxUt2Mw1RW2cUvub6zh80I9vXWO8AUZdmHnQTPgU5WFKpmiytv+i1bjTdD2NEZeGXYiJVhQ==","signatures":[{"sig":"MEUCIDHKnOafhd/HAi6syrcxXPbm9aV+4ei0UYAMeBGQGRimAiEAgtEYUR9oiNTwN9Qxbt4dzUDt15RycKNVtL+vXRifaJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111852},"type":"module","engines":{"node":">=18"},"gitHead":"bcfbe05ccb735ebbd28b1a5ac6df9fd891608e2e","scripts":{"test":"node tests/test-goalkeeper-update-checkpoint.mjs","validate":"npm run check:scripts && npm test && npm run validate:examples && npm run validate:skill","check:scripts":"find src/codex-goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check","validate:skill":"npx skills add . --list","validate:examples":"find examples -name '*.jsonl' -print0 | xargs -0 -n1 jq -c . >/dev/null"},"_npmUser":{"name":"deltafleet","email":"fazomo@deltafleet.io"},"repository":{"url":"git+https://github.com/deltafleet/codex-goalkeeper.git","type":"git"},"_npmVersion":"11.12.1","description":"A small Codex skill for keeping long-running goals oriented across compaction, resumes, and handoffs.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codex-goalkeeper_0.1.1_1779089017251_0.07559257466583058","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @deltafleet/goalkeeper. Use npx skills add deltafleet/goalkeeper or npm package @deltafleet/goalkeeper."}},"time":{"created":"2026-05-18T06:42:52.811Z","modified":"2026-05-18T07:59:58.533Z","0.1.0":"2026-05-18T06:42:53.046Z","0.1.1":"2026-05-18T07:23:37.402Z"},"bugs":{"url":"https://github.com/deltafleet/codex-goalkeeper/issues"},"license":"MIT","homepage":"https://github.com/deltafleet/codex-goalkeeper#readme","keywords":["codex","codex-skill","ai-agents","context","compaction","checkpoint","goal"],"repository":{"url":"git+https://github.com/deltafleet/codex-goalkeeper.git","type":"git"},"description":"A small Codex skill for keeping long-running goals oriented across compaction, resumes, and handoffs.","maintainers":[{"name":"deltafleet","email":"fazomo@deltafleet.io"}],"readme":"# Codex Goalkeeper\n\n长时间 Codex 任务通常不是突然失败的。\n\n它们会慢慢偏离方向。\n\nAgent 仍然会显得很自信。测试仍然会运行。计划看起来也仍然合理。但经过多次 compaction、handoff 和 resume 之后，最重要的东西可能会悄悄变模糊：\n\n> 我们为什么要按这个方向做？\n\nCodex Goalkeeper 是一个很小的 skill，用来帮助 Codex 在长时间 `/goal` 工作中跨越 compaction、resume 和 handoff 仍然保持方向。\n\n它不添加隐藏的记忆引擎。它给 agent 一个可持续的工作习惯：\n\n- 保持一个简短 checkpoint\n- 保持一个更丰富的 context pack\n- 把决策和验证写入 event log\n- 在容易发生 drift 的边界之后，继续前先读 checkpoint\n\n无聊的文件。更好的连续性。\n\n[English](README.md) | [한국어](README.ko.md) | [日本語](README.ja.md)\n\n## 安装\n\n```bash\nnpx skills add deltafleet/codex-goalkeeper\n```\n\n要求: Node.js 18+ 和 `npx`。在长 goal workflow 中，Codex 会使用 skill 内置的 Node helper scripts。\n\n然后在长任务里告诉 Codex：\n\n> Use codex-goalkeeper for this `/goal`. Keep the goal, constraints, decisions, verification state, failed attempts, and next action recoverable across compaction.\n\n正常使用到这里就够了。用户不需要手动执行 Goalkeeper 的 helper scripts。Codex 会把它们作为 skill workflow 的一部分来运行。\n\n## 问题\n\n对于短任务，compaction 通常只是细节。Agent 大多能恢复。\n\n但长 goal 不一样。\n\n想象一个真实会话：\n\n1. 你让 Codex 做 release hardening。\n2. Codex 找到一个脆弱的 edge case，并选择保守路线。\n3. 你明确拒绝了一个看起来诱人但危险的 shortcut。\n4. 两次实现尝试因为微妙原因失败。\n5. 一个测试终于证明了正确路线。\n6. 上下文被 compact。\n7. 后来 agent 带着整洁摘要回来，但当初为什么这个路线正确的压力已经变淡了。\n\ndrift 就从这里开始。\n\n失败原因不是“模型忘掉了一切”。这更难处理：它记得足够继续工作，但不记得足够沿着同一个方向继续。\n\n你会在这些情况里看到它：\n\n- 重新打开用户已经拒绝的方案\n- 因为失败原因在摘要里消失，重复同样的尝试\n- 把未验证的假设当作确定事实\n- 在长 handoff 后丢失准确的 next action\n- 还记得 goal，但丢掉了操作约束\n- 解释很流畅，但已经不匹配实际工作流\n\nGoalkeeper 解决的是这个空隙：goal 还在，但会话的方向感已经变弱。\n\n## Codex 会做什么\n\nskill 激活后，Codex 会在项目内维护一个连续性文件夹：\n\n```text\n.goalkeeper/\n  active-session\n  sessions/\n    <goal-session-id>/\n      checkpoint.md\n      context-pack.md\n      events.jsonl\n```\n\n每个文件的职责不同：\n\n- `checkpoint.md`: 恢复时首先读取的简短状态\n- `context-pack.md`: 对 checkpoint 来说太长、但 compaction 后仍应保留的推理链\n- `events.jsonl`: 决策、失败尝试、命令证据、验证、风险和 handoff 记录\n\nCodex 的 active goal 说明目的地。Goalkeeper 保存为什么这条路线仍然正确。\n\n## 工作原理\n\nGoalkeeper 把长时间 agent 工作变成一个简单循环：\n\n```text\n长 /goal 开始\n  -> Codex 创建或恢复 Goalkeeper session\n  -> 记录重要约束和决策\n  -> 保留失败尝试，避免重复犯错\n  -> 在信心变化时记录验证证据\n  -> 在有意义的边界刷新 checkpoint.md\n  -> context-pack.md 保存更深的推理链\n  -> resume、handoff 或怀疑 compaction 后，Codex 先读 checkpoint.md\n  -> 如果 checkpoint 太薄，Codex 再读 context-pack.md\n  -> 如果需要精确证据，Codex 检查 events.jsonl 或 source files\n```\n\n这不是保存对话 transcript。它保存的是工作状态。\n\n## 为什么故意做得很小\n\n把这个项目做大很容易：\n\n- daemon\n- database\n- session rewriter\n- private runtime hook\n- vector memory layer\n- full transcript engine\n\nGoalkeeper 故意避开这些。\n\n它使用文件，因为文件可见、可审查、可移动，并且 compaction 后 agent 容易重新读取。目标不是让 Codex 全知全能。目标是让下一轮从正确状态开始。\n\n## 它不是什么\n\n- 不是 Codex plugin。\n- 不是 MCP server。\n- 不是 database。\n- 不是完整对话 transcript 仓库。\n- 不是 private Codex runtime hook。\n- 不保证完美记忆。\n- 不会降低 compaction 频率。\n\nGoalkeeper 改善连续性。它不假装消除上下文限制。\n\n## 改善什么\n\n使用 Goalkeeper 后，恢复的会话更有机会找回：\n\n- 用户的 non-negotiable constraints\n- 当前实现方向\n- 被拒绝的替代方案为什么仍然应被拒绝\n- 改变信心的测试或命令\n- 真实的 next action\n- 不应该被轻描淡写带过的 unresolved risks\n\n长时间 agent 工作里很多无聊但昂贵的失败，只靠这些就能减少。\n\n## Repository Layout\n\n```text\nsrc/codex-goalkeeper/       # installable skill payload\n  SKILL.md\n  agents/openai.yaml\n  scripts/\n  templates/\n  references/\ntests/                      # maintainer tests\nexamples/goalkeeper-session # static example state\ndocs/                       # roadmap and release policy\n```\n\n## Maintainer Validation\n\nFor repository maintainers:\n\n```bash\nnpm run validate\n```\n\nEquivalent manual checks:\n\n```bash\nfind src/codex-goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check\nnode tests/test-goalkeeper-update-checkpoint.mjs\nnpx skills add . --list\n```\n\n## Versioning\n\nGoalkeeper uses SemVer.\n\n- Patch: docs, examples, tests, and compatible bug fixes\n- Minor: new compatible helpers or workflow fields\n- Major: breaking changes to checkpoint, event, or script contracts\n\nSee [docs/RELEASE.md](docs/RELEASE.md) for release steps.\n\n## Contributing\n\nIssues and PRs are welcome. The project bias is strict:\n\n- keep the core workflow small\n- do not add hidden runtime dependencies\n- do not promise perfect recovery\n- prefer project-local files over global state\n- prove changes with the validation commands above\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","readmeFilename":"README.zh-CN.md"}