mcpField
C
CommitLore

CommitLore

ローカル
github.comメモリ・ナレッジ181 週間前に更新

CommitLore について

CommitLoreはリポジトリの判断記録をGitに保存し、編集対象のパスに関係する有効な判断をコーディングエージェントに提供します。判断のライフサイクルと信頼度を管理し、失効した指針を現行のものとして提示しません。

主な機能

  1. 01制約や却下した案の記録
  2. 02Git trailerまたはnotesへの保存
  3. 03有効、置換済み、期限切れの判断を管理
  4. 04リポジトリのパスに応じたコンテキスト選択
  5. 05記録の信頼度評価

活用シーン

  1. 01編集前に関連する判断をエージェントへ提示
  2. 02チームの制約をコードとともに保存
  3. 03却下済みの案の再提案を防止
  4. 04判断のライフサイクルを確認・管理

MCP 対応

Gemini CLI、Cursor、Windsurf、opencodeなどのホスト向けに、MCP経由で判断手順とパス別コンテキストを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

CommitLore

CommitLore

同じ誤ったアイデアを何度もレビューするのはやめましょう。

Git が管理する、コーディングエージェントのための意思決定の根拠。
制約、却下した代替案、警告を Git に保存し、現在も有効なものだけを届けます。これにより、リポジトリですでに覆された判断をエージェントに渡さずに済みます。

ホスト型のメモリーはありません。記録はリポジトリが管理します。

CI 最新リリース 安定版プロトコル 2.0 Node.js 22.23.2 以降 MIT ライセンス

English · 한국어 · 日本語 · 简体中文

一度インストール。 あとは、使いたい各リポジトリで初期化します。

curl -fsSL https://raw.githubusercontent.com/MongLong0214/commitlore/v1.7.5/install.sh | sh -s v1.7.5
先にインストーラーを確認しますか?
curl -fsSLO https://raw.githubusercontent.com/MongLong0214/commitlore/v1.7.5/install.sh
sh install.sh v1.7.5

# Or skip the script: the checkout it makes is one you can make yourself.
git clone --depth 1 --branch v1.7.5 https://github.com/MongLong0214/commitlore
node commitlore/dist/commitlore.mjs --version

ソースを固定したチェックアウトと、node <checkout>/dist/commitlore.mjs を実行するラッパーをインストールします。コンパイル済みのダウンロードも、ビルド手順もありません。

commitlore のデモでは、src/pricing.ts に関する記録済みの判断が 2 件表示されます。有効な判断だけが、その制限事項と却下した代替案とともに提示され、置き換えられた判断は Git に残るものの、現在のガイダンスとしては提示されないことが示されます。


コードは残ります。判断の根拠は残りません。

エージェントがあるアプローチを提案します。チームは、見落としやすい制約を理由にそれを却下します。最終的なコードには結論が反映されますが、通常、代替案を却下した理由までは残りません。後から別のエージェントがコードだけを見て、同じアイデアを再び提案します。

CommitLore は、その判断の根拠をコードと一緒に保持します。

CommitLore の機能

動作製品上の経路
記録差分からは分からない制約、却下した代替案、警告を保持します。候補はセッションのトランスクリプトとステージ済みの差分に照らして確認されます。commitlore capture
保持承認された記録を、ホスト型のメモリーデータベースではなく、Git のトレーラーまたはノートに保存します。コミットフック · refs/notes/commitlore
ライフサイクルを追跡有効、置き換え済み、期限切れの判断を区別して保持します。commitlore stale
スコープを設定エージェントが編集しようとしているパスに応じて、判断を選択します。commitlore context
信頼度を評価記録を指示、主張、または保留コンテンツとして提示します。デフォルト/署名モード
提示対応するエージェントに、編集前の最新コンテキストを提供します。プラグインフック · MCP

ほとんどのコミットに記録は必要ありません。CommitLore は、コードでは保持できない判断の根拠のためのものであり、変更のすべてを説明するためのものではありません。

60 秒で判断を理解するエージェントを導入

