wheypoint について
wheypoint は、新しいエージェントが作業を再開するために必要な決定、制約、未解決の質問、コンテキストを記録するチェックポイントスキルです。実行環境が構造化された意図を検証し、成果物リンクとリビジョン管理を含む永続記録を作成します。
主な機能
- 01決定、指示、質問の記録
- 02書き込み前のチェックポイント意図の検証
- 03成果物リンクとリビジョンの追跡
- 04作業記録の一覧表示と解決
- 05引き継ぎ用プロジェクションの生成
活用シーン
- 01エージェントセッション終了時のコンテキスト保持
- 02会話の圧縮後の作業再開
- 03タスクを終えずにフェーズのチェックポイントを記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ paulnsorensen/ easy-cheese --skill wheypointインストール後、Claude Code で/wheypointを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
wedge.tomlreferences/commands.mddelta-contract.mdintent-contract.mdlegacy-notes.mdparallel-handoffs.mdprovenance-fields.mdwork-graph.md詳細
/wheypoint
/wheypoint は、新しいエージェントが作業を再開するために必要な状態を記録します。
カルチャーセッション、フェーズスラッグのない作業、フェーズの チェックポイントして停止 オプションに使用します。 フェーズのチェックポイントは、単独で成立する非終端の Wheypoint レコードであり、フェーズの終端成果物ではありません。 ハードリミットに達したワーカーは観察結果を返し、チェックポイントの永続化はワーカーではなく親が実行します。
入力
- 会話が主な入力です。
- オプション引数は方向付けの行だけを整えます。焦点によって、決定、質問、指示が取り除かれることはありません。
ランタイムコマンド
すべてのコマンドは、このスキルのアーカイブを解決済みのインストール済みバンドルパス経由で実行してください。詳細は ../cheese/references/harness-portability.md を参照してください。
利用側のリポジトリに skills/ がない場合は、実行前にインストール済みバンドルパスを解決してください。easy-cheese のチェックアウトや現在の作業ディレクトリを決めつけないでください。
python3 skills/wheypoint/scripts/wheypoint.pyz turns [--session <id> | --transcript <path>]
python3 skills/wheypoint/scripts/wheypoint.pyz show <work-id> [--project <key>]
python3 skills/wheypoint/scripts/wheypoint.pyz validate [intent.json] [--base <revision_id>]
python3 skills/wheypoint/scripts/wheypoint.pyz checkpoint [intent.json] [--base <revision_id>]
python3 skills/wheypoint/scripts/wheypoint.pyz checkpoint <work-id> [--base <revision_id>] --question "<q>" --gates --rationale "<why>" --decision "<d>" --directive "<d>" --quote "<words>" --operator-directive "<style>" --operator-quote "<words>" [--owner <who> --when <trigger>] --link <ref> --kind <edge-kind> [--covers <id>]...
python3 skills/wheypoint/scripts/wheypoint.pyz schema checkpoint-intent
python3 skills/wheypoint/scripts/wheypoint.pyz resolve <absolute-path | work-id | slug> [--project <key>] [--workspace-root <checkout>]
python3 skills/wheypoint/scripts/wheypoint.pyz list [--scope project | machine] [--grep <text>]... [--status <s>]... [--next <move>]... [--project <key>]... [--entry-kind <k>]... [--entry-state <s>]... [--gated | --no-gated] [--edge-kind <k>]... [--linked-to <ref>]... [--forked-from <work-id>]... [--owner <who>]...
python3 skills/wheypoint/scripts/wheypoint.pyz log <work-id> [--project <key>]
python3 skills/wheypoint/scripts/wheypoint.pyz fork <parent> <child> --orientation "<child title>" [--next <move> [--artifact <a>]]
python3 skills/wheypoint/scripts/wheypoint.pyz export <slug | work-id | path> [--out <file>] [--include-operator] [--include-local]
python3 skills/wheypoint/scripts/wheypoint.pyz import <bundle.json> [--as <slug>] [--note-dir <dir> | --no-note]
python3 skills/wheypoint/scripts/wheypoint.pyz handoff render | parse | dispatch
1 回の list 呼び出しで複数の値を検索するには、--grep、--status、--next、または --project を繰り返してください。同じフラグのいずれかの値に一致する結果を保持し、異なるフラグは AND で組み合わせます。検索語ごとに list を繰り返し実行しないでください。Git チェックアウト外で --scope を指定せずに list を実行すると、マシンスコープを検索し、scope-fallback: machine を報告します。明示的に --scope を指定した場合は、その指定が維持されます。
fork が書き込むのは、forked_from エッジが 1 つある子のジェネシスレコードだけです。import が書き込むのはインポート済みレコードだけであり、bundle_digest は独自のフィールドを持たず、正規バンドルを対象とします。参照、エッジの種類、バンドル、および list のグラフフィルターについては references/work-graph.md を参照してください。
checkpoint --link でリンクを作成します。resolve は成果物リンク、根拠のあるパス、Git オブジェクト、カバレッジを検証します。完全一致がないスラッグは、一意の接頭辞、次に一意の部分文字列で解決されます。複数の一致がある場合は、すべての候補を含む ambiguous が返されます。
resolve、list、log、show、schema、turns は読み取り専用です。直接実行すると出力が返され、チェックポイントの書き込み前に STOP してください。
/cheese --continue は resolve を使用し、別のアーカイブを呼び出しません。スラッシュコマンドはホスト側の表示形式であり、制御モデルではありません。他のマシンにある結果を使用するには、その所有元のチェックアウトが必要です。継続プロトコルに従ってください。
親は永続化を、この機能への構造化されたチェックポイントタスクとして委任し、checkpoint の前に validate を実行します。ハードリミットに達したワーカーは、どちらのコマンドも実行しません。
フェーズスキルは、独自の wheypoint-resolve --ref <slug> コマンドで解決します。その結果、working_context、調査結果については references/delta-contract.md に従ってください。
フロー
- ユーザーの発言を読みます。
turnsを実行し、すべてのユーザーターンを確認できる状態にしておきます。 - 各ターンをエントリに対応付けるか、そのターンが記録されない理由を1行で記します。
- 再読み込みします。 作業 ID に対して
showまたはresolveを実行し、そのrevision_idを記録します。最初のチェックポイントにはベースは不要です。 - 既存レコードへの書き込みには、必ずその
revision_idを--base(またはbase_revision_id)として指定します。 コンパクション後は、書き込む前にもう一度読み込みます。 - 意図を書き込みます。
references/intent-contract.mdに従います。 - ユーザーが述べた制約や希望はそれぞれ、元の文言をそのまま
quoteに記したdirectiveエントリにします。 - 選択内容はそれぞれ、
rationaleを付けたdecisionエントリにします。 - 未解決の項目はそれぞれ
questionエントリにします。ブロッキングとなる質問にはrationaleを付けます。 - 保留中の選択肢は、
--gatesと、選択肢および以前の傾向を記した--rationaleを付けたquestionとして記録します。 - あとから読み返す人に必要な報告は
notesに記します。 - パスと URL は、内容ではなく
artifact_linksとworking_contextに記します。 - 検証します。
validate --base <revision_id>を実行し、指摘された問題をすべて修正します。 - チェックポイントを作成します。
checkpoint --base <revision_id>を実行します。base-revision-requiredまたはstale-parentを理由に拒否された場合は、もう一度読み込み、変更を再適用してから書き込みます。 - 報告します。 結果が示す永続化の状態と、再開用コマンドを伝えます。
ランタイムで適用される制約
ランタイムは意図を破棄せず、拒否します。
- 未知のキーは拒否され、そのパスが示されます。
- エントリも
notesも含まない最初のチェックポイントは拒否されます。 artifactに PR への参照がないnext: affinageは拒否されます。artifactがないnext: cookは拒否されます。- 認証情報に該当するパターンを含むテキストは拒否され、該当するフィールドが示されます。
- 空の
artifact_linksまたはremove_artifact_linksリストは拒否されます。 - ハンドバック契約に従って、ゲートとなるエントリから
status:が導出されます。作成者が設定することはありません。 baselineキーは破棄されず、拒否されます。Cook のベースラインは Cook の引き継ぎ情報に残します。- 差分で追加されるブロッキング質問には、それぞれ
rationaleが必要です。 - すべての識別子、ダイジェスト、リビジョンは導出されます。
- エージェントが作成した
fork遷移と、差分内のforked_fromエッジは拒否されます。 - 6000 文字を超える
notesは拒否されます。 working_contextまたはアーティファクトリンクのpath:lineは、HEADに該当ファイルがある場合、path:line@<short HEAD sha>に固定されます。それ以外の場合はunpinned-line-refの警告が表示されます(チェックアウトまたはコミットがない場合、あるいはファイルが未追跡、無視対象、または存在しない場合)。- 各ローカル参照(
xdg:参照、チェックアウト外の絶対パス、または Git の無視対象パス)は## Local referencesの下に一覧表示されます。 - decision が変更されても
notesが変わらない場合、stale-notesの警告が表示され、そのずれが## Notesの先頭に記されます。また、checkpoint --supersede <old> [--by <new>] --rationale <why>で置き換えられたエントリが## Supersededの下に一覧表示されます。
拒否された意図を修正し、もう一度 checkpoint を実行してください。
引き継ぎスラッグ
checkpoint コマンドは、生成された投影の先頭に共有プレアンブルを書き込みます。すべての利用側は parse_handoff_slug() を使ってこれを読み取ります。
status: <canonical status field>
next: mold | cook | press | age | cure | affinage | briesearch | culture | hold | tasks | done
artifact: <path, or PR#<n> / URL when next is affinage, else empty>
<one-line orientation: where the session is and what is mid-flight>
next: tasks の場合、投影では artifact: の後に mode: parallel のキー付き行が追加され、方向付けの後に続くキー付きブロックに Wheypoint のピンが入ります。
投影の本文には、ゲート、未解決のエントリ、decision、directive、notes、コンテキスト、アーティファクト、タスク、および最後の ## Identifiers セクションが表示されます。
投影のタイトルは # Wheypoint handoff です。
投影が正式な記録になることはありません。編集したり、手作業でここから再開したりしないでください。
next: の値
各 next: の値の意味は references/intent-contract.md に記載されています。briesearch と culture は読み取り専用のキックオフであり、tasks は references/parallel-handoffs.md に従います。
next: がない場合、引き継ぎは不正な形式です。後続のアクションがない場合は hold を使用してください。
期待される成功ではなく、未解決の質問から next: と status: を導き出してください。
すべての人間による判断には status: gated: を使用してください。再開したエージェントは、ディスパッチする前に共有の引き継ぎゲートを介して質問します。
手書きのメモ、その従来の値、およびその来歴フィールドについては、references/legacy-notes.md と references/provenance-fields.md を参照してください。
ルール
- 耐久性を高める目的で、Git のコミット、プッシュ、公開を行わないでください。
- メモを手書きせず、生成されたプロジェクションを編集せず、秘密の値を含めないでください。
- 各成果物はパスまたは URL で参照し、その内容をコピーしないでください。
- 完全な文を使用し、1 行につき 1 文を書いてください。
引き継ぎ
最後に、オリエンテーションと次のリンクを記載してください。Wheypoint dropped: [.cheese/notes/<slug>.md](<absolute-note-path>)。