mcpField
K
kk-session-extract

kk-session-extract

github.com/e0ipsoエージェントワークフロー3338 回インストール1 週間前に更新
リポジトリ

kk-session-extract について

kk-session-extractは、現在表示されているセッションから永続的なプロジェクト知識を抽出し、キュレーション用にステージングするエージェントスキルです。ホストのコンテキスト内で提案の検証、重複排除、保存、インデックス再構築を進め、バックグラウンド処理は起動しません。

主な機能

  1. 01表示中のセッションから提案を抽出
  2. 02リポジトリ固有の抽出指示を読み込み
  3. 03セッションID付きでログをステージング
  4. 04キュレーター操作を検証
  5. 05操作を重複排除して保存
  6. 06インデックス再構築と再バランス

活用シーン

  1. 01進行中のセッションから再利用可能な知見を記録
  2. 02抽出した知識をプロジェクトのキュレーションに回す
  3. 03重複操作を避けながら提案を処理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/e0ipso/kenkeep --skill kk-session-extract

インストール後、Claude Code で/kk-session-extractを入力して読み込まれたか確認します。

詳細

kk-session-extract

表示中の現在のセッションから長期的に有用なプロジェクト知識を抽出し、通常の proposal_status: done セッションログとしてステージングしたうえで、共通のキュレーション処理の末尾をただちに実行します。ホスト内でライブコンテキストウィンドウを使って動作します。ヘッドレスハーネスの起動やデーモンは使用しません。

使い分け: ユーザーが対象ノードを把握している場合は /kk-add を使用します。現在のセッションで長期的に有用な学びが得られた場合は /kk-session-extract を使用します。蓄積されたキャプチャログを後から処理する場合は /kk-curate を使用します。

部分的なコンテキストに関する警告: コンパクションが発生している場合、表示中のコンテキストは不完全なことがあります。ランタイムが完全なトランスクリプトを提供していない限り、抽出内容は「表示中のコンテキストからの抽出」と説明し、「セッション全体からの抽出」とは説明しないでください。

プロジェクトルートを解決する

同梱の検出ツールを使用してリポジトリルート(.ai/kenkeep を含むディレクトリ)を解決し、表示されたパスを以下のすべてのコマンドの作業ディレクトリとして扱ってください。

KK_REPO_ROOT=$(node .ai/kenkeep/scripts/kk-detect-root.mjs) || exit $?
cd "$KK_REPO_ROOT" || exit $?
pwd

1. ライブコンテキストから提案を抽出する

  1. 抽出プロンプトを読み込みます。 最初に .ai/kenkeep/.config/prompts/proposal-extract.md(リポジトリごとのオーバーライド)を読み込みます。このファイルが存在しない場合は、インストール済み npm パッケージを基準にした同梱テンプレート templates/prompts/proposal-extract.md を読み込みます。プロンプトの抽出ルールに従ってください。ここにその内容を複製して埋め込まないでください。

  2. ライブトランスクリプトの代替データを作成します。 このセッションで表示できる会話(まだ確認できるユーザーとエージェントの各ターン)から、ロールタグ付きトランスクリプトを作成します。テキストを使用する前に、<kk-private>…</kk-private> の範囲を削除してください。

  3. プレースホルダーを置換します。 読み込んだプロンプト内の [TRANSCRIPT PLACEHOLDER, substituted at runtime] を、ライブトランスクリプトの代替データに置き換えます。プロンプトにプレースホルダーがない場合は、抽出失敗を報告し、書き込みを行わずに停止してください。

  4. プロンプトを変更せずに適用します。 厳密な ProposalOutputSchema に一致する JSON オブジェクト { "practice": [...], "map": [...] } を生成します。各エントリーには { type, tags, title, description, body, kk_confidence } のみを含めてください。従来の supports_existing_node / contradicts_existing_node フィールドは出力しないでください。

  5. 処理可否の判定を行います。 セッションがメタ情報のみ、探索的な内容、放棄された内容、無関係な内容である場合、または長期的に有用な学びがない場合は、長期的に有用な知識が見つからなかったと報告して停止してください。ステージング、キュレーション、ノードへの書き込みは行いません。これは失敗ではなく、成功です。

2. ライブ提案をステージングする