1. CLI をインストール

macOS と Linux:

curl -fsSL https://raw.githubusercontent.com/MongLong0214/commitlore/v1.7.5/install.sh | sh -s v1.7.5

Windows:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/MongLong0214/commitlore/v1.7.5/install.ps1))) v1.7.5

Node.js 22.23.2+ と Git が必要です。スクリプトは何かを書き込む前に、両方があることを確認します。

2. エージェントを接続

Claude Code:

/plugin marketplace add MongLong0214/commitlore
/plugin install commitlore@commitlore

Codex:

commitlore plugin install-codex

プラグインは commitlore を PATH に追加しないため、以下のコマンドを使うには CLI もインストールする必要があります。インストーラーは、安全に設定できる場合、対応する MCP ホストも検出して接続します。対応状況の一覧は以下をご覧ください。

3. リポジトリを初期化する
cd your-repository
commitlore init
commitlore context .

プラグインをインストールまたは更新した後は、新しいエージェントセッションを開始してください。実行中のセッションでは、読み込み済みのランタイムがそのまま使用されます。

その後は、通常どおり作業してコミットできます。対応するスキル統合では、通常のコミット依頼時に CommitLore が考慮され、記録する価値があるものがなければ何も行いません。コミットのたびに CommitLore を指定する必要はありません。

受け入れた記録を、記録ごとの確認なしでステージングしたい場合は、リポジトリで一度だけ commitlore auto on を有効にできます。このポリシーはリポジトリが管理し、チーム全体に適用されるため、このページによって暗黙的に有効になることはありません。

エージェントが受け取る内容

src/pricing.ts を編集する前に:

commitlore: active records for src/pricing.ts

Limit
  [claim]      r-price01  a1b2c3d4  calculatePrice owns final checkout pricing only

Ruled-out
  [claim]      r-price01  a1b2c3d4  Reuse it for admin quotes | eligibility and rounding semantics differ

[claim] は「情報として考慮する」という意味です。リポジトリでは、より強い署名付き権限モードを有効にできます。情報を渡すことでエージェントにコンテキストを提供しますが、編集を妨げることはありません。

セキュリティモデル →

なぜ Git なのか?

リポジトリが、そのコードに関する判断を管理するべきです。

CommitLore は通常の Git トレーラーとノートに記録を保存するため、記録はブランチ、マージ、クローン、レビューが可能で、説明対象のコードとともにプロバイダーの変更後も保持されます。

SQLite は再構築可能なインデックスにすぎません。削除しても、記録は Git に残ります。

過去の判断を見つけるだけでは不十分です

一般的なメモリーシステムや検索システムでは、次のように尋ねます。

関連しているように見える過去のテキストはどれですか?

CommitLore では、次のように尋ねます。

記録された判断のうち、今このパスに適用されるものはどれですか?

置き換えられた判断は非常に関連性が高くても、現在の指針としては誤っている可能性があります。関連性と権限は別の問題です。

仕組み

src/pricing.ts について、Git 履歴にある有効な判断が、次の編集前に渡されるコンテキストへ移され、制約と却下された代替案も引き継がれます。管理者向け見積もりも対象としていた以前の判断は置き換えられており、履歴には残りますが、現在の指針として引き継がれることはありません。

  1. 記録 — エージェントは、差分からは分からない判断のコンテキストだけを下書きします。
  2. 検証 — CommitLore は、下書きをセッションおよびステージ済み差分と照合します。
  3. 保持 — 受け入れられた記録は、識別情報とライフサイクル情報とともに Git に保存されます。
  4. 提供 — 以降の編集前に、そのパスに有効な記録だけが返されます。

ほとんどのコミットには記録がありません。コミットフックは、記録がある場合にそれを検証します。記録を作り出すことはありません。

既存のフックは上書きされません。commitlore init は core.hooksPath を尊重し、すでにインストールされているフックを <hook>.commitlore-chained に移動して、先に呼び出します。commitlore hooks uninstall を実行すると元に戻ります。

自動で行われること

