@deltafleet/goalkeeper 0.2.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 +29 -0
- package/CODE_OF_CONDUCT.md +13 -0
- package/CONTRIBUTING.md +57 -0
- package/LICENSE +22 -0
- package/README.ja.md +220 -0
- package/README.ko.md +220 -0
- package/README.md +220 -0
- package/README.zh-CN.md +220 -0
- package/SECURITY.md +32 -0
- package/docs/RELEASE.md +79 -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 +65 -0
- package/src/goalkeeper/SKILL.md +166 -0
- package/src/goalkeeper/agents/openai.yaml +5 -0
- package/src/goalkeeper/references/event-schema.md +63 -0
- package/src/goalkeeper/references/guardrail.md +64 -0
- package/src/goalkeeper/references/workflow.md +187 -0
- package/src/goalkeeper/scripts/goalkeeper-append-event.mjs +263 -0
- package/src/goalkeeper/scripts/goalkeeper-doctor.mjs +490 -0
- package/src/goalkeeper/scripts/goalkeeper-init.mjs +271 -0
- package/src/goalkeeper/scripts/goalkeeper-turn-start.mjs +166 -0
- package/src/goalkeeper/scripts/goalkeeper-update-checkpoint.mjs +339 -0
- package/src/goalkeeper/templates/AGENTS.goalkeeper.md +48 -0
- package/src/goalkeeper/templates/CLAUDE.goalkeeper.md +48 -0
- package/src/goalkeeper/templates/active-session +1 -0
- package/src/goalkeeper/templates/checkpoint.md +54 -0
- package/src/goalkeeper/templates/context-pack.md +45 -0
- package/src/goalkeeper/templates/event.jsonl +3 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Goalkeeper are documented here.
|
|
4
|
+
|
|
5
|
+
This project follows [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [0.2.0] - 2026-05-18
|
|
8
|
+
|
|
9
|
+
- Renamed the public project to `goalkeeper`.
|
|
10
|
+
- Renamed the npm package to `@deltafleet/goalkeeper`.
|
|
11
|
+
- Generalized the skill for Claude Code, Codex, and other skill-compatible coding agents.
|
|
12
|
+
- Added a Claude Code guardrail template and doctor support for `CLAUDE.md`.
|
|
13
|
+
- Kept backward-compatible `codex-goalkeeper-*` CLI aliases for existing users.
|
|
14
|
+
|
|
15
|
+
## [0.1.1] - 2026-05-18
|
|
16
|
+
|
|
17
|
+
- Moved the installable skill payload into `src/goalkeeper/` so Skills CLI installs only skill files.
|
|
18
|
+
- Kept repository docs, tests, examples, and GitHub metadata outside the installable skill directory.
|
|
19
|
+
- Added Node.js 18+ requirement notes to the README files.
|
|
20
|
+
|
|
21
|
+
## [0.1.0] - 2026-05-18
|
|
22
|
+
|
|
23
|
+
Initial public release.
|
|
24
|
+
|
|
25
|
+
- Added the `goalkeeper` skill.
|
|
26
|
+
- Added project-local `.goalkeeper/` session layout.
|
|
27
|
+
- Added checkpoint, context pack, and JSONL event workflow.
|
|
28
|
+
- Added helper scripts for init, turn start, event append, checkpoint update, and doctor checks.
|
|
29
|
+
- Added examples, templates, multilingual READMEs, and open-source operating docs.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
Goalkeeper uses a simple contributor standard:
|
|
4
|
+
|
|
5
|
+
- Be direct, respectful, and specific.
|
|
6
|
+
- Critique ideas and patches, not people.
|
|
7
|
+
- Assume good intent, but prioritize technical clarity.
|
|
8
|
+
- Do not harass, threaten, insult, or target people based on identity, background, or affiliation.
|
|
9
|
+
- Keep issues and pull requests focused on the project.
|
|
10
|
+
|
|
11
|
+
Maintainers may remove comments, close issues, block users, or restrict participation when behavior makes the project harder to use or maintain.
|
|
12
|
+
|
|
13
|
+
Report conduct concerns privately through the security contact in [SECURITY.md](SECURITY.md).
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for considering a contribution to Goalkeeper.
|
|
4
|
+
|
|
5
|
+
The project has one strong bias: keep the core small enough that agents will actually use it during long work.
|
|
6
|
+
|
|
7
|
+
## Good Contributions
|
|
8
|
+
|
|
9
|
+
- Make checkpoint-first recovery easier to follow.
|
|
10
|
+
- Improve script reliability without adding hidden services.
|
|
11
|
+
- Improve documentation, examples, or translations.
|
|
12
|
+
- Add tests around existing helper behavior.
|
|
13
|
+
- Tighten validation or error messages.
|
|
14
|
+
|
|
15
|
+
## Contributions That Need Extra Justification
|
|
16
|
+
|
|
17
|
+
- New persistent state beyond `.goalkeeper/`.
|
|
18
|
+
- Background processes.
|
|
19
|
+
- Runtime hooks into private host-agent internals.
|
|
20
|
+
- Global databases or cross-project indexing.
|
|
21
|
+
- Large abstractions around the five core helper scripts.
|
|
22
|
+
|
|
23
|
+
These may be useful later, but they should not enter the project without a clear real-world failure case.
|
|
24
|
+
|
|
25
|
+
## Local Validation
|
|
26
|
+
|
|
27
|
+
Run:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm run validate
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Manual equivalent:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
find src/goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
37
|
+
node tests/test-goalkeeper-update-checkpoint.mjs
|
|
38
|
+
find examples -name '*.jsonl' -print0 | xargs -0 -n1 jq -c . >/dev/null
|
|
39
|
+
npx skills add . --list
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Pull Request Checklist
|
|
43
|
+
|
|
44
|
+
- Keep `SKILL.md` concise.
|
|
45
|
+
- Keep `README.md` useful for first-time readers.
|
|
46
|
+
- Update translated READMEs when changing the public workflow.
|
|
47
|
+
- Update `CHANGELOG.md` for user-visible changes.
|
|
48
|
+
- Update `docs/RELEASE.md` if the release process changes.
|
|
49
|
+
- Do not add secrets, local `.goalkeeper/` state, or generated scratch output.
|
|
50
|
+
|
|
51
|
+
## Versioning
|
|
52
|
+
|
|
53
|
+
Use SemVer:
|
|
54
|
+
|
|
55
|
+
- Patch for docs, examples, tests, and compatible bug fixes.
|
|
56
|
+
- Minor for new compatible helpers or workflow fields.
|
|
57
|
+
- Major for breaking checkpoint, event, or script contracts.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Deltafleet
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.ja.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Goalkeeper
|
|
2
|
+
|
|
3
|
+
長い agent 作業は、たいてい一気に壊れるわけではありません。
|
|
4
|
+
|
|
5
|
+
少しずつ方向を失います。
|
|
6
|
+
|
|
7
|
+
エージェントはまだ自信ありげに話します。テストも実行します。計画も一見もっともらしいままです。しかし compaction、handoff、resume が重なると、いちばん重要な感覚が静かに薄れていきます。
|
|
8
|
+
|
|
9
|
+
> なぜ、この方針で進んでいたのか?
|
|
10
|
+
|
|
11
|
+
Goalkeeper は、長い `/goal` 作業が compaction、resume、handoff をまたいでも方向を保てるようにする小さな skill です。
|
|
12
|
+
|
|
13
|
+
隠れたメモリエンジンを追加するものではありません。エージェントに耐久性のある作業習慣を与えます。
|
|
14
|
+
|
|
15
|
+
- 短い checkpoint を保つ
|
|
16
|
+
- より詳しい context pack を保つ
|
|
17
|
+
- 決定と検証を event log に残す
|
|
18
|
+
- drift が起きやすい境界の後は、続行前に checkpoint を読む
|
|
19
|
+
|
|
20
|
+
退屈なファイル。より良い継続性。
|
|
21
|
+
|
|
22
|
+
[English](README.md) | [한국어](README.ko.md) | [中文](README.zh-CN.md)
|
|
23
|
+
|
|
24
|
+
## インストール
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx skills add deltafleet/goalkeeper
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
特定の agent を明示する場合:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx skills add deltafleet/goalkeeper --agent claude-code codex
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
要件: Node.js 18+ と `npx`。長い goal workflow で、agent は skill に同梱された Node helper script を使います。
|
|
37
|
+
|
|
38
|
+
Skill-compatible agent は、リクエストが metadata と強く一致する installed skill を自動で読み込むことがあります。Goalkeeper の metadata は `/goal`、長い作業、compaction、resume、handoff、continuity preservation に反応するように書かれています。
|
|
39
|
+
|
|
40
|
+
そのため、次のような goal だけで有効になることがあります。
|
|
41
|
+
|
|
42
|
+
> `/goal` Harden this release over a long-running session. Keep the goal, constraints, rejected paths, failed attempts, verification state, and next action recoverable after compact/resume.
|
|
43
|
+
|
|
44
|
+
ただし skill activation は routing decision であり、private agent runtime hook ではありません。Goalkeeper がすべての goal に強制的に自分を適用することはできません。
|
|
45
|
+
|
|
46
|
+
重要な長期作業では、goal を作る時点、または goal 作成直後で本格作業に入る前に、明示的に呼び出すのがもっとも安全です。
|
|
47
|
+
|
|
48
|
+
> Use goalkeeper for this `/goal`. Keep the goal, constraints, decisions, verification state, failed attempts, and next action recoverable across compaction.
|
|
49
|
+
|
|
50
|
+
その後、ユーザーが Goalkeeper の helper script を手で実行する必要はありません。agent が skill workflow の一部として実行します。
|
|
51
|
+
|
|
52
|
+
## 問題
|
|
53
|
+
|
|
54
|
+
短い作業なら、compaction はたいてい大きな問題になりません。エージェントは大まかに復旧できます。
|
|
55
|
+
|
|
56
|
+
しかし長い goal は違います。
|
|
57
|
+
|
|
58
|
+
実際のセッションを想像してください。
|
|
59
|
+
|
|
60
|
+
1. agent にリリース hardening を任せます。
|
|
61
|
+
2. いちばん分かりやすい patch は目の前の bug を直しますが、rollback compatibility を壊す可能性があります。
|
|
62
|
+
3. ユーザーは強い制約を置きます。database schema は変更せず、backward compatibility を維持する。
|
|
63
|
+
4. 2 回目の試行は unit test を通りますが、integration edge case で失敗します。
|
|
64
|
+
5. agent は compatibility shim と targeted regression test の組み合わせに決めます。
|
|
65
|
+
6. regression test が通ります。このルートが安全なルートになります。
|
|
66
|
+
7. コンテキストが compact されます。
|
|
67
|
+
8. 後でエージェントは「release hardening はほぼ完了」というきれいな要約で戻ってきます。
|
|
68
|
+
9. goal は残っています。しかし、なぜ schema shortcut を禁止し続ける必要があるのか、なぜ前の patch が失敗したのか、なぜその regression test が重要なのかは薄れているかもしれません。
|
|
69
|
+
|
|
70
|
+
ここから drift が始まります。
|
|
71
|
+
|
|
72
|
+
失敗の原因は「モデルが全部忘れた」ことではありません。もっと厄介です。続けるだけの記憶はあるが、同じ方向で続けるだけの記憶がないのです。
|
|
73
|
+
|
|
74
|
+
それは次のような形で現れます。
|
|
75
|
+
|
|
76
|
+
- ユーザーがすでに拒否した方針を再び開く
|
|
77
|
+
- 失敗理由が要約から落ち、同じ試行を繰り返す
|
|
78
|
+
- 未検証の仮説を確定事実のように扱う
|
|
79
|
+
- 長い handoff の後で正確な next action を失う
|
|
80
|
+
- goal は残るが運用上の制約を失う
|
|
81
|
+
- 説明は滑らかだが実際の作業ストリームからずれる
|
|
82
|
+
|
|
83
|
+
Goalkeeper は「goal は残っているが、セッションの方向感覚が弱くなった」その隙間を埋めるためのものです。
|
|
84
|
+
|
|
85
|
+
## Agent がすること
|
|
86
|
+
|
|
87
|
+
skill が有効になると、agent はプロジェクト内に継続性フォルダを維持します。
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
.goalkeeper/
|
|
91
|
+
active-session
|
|
92
|
+
sessions/
|
|
93
|
+
<goal-session-id>/
|
|
94
|
+
checkpoint.md
|
|
95
|
+
context-pack.md
|
|
96
|
+
events.jsonl
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
それぞれの役割は違います。
|
|
100
|
+
|
|
101
|
+
- `checkpoint.md`: 再開時に最初に読む短い復旧状態
|
|
102
|
+
- `context-pack.md`: checkpoint には長すぎるが compaction 後も残すべき判断理由
|
|
103
|
+
- `events.jsonl`: 決定、失敗した試行、コマンド根拠、検証、リスク、handoff の記録
|
|
104
|
+
|
|
105
|
+
active goal が目的地なら、Goalkeeper はなぜこのルートがまだ正しいのかを保ちます。
|
|
106
|
+
|
|
107
|
+
## 仕組み
|
|
108
|
+
|
|
109
|
+
Goalkeeper は長いエージェント作業を単純なループにします。
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
長い /goal が始まる
|
|
113
|
+
-> agent が Goalkeeper セッションを作成または再開する
|
|
114
|
+
-> 重要な制約と決定を記録する
|
|
115
|
+
-> 失敗した試行を残し、同じ失敗を繰り返さないようにする
|
|
116
|
+
-> 信頼度が変わる検証根拠を残す
|
|
117
|
+
-> 意味のある境界で checkpoint.md を更新する
|
|
118
|
+
-> context-pack.md が深い判断理由を保つ
|
|
119
|
+
-> resume、handoff、compaction が疑われる後、agent は checkpoint.md を最初に読む
|
|
120
|
+
-> checkpoint が薄ければ context-pack.md を読む
|
|
121
|
+
-> 正確な証拠が必要なら events.jsonl または source file を確認する
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
これは会話 transcript の保存ではありません。作業状態の保存です。
|
|
125
|
+
|
|
126
|
+
## あえて小さくしています
|
|
127
|
+
|
|
128
|
+
このプロジェクトを大きくするのは簡単です。
|
|
129
|
+
|
|
130
|
+
- daemon
|
|
131
|
+
- database
|
|
132
|
+
- session rewriter
|
|
133
|
+
- private runtime hook
|
|
134
|
+
- vector memory layer
|
|
135
|
+
- full transcript engine
|
|
136
|
+
|
|
137
|
+
Goalkeeper は意図的にその方向を避けます。
|
|
138
|
+
|
|
139
|
+
ファイルを使う理由は、見える、レビューできる、移動しやすい、そして compaction 後にエージェントが読み返しやすいからです。目的は agent を全知にすることではありません。次の turn を正しい状態から始めることです。
|
|
140
|
+
|
|
141
|
+
## これは何ではないか
|
|
142
|
+
|
|
143
|
+
- Codex または Claude Code plugin ではありません。
|
|
144
|
+
- MCP server ではありません。
|
|
145
|
+
- database ではありません。
|
|
146
|
+
- 完全な会話 transcript の保存庫ではありません。
|
|
147
|
+
- private agent runtime hook ではありません。
|
|
148
|
+
- 完璧な記憶を保証しません。
|
|
149
|
+
- compaction の頻度を下げません。
|
|
150
|
+
|
|
151
|
+
Goalkeeper は継続性を改善します。コンテキスト制限が消えるふりはしません。
|
|
152
|
+
|
|
153
|
+
## 何が良くなるか
|
|
154
|
+
|
|
155
|
+
Goalkeeper を使うと、再開されたセッションが次を復旧できる可能性が上がります。
|
|
156
|
+
|
|
157
|
+
- ユーザーの non-negotiable constraints
|
|
158
|
+
- 現在の実装方向
|
|
159
|
+
- 拒否した代替案がなぜ今も拒否されるべきか
|
|
160
|
+
- 信頼度を変えたテストやコマンド
|
|
161
|
+
- 実際の next action
|
|
162
|
+
- 雑に流してはいけない unresolved risks
|
|
163
|
+
|
|
164
|
+
長いエージェント作業で起きる退屈で高くつく失敗の多くは、これだけでも減らせます。
|
|
165
|
+
|
|
166
|
+
## リポジトリ構成
|
|
167
|
+
|
|
168
|
+
```text
|
|
169
|
+
src/goalkeeper/ # installable skill payload
|
|
170
|
+
SKILL.md
|
|
171
|
+
agents/openai.yaml
|
|
172
|
+
scripts/
|
|
173
|
+
templates/
|
|
174
|
+
references/
|
|
175
|
+
tests/ # maintainer tests
|
|
176
|
+
examples/goalkeeper-session # static example state
|
|
177
|
+
docs/ # roadmap and release policy
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Maintainer Validation
|
|
181
|
+
|
|
182
|
+
リポジトリ maintainer 向けの検証です。
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npm run validate
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
手動では次を実行します。
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
find src/goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
192
|
+
node tests/test-goalkeeper-update-checkpoint.mjs
|
|
193
|
+
npx skills add . --list
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## バージョン管理
|
|
197
|
+
|
|
198
|
+
Goalkeeper は SemVer を使います。
|
|
199
|
+
|
|
200
|
+
- Patch: 文書、例、テスト、互換性のあるバグ修正
|
|
201
|
+
- Minor: 互換性のある helper または workflow field の追加
|
|
202
|
+
- Major: checkpoint、event、script contract の破壊的変更
|
|
203
|
+
|
|
204
|
+
リリース手順は [docs/RELEASE.md](docs/RELEASE.md) を参照してください。
|
|
205
|
+
|
|
206
|
+
## コントリビューション
|
|
207
|
+
|
|
208
|
+
Issue と PR を歓迎します。ただし、このプロジェクトの基準は厳格です。
|
|
209
|
+
|
|
210
|
+
- core workflow を小さく保つ
|
|
211
|
+
- 隠れた runtime dependency を追加しない
|
|
212
|
+
- 完璧な復旧を約束しない
|
|
213
|
+
- global state より project-local file を優先する
|
|
214
|
+
- 変更は検証コマンドで証明する
|
|
215
|
+
|
|
216
|
+
詳しくは [CONTRIBUTING.md](CONTRIBUTING.md)、[SECURITY.md](SECURITY.md)、[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) を参照してください。
|
|
217
|
+
|
|
218
|
+
## ライセンス
|
|
219
|
+
|
|
220
|
+
MIT. [LICENSE](LICENSE) を参照してください。
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Goalkeeper
|
|
2
|
+
|
|
3
|
+
긴 agent 작업은 보통 한 번에 망가지지 않습니다.
|
|
4
|
+
|
|
5
|
+
조금씩 방향을 잃습니다.
|
|
6
|
+
|
|
7
|
+
에이전트는 여전히 자신 있게 말합니다. 테스트도 돌립니다. 계획도 그럴듯해 보입니다. 그런데 compact, handoff, resume이 반복된 뒤에는 가장 중요한 감각이 조용히 흐려질 수 있습니다.
|
|
8
|
+
|
|
9
|
+
> 우리가 왜 이 방향으로 가고 있었지?
|
|
10
|
+
|
|
11
|
+
Goalkeeper는 긴 `/goal` 작업이 compact, resume, handoff를 지나도 방향을 잃지 않도록 돕는 작은 skill입니다.
|
|
12
|
+
|
|
13
|
+
숨겨진 메모리 엔진을 추가하지 않습니다. 대신 에이전트에게 지속 가능한 작업 습관을 줍니다.
|
|
14
|
+
|
|
15
|
+
- 짧은 checkpoint를 유지한다
|
|
16
|
+
- 더 풍부한 context pack을 유지한다
|
|
17
|
+
- 결정과 검증을 event log에 남긴다
|
|
18
|
+
- drift가 생기기 쉬운 경계 이후에는 계속하기 전에 checkpoint를 먼저 읽는다
|
|
19
|
+
|
|
20
|
+
지루한 파일들. 더 나은 연속성.
|
|
21
|
+
|
|
22
|
+
[English](README.md) | [日本語](README.ja.md) | [中文](README.zh-CN.md)
|
|
23
|
+
|
|
24
|
+
## 설치
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx skills add deltafleet/goalkeeper
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
특정 agent를 명시하려면 다음처럼 설치할 수 있습니다.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx skills add deltafleet/goalkeeper --agent claude-code codex
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
요구사항: Node.js 18+와 `npx`. 긴 goal workflow에서 agent가 skill에 포함된 Node helper script를 사용합니다.
|
|
37
|
+
|
|
38
|
+
Skill-compatible agent는 설치된 skill 중 요청과 관련성이 높은 skill을 자동으로 불러올 수 있습니다. Goalkeeper의 metadata는 `/goal`, 긴 작업, compact, resume, handoff, continuity 보존 신호에 반응하도록 작성되어 있습니다.
|
|
39
|
+
|
|
40
|
+
그래서 아래처럼 goal 자체가 충분히 분명하면 자동으로 붙을 수 있습니다.
|
|
41
|
+
|
|
42
|
+
> `/goal` 이번 릴리스를 장기 세션으로 안정화해줘. compact/resume 이후에도 목표, 제약, 거부한 경로, 실패한 시도, 검증 상태, 다음 액션이 복구 가능하게 관리해줘.
|
|
43
|
+
|
|
44
|
+
하지만 skill 활성화는 agent runtime hook이 아니라 routing 판단입니다. Goalkeeper가 모든 goal에 자신을 강제로 붙일 수는 없습니다.
|
|
45
|
+
|
|
46
|
+
중요한 장기 작업이라면 goal을 만들 때, 또는 goal을 만든 직후 본격 작업 전에 명시적으로 호출하는 편이 가장 안전합니다.
|
|
47
|
+
|
|
48
|
+
> 이 `/goal`에는 goalkeeper를 사용해줘. 목표, 제약, 결정, 검증 상태, 실패한 시도, 다음 액션이 compact 이후에도 복구 가능하게 관리해줘.
|
|
49
|
+
|
|
50
|
+
그 다음부터 사용자가 Goalkeeper의 helper script를 직접 실행할 필요는 없습니다. agent가 skill workflow의 일부로 실행합니다.
|
|
51
|
+
|
|
52
|
+
## 문제
|
|
53
|
+
|
|
54
|
+
짧은 작업에서 compact는 대개 큰 문제가 아닙니다. 에이전트가 대충 복구할 수 있습니다.
|
|
55
|
+
|
|
56
|
+
하지만 긴 goal은 다릅니다.
|
|
57
|
+
|
|
58
|
+
실제 세션을 상상해보면 이렇습니다.
|
|
59
|
+
|
|
60
|
+
1. agent에게 릴리스 hardening을 맡깁니다.
|
|
61
|
+
2. 가장 쉬운 patch는 눈앞의 bug는 고치지만 rollback compatibility를 깨뜨릴 수 있습니다.
|
|
62
|
+
3. 사용자는 강한 제약을 둡니다. database schema는 바꾸지 말고, backward compatibility를 유지해야 합니다.
|
|
63
|
+
4. 두 번째 시도는 unit test를 통과하지만 integration edge case에서 실패합니다.
|
|
64
|
+
5. agent는 compatibility shim과 targeted regression test 조합으로 방향을 정합니다.
|
|
65
|
+
6. regression test가 통과합니다. 이제 이 경로가 안전한 경로입니다.
|
|
66
|
+
7. 컨텍스트가 compact됩니다.
|
|
67
|
+
8. 나중에 에이전트는 “release hardening은 거의 됨” 같은 깔끔한 요약으로 돌아옵니다.
|
|
68
|
+
9. goal은 기억하지만, 왜 schema shortcut이 계속 금지되어야 하는지, 앞선 patch들이 왜 실패했는지, 그 regression test가 왜 중요한지는 희미해질 수 있습니다.
|
|
69
|
+
|
|
70
|
+
여기서 drift가 시작됩니다.
|
|
71
|
+
|
|
72
|
+
실패 원인은 “모델이 전부 잊었다”가 아닙니다. 더 까다롭습니다. 계속할 만큼은 기억하지만, 같은 방향으로 계속할 만큼은 기억하지 못합니다.
|
|
73
|
+
|
|
74
|
+
이런 순간에 드러납니다.
|
|
75
|
+
|
|
76
|
+
- 사용자가 이미 거부한 접근을 다시 연다
|
|
77
|
+
- 실패 이유가 요약에서 사라져 같은 시도를 반복한다
|
|
78
|
+
- 검증되지 않은 가정을 확정 사실처럼 다룬다
|
|
79
|
+
- 긴 handoff 뒤에 정확한 next action을 잃는다
|
|
80
|
+
- goal은 유지하지만 운영 제약을 잃는다
|
|
81
|
+
- 설명은 매끄럽지만 실제 작업 흐름과 어긋난다
|
|
82
|
+
|
|
83
|
+
Goalkeeper는 “goal은 남아 있지만 세션의 방향 감각은 약해진” 그 틈을 메우기 위한 도구입니다.
|
|
84
|
+
|
|
85
|
+
## Agent가 하는 일
|
|
86
|
+
|
|
87
|
+
skill이 활성화되면 agent는 프로젝트 안에 연속성 폴더를 유지합니다.
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
.goalkeeper/
|
|
91
|
+
active-session
|
|
92
|
+
sessions/
|
|
93
|
+
<goal-session-id>/
|
|
94
|
+
checkpoint.md
|
|
95
|
+
context-pack.md
|
|
96
|
+
events.jsonl
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
각 파일의 역할은 다릅니다.
|
|
100
|
+
|
|
101
|
+
- `checkpoint.md`: 다시 시작할 때 먼저 읽는 짧은 복구 상태
|
|
102
|
+
- `context-pack.md`: checkpoint에는 너무 길지만 compact 이후에도 살아남아야 하는 판단 근거
|
|
103
|
+
- `events.jsonl`: 결정, 실패한 시도, 명령 근거, 검증, 리스크, handoff 기록
|
|
104
|
+
|
|
105
|
+
active goal이 목적지를 말한다면, Goalkeeper는 왜 이 경로가 아직 맞는지를 보존합니다.
|
|
106
|
+
|
|
107
|
+
## 동작 원리
|
|
108
|
+
|
|
109
|
+
Goalkeeper는 긴 에이전트 작업을 단순한 루프로 바꿉니다.
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
긴 /goal이 시작된다
|
|
113
|
+
-> agent가 Goalkeeper 세션을 만들거나 재개한다
|
|
114
|
+
-> 중요한 제약과 결정을 기록한다
|
|
115
|
+
-> 실패한 시도를 남겨 같은 삽질을 반복하지 않게 한다
|
|
116
|
+
-> 신뢰도가 바뀌는 검증 근거를 남긴다
|
|
117
|
+
-> 의미 있는 경계마다 checkpoint.md를 갱신한다
|
|
118
|
+
-> context-pack.md가 더 깊은 판단 근거를 보존한다
|
|
119
|
+
-> resume, handoff, compact 의심 이후 agent는 checkpoint.md를 먼저 읽는다
|
|
120
|
+
-> checkpoint가 얇으면 context-pack.md를 읽는다
|
|
121
|
+
-> 정확한 증거가 필요하면 events.jsonl이나 source file을 확인한다
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
이것은 대화 transcript 저장이 아닙니다. 작업 상태 보존입니다.
|
|
125
|
+
|
|
126
|
+
## 일부러 작게 만들었습니다
|
|
127
|
+
|
|
128
|
+
이 프로젝트를 크게 만드는 방법은 쉽습니다.
|
|
129
|
+
|
|
130
|
+
- daemon
|
|
131
|
+
- database
|
|
132
|
+
- session rewriter
|
|
133
|
+
- private runtime hook
|
|
134
|
+
- vector memory layer
|
|
135
|
+
- full transcript engine
|
|
136
|
+
|
|
137
|
+
Goalkeeper는 의도적으로 그 방향을 피합니다.
|
|
138
|
+
|
|
139
|
+
파일을 쓰는 이유는 파일이 보이고, 검토 가능하고, 옮기기 쉽고, compact 이후에도 에이전트가 다시 읽기 쉽기 때문입니다. 목표는 agent를 전지전능하게 만드는 것이 아닙니다. 다음 turn이 올바른 상태에서 시작하게 만드는 것입니다.
|
|
140
|
+
|
|
141
|
+
## 이것이 아닌 것
|
|
142
|
+
|
|
143
|
+
- Codex 또는 Claude Code plugin이 아닙니다.
|
|
144
|
+
- MCP server가 아닙니다.
|
|
145
|
+
- 데이터베이스가 아닙니다.
|
|
146
|
+
- 전체 대화 transcript 저장소가 아닙니다.
|
|
147
|
+
- private agent runtime hook이 아닙니다.
|
|
148
|
+
- 완벽한 기억을 보장하지 않습니다.
|
|
149
|
+
- compact 빈도를 줄이지 않습니다.
|
|
150
|
+
|
|
151
|
+
Goalkeeper는 연속성을 개선합니다. 컨텍스트 한계를 없애는 척하지 않습니다.
|
|
152
|
+
|
|
153
|
+
## 좋아지는 것
|
|
154
|
+
|
|
155
|
+
Goalkeeper를 쓰면 resume된 세션이 다음을 복구할 가능성이 높아집니다.
|
|
156
|
+
|
|
157
|
+
- 사용자의 non-negotiable constraints
|
|
158
|
+
- 현재 구현 방향
|
|
159
|
+
- 거부된 대안이 왜 여전히 거부되어야 하는지
|
|
160
|
+
- 신뢰도를 바꾼 테스트나 명령
|
|
161
|
+
- 실제 next action
|
|
162
|
+
- 대충 넘기면 안 되는 unresolved risks
|
|
163
|
+
|
|
164
|
+
긴 에이전트 작업에서 발생하는 지루하고 비싼 실패 상당수는 이 정도만으로도 줄어듭니다.
|
|
165
|
+
|
|
166
|
+
## 저장소 구조
|
|
167
|
+
|
|
168
|
+
```text
|
|
169
|
+
src/goalkeeper/ # installable skill payload
|
|
170
|
+
SKILL.md
|
|
171
|
+
agents/openai.yaml
|
|
172
|
+
scripts/
|
|
173
|
+
templates/
|
|
174
|
+
references/
|
|
175
|
+
tests/ # maintainer tests
|
|
176
|
+
examples/goalkeeper-session # static example state
|
|
177
|
+
docs/ # roadmap and release policy
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Maintainer Validation
|
|
181
|
+
|
|
182
|
+
저장소 maintainer용 검증입니다.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npm run validate
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
수동으로는 다음을 실행합니다.
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
find src/goalkeeper/scripts tests -name '*.mjs' -print0 | xargs -0 -n1 node --check
|
|
192
|
+
node tests/test-goalkeeper-update-checkpoint.mjs
|
|
193
|
+
npx skills add . --list
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## 버전 관리
|
|
197
|
+
|
|
198
|
+
Goalkeeper는 SemVer를 사용합니다.
|
|
199
|
+
|
|
200
|
+
- Patch: 문서, 예제, 테스트, 호환 가능한 버그 수정
|
|
201
|
+
- Minor: 호환 가능한 helper 또는 workflow field 추가
|
|
202
|
+
- Major: checkpoint, event, script contract의 breaking change
|
|
203
|
+
|
|
204
|
+
릴리스 절차는 [docs/RELEASE.md](docs/RELEASE.md)를 참고하세요.
|
|
205
|
+
|
|
206
|
+
## 기여
|
|
207
|
+
|
|
208
|
+
Issue와 PR은 환영합니다. 단, 프로젝트의 기준은 엄격합니다.
|
|
209
|
+
|
|
210
|
+
- core workflow는 작게 유지한다
|
|
211
|
+
- 숨겨진 runtime dependency를 추가하지 않는다
|
|
212
|
+
- 완벽한 복구를 약속하지 않는다
|
|
213
|
+
- global state보다 project-local file을 우선한다
|
|
214
|
+
- 변경사항은 검증 명령으로 증명한다
|
|
215
|
+
|
|
216
|
+
자세한 내용은 [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)를 참고하세요.
|
|
217
|
+
|
|
218
|
+
## 라이선스
|
|
219
|
+
|
|
220
|
+
MIT. [LICENSE](LICENSE)를 참고하세요.
|