抽出結果に候補が1つ以上ある場合:

  1. セッション ID を解決します。 利用可能な場合は、ハーネスのライブ UUID-v4 セッション ID を優先します。有効な UUID-v4 を取得できない場合は --generate-session-id を使用し、ユーザーに冪等性が低下することを報告してください(後続のキャプチャがこのログと一致しない可能性があります)。

  2. 検証済み JSON をステージングプリミティブにパイプします。

    echo '<json>' | npx kenkeep@latest session-log stage-live --session-id <uuid-v4>
    # or, when no live id is available:
    echo '<json>' | npx kenkeep@latest session-log stage-live --generate-session-id
    
  3. 標準出力に表示される1行の JSON サマリー(path、session_id、idempotency)を記録します。idempotency が degraded の場合は、冪等性が低下したことを明示して報告してください。

ステージングされたログは .ai/kenkeep/_sessions/ に保存され、proposal_status: done と captured_by: manual が設定されます。

3. キュレーターのアクションを作成する

このステージング済みセッションのキュレーターとして、ログ内の提案を読み、候補ごとに1つの CuratorAction を作成します。/kk-curate のステップ2と同じルール(アクション分類、candidate_origin は <session_id>:<practice|map>:<index>、関連付けと配置、ツリー全体の重複認識)に従ってください。別のアクションルールの権威を作り出さないでください。/kk-curate のキュレーターの規則に従ってください。

実行 ID を一度だけ生成します。

RUN_ID=$(uuidgen 2>/dev/null || date -u +"curate-%Y%m%dT%H%M%SZ")
PROPOSALS=$(mktemp -t kk-session-extract-proposals.XXXXXX.json)
SURVIVORS=$(mktemp -t kk-session-extract-survivors.XXXXXX.json)

作成したアクションの配列(トップレベルが JSON 配列)を $PROPOSALS に書き込み、重複排除の前に検証します:npx --yes kenkeep@latest validate curator-output "$PROPOSALS"。終了コードがゼロ以外の場合は、パスが示すエラーを読み、該当するアクションを修正して、検証に合格するまで再検証してください。正確な形式が必要な場合は、kk schema curator-output を実行すると JSON Schema が表示されます。

4. スコープ付きプリミティブで重複を除去して処理済みとして記録する

ステージング済みセッションのみを対象にして、curate-dedup を1 回だけ呼び出します。

STAGED_SESSION_ID=<session_id from stage-live output>
npx --yes kenkeep@latest curate-dedup \
  --input "$PROPOSALS" --output "$SURVIVORS" --run-id "$RUN_ID" \
  --session-id "$STAGED_SESSION_ID"

これにより、ステージング済みのライブログのみが処理済みとして記録されます。_sessions/ 内の無関係な proposal_status: done ログは、後の /kk-curate でも引き続き利用できます。

標準出力の JSON サマリー(kept、conflicts、stamped、runId)を取得し、ユーザーに報告します。

5. curate-persist で残ったアクションを永続化する

/kk-curate のステップ 5 に正確に従い、$SURVIVORS を curate-persist で永続化します。サマリーに含まれるアクションごとの失敗を提示し、成功した書き込みは保持して、再構築を続けます。

6. インデックスを再構築する

npx --yes kenkeep@latest index rebuild

6b. リバランス(最終フェーズ)

/kk-curate のステップ 6b に正確に従います。rebalance trigger を実行し、actions が空の場合はスキップします。空でない場合は、名前が指定されたブランチに対してのみ操作を提案し、rebalance move で適用します。

7. 競合を報告して解決する

/kk-curate のステップ 7 に従い、主な数値、書き込み先のリーフごとの配置、構造的リバランスの概要を報告します。その後、競合が生成されている場合は .ai/kenkeep/conflicts/ 内の保留中の競合を順に確認します。

8. 引き継ぐ

ユーザーに .ai/kenkeep/nodes/ 配下の変更されたノードを確認し、git commit で確定するよう伝えます。ステージング済みのセッションログは処理済みとして記録されています。同じ session_id に対する後のキャプチャフックでは、curator_processed_at / curator_run_id が保持されます。

制約

  • 実行ごとに curate-dedup を 1 回だけ呼び出し、ステージング済みログには必ず --session-id を指定します。
  • 抽出結果の提案が空の場合は、書き込みを行いません。
  • UUID-v4 の検証を緩和してはいけません。--generate-session-id を使用した場合は、冪等性の低下を報告します。
  • このスキルからヘッドレスハーネスやバックグラウンドワーカーを起動してはいけません。

コメント