ホスト編集前の情報提供検証済み記録ワークフロー毎回のコミットでの決定的な記録
Claude Codeプラグイン経由で自動プラグインスキルから利用可能認定されていません
Codexプラグイン経由で自動プラグインスキルから利用可能認定されていません
Hermescommitlore hermes install の実行後に利用可能ホストのインストール後に利用可能認定されていません
Gemini CLI、Cursor、Windsurf、opencodeホストが登録を使用する場合は MCP 経由で情報提供MCP 経由で手順を提供なし
AGENTS.md ホスト手順のみ手順のみなし

「利用可能」とは、prepare → verify → stage のワークフローが存在することを意味します。対象となるすべてのコミットが自動的に評価されるという意味ではありません。

対応するスキルホストのユーザーは、コミットのたびに「CommitLore に記録して」と伝える必要はありません。残る制約はホスト側での開始方法であり、記録ごとにユーザーがコマンドを指定する必要はありません。

スカッシュマージするリポジトリ

スカッシュマージでは、ブランチのコミットが新しい1つのコミットに置き換えられます。そのコミットには、ブランチのトレーラーは引き継がれません。リポジトリでスカッシュボタンを使ってマージする場合、ブランチ上で作成された記録は、スカッシュしたコミットに何かが引き継がない限り、マージ時に失われます。

この問題には2つの対処方法があり、そのうち1つは一度だけセットアップが必要です。

スカッシュの方法記録を引き継ぐものセットアップ
ローカルでの git merge --squashSQUASH_MSG を使う、インストール済みの prepare-commit-msg フック不要 — commitlore init で設定済みです
GitHub の Squash and merge ボタンaction/preserve GitHub Action以下のワークフロー

GitHub は独自のサーバー上でこのマージを実行するため、ローカルの git フックは一切実行されず、マージを認識できません。その時点で必要な情報、つまりプルリクエスト、そのコミット群、そしてそれらがスカッシュされた先のコミットをすべて持っているのは、この Action だけです。

.github/workflows/commitlore-preserve.yml を追加してください。

name: CommitLore squash inheritance

# pull_request_target, not pull_request: a pull request from a fork gets a
# read-only token on pull_request, so the job would build the record and then
# fail to publish it.
on:
  pull_request_target:
    types: [closed]

permissions:
  contents: write   # the one push to refs/notes/commitlore

concurrency:
  group: commitlore-notes
  cancel-in-progress: false

jobs:
  preserve:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          # the merge commit is on the base branch, and a closed pull request
          # has no merge ref left to check out
          ref: ${{ github.event.pull_request.base.ref }}
          fetch-depth: 0

      # the mirror this action writes; publishing from a checkout that never
      # read it would fork the notes history
      - run: git fetch --no-tags origin '+refs/notes/commitlore:refs/notes/commitlore'

      # a squash merge usually deletes the branch, and then the pull request's
      # own ref is the only one still reaching the commits that carry records
      - run: git fetch --no-tags --force origin
          '+refs/pull/${{ github.event.pull_request.number }}/head:refs/commitlore/pr-head'

      # The action runs CommitLore from a checkout of this repository: the
      # package is private, so there is no published npm name to fall back to.
      # `dist/` is committed (ADR-0011), so nothing needs building.
      - uses: actions/checkout@v4
        with:
          repository: MongLong0214/commitlore
          ref: v1.7.5
          path: .commitlore-cli
          persist-credentials: false

      - uses: MongLong0214/commitlore/action/[email protected]
        with:
          cli-path: .commitlore-cli/dist/cli.js

次にこの設定を編集する人のために、2つのルールがあります。pull_request_target は書き込み可能なトークンで実行されるためです。ここではプルリクエストの head をチェックアウトしないこと、また refs/commitlore/pr-head から到達できるものを絶対に実行しないことです。フォークのコミットは、実行するコードではなく、トレーラーを読み取るためのデータとして扱ってください。

commitlore doctor は、squash inheritance の項目で、この設定が有効になっているかを報告します。記録が失われる前にそのことを示します。すでに失われた記録を報告する行は squash conservation です。

