mcpField
K
kk-add

kk-add

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

kk-add について

kk-addは、ユーザーが提供した知識を1件、Kenkeepのプロジェクト用ナレッジベースに記録するスキルです。既存ノードとの重複を確認し、ノードを作成してレビュー用に保存します。

主な機能

  1. 01ノードに必要な7項目をユーザーから収集
  2. 02既存ノードとの重複を確認
  3. 03ナレッジノードの下書き作成
  4. 04Kenkeep CLIによるノード保存
  5. 05サブエージェントによる下書きに対応

活用シーン

  1. 01プロジェクト固有の実践知の記録
  2. 02プロジェクト構成や概念のマップ追加
  3. 03重複確認後の新しい知識の記録

インストール

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

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

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

詳細

kk-add

プロジェクトのナレッジベースに知識を1件記録します。このセッションでノードの本文を作成し、node write プリミティブを使って保存します。レビュアーはディスク上のファイルを確認します。

ユーザーに次の7つの値を尋ねてください(どれも推測で補わないでください):kind(practice または map)、title(80文字以内)、summary(140文字以内)、tags(カンマ区切り)、body(Markdown全文。practiceの場合は根拠も含める)、relates_to(ノードIDのカンマ区切り。空でも可)、confidence(high/medium/low、デフォルトは high)。

実行前に .ai/kenkeep/ENTRY.md(すでにコンテキスト内にあります)に目を通し、nodes/ を grep して重複するノードがないか確認してください。重複がある場合は、既存ノードの編集、候補のタイトルの見直し、または記録の取りやめを提案してください。候補が次のいずれかに該当する場合は、記録しないよう促してください:コードだけで意味が明らかなもの、歴史、デバッグ手順、進行中の計画やタスクの内容、一般的なプログラミング知識。

プロジェクトルートの解決

付属の検出器を使ってリポジトリのルート(.ai/kenkeep を含むディレクトリ)を特定し、以降のすべてのコマンドで出力されたパスを作業ディレクトリとして扱ってください:

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

ノードの記録

プローブと任意のサブエージェントへの委任(コンテキストの分離)

共有付録 .ai/kenkeep/.config/prompts/sub-agent-delegation.md(プローブ、フォールバック規則)に従い、本文の作成をサブエージェントに委任するか、インラインで作成するかを判断してください。これは単一ユニットの委任です。並列処理も同時実行数の上限もありません。目的は、エージェントの検討内容がホストのトランスクリプトに残らないようにすることだけです。

プローブでディスパッチプリミティブが利用可能と判定された場合:

  1. runId を生成し、ログ/ドラフト用ディレクトリを準備します:

    RUN_ID=$(uuidgen 2>/dev/null || date -u +"add-%Y%m%dT%H%M%SZ")
    mkdir -p .ai/kenkeep/_logs/kk-add
    DRAFT_PATH="$(pwd)/.ai/kenkeep/_logs/kk-add/${RUN_ID}__1.draft.json"
    LOG_PATH="$(pwd)/.ai/kenkeep/_logs/kk-add/${RUN_ID}.jsonl"
    printf '%s\n' "{\"event\":\"delegating\",\"runId\":\"${RUN_ID}\",\"draftPath\":\"${DRAFT_PATH}\"}" >> "$LOG_PATH"
    
  2. 次の1行をユーザーに伝えます:「コンテキストを分離するため、このノードをサブエージェントで作成しています。エージェントの詳しい推論は .ai/kenkeep/_logs/kk-add/<runId>.jsonl で確認できます。」実際の runId に置き換えてください。

  3. 次と同等の指示で、ノード本文の作成をサブエージェント1つに委任します。

    ユーザーのために kenkeep ノード本文を1件だけ調整してください。入力は次のとおりです:kind=<kind>、title=<title>、summary=<summary>、tags=<tags>、relates_to=<relates_to>、confidence=<confidence>、body-draft=<body>。本文を、現在形で簡潔な1〜4段落のプロジェクト固有の内容に整えてください。根拠を捏造しないでください。ユーザーが根拠を提示していない場合は省略してください。タイトルは80文字以内、summaryは140文字以内とし、明確さのためにのみ調整してください。タイトルから slug を導出してください(小文字、ハイフン区切り、ASCII)。次のキーを正確に含むJSONとして、調整後のノードを絶対パス <DRAFT_PATH> に書き込んでください:kind、slug、title、summary、tags、confidence、relates_to、body。成功したらパスを返してください。

  4. サブエージェントの返答後、ホストが(サブエージェントではなく)$DRAFT_PATH を読み込み、JSONを検証します(パースできること、上記8つのキーを含むこと、文字数の上限を守ること)。その後、ホスト自身がこの同じセッションから node write を実行します。成功した場合は {"event":"drafted",...}、失敗した場合は {"event":"draft-invalid","reason":"..."} のJSONL行を1行追記します。検証に失敗しても中止せず、同じ実行内で以下のインライン作成手順にフォールバックしてください。どちらの場合も、ユーザーに表示する概要は変わりません。

ディスパッチプリミティブが利用できない場合は、以下のインライン作成手順に直接進んでください。

インラインでの下書き作成 + node write(デフォルトおよびフォールバック)

タイトルからスラッグを導き出します(小文字、ハイフン区切り、ASCII 文字のみ。例:Use the rm analytics dispatcher → use-the-rm-analytics-dispatcher)。次に、本文を標準入力から渡して node write を実行します(委任処理で有効な下書きが作成された場合は、その slug と推敲済みの body を使用します。それ以外の場合は、ユーザーが提供した7つの値をもとにインラインで下書きを作成します)。

npx --yes kenkeep@latest node write <kind> <slug> \
  --title "<title>" --summary "<summary>" \
  --tags "<tags>" --relates-to "<relates-to>" \
  --confidence <high|medium|low> <<'EOF'
<body markdown>
EOF

node write は標準入力から本文を読み取ります(ヒアドキュメント形式を使うと、複数行の Markdown をエスケープせずに渡せます)。成功すると、解決済みのノード ID だけを出力して、終了コード 0 で終了します。スキーマ検証に失敗すると、標準エラー出力にエラーを表示して、0 以外の終了コードで終了します。

スラッグの競合時の動作。 提案したスラッグのノードがすでにディスク上に存在する場合、ensureUniqueId によって末尾に -2、-3 などが自動的に付加されるため、出力される ID が入力したスラッグと異なる場合があります。これは致命的なエラーではありません。ユーザーが正しいファイルを確認できるよう、出力された ID をそのまま伝えてください。コマンドが0以外の終了コードで終了するのは、スキーマの重大なエラー(--title の欠落、--confidence の形式不正など)がある場合に限られます。

実行後、出力された ID とファイルパス(このスキルでは --folder を渡さないため、ルートにある nodes/<id>.md)をユーザーに伝え、ファイルを確認して承認(残す)するか、却下(rm)するよう促します。

コメント