@deltafleet/codex-goalkeeper 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/CODE_OF_CONDUCT.md +13 -0
- package/CONTRIBUTING.md +57 -0
- package/LICENSE +22 -0
- package/README.ja.md +197 -0
- package/README.ko.md +197 -0
- package/README.md +223 -0
- package/README.zh-CN.md +197 -0
- package/SECURITY.md +32 -0
- package/SKILL.md +164 -0
- package/agents/openai.yaml +5 -0
- package/docs/RELEASE.md +77 -0
- package/docs/ROADMAP.md +77 -0
- package/examples/goalkeeper-session/checkpoint.md +58 -0
- package/examples/goalkeeper-session/context-pack.md +39 -0
- package/examples/goalkeeper-session/events.jsonl +5 -0
- package/package.json +60 -0
- package/src/references/event-schema.md +63 -0
- package/src/references/guardrail.md +62 -0
- package/src/references/workflow.md +187 -0
- package/src/scripts/goalkeeper-append-event.mjs +263 -0
- package/src/scripts/goalkeeper-doctor.mjs +476 -0
- package/src/scripts/goalkeeper-init.mjs +271 -0
- package/src/scripts/goalkeeper-turn-start.mjs +166 -0
- package/src/scripts/goalkeeper-update-checkpoint.mjs +339 -0
- package/src/scripts/test-goalkeeper-update-checkpoint.mjs +236 -0
- package/src/templates/AGENTS.goalkeeper.md +48 -0
- package/src/templates/active-session +1 -0
- package/src/templates/checkpoint.md +54 -0
- package/src/templates/context-pack.md +45 -0
- package/src/templates/event.jsonl +3 -0
package/README.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Codex Goalkeeper
|
|
2
|
+
|
|
3
|
+
Context compaction does not kill long Codex runs. Direction drift does.
|
|
4
|
+
|
|
5
|
+
Codex Goalkeeper is a tiny skill that helps Codex keep its bearings during long `/goal` sessions, repeated compactions, handoffs, and multi-day implementation work.
|
|
6
|
+
|
|
7
|
+
It does not try to be a hidden memory engine. It gives the agent a simple ritual:
|
|
8
|
+
|
|
9
|
+
1. Write down the current mission.
|
|
10
|
+
2. Preserve the reasoning that should survive compaction.
|
|
11
|
+
3. Record decisions, failures, and verification as evidence.
|
|
12
|
+
4. Read the checkpoint first before continuing.
|
|
13
|
+
|
|
14
|
+
That is it. Boring files. Better continuity.
|
|
15
|
+
|
|
16
|
+
[한국어](README.ko.md) | [日本語](README.ja.md) | [中文](README.zh-CN.md)
|
|
17
|
+
|
|
18
|
+
## The Problem
|
|
19
|
+
|
|
20
|
+
Long agent sessions do not usually fail because the model forgets a random detail. They fail because the "why" gets blurred:
|
|
21
|
+
|
|
22
|
+
- why a direction was chosen
|
|
23
|
+
- what the user explicitly ruled out
|
|
24
|
+
- which attempt already failed
|
|
25
|
+
- what was actually verified
|
|
26
|
+
- what the next action was supposed to be
|
|
27
|
+
|
|
28
|
+
After enough compaction, a session can still sound confident while quietly losing the thread.
|
|
29
|
+
|
|
30
|
+
Goalkeeper makes the thread explicit.
|
|
31
|
+
|
|
32
|
+
## What It Creates
|
|
33
|
+
|
|
34
|
+
Goalkeeper stores state inside the project you are working on:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
.goalkeeper/
|
|
38
|
+
active-session
|
|
39
|
+
sessions/
|
|
40
|
+
<goal-session-id>/
|
|
41
|
+
checkpoint.md
|
|
42
|
+
context-pack.md
|
|
43
|
+
events.jsonl
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The three files have different jobs:
|
|
47
|
+
|
|
48
|
+
- `checkpoint.md`: short, always-read recovery state
|
|
49
|
+
- `context-pack.md`: medium-density reasoning that should survive compaction
|
|
50
|
+
- `events.jsonl`: append-only evidence for decisions, failures, commands, risks, and handoffs
|
|
51
|
+
|
|
52
|
+
The active Codex goal says where you are going. Goalkeeper preserves how not to get lost on the way.
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
With the Skills CLI:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx skills add deltafleet/codex-goalkeeper
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
From a local checkout:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git clone https://github.com/deltafleet/codex-goalkeeper
|
|
66
|
+
cd codex-goalkeeper
|
|
67
|
+
npx skills add .
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Start A Long Goal
|
|
71
|
+
|
|
72
|
+
Create a Goalkeeper session in your project:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node <skill-path>/src/scripts/goalkeeper-init.mjs \
|
|
76
|
+
--workspace <workspace> \
|
|
77
|
+
--session 2026-05-18-release-hardening \
|
|
78
|
+
--goal "Ship the release without losing constraints after compaction"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This creates the project-local `.goalkeeper/` directory and sets the active session pointer.
|
|
82
|
+
|
|
83
|
+
## Resume Correctly
|
|
84
|
+
|
|
85
|
+
At the start of a new turn, after handoff, or after suspected compaction:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs \
|
|
89
|
+
--workspace <workspace>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
If the short checkpoint is not enough:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs \
|
|
96
|
+
--workspace <workspace> \
|
|
97
|
+
--context
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This is the core behavior. The agent reads the current mission before touching the rest of the project.
|
|
101
|
+
|
|
102
|
+
## Record What Matters
|
|
103
|
+
|
|
104
|
+
Append meaningful events:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
node <skill-path>/src/scripts/goalkeeper-append-event.mjs \
|
|
108
|
+
--workspace <workspace> \
|
|
109
|
+
--type decision \
|
|
110
|
+
--text "Keep the MVP skill-only; no MCP server or background daemon."
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Refresh the checkpoint after a real state change:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
node <skill-path>/src/scripts/goalkeeper-update-checkpoint.mjs \
|
|
117
|
+
--workspace <workspace> \
|
|
118
|
+
--goal "Ship the release without losing constraints after compaction" \
|
|
119
|
+
--status "Docs complete; validation pending." \
|
|
120
|
+
--next "Run validation and cut v0.1.0."
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Check the workspace before trusting it for a long run:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
node <skill-path>/src/scripts/goalkeeper-doctor.mjs \
|
|
127
|
+
--workspace <workspace> \
|
|
128
|
+
--session 2026-05-18-release-hardening \
|
|
129
|
+
--strict
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## A Typical Loop
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
User starts a long /goal
|
|
136
|
+
-> Goalkeeper initializes a project-local session
|
|
137
|
+
-> Codex works normally
|
|
138
|
+
-> important decisions and verification go into events.jsonl
|
|
139
|
+
-> checkpoint.md is refreshed at meaningful boundaries
|
|
140
|
+
-> context-pack.md preserves the reasoning chain
|
|
141
|
+
-> after resume or compaction, Codex reads checkpoint.md first
|
|
142
|
+
-> if needed, Codex reads context-pack.md and exact event evidence
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Goalkeeper does not remove compaction. It makes recovery from compaction less dependent on vibes.
|
|
146
|
+
|
|
147
|
+
## What This Is Not
|
|
148
|
+
|
|
149
|
+
- Not a Codex plugin.
|
|
150
|
+
- Not an MCP server.
|
|
151
|
+
- Not a database.
|
|
152
|
+
- Not a transcript archive.
|
|
153
|
+
- Not a private runtime hook.
|
|
154
|
+
- Not a promise of perfect memory.
|
|
155
|
+
- Not a way to reduce compaction frequency.
|
|
156
|
+
|
|
157
|
+
Goalkeeper is intentionally small because small rituals survive real work.
|
|
158
|
+
|
|
159
|
+
## Why It Works
|
|
160
|
+
|
|
161
|
+
Agent memory fails when the only durable state is the conversation itself.
|
|
162
|
+
|
|
163
|
+
Goalkeeper moves the minimum useful continuity state into the repository:
|
|
164
|
+
|
|
165
|
+
- constraints become visible
|
|
166
|
+
- decisions become inspectable
|
|
167
|
+
- failed paths stop repeating
|
|
168
|
+
- verification survives handoff
|
|
169
|
+
- the next action is explicit
|
|
170
|
+
|
|
171
|
+
The model still has to do the work. Goalkeeper just gives it a better starting point after the context window gets rewritten.
|
|
172
|
+
|
|
173
|
+
## Repository Layout
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
SKILL.md # skill entrypoint
|
|
177
|
+
agents/openai.yaml # skill metadata
|
|
178
|
+
src/scripts/ # deterministic helpers
|
|
179
|
+
src/templates/ # starter Goalkeeper files
|
|
180
|
+
src/references/ # workflow and schema references
|
|
181
|
+
examples/goalkeeper-session # static example state
|
|
182
|
+
docs/ # roadmap and release policy
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Validation
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
npm run validate
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Equivalent manual checks:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
find src/scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
195
|
+
node src/scripts/test-goalkeeper-update-checkpoint.mjs
|
|
196
|
+
npx skills add . --list
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Versioning
|
|
200
|
+
|
|
201
|
+
Goalkeeper uses SemVer.
|
|
202
|
+
|
|
203
|
+
- Patch: docs, examples, tests, and compatible bug fixes
|
|
204
|
+
- Minor: new compatible helpers or workflow fields
|
|
205
|
+
- Major: breaking changes to checkpoint, event, or script contracts
|
|
206
|
+
|
|
207
|
+
See [docs/RELEASE.md](docs/RELEASE.md) for release steps.
|
|
208
|
+
|
|
209
|
+
## Contributing
|
|
210
|
+
|
|
211
|
+
Issues and PRs are welcome. The project bias is strict:
|
|
212
|
+
|
|
213
|
+
- keep the core workflow small
|
|
214
|
+
- do not add hidden runtime dependencies
|
|
215
|
+
- do not promise perfect recovery
|
|
216
|
+
- prefer project-local files over global state
|
|
217
|
+
- prove changes with the validation commands above
|
|
218
|
+
|
|
219
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
220
|
+
|
|
221
|
+
## License
|
|
222
|
+
|
|
223
|
+
MIT. See [LICENSE](LICENSE).
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Codex Goalkeeper
|
|
2
|
+
|
|
3
|
+
让长时间 Codex 任务失败的,通常不是上下文压缩本身,而是方向漂移。
|
|
4
|
+
|
|
5
|
+
Codex Goalkeeper 是一个很小的 skill,用来帮助 Codex 在长时间 `/goal` 会话、反复 compaction、handoff、跨天实现任务中保持方向。
|
|
6
|
+
|
|
7
|
+
它不伪装成隐藏的记忆引擎。它只让 agent 养成一个简单习惯:
|
|
8
|
+
|
|
9
|
+
1. 写下当前任务。
|
|
10
|
+
2. 保存 compaction 后仍然需要保留的推理链。
|
|
11
|
+
3. 把决策、失败和验证结果记录为事件。
|
|
12
|
+
4. 继续工作前先读取 checkpoint。
|
|
13
|
+
|
|
14
|
+
就这些。无聊的文件。更好的连续性。
|
|
15
|
+
|
|
16
|
+
[English](README.md) | [한국어](README.ko.md) | [日本語](README.ja.md)
|
|
17
|
+
|
|
18
|
+
## 问题
|
|
19
|
+
|
|
20
|
+
长时间 agent 会话通常不是因为忘了某个小细节而失败,而是因为 `为什么要这样做` 变得模糊。
|
|
21
|
+
|
|
22
|
+
- 为什么选择这个方向
|
|
23
|
+
- 用户明确禁止了什么
|
|
24
|
+
- 哪些尝试已经失败
|
|
25
|
+
- 什么是真的验证过的
|
|
26
|
+
- 下一步原本应该做什么
|
|
27
|
+
|
|
28
|
+
经过多次 compaction 后,一个会话仍然可能听起来很自信,但实际上已经悄悄偏离主线。
|
|
29
|
+
|
|
30
|
+
Goalkeeper 把这条主线显式写进文件。
|
|
31
|
+
|
|
32
|
+
## 它会创建什么
|
|
33
|
+
|
|
34
|
+
Goalkeeper 把状态保存在当前项目内:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
.goalkeeper/
|
|
38
|
+
active-session
|
|
39
|
+
sessions/
|
|
40
|
+
<goal-session-id>/
|
|
41
|
+
checkpoint.md
|
|
42
|
+
context-pack.md
|
|
43
|
+
events.jsonl
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
三个文件的职责不同:
|
|
47
|
+
|
|
48
|
+
- `checkpoint.md`: 每次恢复时先读的简短状态
|
|
49
|
+
- `context-pack.md`: compaction 后仍需保留的中等密度推理上下文
|
|
50
|
+
- `events.jsonl`: 决策、失败、命令、验证、风险和 handoff 的 append-only 记录
|
|
51
|
+
|
|
52
|
+
Codex 的 goal 说明目的地。Goalkeeper 保存的是不迷路所需的路线感。
|
|
53
|
+
|
|
54
|
+
## 安装
|
|
55
|
+
|
|
56
|
+
使用 Skills CLI:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx skills add deltafleet/codex-goalkeeper
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
也可以从本地 checkout 安装:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git clone https://github.com/deltafleet/codex-goalkeeper
|
|
66
|
+
cd codex-goalkeeper
|
|
67
|
+
npx skills add .
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 启动一个长 Goal
|
|
71
|
+
|
|
72
|
+
在工作项目中创建 Goalkeeper 会话:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node <skill-path>/src/scripts/goalkeeper-init.mjs \
|
|
76
|
+
--workspace <workspace> \
|
|
77
|
+
--session 2026-05-18-release-hardening \
|
|
78
|
+
--goal "Ship the release without losing constraints after compaction"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
这个命令会创建项目本地的 `.goalkeeper/` 目录和 active session pointer。
|
|
82
|
+
|
|
83
|
+
## 正确恢复
|
|
84
|
+
|
|
85
|
+
在新的 turn、handoff 之后,或怀疑发生 compaction 时,先运行:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs \
|
|
89
|
+
--workspace <workspace>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
如果简短 checkpoint 不够,再读取 context pack:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs \
|
|
96
|
+
--workspace <workspace> \
|
|
97
|
+
--context
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
核心行为很简单:agent 在触碰项目其它文件之前,先读当前任务状态。
|
|
101
|
+
|
|
102
|
+
## 只记录真正重要的东西
|
|
103
|
+
|
|
104
|
+
追加重要事件:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
node <skill-path>/src/scripts/goalkeeper-append-event.mjs \
|
|
108
|
+
--workspace <workspace> \
|
|
109
|
+
--type decision \
|
|
110
|
+
--text "Keep the MVP skill-only; no MCP server or background daemon."
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
当工作状态发生实际变化时,刷新 checkpoint:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
node <skill-path>/src/scripts/goalkeeper-update-checkpoint.mjs \
|
|
117
|
+
--workspace <workspace> \
|
|
118
|
+
--goal "Ship the release without losing constraints after compaction" \
|
|
119
|
+
--status "Docs complete; validation pending." \
|
|
120
|
+
--next "Run validation and cut v0.1.0."
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
在长时间任务中依赖它之前,用 doctor 检查状态:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
node <skill-path>/src/scripts/goalkeeper-doctor.mjs \
|
|
127
|
+
--workspace <workspace> \
|
|
128
|
+
--session 2026-05-18-release-hardening \
|
|
129
|
+
--strict
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 典型流程
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
用户启动一个长 /goal
|
|
136
|
+
-> Goalkeeper 创建项目本地会话
|
|
137
|
+
-> Codex 正常工作
|
|
138
|
+
-> 重要决策和验证写入 events.jsonl
|
|
139
|
+
-> 在有意义的边界刷新 checkpoint.md
|
|
140
|
+
-> context-pack.md 保存推理链
|
|
141
|
+
-> resume 或 compaction 后,Codex 先读取 checkpoint.md
|
|
142
|
+
-> 如有需要,再读取 context-pack.md 和事件证据
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Goalkeeper 不会消除 compaction。它让 compaction 后的恢复不再依赖感觉,而是依赖显式状态。
|
|
146
|
+
|
|
147
|
+
## 它不是什么
|
|
148
|
+
|
|
149
|
+
- 不是 Codex plugin。
|
|
150
|
+
- 不是 MCP server。
|
|
151
|
+
- 不是数据库。
|
|
152
|
+
- 不是完整对话 transcript 仓库。
|
|
153
|
+
- 不是 private runtime hook。
|
|
154
|
+
- 不保证完美记忆。
|
|
155
|
+
- 不会降低 compaction 频率。
|
|
156
|
+
|
|
157
|
+
小习惯越简单,越能在真实工作中长期存在。所以 Goalkeeper 保持很小。
|
|
158
|
+
|
|
159
|
+
## 验证
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
npm run validate
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
也可以手动运行:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
find src/scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
169
|
+
node src/scripts/test-goalkeeper-update-checkpoint.mjs
|
|
170
|
+
npx skills add . --list
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 版本管理
|
|
174
|
+
|
|
175
|
+
Goalkeeper 使用 SemVer。
|
|
176
|
+
|
|
177
|
+
- Patch: 文档、示例、测试、兼容性 bug 修复
|
|
178
|
+
- Minor: 新增兼容 helper 或 workflow field
|
|
179
|
+
- Major: checkpoint、event 或 script contract 的破坏性变更
|
|
180
|
+
|
|
181
|
+
发布步骤见 [docs/RELEASE.md](docs/RELEASE.md)。
|
|
182
|
+
|
|
183
|
+
## 贡献
|
|
184
|
+
|
|
185
|
+
欢迎 issue 和 PR。但项目的取舍很严格:
|
|
186
|
+
|
|
187
|
+
- 保持 core workflow 足够小
|
|
188
|
+
- 不添加隐藏 runtime dependency
|
|
189
|
+
- 不承诺完美恢复
|
|
190
|
+
- 优先使用 project-local files,而不是 global state
|
|
191
|
+
- 用验证命令证明改动
|
|
192
|
+
|
|
193
|
+
请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)、[SECURITY.md](SECURITY.md) 和 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。
|
|
194
|
+
|
|
195
|
+
## License
|
|
196
|
+
|
|
197
|
+
MIT. See [LICENSE](LICENSE).
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
The latest minor release receives security fixes.
|
|
6
|
+
|
|
7
|
+
During the `0.x` series, APIs may still evolve, but security fixes will be released as patch versions whenever possible.
|
|
8
|
+
|
|
9
|
+
## Reporting A Vulnerability
|
|
10
|
+
|
|
11
|
+
Do not open a public issue for a vulnerability.
|
|
12
|
+
|
|
13
|
+
Report security concerns through GitHub private vulnerability reporting when available, or contact the maintainers through the repository owner profile.
|
|
14
|
+
|
|
15
|
+
Include:
|
|
16
|
+
|
|
17
|
+
- affected version or commit
|
|
18
|
+
- reproduction steps
|
|
19
|
+
- expected impact
|
|
20
|
+
- whether the issue exposes local files, credentials, or private project state
|
|
21
|
+
|
|
22
|
+
## Project Boundaries
|
|
23
|
+
|
|
24
|
+
Goalkeeper stores state in project-local `.goalkeeper/` directories. It should not require:
|
|
25
|
+
|
|
26
|
+
- secret tokens
|
|
27
|
+
- background daemons
|
|
28
|
+
- network access for normal helper scripts
|
|
29
|
+
- private Codex runtime hooks
|
|
30
|
+
- global databases
|
|
31
|
+
|
|
32
|
+
If a change introduces any of those, treat it as security-sensitive and document the reason clearly.
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codex-goalkeeper
|
|
3
|
+
description: Use automatically for Codex /goal work, long-running goals, multi-turn implementations, session resumes, handoffs, compacted conversations, or any task where Codex must preserve constraints, decisions, verification state, failed attempts, pre-compaction reasoning, and next actions. Maintains a project-local checkpoint, context pack, and append-only event log.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Codex Goalkeeper
|
|
7
|
+
|
|
8
|
+
Use this skill when a Codex task is expected to run long enough that compaction, handoff, or drift could cause the agent to lose direction.
|
|
9
|
+
|
|
10
|
+
Goalkeeper does not replace Codex's goal system. It records the working continuity around the goal.
|
|
11
|
+
|
|
12
|
+
Goalkeeper is a best-effort continuity habit, not a guarantee that every compacted turn will recover perfectly.
|
|
13
|
+
|
|
14
|
+
When a user starts or continues a `/goal`, strongly prefer initializing or resuming Goalkeeper unless the task is clearly short-lived.
|
|
15
|
+
|
|
16
|
+
## First Action Rule
|
|
17
|
+
|
|
18
|
+
When a Goalkeeper-managed goal is already active, the first project-state action in a new assistant turn should be reading the active checkpoint, unless you have already read it in the same turn.
|
|
19
|
+
|
|
20
|
+
This is stricter than waiting until you notice compaction. A compacted turn may not reliably expose the compaction marker to the model, so checkpoint-first is the practical recovery rule for long-running goals.
|
|
21
|
+
|
|
22
|
+
Allowed before the checkpoint read:
|
|
23
|
+
|
|
24
|
+
- `pwd`
|
|
25
|
+
- listing `.goalkeeper/sessions/`
|
|
26
|
+
- minimal filename inspection to choose the active Goalkeeper session id
|
|
27
|
+
|
|
28
|
+
Do not send a user-visible progress or direction message before the checkpoint read.
|
|
29
|
+
Do not read project docs, source files, examples, tests, or make edits before the checkpoint read.
|
|
30
|
+
Do not combine the checkpoint read with other post-recovery work in the same shell command or parallel tool batch.
|
|
31
|
+
|
|
32
|
+
## Required Files
|
|
33
|
+
|
|
34
|
+
Use a project-local `.goalkeeper/` directory. Each long-running goal session gets its own subdirectory:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
.goalkeeper/
|
|
38
|
+
active-session # optional: current goal session id
|
|
39
|
+
sessions/
|
|
40
|
+
<goal-session-id>/
|
|
41
|
+
checkpoint.md
|
|
42
|
+
context-pack.md
|
|
43
|
+
events.jsonl
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Use a stable, readable `<goal-session-id>` such as `2026-05-17-codex-goalkeeper-roadmap` or `ads-ops-release-hardening`.
|
|
47
|
+
|
|
48
|
+
If any core file is missing during long goal work, create it from the templates in `src/templates/`.
|
|
49
|
+
Use `.goalkeeper/active-session` when a workspace has one active Goalkeeper session and the agent should not have to reconstruct the session id after compaction.
|
|
50
|
+
|
|
51
|
+
The directory is created inside the active project workspace, not in a global Codex directory. Example:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
/path/to/project/.goalkeeper/sessions/2026-05-17-release-hardening/checkpoint.md
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Bundled scripts live in the skill package. When the script is not located inside the target workspace, pass the target workspace explicitly:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs --workspace <workspace> --session <goal-session-id>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
If `<workspace>/.goalkeeper/active-session` points to the session id, `--session` may be omitted:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs --workspace <workspace>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
To create a new session deterministically, run:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
node <skill-path>/src/scripts/goalkeeper-init.mjs --workspace <workspace> --session <goal-session-id> --goal "<active goal>"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Recovery Rule
|
|
76
|
+
|
|
77
|
+
Before continuing after a resume, suspected compaction, long interruption, or handoff:
|
|
78
|
+
|
|
79
|
+
1. Resolve the current goal session directory under `.goalkeeper/sessions/`.
|
|
80
|
+
2. Read its `checkpoint.md`.
|
|
81
|
+
3. If the checkpoint is stale, too thin, or missing the reasoning chain, read `context-pack.md`.
|
|
82
|
+
4. If exact evidence is needed, inspect recent entries in `events.jsonl`.
|
|
83
|
+
5. Restate the active direction internally before taking action.
|
|
84
|
+
6. Continue only when the next action matches the recovered goal, constraints, and open risks.
|
|
85
|
+
|
|
86
|
+
After compaction, do not rely on the compacted conversation summary alone. Read the Goalkeeper checkpoint before continuing.
|
|
87
|
+
|
|
88
|
+
## Recovery Guardrail
|
|
89
|
+
|
|
90
|
+
After a visible compact boundary, the first project-state action must be a Goalkeeper recovery read:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
<workspace>/.goalkeeper/sessions/<goal-session-id>/checkpoint.md
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
If you notice that you already continued without the checkpoint, stop, read the checkpoint, append a `recovery_violation` event, then continue from the recovered state.
|
|
97
|
+
|
|
98
|
+
## Update Rule
|
|
99
|
+
|
|
100
|
+
Update Goalkeeper state when any of these change:
|
|
101
|
+
|
|
102
|
+
- active goal or done criteria
|
|
103
|
+
- user constraints or forbidden approaches
|
|
104
|
+
- major design decision
|
|
105
|
+
- failed attempt that should not be repeated
|
|
106
|
+
- important file or artifact path
|
|
107
|
+
- command result or verification status
|
|
108
|
+
- open risk, blocker, or next action
|
|
109
|
+
- handoff boundary
|
|
110
|
+
|
|
111
|
+
Append the event first, then update the session's `checkpoint.md` when the event changes the current working state.
|
|
112
|
+
Use `src/scripts/goalkeeper-update-checkpoint.mjs` when you want a bounded canonical checkpoint instead of manual Markdown edits.
|
|
113
|
+
|
|
114
|
+
## Keep It Short
|
|
115
|
+
|
|
116
|
+
The checkpoint is a recovery artifact, not a transcript.
|
|
117
|
+
|
|
118
|
+
Keep it under about 8 KB when possible. If it grows beyond 16 KB, compact stale details into `events.jsonl` evidence references before relying on it for routine recovery.
|
|
119
|
+
|
|
120
|
+
Prefer:
|
|
121
|
+
|
|
122
|
+
- exact goal
|
|
123
|
+
- current throughline
|
|
124
|
+
- non-negotiable constraints
|
|
125
|
+
- decisions that explain direction
|
|
126
|
+
- verified facts
|
|
127
|
+
- open risks
|
|
128
|
+
- next action
|
|
129
|
+
|
|
130
|
+
Avoid:
|
|
131
|
+
|
|
132
|
+
- narrative summaries of every turn
|
|
133
|
+
- long command output
|
|
134
|
+
- speculative history
|
|
135
|
+
- stale alternatives that no longer matter
|
|
136
|
+
|
|
137
|
+
## Context Pack
|
|
138
|
+
|
|
139
|
+
Use `context-pack.md` for medium-density pre-compaction context that is too detailed for the checkpoint:
|
|
140
|
+
|
|
141
|
+
- decision chain and reasoning
|
|
142
|
+
- rejected alternatives
|
|
143
|
+
- open threads
|
|
144
|
+
- domain model or implementation model
|
|
145
|
+
- evidence index for where exact facts live
|
|
146
|
+
|
|
147
|
+
Read it when checkpoint recovery is not enough. Keep raw transcripts and long command output out of it.
|
|
148
|
+
|
|
149
|
+
## Reference Map
|
|
150
|
+
|
|
151
|
+
- Read `src/references/workflow.md` for lifecycle rules and examples.
|
|
152
|
+
- Read `src/references/event-schema.md` before adding or validating event records.
|
|
153
|
+
- Read `src/references/guardrail.md` when you need stronger always-on behavior in a target repository.
|
|
154
|
+
- Run `src/scripts/goalkeeper-init.mjs` when a long-running goal needs a new `.goalkeeper/sessions/<goal-session-id>/` directory.
|
|
155
|
+
- Run `src/scripts/goalkeeper-turn-start.mjs --context` when checkpoint recovery needs the larger context pack too.
|
|
156
|
+
- Run `src/scripts/goalkeeper-append-event.mjs` instead of hand-writing JSONL when recording decisions, verification, failures, risks, or handoffs; it can use `.goalkeeper/active-session` when `--session` is omitted.
|
|
157
|
+
- Run `src/scripts/goalkeeper-update-checkpoint.mjs` after appending a meaningful event when checkpoint state should be refreshed in a short canonical shape.
|
|
158
|
+
- Run `src/scripts/goalkeeper-doctor.mjs` after creating or changing Goalkeeper state to verify the target workspace is ready.
|
|
159
|
+
|
|
160
|
+
## Safety Boundary
|
|
161
|
+
|
|
162
|
+
- Do not depend on private Codex runtime internals.
|
|
163
|
+
- Do not claim this reduces compaction frequency.
|
|
164
|
+
- Do not treat the checkpoint as proof when exact evidence is needed; inspect `events.jsonl` or source files.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Codex Goalkeeper"
|
|
3
|
+
short_description: "Keep Codex goals oriented"
|
|
4
|
+
default_prompt: "Use $codex-goalkeeper for this /goal or long-running Codex task so checkpoint, context pack, and event log preserve direction across compaction."
|
|
5
|
+
brand_color: "#2563EB"
|
package/docs/RELEASE.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Release Policy
|
|
2
|
+
|
|
3
|
+
Codex Goalkeeper is released as a GitHub repository and optional npm package.
|
|
4
|
+
|
|
5
|
+
The skill source of truth is the repository root:
|
|
6
|
+
|
|
7
|
+
- `SKILL.md`
|
|
8
|
+
- `agents/openai.yaml`
|
|
9
|
+
- `src/`
|
|
10
|
+
- `examples/`
|
|
11
|
+
- `docs/`
|
|
12
|
+
|
|
13
|
+
## Versioning
|
|
14
|
+
|
|
15
|
+
Use SemVer.
|
|
16
|
+
|
|
17
|
+
- `PATCH`: documentation, examples, tests, and compatible bug fixes
|
|
18
|
+
- `MINOR`: compatible helper scripts, metadata, templates, or workflow fields
|
|
19
|
+
- `MAJOR`: breaking changes to checkpoint, context-pack, event, or script contracts
|
|
20
|
+
|
|
21
|
+
During `0.x`, minor releases may still adjust public contracts. Document those changes clearly in `CHANGELOG.md`.
|
|
22
|
+
|
|
23
|
+
## Release Checklist
|
|
24
|
+
|
|
25
|
+
1. Update `package.json` version.
|
|
26
|
+
2. Update `CHANGELOG.md`.
|
|
27
|
+
3. Run validation:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm run validate
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
4. Confirm the public package does not include local Goalkeeper state:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git status --short --ignored
|
|
37
|
+
npm pack --dry-run
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
5. Commit:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git commit -m "Release vX.Y.Z"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
6. Tag:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
git tag vX.Y.Z
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
7. Push:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
git push origin main --tags
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
8. Create a GitHub release:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
GH_CONFIG_DIR=$HOME/.config/gh-deltafleet gh release create vX.Y.Z --generate-notes
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
9. Optional npm publish:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm --userconfig ~/.config/npm-deltafleet/npmrc publish --access public
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Deltafleet Credentials
|
|
71
|
+
|
|
72
|
+
This repository can be published with the local deltafleet profiles:
|
|
73
|
+
|
|
74
|
+
- GitHub CLI: `GH_CONFIG_DIR=$HOME/.config/gh-deltafleet`
|
|
75
|
+
- npm: `npm --userconfig ~/.config/npm-deltafleet/npmrc`
|
|
76
|
+
|
|
77
|
+
Never commit these config files or token values.
|