マージコミットまたはリベースでマージする場合、記録は自動的に残るため、この設定は不要です。

測定結果ではなく、ある現場の報告

無関係なリポジトリで、v1.2.1 を初めてインストールした人による、ある1回の実行結果です。ここに書かれていることは何も測定されておらず、証拠ログにも含まれていません。このページに載せているのは、上の段落が、ここにあるどの表にも含まれていないループについて述べているからです。

その人はエージェントに丸め誤差のバグを修正するよう頼み、ある十進数ライブラリはすでに検討され、採用を見送ったことをついでに伝え、最後に「コミットして」と指示しました。CommitLore の名前は一度も出ていません。コミットに含まれていた内容の一部です。

Ruled-out: adopting a decimal library such as Decimal.js | the backend is a
  number contract, so it is meaningless
Warn: do not revert the test file to console.assert: it exits 0 even on
  failure, so CI passes silently
Provenance: drafted

Warn はエージェントに指示されたものではありません。作業中に落とし穴に気づき、次に作業する人のために残したものです。Provenance: drafted は、記録を人間が読んでいないことを示しており、そのため claim と評価されます。これは命令ではなく、判断材料として検討すべき報告として提示されます。

共有履歴のない後のセッションで、今度は十進数ライブラリを採用するよう求められました。エージェントは採用せず、その理由としてこの記録を挙げました。また、評価も確認しています。claim は指示ではないため、同意する前に、記載された理由をコードと照らし合わせて確認しました。

メモリーストレージとの違い

一般的なメモリー/RAGCommitLore
主な問い関連する古いテキストはどれですか?どの決定が今ここでも有効ですか?
権限の所在メモリーストアまたはプロバイダーGit
適用範囲意味的な類似性リポジトリのパス
ライフサイクル多くの場合、追加を優先有効 · 置き換え済み · 期限切れ
信頼性取得したテキスト指示 · 主張 · ブロック済み
取り込みトランスクリプトまたはメモの保存証拠を確認した決定記録
移植性バックエンドに依存通常の Git

CommitLore は意図的に対象を絞っています。一般的なユーザーメモリーシステムでも、会話アーカイブでも、ベクトルデータベースの代替でもありません。

エビデンス

質問測定結果範囲
登録済みの研究で、主張の根拠となるコンテキストによって再提案は変化しましたか?CommitLore を使用した場合は 2.8%(16/580)、使用しなかった場合は 18.8%(109/579)1 つのモデル、1 つのハーネス、構築されたタスク
ライフサイクルのフィルタリングにより、測定対象のアクティブなビューに失効したレコードが含まれなくなりましたか?失効したレコードは 0 件置き換えられたレコードは存在しましたが、期限切れのレコードはありませんでした
インデックス検索はスケールしますか?10 万件のコミットで p50 が 496 msインデックスを使用しないフォールバックははるかに低速です

インデックスの構築時間は、コミット数ではなくレコード数に応じて増加します。負荷の高い処理はレコードごとに 1 回実行されるため、レコードの記録が少ない長い履歴のほうが、レコードが密集した短い履歴よりも速く構築できます。

大きな履歴がモデルに届かないようにするのは、パスのスコープです。#167 のコーパスでは、10,002 件のレコードのうち、モデルに届いたのは 2 件だけでした。

経路モデルに表示されたレコード関連レコードモデルに表示されたトークン数
すべてを注入10,0022/21,004,554
上位 k 件の語彙検索21/2190
CommitLore のパススコープ22/2335

これは、レコード数を 2 件に固定した場合の情報露出と再現率を測定したものであり、トークンコスト、請求額、精度、エージェントの振る舞いを測定したものではありません。1 つのコーパス、1 つのクエリ、固定された 1 つの埋め込みモデルに基づいています。

エージェントの研究は、あらゆるモデルに共通する効果を示すものではありません。情報が提供されたことは、モデルがレコードを読んだ、またはそれに従った証明にはなりません。

