githippo について
githippoは、Claudeや他のMCPクライアント向けの長期記憶MCPサーバーです。ユーザーが所有するGitリポジトリにMarkdownで記憶を保存し、セマンティック検索、クエリ可能なナレッジグラフ、コンテキスト圧縮用チェックポイントで情報を保ちます。
主な機能
- 01Gitで管理するMarkdown記憶
- 02セマンティック検索とグラフ検索
- 03圧縮後も残るチェックポイント
- 04保存前の機密情報検出
- 05ローカル埋め込みによる多言語検索
活用シーン
- 01セッションをまたいでプロジェクト情報を保持
- 02コンテキスト圧縮後に未完了タスクを復元
- 03Gitで記憶の変更を確認・取り消し
- 04別の言語でメモを検索
MCP 対応
MCPクライアントに記憶の検索、書き込み、チェックポイントなどの機能を提供します。コア記憶をサーバー指示に含められ、リモートのStreamable HTTP接続にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Claude はコンテキストが圧縮されるとすべてを忘れてしまいます。
githippo は忘れません。
Claude とあらゆる MCP クライアント向けの長期記憶です。あなたが所有する git リポジトリに、プレーンな Markdown として保存されます。ハイブリッドなセマンティック検索、ナレッジグラフ、自動メモリー、コンテキスト圧縮後の記憶維持を備え、1 ターンあたりのツールオーバーヘッドは約 790 トークンです。すべての記憶は、読んだり、差分を確認したり、元に戻したりできる git コミットです。
curl -fsSL https://raw.githubusercontent.com/AnxovatomicaES/githippo/main/install.sh | sh
インストールはこれだけです。アカウントも、トークンも、質問も不要です。ローカルのメモリーボルトをセットアップし、Claude Code(フック、MCP、ステータスライン)を接続して、セマンティック検索をバックグラウンドで取得します。Claude Code を再起動して、あとは普通に話しかけてください。記憶してくれます。
バックアップを取り、複数のマシン間で同期したいですか?githippo sync --github を実行すると、既存の GitHub CLI ログインを使ってプライベートリポジトリを作成し、変更のたびにプッシュします。まず試してみたいですか?npx -y github:AnxovatomicaES/githippo#v3.9.3 demo を実行すれば、何もインストールせずに 30 秒で動作を確認できます。
ワンクリックで → claude.ai やスマートフォンから利用できます
なぜ、また新しいメモリーサーバーを作ったのですか?
世の中にある優れたアイデアは、それぞれ別のツールに分かれているからです。githippo はそれぞれの優れた点を取り入れ、使いづらい部分を改善します。
| アイデア | 参考元 | githippo ならではの工夫 |
|---|---|---|
| エンティティ、関係、観察 | MCP reference memory server | エンティティは Markdown ファイル、関係は [[wikilinks]] で表現し、検索は部分文字列ではなくセマンティック検索です。「好みの言語」で「TypeScript」が見つかります |
| 編集可能な Markdown、Obsidian のグラフ | Basic Memory | 同じく人が読めるファイルですが、git 経由で同期されます。すべてのデバイスで利用でき、履歴も完全に保持され、クラウド料金はかかりません |
型付きの関係(works_on [[x]]) | Basic Memory、Dataview | クエリ可能なグラフに解析され、記憶を呼び出すとリンクを自動で 1 段階たどります |
| 時系列の事実(「前四半期に正しかったことは?」) | Graphiti / Zep | 更新された事実は消えるのではなく、日付付きの履歴セクションに移動します。さらに history at=<date> を使えば、グラフ DB も LLM 呼び出しも不要で、git から正確な過去の状態を確認できます |
| ピン留めされた「コアメモリー」ブロック | Letta (MemGPT) | コアメモリーはMCP サーバーの指示文に組み込まれ、その指示文はシステムプロンプトに含まれるため、claude.ai を含むあらゆるクライアントでコンテキスト圧縮後も維持されます |
| コンテキスト圧縮前後のライフサイクルフック | claude-mem | PreCompact フックはトランスクリプトからチェックポイントを決定論的に構築します(目標、TODO の状態、変更したファイル、中断した場所)。LLM 不要、コスト不要、幻覚も起こりません |
| 段階的な情報開示 | claude-mem | recall mode=brief は、すべてのコンテキストを取得する前に、1 行の参照情報(約 45 トークン)を返します |
| 統合/重複排除 | mcp-memory-service、Mem0 | 書き込みのたびに埋め込みベースの重複検出を行い、maintain で健全性レポートを作成します。オプションの LLM 統合では、情報が失われる書き換え(リンクやフロントマターの削除)を拒否します |
| claude.ai 向けリモート MCP | Supermemory、Mem0 | セルフホスト可能な Streamable HTTP 方式です。データがリポジトリから外に出ることはなく、サーバーもあなた自身で管理できます |
バージョン 3.1 では、ほかの 9 つのメモリツールのソースを読み、それぞれの優れたアイデアを取り入れました。詳細とクレジットはdocs/prior-art.mdをご覧ください。<private> タグ、コンパクションの制御と要約の取得、セッション差分の比較、アクティビティを考慮した減衰、コードを考慮したトークナイザー、チェックポイント内のエラー、正直なステータス行、プラグインのパッケージ化、alwaysLoad の登録を取り入れています。 |
そのほかの機能:
- コンプライアンスガード。 秘密鍵(PGP を含む)や API トークン(Anthropic、OpenAI、GitHub、AWS、Slack、Stripe、Google、SendGrid、npm、Hugging Face、JWT)、パスワードやシークレットの代入(
password: …、DB_PASSWORD=…、AWS_SECRET_ACCESS_KEY=…)、パスワードが埋め込まれた接続文字列、カードのセキュリティコード、IBAN(mod-97 で検証し、スペースやハイフンにも対応)、カード番号(Luhn アルゴリズムで検証し、隣接する数字がほかにあっても検出)、スペインの DNI/NIE、フランスの NIR(チェックサムを検証)、英国の国民保険番号(大文字表記)、米国の SSN が git の恒久的な履歴に残る前にブロックします。見た目が似た文字、ほかの文字体系の数字、ゼロ幅文字を読み取り、「password: required」、「tokens: 128000」のような通常の文章や「12/10/26」のようなスペイン式の日付には反応しません。また、不透明なAuthorization: Bearer/Basicヘッダー、GitLab、Google OAuth、Slack、Discord の Webhook トークンやボットトークン、Telegram、Twilio、Mailgun、Azure、Shopify、PyPI、DigitalOcean のトークン、STRIPE_KEY=形式の環境変数行、PIN、引用符付き JSON、Markdown の太字、「the password is …」形式のパスワードも検出します。base64 でエンコードされたもの、単語の途中で分割されたもの、URL エンコードされたものは検出できません。これは最後の防御策であり、DLP ではありません。 - コンパクションに耐える設計を 3 つの方法で実現しています(詳細は以下をご覧ください)。
- 言語をまたいだ想起。 デフォルトの多言語エンベッダーはローカルで実行されます。スペイン語で質問して、英語で書かれたメモを見つけられます。
- 更新が重複と誤認されることはありません。 「ローンチは第 1 四半期末」と「第 2 四半期末」は、ほぼ同じようにエンベッドされます。githippo は数字、日付、名前も比較するため、更新内容は保存され、古い行にはフラグが付き、
maintainが矛盾の可能性を報告します。測定結果はdocs/calibration.mdをご覧ください。各事実に、もう一方にはない内容語が 1 つある場合(「暗い」/「明るい」、「毎週」/「毎月」、「読み取り」/「書き込み」)、どちらも重複とは判定されません。キーワードの一致度もエンベッディングも、類義語と反対の意味を区別できないためです。新しい事実は保存され、更新の可能性を示すフラグが付き、maintainはその組み合わせを矛盾の可能性として一覧表示します。(このルールが導入される前は、このような 12 組のうち半数がキーワードモードでひそかに削除されていました。) - 楽観的同時実行制御。 同じメモリを 2 つのセッションが編集しても互いの変更を上書きしません。競合した側には最新のファイルが返され、それをマージできます。
圧縮を越えて、3 層で記憶を保持
Claude Code が長いセッションを圧縮すると、会話が要約され、細部は失われます。githippo は大切な情報を確実に残します。
flowchart LR
A[Context fills up] --> B[PreCompact hook]
B -->|parse transcript, no LLM| C[checkpoint: goal, todos, files, where it stopped]
C --> D[(local ~/.githippo)]
C --> E[(repo sessions/)]
F[Compaction] --> G[SessionStart hook, source=compact]
D --> G
G -->|injects the state itself, not a reminder to read it| H[Claude continues exactly where it stopped]
I[MCP instructions + core memory] -.->|system prompt, never compacted| H
- システムプロンプト内のコアメモリ。 MCP サーバーの指示は会話の一部ではないため、圧縮の影響を受けません。ピン留めした事実は、どの MCP クライアントでも常に参照できます。
- フックによるチェックポイント(Claude Code)。よくある不満として、状態ファイルを再読込するよう Claude に促すだけの圧縮後フックは、うまくいくこともあれば、いかないこともあります。githippo は内容を直接挿入します。チェックポイントは約 900 トークンに制限されています。セッションがその量を超える場合は、価値の低い情報から順に削除します(以前の要約、コマンド、古い依頼、完了したタスク)。目標、未完了のタスク、停止した箇所は決して削除しません。
checkpointツール(claude.ai を含む、すべてのクライアント)。Claude は節目ごとにタスク、状態、次のステップを保存します。コンテキストを失った後は、引数なしでcheckpointを実行すると復元できます。
さらに、同じプロジェクトとブランチで 24 時間以内に新しいセッションを開始すると、「前回は…」という簡単なメモが表示され、以降に Git で発生した変更(コミット、他のユーザーによるコミット、ブランチの切り替え、削除されたファイル)も含まれます。UserPromptSubmit フックは、一致の確度が高い場合に、関連性の高いメモリを最大 3 件、先回りして提示します。300 トークンに制限されており、些細なプロンプトは対象外で、セッション内で同じ内容を繰り返すことはありません。プロンプト内にある、ボールトが一度も見たことのない単語は、一致度の判定で不利に働きます。そのため、「refactor」や「use」など、メモと共通する一般的な単語が 2 つあるだけの通常のコーディング用プロンプトでは、メモリは提示されません。1,000~10,000 件のメモを使ったテストでは、関連のないコーディング用プロンプト 20 件のうち挿入が発生したものはなく、意図的に用意した質問 40 件ではすべて、適切なメモが提示されました(test/report6-hook.test.js)。圧縮の前には、githippo は圧縮処理に保持すべき内容も伝えます。圧縮後は、圧縮処理が生成した要約をチェックポイントとともに保持します。
フックが説明どおりに動作することは、どのように確認しているのでしょうか。仕様は Claude Code 自身のコード(2.1.258)から確認しました。PreCompact は、成功した各フックの標準出力をカスタム指示として圧縮処理に渡します(Claude Code も、そのテキストをトランスクリプトに「PreCompact … completed successfully」と表示します)。PostCompact は compact_summary を受け取ります。すべてのフックは session_id、transcript_path、cwd を受け取ります。SessionStart のソースは startup、resume、clear、compact、fork です。
リコール機能は、実際に使用する情報も学習します。Claude に繰り返し渡されるメモリには小さな加点が加わります(キーワードスコアは最大 +40%、セマンティックスコアは最大 +10%)。使用されない場合、この加点は 30 日ごとに半減します。加点は生のスコアに適用されるため、順位が入れ替わるのはほぼ同点の結果だけです。明確に一致する結果が 1 位から押し出されることはありません(以前のバージョンではランク統合後に適用していたため、そのようなことがありました。test/report6-ranking.test.js を参照してください)。使用回数はユーザーごとに管理され、マシン上に保存されます。使用データがない場合、ランキングは使用データがない場合とまったく同じです。
<private>…</private> で囲んだ内容はメモリに保存されません。開始タグを閉じ忘れると、その後のすべてが非公開になります。また、remember は事実を保存せず、その理由を伝えるため、隠すつもりだった一部だけが黙って保存されることはありません。ファイルを編集せずにフックをオフにできます。GITHIPPO_HOOK_PROFILE=minimal または GITHIPPO_DISABLED_HOOKS=prompt,steer を設定してください。
品質の測定結果(および未測定の項目)
小規模なラベル付きセット(52 件のクエリ)と LongMemEval-S(500 件の質問、検索のみ、LLM なし)での検索結果:
| キーワード+グラフ | +ローカルモデル | |
|---|---|---|
| リポジトリ内セット:hit@5 | 64% | 100% |
| リポジトリ内セット:MRR | 0.60 | 0.89 |
| LongMemEval-S:R@5 | 96.2%(全 500 件) | 98.0%(100 件のサンプル) |
最初の結果は githippo eval で再現できます。手法、言語別の内訳、分類と重複の精度、メモリ使用量、規模の数値は docs/benchmarks.md にあります。このセットは小規模で、作者が手作業で作成したドメイン内のものです。回帰チェックと大まかな目安としてお使いください。リーダーボードではありません。
まだ測定されていない、最も重要な数値: githippo を使うことで、回答の質が上がるのか、またはセッションのコストが下がるのかという点です。eval/qa.js と eval/behavior.js はまさにそれを測定するために用意されていますが、実行には ANTHROPIC_API_KEY が必要で、まだ実行されていません。実行されるまでは、「トークンを節約する」とは、各ターンに一定のコストが加わり(下記)、想起した事実によって説明し直したり再発見したりする手間が省けた場合にのみ、そのコストを取り戻せるという意味で捉えてください。実行した場合は、結果を issue #3 に投稿してください。
githippo を使うべきですか?
- Claude の組み込みメモリは、設定不要の選択肢です。自分で読んだり、差分を確認したり、Obsidian で編集したり、バックアップしたりできるファイルとしてメモリを保持したい場合、Claude Code、Claude Desktop、claude.ai、その他の MCP クライアントで同じメモリを使いたい場合、または Claude Code のコンテキスト圧縮後もメモリを保持したい場合は、githippo をお使いください。
- basic-memory は最も近い代替製品です。こちらも Markdown 形式で Obsidian と相性がよく、より成熟しており、Python 製で、AGPL ライセンスです。githippo との違いは、Git の履歴と時間を遡る機能、コンテキスト圧縮フック、フォルダー権限付きの OAuth チーム保管庫、シークレットガードです。
- mem0 などのホステッドサービスは、LLM で事実を抽出してクラウドに保存するため、実行するものはありません。githippo は事実の保存に LLM を呼び出すことはなく、すべてを自分が所有するリポジトリ内に保持します。
- 新しいプロジェクトです。 githippo はメンテナーが 1 人のプロジェクト(最初のコミットは 2026 年 10 月)で、見知らぬ利用者による大規模な運用実績はまだありません。ベンチマーク、200 件以上のテスト、毎晩実行するシード付きファザー、5 回の監査で見つかった問題(
test/report*.test.js:各問題をまず再現し、その後、回帰テストを追加して修正)、リリースノートを公開していますので、ご自身で評価できます。ただし、まだ粗削りな部分があることをご了承ください。
Claude ネイティブ機能(オプトイン、測定済み)
| 機能 | 状況 | |
|---|---|---|
| Anthropic メモリツールのバックエンド | githippo は、ボルトを対象に、Claude ネイティブの memory_20250818 ツール(view、create、str_replace、insert、delete、rename)を提供します。参照実装と同じ戻り値の文字列、パストラバーサル対策、シークレット保護に加え、書き込みは Git のコミットとなり、recall で検索できます。ツール使用ループで src/memorytool.js の createMemoryTool(brain) を使用してください。 | ドキュメントに記載されたコマンドセットでテスト済み |
| 時間を考慮した想起 | 英語とスペイン語の「去年の春」「3月に」「3日前」「第1四半期」といった表現を日付範囲に変換します。その期間の事実が上位にランク付けされ、過去に関する質問では、置き換えられた事実も参照できます。 | LongMemEval の時間的 MRR:86.7 → 88.9 |
| ポイズニング対策 | すべての事実に出所(user、inferred、external)を記録します。外部の事実には [external] のマークを付けて Claude に渡します。AI への指示として読めるテキストは拒否します。GIT_SIGN=1 にすると、メモリのコミットすべてに独自の鍵で署名します。 | 評価データで誤検出ゼロ。CI で署名を確認済み |
| ユーザー確認 | 外部ソース(ウェブページ、ファイル、ツールの出力)からの事実、コアメモリへのピン留め、削除を行う前に、MCP エリシテーションを使ってユーザーに確認します(Claude Code がサポートを宣言しており、バイナリでも確認済みです)。GITHIPPO_CONFIRM=auto(デフォルト)では、クライアントが対応している場合に確認します。strict では、確認が得られない書き込みを拒否します。off では確認しません。ユーザーが述べた通常の事実については、処理を中断しません。 | 公式 MCP SDK クライアントでテスト済み |
| 昇格の提案 | maintain は、頻繁に想起され、かつ異なる複数の質問で使われた事実をコアメモリに追加するよう提案します(OpenClaw の「dreaming」ゲートのアイデアを採用)。自動で昇格することはありません。提案を承認するには remember pin=true を実行し、確認に応じる必要があります。 | テスト済み |
| 高速な静的埋め込み | EMBEDDINGS=static:ルックアップテーブルを使った埋め込みで、デフォルトのモデルより70~100倍高速です。 | CI で測定済み(docs/configuration.mdを参照) |
| スリープ時の統合 | githippo consolidate(または各セッション後に CONSOLIDATE=1)を実行すると、小型の Claude モデルがセッションを確認し、Git ブランチ上にメモリの更新案を作成します。ボルトが GitHub 上にある場合は、プルリクエストを作成します。マージするまでメモリには反映されません。提案にはシークレット保護とインジェクション検査が適用されます。 | ANTHROPIC_API_KEY が必要です。代替モデルを使ってテスト済み |
| コンテキストに基づく検索 | githippo contextualize を実行すると、小型モデルが各チャンクについて、そのノート内での位置づけを説明する1文を作成し、インデックス作成前に追加します(Anthropic の手法)。 | ANTHROPIC_API_KEY が必要です。代替モデルを使ってテスト済み |
| メモリは回答に役立つか? | eval/qa.js(LongMemEval の質問応答:メモリなし、githippo、正解となるセッションを比較)と eval/behavior.js(githippo のツールを使って Claude が保存する内容、不要な内容、新しいセッションでの回答)を使用します。llm-eval ワークフローで両方を実行します。 | ANTHROPIC_API_KEY のリポジトリシークレットが必要です。まだ実行していません |
最後の3つは実行ごとに API クレジットを消費するため、オプトインになっており、結果はまだこの README に掲載していません。
トークン予算(githippo bench で測定)
| githippo v2(初期バージョン) | githippo 現在 | |
|---|---|---|
| ツール | 12 | 8 |
| 各ターンでモデルに見えるスキーマ | 約1,380 tok | 約790 tok |
| 指示 | 約340 tok | 約202 tok +コア |
| 一般的な想起レスポンス | 約190 tok(JSON) | 約117 tok(パック)/約47 tok(簡易版) |
方法:簡潔なスキーマ、tools/list から冗長な $schema URL を削除、整形済み JSON の代わりにコンパクトなテキストレスポンス、ウィキリンクを通常の単語として表示、フロントマターを削除、8文字のバージョンハンドル、デフォルトでは History/index/sessions/core を想起対象から除外、すべてのパックにトークン予算を設定しています。
最悪の場合、1ターンあたりにかかるのは、ツールスキーマ約790 + 指示約200 + コアメモリ最大400(CORE_BUDGET_TOKENS)で、約1,400トークンです。これに、プロンプトごとのフックが確度の高い一致を見つけたプロンプトでは最大300トークンが加わり、さらに recall の返却分(mode=brief では約47トークン、デフォルトのパックでは最大1,000トークン)が加わります。スキーマ、指示、コアは安定したプレフィックスなので、プロンプトキャッシュを使うクライアントでは、実際のカウントより少なくなります。githippo は導入するだけでトークンを節約するわけではありません。想起した事実によって、何かを再説明したり再発見したりする必要がなくなるときに、トークンを節約します。
時間面でも、フックはすべてのプロンプトの前に実行され、ステータス行は常時表示されるため、起動処理を最小限に抑えています(サーバーコードは読み込みません)。開発マシンでの githippo bench の報告値は、フックが約57 ms、ステータス行が約60 msで、node 単体の39 msと比べるとこの値です。サーバーのインポートを遅延読み込みにする前は125 msでした。githippo bench を実行して、ご自身の環境で確認してください。
ツール
| ツール | 機能 |
|---|---|
recall | ハイブリッド検索(BM25 + 埋め込み、相互ランク融合で統合)+1段階のグラフ展開 → トークン予算に合わせたコンテキストパック。参照のみの場合は mode=brief |
remember | 事実を保存します。適切なエンティティに自動で振り分け、重複を排除し、人やプロジェクトを自動でリンクして、置き換える可能性がある情報にフラグを付けます。replaces= は置き換え、pin= はコアに追加します(コアメモリに追加できる唯一のツール経由の方法です) |
forget | 完全一致する事実を削除します。同じ単語だけが一致し(数字が違う場合、from と to の違い、否定形はいずれも一致しません)、 |
graph | エンティティ周辺の型付き関係 |
history | コミットのタイムライン、または指定日時点のファイル |
checkpoint | 作業状態を保存または再開します |
maintain | 重複、矛盾の可能性、孤立した項目、リンク切れを検出し、受信箱の事実に適した保存先を提案します(tidy=true で移動)。インデックスの再構築、アクティビティに応じた減衰、LLM による統合も行います |
files | バージョンチェック付きの生データの一覧表示/読み取り/書き込み/編集/削除(core.md への書き込みはできません。pin を使用します) |
セットアップ
プラットフォーム:Linux と macOS は変更のたびに CI でテストしています。Windows はまだサポートされていません(動作しない理由は docs/platforms.md を参照)。WSL では Linux と同様に動作するはずです。
Claude Code(フル機能:フック + MCP)
curl -fsSL https://raw.githubusercontent.com/AnxovatomicaES/githippo/main/install.sh | sh
実行内容を確認したい場合は、短いシェルスクリプトを使ってください。Node 20 以降を確認し、npm i -g github:AnxovatomicaES/githippo#v3.9.3 を実行してから、githippo setup を実行します。setup は何度実行しても安全で、すでに設定されているステータス行を保持し、変更前に ~/.claude/settings.json のバックアップを作成します。その後、githippo doctor ですべてをチェックできます(チェックに失敗すると、ゼロ以外の終了コードを返します)。githippo uninstall はフック、ステータス行、MCP エントリを削除し、メモリには手を加えません。githippo <command> --help で各コマンドの説明を確認でき、オプションを誤入力すると実行せずに候補を提示します。
公式のリファレンスメモリサーバーから移行する場合は、githippo import ~/path/to/memory.jsonl を実行すると、エンティティ、観察事項、関係をメモと型付きリンクに変換できます(シークレットの保護と重複排除が適用されるため、再実行しても安全です)。
プラグイン経由で使う場合:上記のインストール手順を実行して(githippo コマンドをインストール)、次に /plugin marketplace add AnxovatomicaES/githippo と /plugin install githippo を実行してください。プラグインがフックと MCP サーバーを提供するため、githippo setup/githippo install はプラグインを検知し、重複して追加しません(以前はすべてのフックが二重に実行されていました)。すでに両方を導入している場合は、githippo uninstall を実行し、プラグインを残してください。または、エージェントに INSTALL_FOR_AGENTS.md を渡してください。
Claude Desktop(ワンクリック拡張機能)
最新リリースから githippo-<version>.mcpb をダウンロードし、ダブルクリックするか、「Settings → Extensions」にドラッグしてください。Claude Desktop に組み込まれた Node で動作するため、ほかにインストールするものはなく、CLI や Claude Code と同じボールトを使用します。公式 MCP レジストリにも io.github.AnxovatomicaES/githippo として掲載されています。
マシン間のバックアップと同期
githippo sync --github # creates a private repo "githippo-memory" with your gh login
変更はすべてバックグラウンドでプッシュされ、サーバーは5分ごとにほかのマシンの変更を取得します。2台目のマシンでは、リポジトリを ~/.githippo/vault に git clone してから、インストーラーを実行してください。トークンはどこにも保存されません。git は既存の GitHub CLI、SSH、またはキーチェーンのログイン情報を使用します。
claude.ai、iOS、Android(リモート、OAuth 2.1、マルチユーザー)
スマートフォンアプリとウェブアプリからはノート PC に接続できないため、このモードでは GitHub からボールトを読み込みます。
githippo sync --githubを実行します(上記を参照)。- 上部にある Deploy to Render をクリックします。
MEMORY_REPO(例:you/githippo-memory)、GITHUB_TOKEN(きめ細かな権限を設定し、対象をそのリポジトリだけにして、Contents: Read and write を指定)、PUBLIC_URL(サービスの https URL)を設定します。MCP_SECRETは自動生成されます。Render のデフォルトプランは 512 MB のため、サーバーはキーワード検索(EMBEDDINGS=none)で起動します。2 GB 以上のプランでは、多言語モデルを使うためにEMBEDDINGS=localを設定してください。ブループリントは、OAuth の状態ファイル(使用済みログインコードと更新トークン)用に/var/dataに 1 GB のディスクも接続します。永続ディスクがないと、再起動のたびに再利用検知の情報がすべて失われます。トークンには引き続き有効期限があります。これは多層防御であり、費用は月額約 $0.25 です。 - claude.ai で「Settings → Connectors → Add custom connector」を開き、
https://<your-app>.onrender.com/mcpを入力します。Claude が自身を登録してサインインページを開くので、MCP_SECRETを一度入力してください。これは標準的な OAuth 2.1(PKCE、動的クライアント登録、オーディエンスに紐づくトークン)を使用するため、URL に秘密情報が含まれることはありません。
チームで共有するボールト。 フォルダー単位のアクセス権を付与し、各ユーザーが自分のパスワードでサインインできます。
githippo users add john --acl "shared/:write,people/:read" # prints his password once
githippo users list
各ルールはフォルダー(shared/。shared とも記述)または完全一致する1つのノート(people/ada.md)を指定し、文字列の接頭辞ではありません。shared:read では shared-secret/ を開けません。パスは単一の正規形式で検証されます。先頭または末尾のスペース、タブ、不可視文字、.. は修正されず、拒否されます。また、権限は指定された表記に完全一致する場合にのみ適用されます(そのため、大文字と小文字を区別しないディスク上でも Users/bob は users/bob とは一致しません)。最も長く一致するルールが適用されます(none、read、write)。さらに、すべてのユーザーに、自分の受信トレイ、セッション、ピン留めされたコアメモリを格納する専用の users/<id>/ フォルダーが割り当てられます。このフォルダーは包括的なルールでも開けません。ユーザーが通常保存する場所への書き込み権限を持っていない情報は、代わりにそのユーザー自身の受信トレイに保存されます。各コミットには、変更したユーザーが記録されます。パスワードまたは ACL を変更すると、そのユーザーのトークンは直ちに無効になります。ディスクのないホストでは、~/.githippo/users.json の内容を USERS_JSON 変数に貼り付けてください。
Cursor、Windsurf、VS Code、その他の MCP クライアント
ローカル:githippo serve コマンドを実行します。リモート:URL は https://host/mcp です。MCP OAuth に対応したクライアントは自動でサインインします。それ以外のクライアントは Authorization: Bearer <MCP_SECRET> を送信できます(ヘッダーで送信するため、URL のログに残りません)。
プレーンな Markdown で、Obsidian と互換性があります。リポジトリを保管庫として開けば、グラフビューをそのまま利用できます。
---
name: billing-v2
title: Billing v2
type: project
description: Billing rewrite
aliases: [billing rewrite]
---
## Decisions
- Use idempotency keys on every write endpoint
- owner:: [[sam-okafor]]
- Launch target is end of Q1
## History
- ~~Launch target is end of Q4~~ (until 2026-09-30)
構成:core.md(固定)、index.md(目次)、inbox.md(振り分け前の事実)、people/、projects/、topics/、decisions/、sessions/(チェックポイント)。examples/memoryを参照してください。
ノート名には、スペース、アクセント記号、あらゆる文字体系を使用できます(my notes.md、café.md、笔记.md)。そのため、Obsidian と同期した保管庫をそのまま使用できます。どこでも安全でない名前(制御文字、\ < > : " | ? *、隠しファイル名)のみ拒否されます。フロントマターは信頼できない入力として扱われます。異常な値(title: []、巨大なフィールド、__proto__)によって検索が壊れることはなく、読み取れないノートがあっても、メモリ全体を停止させるのではなく、警告を出してそのノートをスキップします。未解決の git コンフリクトマーカーを含むノートは、インデックス登録も書き込みもされません。また、マージまたはリベースが完了していない間、githippo は書き込みを拒否します。
設定
どの設定にも共通するルールは、環境変数、次に ~/.githippo/config.json、最後にデフォルト値の順で適用することです。多くの方が変更する設定は、VAULT_DIR(デフォルトは ~/.githippo/vault)、EMBEDDINGS(local、static、voyage、none のいずれか)、GITHIPPO_CONFIRM(auto、strict、off のいずれか)、PROMPT_RECALL=0(プロンプトごとのフックを無効化)です。リモートサーバーやチーム用保管庫の環境変数を含むその他すべての設定については、docs/configuration.mdを参照してください。
セキュリティモデルについて、率直に
- ファイルもデータも、あなたのものです。 githippo にはバックエンドがありません。メモリはお使いのマシン上のフォルダーに保存され、バックアップ先はご自身が所有するプライベートリポジトリです。githippo は、バックアップ先のリモートが誰でも読み取れる状態かどうかを匿名で GitHub に問い合わせます。公開状態の場合、
githippo doctorは失敗し、githippo syncはそこへプッシュせず、バックグラウンドのプッシュも拒否します(意図的に許可するにはGITHIPPO_ALLOW_PUBLIC_BACKUP=1を設定します)。確認できるのは GitHub のリモートだけです。別のホストの場合は、リポジトリの公開設定をご自身で確認してください。 - ローカルでの使用にはトークンを保存しません。 同期には git の既存のログイン情報(GitHub CLI、SSH、またはキーチェーン)を使用します。トークンが必要なのはリモートサーバーだけです。対象を1つのリポジトリに限定し、Contents の読み書き権限だけを持つ、きめ細かなトークンを作成してください。
- リモート認証には OAuth 2.1 を使用します(PKCE S256 のみ、動的クライアント登録、1回限りのコード、
/mcpリソースおよびユーザーの現在のパスワードと ACL に紐付けられたトークン)。リフレッシュトークンはローテーションされます。各トークンは1回だけ使え、使用済みのトークンを提示すると(コピーされた兆候と見なされます)、そのサインインに関連するすべてのトークン(アクセストークンを含む)が無効になります。認可コードを再利用した場合も同様です。署名はステートレス(HMAC)なので、再起動してもログアウトされません。以前の URL 内シークレット方式(/mcp/<secret>)は、URL がプロキシログに残るため、LEGACY_SECRET_URL=1を設定しない限り無効です。サーバーは不正なリクエストを受け取っても停止せずに 400 を返し、すべての本文を検証し、ログイン失敗の繰り返しを制限し、1回の呼び出しあたりの JSON-RPC バッチ数を上限管理してカウントし、ソケットアドレスごとにレート制限を適用します。 - ガードは最後の砦であり、DLP ではありません。 よくあるシークレットや ID の形式を検出します。
forgetは現在のファイルから行を削除しますが、git の履歴には残ります。完全に削除するには、履歴を書き換える必要があります。 - フォルダー権限は細工にも耐えます。 チームボールトのパスは一度だけ正規化され、権限チェックとストアで同じパスが使われるため、空白、不可視文字、
..、大文字と小文字を区別しないディスクでの大文字と小文字の違い(macOS と Windows によるſ、ß、fiの折りたたみ方も含む)を悪用してルールをすり抜けることはできません。index.mdには、各閲覧者が読み取りを許可されたメモだけが表示されます。また、読み取り可能な2つのメモが同じ名前を主張している場合、推測はせず、その事実を受信箱に送ります。他のユーザーのusers/<id>/フォルダーは、すべてに適用されるルールの対象外です。 - コアメモリは最も信頼度の高いテキストなので、書き込み口は1つだけです。 ツール経由で書き込めるのは
pinのみです(クライアントが対応している場合は確認を求め、外部ソースからの事実は拒否します)。remember about:"core"やfilesツールからは書き込めません。外部ソースに由来する行はコアメモリに読み込まれず、読み込み対象のトークン予算には厳格な上限があります。 - リモートセッションでは確認を求められません。 確認には MCP のエリシテーションを使いますが、ステートレスな HTTP リクエストには確認を行うチャネルがありません。そのため、リモートサーバーでは
GITHIPPO_CONFIRM=autoを設定しても確認は行われません。外部ソースからの事実、コアメモリへのピン留め、削除を未確認のまま許可せずに拒否したい場合は、そこでGITHIPPO_CONFIRM=strictを設定してください。 - 誰でも任意の名前で OAuth アプリを登録できます。 動的クライアント登録はオープンです(claude.ai はこの方法で接続します)。そのため、サインインページにはブラウザーの次の遷移先が表示され、開始した接続であることを確認してから続行するよう案内されます。
- 外部のテキストはデータとして扱います。 Web ページ、ファイル、ツール出力から得られた事実には
[external]のマークが付けられ、移動、書き換え、統合後もそのマークが保持されます。AI に向けた指示のように読めるテキストは拒否されます(書き込み経路すべて、つまりremember、filesツール、メモリツール、LLM による書き換えで検査します。書かれたままの状態と、想起時に表示される状態の両方を確認するため、コメント、リンクの別名、不可視文字で隠すこともできません)。この検査はよくある言い回しを対象とするヒューリスティックであり、保証ではありません。言い換えは通過するため、コアメモリには専用の書き込み口があり、外部の事実にはマークが付けられています。チェックポイントではこの種のテキストが無害化され、セクションを偽造することはできません。 - Git の状態を尊重します。 githippo は、開始したマージやリベースに干渉せず、コンフリクトマーカーをコミットすることもありません。また、bisect の実行中、detached HEAD、リンクされた worktree は「ビジー」として扱い、その旨を通知します。
- フックがセッションを妨げることはなく、
githippoが PATH 上になくても動作します。 失敗時はすべて、短いタイムアウトの後に終了コード 0 で終了します。macOS と Linux では、setupが node と githippo の絶対パスをフック、ステータス行、MCP エントリーに書き込みます。そのため、Claude Desktop や IDE から Claude Code を起動した際にシェルより PATH が短くても動作します。node の場所が変わっている場合は、PATH 上のnode、次にgithippoを試します。どちらも実行できない場合(githippo がアンインストールされている場合)は何もしません。移動または再インストール後にgithippo setupを再実行すると、以前のエントリーが更新されます。また、固定されたパスが存在しない場合はgithippo doctorが通知します。(Claude Code プラグインのフックは、引き続き PATH 上からgithippoを探します。) - 既知の制限事項。
.mcpbバンドルにはまだコード署名がありません。削除した事実は、履歴を書き換えるまで git の履歴に残ります。また、回答品質への効果はまだ測定されていません(上記を参照)。
開発
npm ci && npm test # 200+ tests: unit, hooks, adopted features, bug regressions, local vault, setup, end-to-end over Streamable HTTP with the official MCP client
npm run fuzz # seeded fuzzing of every entry point (FUZZ_SEED=<n> FUZZ_ITERATIONS=<k> to reproduce or go deeper); runs nightly in CI with a fresh seed
npm run bench # token cost of the tool surface
node scripts/versions.mjs # every version string and pinned tag agrees (CI and the release check this)
ロードマップ
署名付き.mcpbリリース · チームのボールト向けOAuth IDプロバイダーとしてのSSO(GitHub/Google) · 50,000件を大幅に超えるノートを保存するボールト向けの、任意で生成できるSQLiteインデックス · Claude Codeで標準搭載されたらMCP Apps(チャット内メモリブラウザー) · ClaudeのクライアントがMCPサンプリングを宣言するようになった場合はMCPサンプリング(Claude Code 2.1.302が宣言しているのはrootsとelicitationのみであるため、統合とコンテキスト検索には引き続きANTHROPIC_API_KEYが必要です)
MITライセンスです。PRを歓迎します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。