@deltafleet/codex-goalkeeper 0.1.0 → 0.1.1
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 +6 -0
- package/README.ja.md +116 -109
- package/README.ko.md +115 -108
- package/README.md +104 -123
- package/README.zh-CN.md +130 -123
- package/docs/RELEASE.md +6 -4
- package/docs/ROADMAP.md +2 -2
- package/package.json +9 -11
- package/{SKILL.md → src/codex-goalkeeper/SKILL.md} +13 -13
- package/src/{references → codex-goalkeeper/references}/event-schema.md +1 -1
- package/src/{references → codex-goalkeeper/references}/guardrail.md +7 -7
- package/src/{references → codex-goalkeeper/references}/workflow.md +7 -7
- package/src/{scripts → codex-goalkeeper/scripts}/goalkeeper-append-event.mjs +1 -1
- package/src/{scripts → codex-goalkeeper/scripts}/goalkeeper-doctor.mjs +1 -1
- package/src/{scripts → codex-goalkeeper/scripts}/goalkeeper-init.mjs +1 -1
- package/src/{scripts → codex-goalkeeper/scripts}/goalkeeper-turn-start.mjs +1 -1
- package/src/{scripts → codex-goalkeeper/scripts}/goalkeeper-update-checkpoint.mjs +1 -1
- package/src/{templates → codex-goalkeeper/templates}/AGENTS.goalkeeper.md +7 -7
- package/src/scripts/test-goalkeeper-update-checkpoint.mjs +0 -236
- /package/{agents → src/codex-goalkeeper/agents}/openai.yaml +0 -0
- /package/src/{templates → codex-goalkeeper/templates}/active-session +0 -0
- /package/src/{templates → codex-goalkeeper/templates}/checkpoint.md +0 -0
- /package/src/{templates → codex-goalkeeper/templates}/context-pack.md +0 -0
- /package/src/{templates → codex-goalkeeper/templates}/event.jsonl +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to Codex Goalkeeper are documented here.
|
|
|
4
4
|
|
|
5
5
|
This project follows [Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [0.1.1] - 2026-05-18
|
|
8
|
+
|
|
9
|
+
- Moved the installable skill payload into `src/codex-goalkeeper/` so Skills CLI installs only skill files.
|
|
10
|
+
- Kept repository docs, tests, examples, and GitHub metadata outside the installable skill directory.
|
|
11
|
+
- Added Node.js 18+ requirement notes to the README files.
|
|
12
|
+
|
|
7
13
|
## [0.1.0] - 2026-05-18
|
|
8
14
|
|
|
9
15
|
Initial public release.
|
package/README.ja.md
CHANGED
|
@@ -1,37 +1,74 @@
|
|
|
1
1
|
# Codex Goalkeeper
|
|
2
2
|
|
|
3
|
-
長い Codex
|
|
3
|
+
長い Codex 作業は、たいてい一気に壊れるわけではありません。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
少しずつ方向を失います。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
エージェントはまだ自信ありげに話します。テストも実行します。計画も一見もっともらしいままです。しかし compaction、handoff、resume が重なると、いちばん重要な感覚が静かに薄れていきます。
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
2. compaction 後も残すべき判断理由を保存する。
|
|
11
|
-
3. 決定、失敗、検証結果をイベントとして記録する。
|
|
12
|
-
4. 続行する前に checkpoint を最初に読む。
|
|
9
|
+
> なぜ、この方針で進んでいたのか?
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
Codex Goalkeeper は、長い `/goal` 作業が compaction、resume、handoff をまたいでも方向を保てるようにする小さな skill です。
|
|
12
|
+
|
|
13
|
+
隠れたメモリエンジンを追加するものではありません。エージェントに耐久性のある作業習慣を与えます。
|
|
14
|
+
|
|
15
|
+
- 短い checkpoint を保つ
|
|
16
|
+
- より詳しい context pack を保つ
|
|
17
|
+
- 決定と検証を event log に残す
|
|
18
|
+
- drift が起きやすい境界の後は、続行前に checkpoint を読む
|
|
19
|
+
|
|
20
|
+
退屈なファイル。より良い継続性。
|
|
15
21
|
|
|
16
22
|
[English](README.md) | [한국어](README.ko.md) | [中文](README.zh-CN.md)
|
|
17
23
|
|
|
24
|
+
## インストール
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx skills add deltafleet/codex-goalkeeper
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
要件: Node.js 18+ と `npx`。長い goal workflow で、Codex は skill に同梱された Node helper script を使います。
|
|
31
|
+
|
|
32
|
+
そして長い作業で Codex にこう依頼します。
|
|
33
|
+
|
|
34
|
+
> Use codex-goalkeeper for this `/goal`. Keep the goal, constraints, decisions, verification state, failed attempts, and next action recoverable across compaction.
|
|
35
|
+
|
|
36
|
+
通常の利用はここまでです。ユーザーが Goalkeeper の helper script を手で実行する必要はありません。Codex が skill workflow の一部として実行します。
|
|
37
|
+
|
|
18
38
|
## 問題
|
|
19
39
|
|
|
20
|
-
|
|
40
|
+
短い作業なら、compaction はたいてい大きな問題になりません。エージェントは大まかに復旧できます。
|
|
41
|
+
|
|
42
|
+
しかし長い goal は違います。
|
|
21
43
|
|
|
22
|
-
|
|
23
|
-
- ユーザーが明示的に禁止したことは何か
|
|
24
|
-
- どの試行がすでに失敗したのか
|
|
25
|
-
- 実際に検証済みなのは何か
|
|
26
|
-
- 次に何をするはずだったのか
|
|
44
|
+
実際のセッションを想像してください。
|
|
27
45
|
|
|
28
|
-
|
|
46
|
+
1. Codex にリリース hardening を任せます。
|
|
47
|
+
2. Codex は壊れやすい edge case を見つけ、保守的なルートを選びます。
|
|
48
|
+
3. ユーザーは魅力的だが危険な shortcut を明示的に拒否します。
|
|
49
|
+
4. 2 回の実装試行が微妙な理由で失敗します。
|
|
50
|
+
5. あるテストがようやく正しいルートを証明します。
|
|
51
|
+
6. コンテキストが compact されます。
|
|
52
|
+
7. 後でエージェントはきれいな要約を持って戻りますが、そのルートが正しかった理由の圧力は薄れています。
|
|
29
53
|
|
|
30
|
-
|
|
54
|
+
ここから drift が始まります。
|
|
31
55
|
|
|
32
|
-
|
|
56
|
+
失敗の原因は「モデルが全部忘れた」ことではありません。もっと厄介です。続けるだけの記憶はあるが、同じ方向で続けるだけの記憶がないのです。
|
|
33
57
|
|
|
34
|
-
|
|
58
|
+
それは次のような形で現れます。
|
|
59
|
+
|
|
60
|
+
- ユーザーがすでに拒否した方針を再び開く
|
|
61
|
+
- 失敗理由が要約から落ち、同じ試行を繰り返す
|
|
62
|
+
- 未検証の仮説を確定事実のように扱う
|
|
63
|
+
- 長い handoff の後で正確な next action を失う
|
|
64
|
+
- goal は残るが運用上の制約を失う
|
|
65
|
+
- 説明は滑らかだが実際の作業ストリームからずれる
|
|
66
|
+
|
|
67
|
+
Goalkeeper は「goal は残っているが、セッションの方向感覚が弱くなった」その隙間を埋めるためのものです。
|
|
68
|
+
|
|
69
|
+
## Codex がすること
|
|
70
|
+
|
|
71
|
+
skill が有効になると、Codex はプロジェクト内に継続性フォルダを維持します。
|
|
35
72
|
|
|
36
73
|
```text
|
|
37
74
|
.goalkeeper/
|
|
@@ -43,120 +80,90 @@ Goalkeeper は作業中のプロジェクト内に状態を保存します。
|
|
|
43
80
|
events.jsonl
|
|
44
81
|
```
|
|
45
82
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
- `checkpoint.md`: 毎回最初に読む短い復旧状態
|
|
49
|
-
- `context-pack.md`: compaction 後も残すべき中密度の判断理由
|
|
50
|
-
- `events.jsonl`: 決定、失敗、コマンド、検証、リスク、handoff の append-only 記録
|
|
51
|
-
|
|
52
|
-
Codex の goal が目的地なら、Goalkeeper は道に迷わないための現在地の地図です。
|
|
53
|
-
|
|
54
|
-
## インストール
|
|
83
|
+
それぞれの役割は違います。
|
|
55
84
|
|
|
56
|
-
|
|
85
|
+
- `checkpoint.md`: 再開時に最初に読む短い復旧状態
|
|
86
|
+
- `context-pack.md`: checkpoint には長すぎるが compaction 後も残すべき判断理由
|
|
87
|
+
- `events.jsonl`: 決定、失敗した試行、コマンド根拠、検証、リスク、handoff の記録
|
|
57
88
|
|
|
58
|
-
|
|
59
|
-
npx skills add deltafleet/codex-goalkeeper
|
|
60
|
-
```
|
|
89
|
+
Codex の active goal が目的地なら、Goalkeeper はなぜこのルートがまだ正しいのかを保ちます。
|
|
61
90
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
git clone https://github.com/deltafleet/codex-goalkeeper
|
|
66
|
-
cd codex-goalkeeper
|
|
67
|
-
npx skills add .
|
|
68
|
-
```
|
|
91
|
+
## 仕組み
|
|
69
92
|
|
|
70
|
-
|
|
93
|
+
Goalkeeper は長いエージェント作業を単純なループにします。
|
|
71
94
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
```text
|
|
96
|
+
長い /goal が始まる
|
|
97
|
+
-> Codex が Goalkeeper セッションを作成または再開する
|
|
98
|
+
-> 重要な制約と決定を記録する
|
|
99
|
+
-> 失敗した試行を残し、同じ失敗を繰り返さないようにする
|
|
100
|
+
-> 信頼度が変わる検証根拠を残す
|
|
101
|
+
-> 意味のある境界で checkpoint.md を更新する
|
|
102
|
+
-> context-pack.md が深い判断理由を保つ
|
|
103
|
+
-> resume、handoff、compaction が疑われる後、Codex は checkpoint.md を最初に読む
|
|
104
|
+
-> checkpoint が薄ければ context-pack.md を読む
|
|
105
|
+
-> 正確な証拠が必要なら events.jsonl または source file を確認する
|
|
79
106
|
```
|
|
80
107
|
|
|
81
|
-
|
|
108
|
+
これは会話 transcript の保存ではありません。作業状態の保存です。
|
|
82
109
|
|
|
83
|
-
##
|
|
110
|
+
## あえて小さくしています
|
|
84
111
|
|
|
85
|
-
|
|
112
|
+
このプロジェクトを大きくするのは簡単です。
|
|
86
113
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
114
|
+
- daemon
|
|
115
|
+
- database
|
|
116
|
+
- session rewriter
|
|
117
|
+
- private runtime hook
|
|
118
|
+
- vector memory layer
|
|
119
|
+
- full transcript engine
|
|
91
120
|
|
|
92
|
-
|
|
121
|
+
Goalkeeper は意図的にその方向を避けます。
|
|
93
122
|
|
|
94
|
-
|
|
95
|
-
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs \
|
|
96
|
-
--workspace <workspace> \
|
|
97
|
-
--context
|
|
98
|
-
```
|
|
123
|
+
ファイルを使う理由は、見える、レビューできる、移動しやすい、そして compaction 後にエージェントが読み返しやすいからです。目的は Codex を全知にすることではありません。次の turn を正しい状態から始めることです。
|
|
99
124
|
|
|
100
|
-
|
|
125
|
+
## これは何ではないか
|
|
101
126
|
|
|
102
|
-
|
|
127
|
+
- Codex plugin ではありません。
|
|
128
|
+
- MCP server ではありません。
|
|
129
|
+
- database ではありません。
|
|
130
|
+
- 完全な会話 transcript の保存庫ではありません。
|
|
131
|
+
- private Codex runtime hook ではありません。
|
|
132
|
+
- 完璧な記憶を保証しません。
|
|
133
|
+
- compaction の頻度を下げません。
|
|
103
134
|
|
|
104
|
-
|
|
135
|
+
Goalkeeper は継続性を改善します。コンテキスト制限が消えるふりはしません。
|
|
105
136
|
|
|
106
|
-
|
|
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
|
-
```
|
|
137
|
+
## 何が良くなるか
|
|
112
138
|
|
|
113
|
-
|
|
139
|
+
Goalkeeper を使うと、再開されたセッションが次を復旧できる可能性が上がります。
|
|
114
140
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
```
|
|
141
|
+
- ユーザーの non-negotiable constraints
|
|
142
|
+
- 現在の実装方向
|
|
143
|
+
- 拒否した代替案がなぜ今も拒否されるべきか
|
|
144
|
+
- 信頼度を変えたテストやコマンド
|
|
145
|
+
- 実際の next action
|
|
146
|
+
- 雑に流してはいけない unresolved risks
|
|
122
147
|
|
|
123
|
-
|
|
148
|
+
長いエージェント作業で起きる退屈で高くつく失敗の多くは、これだけでも減らせます。
|
|
124
149
|
|
|
125
|
-
|
|
126
|
-
node <skill-path>/src/scripts/goalkeeper-doctor.mjs \
|
|
127
|
-
--workspace <workspace> \
|
|
128
|
-
--session 2026-05-18-release-hardening \
|
|
129
|
-
--strict
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## 典型的な流れ
|
|
150
|
+
## リポジトリ構成
|
|
133
151
|
|
|
134
152
|
```text
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
153
|
+
src/codex-goalkeeper/ # installable skill payload
|
|
154
|
+
SKILL.md
|
|
155
|
+
agents/openai.yaml
|
|
156
|
+
scripts/
|
|
157
|
+
templates/
|
|
158
|
+
references/
|
|
159
|
+
tests/ # maintainer tests
|
|
160
|
+
examples/goalkeeper-session # static example state
|
|
161
|
+
docs/ # roadmap and release policy
|
|
143
162
|
```
|
|
144
163
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
## これは何ではないか
|
|
148
|
-
|
|
149
|
-
- Codex plugin ではありません。
|
|
150
|
-
- MCP server ではありません。
|
|
151
|
-
- データベースではありません。
|
|
152
|
-
- 会話 transcript の保存庫ではありません。
|
|
153
|
-
- private runtime hook ではありません。
|
|
154
|
-
- 完璧な記憶を保証しません。
|
|
155
|
-
- compaction の頻度を減らしません。
|
|
156
|
-
|
|
157
|
-
小さな習慣ほど、現実の作業で生き残ります。だから Goalkeeper は小さく保ちます。
|
|
164
|
+
## Maintainer Validation
|
|
158
165
|
|
|
159
|
-
|
|
166
|
+
リポジトリ maintainer 向けの検証です。
|
|
160
167
|
|
|
161
168
|
```bash
|
|
162
169
|
npm run validate
|
|
@@ -165,8 +172,8 @@ npm run validate
|
|
|
165
172
|
手動では次を実行します。
|
|
166
173
|
|
|
167
174
|
```bash
|
|
168
|
-
find src/scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
169
|
-
node
|
|
175
|
+
find src/codex-goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
176
|
+
node tests/test-goalkeeper-update-checkpoint.mjs
|
|
170
177
|
npx skills add . --list
|
|
171
178
|
```
|
|
172
179
|
|
package/README.ko.md
CHANGED
|
@@ -1,148 +1,126 @@
|
|
|
1
1
|
# Codex Goalkeeper
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
긴 Codex 작업은 보통 한 번에 망가지지 않습니다.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
조금씩 방향을 잃습니다.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
에이전트는 여전히 자신 있게 말합니다. 테스트도 돌립니다. 계획도 그럴듯해 보입니다. 그런데 compact, handoff, resume이 반복된 뒤에는 가장 중요한 감각이 조용히 흐려질 수 있습니다.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
2. compact 이후에도 살아남아야 하는 판단 근거를 보존한다.
|
|
11
|
-
3. 결정, 실패, 검증 결과를 이벤트로 남긴다.
|
|
12
|
-
4. 다시 시작할 때 프로젝트 파일보다 checkpoint를 먼저 읽는다.
|
|
9
|
+
> 우리가 왜 이 방향으로 가고 있었지?
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
Codex Goalkeeper는 긴 `/goal` 작업이 compact, resume, handoff를 지나도 방향을 잃지 않도록 돕는 작은 skill입니다.
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## 문제
|
|
19
|
-
|
|
20
|
-
긴 에이전트 세션은 보통 사소한 디테일 하나를 잊어서 망하지 않습니다. `왜 이렇게 가고 있었는지`가 흐려지면서 망합니다.
|
|
13
|
+
숨겨진 메모리 엔진을 추가하지 않습니다. 대신 에이전트에게 지속 가능한 작업 습관을 줍니다.
|
|
21
14
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- 다음 액션이 무엇이었는지
|
|
15
|
+
- 짧은 checkpoint를 유지한다
|
|
16
|
+
- 더 풍부한 context pack을 유지한다
|
|
17
|
+
- 결정과 검증을 event log에 남긴다
|
|
18
|
+
- drift가 생기기 쉬운 경계 이후에는 계속하기 전에 checkpoint를 먼저 읽는다
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
지루한 파일들. 더 나은 연속성.
|
|
29
21
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## 생성되는 상태
|
|
22
|
+
[English](README.md) | [日本語](README.ja.md) | [中文](README.zh-CN.md)
|
|
33
23
|
|
|
34
|
-
|
|
24
|
+
## 설치
|
|
35
25
|
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
active-session
|
|
39
|
-
sessions/
|
|
40
|
-
<goal-session-id>/
|
|
41
|
-
checkpoint.md
|
|
42
|
-
context-pack.md
|
|
43
|
-
events.jsonl
|
|
26
|
+
```bash
|
|
27
|
+
npx skills add deltafleet/codex-goalkeeper
|
|
44
28
|
```
|
|
45
29
|
|
|
46
|
-
|
|
30
|
+
요구사항: Node.js 18+와 `npx`. 긴 goal workflow에서 Codex가 skill에 포함된 Node helper script를 사용합니다.
|
|
47
31
|
|
|
48
|
-
|
|
49
|
-
- `context-pack.md`: compact 이후에도 살아남아야 하는 중간 밀도의 판단 근거
|
|
50
|
-
- `events.jsonl`: 결정, 실패, 명령, 검증, 리스크, handoff의 append-only 기록
|
|
32
|
+
그리고 긴 작업에서 Codex에게 이렇게 요청합니다.
|
|
51
33
|
|
|
52
|
-
|
|
34
|
+
> 이 `/goal`에는 codex-goalkeeper를 사용해줘. 목표, 제약, 결정, 검증 상태, 실패한 시도, 다음 액션이 compact 이후에도 복구 가능하게 관리해줘.
|
|
53
35
|
|
|
54
|
-
|
|
36
|
+
정상적인 사용 흐름은 여기까지입니다. 사용자가 Goalkeeper의 helper script를 직접 실행할 필요는 없습니다. Codex가 skill workflow의 일부로 실행합니다.
|
|
55
37
|
|
|
56
|
-
|
|
38
|
+
## 문제
|
|
57
39
|
|
|
58
|
-
|
|
59
|
-
npx skills add deltafleet/codex-goalkeeper
|
|
60
|
-
```
|
|
40
|
+
짧은 작업에서 compact는 대개 큰 문제가 아닙니다. 에이전트가 대충 복구할 수 있습니다.
|
|
61
41
|
|
|
62
|
-
|
|
42
|
+
하지만 긴 goal은 다릅니다.
|
|
63
43
|
|
|
64
|
-
|
|
65
|
-
git clone https://github.com/deltafleet/codex-goalkeeper
|
|
66
|
-
cd codex-goalkeeper
|
|
67
|
-
npx skills add .
|
|
68
|
-
```
|
|
44
|
+
실제 세션을 상상해보면 이렇습니다.
|
|
69
45
|
|
|
70
|
-
|
|
46
|
+
1. Codex에게 릴리스 hardening을 맡깁니다.
|
|
47
|
+
2. Codex가 취약한 edge case를 발견하고 보수적인 경로를 선택합니다.
|
|
48
|
+
3. 사용자는 그럴듯하지만 위험한 shortcut을 명시적으로 금지합니다.
|
|
49
|
+
4. 두 번의 구현 시도가 미묘한 이유로 실패합니다.
|
|
50
|
+
5. 어떤 테스트가 드디어 올바른 경로를 증명합니다.
|
|
51
|
+
6. 컨텍스트가 compact됩니다.
|
|
52
|
+
7. 나중에 에이전트가 깔끔한 요약을 들고 돌아오지만, 왜 그 경로가 맞았는지에 대한 압력은 희미해져 있습니다.
|
|
71
53
|
|
|
72
|
-
|
|
54
|
+
여기서 drift가 시작됩니다.
|
|
73
55
|
|
|
74
|
-
|
|
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
|
-
```
|
|
56
|
+
실패 원인은 “모델이 전부 잊었다”가 아닙니다. 더 까다롭습니다. 계속할 만큼은 기억하지만, 같은 방향으로 계속할 만큼은 기억하지 못합니다.
|
|
80
57
|
|
|
81
|
-
|
|
58
|
+
이런 순간에 드러납니다.
|
|
82
59
|
|
|
83
|
-
|
|
60
|
+
- 사용자가 이미 거부한 접근을 다시 연다
|
|
61
|
+
- 실패 이유가 요약에서 사라져 같은 시도를 반복한다
|
|
62
|
+
- 검증되지 않은 가정을 확정 사실처럼 다룬다
|
|
63
|
+
- 긴 handoff 뒤에 정확한 next action을 잃는다
|
|
64
|
+
- goal은 유지하지만 운영 제약을 잃는다
|
|
65
|
+
- 설명은 매끄럽지만 실제 작업 흐름과 어긋난다
|
|
84
66
|
|
|
85
|
-
|
|
67
|
+
Goalkeeper는 “goal은 남아 있지만 세션의 방향 감각은 약해진” 그 틈을 메우기 위한 도구입니다.
|
|
86
68
|
|
|
87
|
-
|
|
88
|
-
node <skill-path>/src/scripts/goalkeeper-turn-start.mjs \
|
|
89
|
-
--workspace <workspace>
|
|
90
|
-
```
|
|
69
|
+
## Codex가 하는 일
|
|
91
70
|
|
|
92
|
-
|
|
71
|
+
skill이 활성화되면 Codex는 프로젝트 안에 연속성 폴더를 유지합니다.
|
|
93
72
|
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
73
|
+
```text
|
|
74
|
+
.goalkeeper/
|
|
75
|
+
active-session
|
|
76
|
+
sessions/
|
|
77
|
+
<goal-session-id>/
|
|
78
|
+
checkpoint.md
|
|
79
|
+
context-pack.md
|
|
80
|
+
events.jsonl
|
|
98
81
|
```
|
|
99
82
|
|
|
100
|
-
|
|
83
|
+
각 파일의 역할은 다릅니다.
|
|
101
84
|
|
|
102
|
-
|
|
85
|
+
- `checkpoint.md`: 다시 시작할 때 먼저 읽는 짧은 복구 상태
|
|
86
|
+
- `context-pack.md`: checkpoint에는 너무 길지만 compact 이후에도 살아남아야 하는 판단 근거
|
|
87
|
+
- `events.jsonl`: 결정, 실패한 시도, 명령 근거, 검증, 리스크, handoff 기록
|
|
103
88
|
|
|
104
|
-
|
|
89
|
+
Codex의 active goal이 목적지를 말한다면, Goalkeeper는 왜 이 경로가 아직 맞는지를 보존합니다.
|
|
105
90
|
|
|
106
|
-
|
|
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
|
-
```
|
|
91
|
+
## 동작 원리
|
|
112
92
|
|
|
113
|
-
|
|
93
|
+
Goalkeeper는 긴 에이전트 작업을 단순한 루프로 바꿉니다.
|
|
114
94
|
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
95
|
+
```text
|
|
96
|
+
긴 /goal이 시작된다
|
|
97
|
+
-> Codex가 Goalkeeper 세션을 만들거나 재개한다
|
|
98
|
+
-> 중요한 제약과 결정을 기록한다
|
|
99
|
+
-> 실패한 시도를 남겨 같은 삽질을 반복하지 않게 한다
|
|
100
|
+
-> 신뢰도가 바뀌는 검증 근거를 남긴다
|
|
101
|
+
-> 의미 있는 경계마다 checkpoint.md를 갱신한다
|
|
102
|
+
-> context-pack.md가 더 깊은 판단 근거를 보존한다
|
|
103
|
+
-> resume, handoff, compact 의심 이후 Codex는 checkpoint.md를 먼저 읽는다
|
|
104
|
+
-> checkpoint가 얇으면 context-pack.md를 읽는다
|
|
105
|
+
-> 정확한 증거가 필요하면 events.jsonl이나 source file을 확인한다
|
|
121
106
|
```
|
|
122
107
|
|
|
123
|
-
|
|
108
|
+
이것은 대화 transcript 저장이 아닙니다. 작업 상태 보존입니다.
|
|
124
109
|
|
|
125
|
-
|
|
126
|
-
node <skill-path>/src/scripts/goalkeeper-doctor.mjs \
|
|
127
|
-
--workspace <workspace> \
|
|
128
|
-
--session 2026-05-18-release-hardening \
|
|
129
|
-
--strict
|
|
130
|
-
```
|
|
110
|
+
## 일부러 작게 만들었습니다
|
|
131
111
|
|
|
132
|
-
|
|
112
|
+
이 프로젝트를 크게 만드는 방법은 쉽습니다.
|
|
133
113
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-> context-pack.md는 판단 근거를 보존한다
|
|
141
|
-
-> resume 또는 compact 이후 Codex는 checkpoint.md를 먼저 읽는다
|
|
142
|
-
-> 필요하면 context-pack.md와 이벤트 근거를 더 읽는다
|
|
143
|
-
```
|
|
114
|
+
- daemon
|
|
115
|
+
- database
|
|
116
|
+
- session rewriter
|
|
117
|
+
- private runtime hook
|
|
118
|
+
- vector memory layer
|
|
119
|
+
- full transcript engine
|
|
144
120
|
|
|
145
|
-
Goalkeeper는
|
|
121
|
+
Goalkeeper는 의도적으로 그 방향을 피합니다.
|
|
122
|
+
|
|
123
|
+
파일을 쓰는 이유는 파일이 보이고, 검토 가능하고, 옮기기 쉽고, compact 이후에도 에이전트가 다시 읽기 쉽기 때문입니다. 목표는 Codex를 전지전능하게 만드는 것이 아닙니다. 다음 turn이 올바른 상태에서 시작하게 만드는 것입니다.
|
|
146
124
|
|
|
147
125
|
## 이것이 아닌 것
|
|
148
126
|
|
|
@@ -150,13 +128,42 @@ Goalkeeper는 compact를 없애지 않습니다. compact 이후 복구를 감이
|
|
|
150
128
|
- MCP server가 아닙니다.
|
|
151
129
|
- 데이터베이스가 아닙니다.
|
|
152
130
|
- 전체 대화 transcript 저장소가 아닙니다.
|
|
153
|
-
- private runtime hook이 아닙니다.
|
|
131
|
+
- private Codex runtime hook이 아닙니다.
|
|
154
132
|
- 완벽한 기억을 보장하지 않습니다.
|
|
155
|
-
- compact 빈도를
|
|
133
|
+
- compact 빈도를 줄이지 않습니다.
|
|
134
|
+
|
|
135
|
+
Goalkeeper는 연속성을 개선합니다. 컨텍스트 한계를 없애는 척하지 않습니다.
|
|
136
|
+
|
|
137
|
+
## 좋아지는 것
|
|
138
|
+
|
|
139
|
+
Goalkeeper를 쓰면 resume된 세션이 다음을 복구할 가능성이 높아집니다.
|
|
140
|
+
|
|
141
|
+
- 사용자의 non-negotiable constraints
|
|
142
|
+
- 현재 구현 방향
|
|
143
|
+
- 거부된 대안이 왜 여전히 거부되어야 하는지
|
|
144
|
+
- 신뢰도를 바꾼 테스트나 명령
|
|
145
|
+
- 실제 next action
|
|
146
|
+
- 대충 넘기면 안 되는 unresolved risks
|
|
147
|
+
|
|
148
|
+
긴 에이전트 작업에서 발생하는 지루하고 비싼 실패 상당수는 이 정도만으로도 줄어듭니다.
|
|
149
|
+
|
|
150
|
+
## 저장소 구조
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
src/codex-goalkeeper/ # installable skill payload
|
|
154
|
+
SKILL.md
|
|
155
|
+
agents/openai.yaml
|
|
156
|
+
scripts/
|
|
157
|
+
templates/
|
|
158
|
+
references/
|
|
159
|
+
tests/ # maintainer tests
|
|
160
|
+
examples/goalkeeper-session # static example state
|
|
161
|
+
docs/ # roadmap and release policy
|
|
162
|
+
```
|
|
156
163
|
|
|
157
|
-
|
|
164
|
+
## Maintainer Validation
|
|
158
165
|
|
|
159
|
-
|
|
166
|
+
저장소 maintainer용 검증입니다.
|
|
160
167
|
|
|
161
168
|
```bash
|
|
162
169
|
npm run validate
|
|
@@ -165,8 +172,8 @@ npm run validate
|
|
|
165
172
|
수동으로는 다음을 실행합니다.
|
|
166
173
|
|
|
167
174
|
```bash
|
|
168
|
-
find src/scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
169
|
-
node
|
|
175
|
+
find src/codex-goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
176
|
+
node tests/test-goalkeeper-update-checkpoint.mjs
|
|
170
177
|
npx skills add . --list
|
|
171
178
|
```
|
|
172
179
|
|