手法、完全な表、除外項目、否定的な結果 →

制限、信頼性、プライバシー

  • キャプチャは支援機能であり、決定論的ではありません。 対応するスキルは通常のコミット要求を考慮しますが、対象となるすべてのコミットを評価できると認定されたホストはありません。
  • デフォルトのディレクティブモードは認証ではありません。 コミットの作成者ヘッダーと照合しますが、コミットを書き込める人なら誰でもそのヘッダーを設定できるため、デフォルトモードでの [directive] はポリシーメタデータであり、本人確認の証明ではありません。 署名モードではさらに、Git 自身の検証済みステータスと、リポジトリローカルの commitlore.trustedSigner 許可リストとの一致が必要です。署名者の許可リストが存在しない、空である、または読み取れない場合は誰も許可されず、このモードはフェイルクローズします。
  • ガードは実験的な助言機能であり、安全網ではありません。 417 件の判断コーパスにおける適合率は 44.8%(95% Wilson 信頼区間 32.7%~57.5%)、再現率は 22.0%です。ガード結果が空でも、安全性が保証されたわけではありません。
  • 配信では、一致するツール呼び出しごとにトークンを消費します。 編集前フックは Edit、Write、MultiEdit、NotebookEdit だけでなく Read の際にも起動するため、編集エージェントがコミットする頻度を大幅に上回ります。起動するたびに、デフォルトで 800 トークンのペイロード予算を上限として消費します。この上限は --budget で変更できます。レコードのないリポジトリでは何も消費されません。つまり、このコストはインストール時ではなく、利用が始まってから発生します。
  • 回答が一部のみの場合があります。 カバレッジは開示されます。一部のみの結果に記録が含まれていなくても、その記録が存在しない証拠にはなりません。commitlore coverage はスキャンが到達した範囲を報告します。
  • コミットトレーラーはクローンとともに移行しますが、ノートは移行しません。 Git はデフォルトでは refs/notes/* をフェッチしないため、refs/notes/commitlore 内のレコードは、commitlore init でそのミラーを設定するまで通常のクローンには含まれません。
  • ホスト型バックエンドはありません。 ただし、サーバーまたはフックがコンテキストを返した後は、ホストが自身のポリシーに従ってそのコンテキストを処理します。CommitLore はそのデータフローを制御しません。

セキュリティ · 互換性 · エビデンス

セキュリティと信頼モデル

レコードは、評価されるまでは信頼できません。デフォルトの作成者照合はポリシーメタデータであり、認証ではありません。署名付きディレクティブモードでは、Git による検証とリポジトリローカルの署名者許可リストが必要です。許可リストが存在しない、または読み取れない場合は誰も許可されません。インジェクションを意図した形式のペイロードは、モデルが読み取れるルートへの配信を保留されます。

セキュリティモデルの全文 →

インストール、アップグレード、旧世代のフック

CLI インストーラーは、認識していないリポジトリ内のフックを書き換えることができません。また、実行中のホストセッションでは、読み込み済みのランタイムがそのまま使われます。commitlore doctor はこの両方の状態と修復方法を示し、commitlore upgrade はより新しいリリースがあるかどうかを報告します。

インストールとアップグレード →

プロトコルと Git ストレージ

レコードは通常の Git トレーラーまたはノートです。プロトコル 2.0 では、ライフサイクル、信頼度、検証、互換性を定義します。

一般向けガイド → · 規範仕様 →

エビデンスと否定的な結果

このリポジトリでは、手法、除外事項、測定に成功しなかった事例、元のベンチマークや診断が誤っていた事例を公開しています。

エビデンス → · 自己監査 →


履歴のあるリポジトリでお試しください。
パスの範囲、ライフサイクル、キャプチャ、インストールで問題が発生する箇所をお知らせください。

失敗事例を報告する · 自己監査を読む


## ドキュメント

コントリビューション

CONTRIBUTING.md では、このリポジトリが遵守する記録プロトコル、リリースゲート、および証拠を再現する方法について説明しています。

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。