brain-ingest-gate について
brain-ingest-gateは、gbrainのナレッジベースに内容を追加する前に、固有名詞と重複する知見を確認するスキルです。既存ページへのリンクか、新規ページの適切なエンリッチメントスキルへの引き継ぎを案内します。
主な機能
- 01検索前に固有名詞を解決
- 02別名と候補ページを確認
- 03検索上位を読んでから判定
- 04重複と新しい視点を分類
- 05新規内容を他のスキルに委任
- 06一括処理後にバックリンクを確認
活用シーン
- 01gbrainへのノート取り込み前の確認
- 02一括インポートでの重複ページ防止
- 03新しいプロジェクトを既存ページに関連付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ garrytan/ gbrain --skill brain-ingest-gateインストール後、Claude Code で/brain-ingest-gateを入力して読み込まれたか確認します。
同梱ファイルrouting-eval.jsonl
詳細
Brain Ingest Gate — 脳に取り込む前に解決と重複排除を行う
規約: conventions/brain-first.md を参照してください — 検索チェーン(
gbrain entity→search→query→get)は、このゲートが 書き込みの前に毎回実行するチェーンと同じです。規約: _brain-filing-rules.md を参照してください — ゲートの判定が「書き込み」の場合、主題に応じてディレクトリが決まります。
規約:
skills/conventions/quality.mdは、ページに共通するルール (引用、Iron Law によるバックリンク、重要性)を定めています。ゲートを通過するすべてのページは これらに従います。ゲート固有の差分:ゲートが決めるのは書き込み/リンク/スキップのみです。 書き込み時には、受け入れ側のスキルが品質ルールを適用します。
ルール
このゲートを通過せずに、コンテンツを脳に取り込んではいけません。脳リポジトリへの直接の cp や mv
はバグです。
1つの洞察は1か所に記録します。すでに存在する場合は複製せず、リンクしてください。
新しいページを書き込む前(ファイルの移行、一括インポート、手動の
gbrain put、サブエージェントの出力)には、次の2つのチェックを順番に実行します。
- 固有名詞の解決ゲート — 固有名詞に関する内容で、その名前ですでにページが存在しますか?
- 重複排除ゲート — その洞察はすでに脳のどこかに記載されていますか?
適用範囲に関する注意: このゲートはルーティング規約です。取り込みに相当する意図が一致すると、ハーネスがこれをコンテキストに解決し、適切に動作するエージェントがそれに従います。スキルが読み込まれなければ、gbrain のランタイムが未拡充または重複した書き込みを機械的に阻止することはありません。
gbrain にこのゲートが必要な理由
ネイティブのパイプラインは、意味的な重複排除を代わりに行いません。
gbrain import/gbrain syncがスキップするのは、フロントマターの ID が一致するものだけです。 異なるスラッグや ID で同一の内容を登録すると、二重にインデックスされます。重複ページはそれぞれ検索結果に追加され、正規ページと競合します。gbrain captureの重複排除は、24時間以内の完全一致するコンテンツハッシュに限られます — 同一バイト列の再取り込みは検出しますが、言い換えられた同じ洞察は検出しません。remember動詞が重複排除するのは事実であり、ページではありません。
意味的な重複排除と固有名詞の解決は、全面的にこのスキルの役割です。
このゲートが作動する場合
- ファイルの移行 — ワークスペース内にあるファイルを脳リポジトリに移動する場合(「これを脳に移動して」)。
- 一括インポート — 種類を問わず、脳のディレクトリにまとめて移動する場合。
gbrain syncまたはgbrain importでインデックスする前に実施してください。一括処理では、conventions/test-before-bulk.md も参照してください。 残りを実行する前に、ゲートにかける項目を3〜5件選び、判定結果を確認してください。 - 手動での書き込み — 内容の豊富なコンテンツを
gbrain putまたはgbrain captureする場合、あるいは脳リポジトリに直接ファイルを書き込む場合。 - サブエージェントの出力 — バックグラウンドエージェントが脳にメモやページを書き込む場合。
このゲートが担当することと委任すること
このスキルはパイプラインではなく、ゲートです。書き込み前に行う以下のチェックを担当します。 「書き込み」の判定後に行う処理はすべて、提供済みのスキルに委任します — ここで手順を繰り返したり、本文に記載したりしないでください。
| 対象 | 委任先 |
|---|---|
| 外部の新規コンテンツ(会議、記事、メディア)のルーティング | ingest |
| 受信コンテンツのエンティティ検出と重要性の判定 | signal-detector |
| 人物・企業ページの作成/更新、段階的な作業量、バックリンク | enrich |
| 概念ページ、段階分け、クラスターの統合 | concept-synthesis |
| バックリンクの徹底(Iron Law) | conventions/quality.md |
| ページの保存先ディレクトリ | _brain-filing-rules.md |
名前付きエンティティの解決ゲート(最初に実行)
内容が、名前の付いたプロジェクト、場所、企業、人、または誰かが「作りたい/立ち上げたい/制作したい」と考えているものに関する場合は、必ず起動します。
ベクトル類似度だけでは、名前付きエンティティの重複を検出できるとは限りません。選ばれた名前で保存されているページは、たまたま誰かが説明に使った一般的な英語の表現とは近いベクトルにならないためです。典型的な失敗例:説明的な表現で検索すると、正式名称のページが文章の下限スコアを下回り、その結果、何年も前からあるページの上に重複した仮ページが作成されます。保存時は名前の意味に基づき、検索時は文字どおりの一般的な表現で試みているのです。
ルール
-
一般的な表現ではなく、まずレジストリを調べます。 gbrain のネイティブレジストリがエンティティの参照先です。
gbrain entity "<name>" # zero-LLM card: page, aka list, near-miss suggestionsカードが見つかった場合はページが存在します。中止してリンクし、複製しないでください。見つからない場合(または概念を表す名詞の場合)は、
gbrain query "<name>" --limit 3に進みます。ナレッジベースに名前付きの取り組みを明示したインデックス(たとえばconcepts/配下のページ)がある場合は、新規と結論づける前にそれを読みます。 -
検索前にエイリアスを展開します。 名前付きページには、
aliases:フロントマターリスト(一般的なラベル+選ばれた名前+あればニックネーム+特徴的なフレーズ)を含める必要があります。ユーザーがたまたま使ったフレーズだけでなく、各エイリアスと一般的なラベルを検索します。 -
ベクトルスコアは文章に対する下限であり、名前付きの対象を判断する基準には決してなりません。 名前付きの候補として妥当なものが少しでもあれば、存在しないと結論づける前に候補ページを開いて読みます(
gbrain get <slug>)。文章なら明らかに該当しないスコアでも、名前付きページが正解である可能性があります。 -
新しい名前付きの対象が現れたら、作成時にエイリアスも登録します。 完全な
aliases:リストを含めてページを作成し、今後のあらゆる類義表現がgbrain entityで解決されるようにします。フロントマターのリスト1つで今後のすべての表現に対応でき、個別に注意書きを加える必要はありません(O(1))。
メモリの注意書きではなくゲートにする理由
「一般的な表現ではなく正式名称を検索する」というメモリの注意書きは、個々のケースに貼る付箋のようなものです。そのターンでたまたまホットコンテキストに含まれていなければ機能せず、次の名前付きエンティティには応用できず、いずれ古くなります。このスキルは、取り込み形式のタスクがここに振り分けられたときに読み込まれます。プロセスのルールはホットメモリではなく、起動されるゲートに置くべきです。
重複排除ゲート(2番目に実行)
新しいページを作成する前に(名前付きの対象については、上記の解決ゲートを先に実行し、そちらを優先します):
-
主張の核心を抽出します — 新しい内容の新規性を捉えた1~2文にまとめます。
-
検索します:
gbrain search "<core claim>" --limit 5 -
最上位の候補を開いて読みます(
gbrain get <slug>)。スコアだけで判断してはいけません。提供元のシステムではこの手順にコサイン類似度のしきい値を設定していますが、これを流用してはいけません。gbrain searchが返すのは融合されたハイブリッド順位スコアであり、コサイン類似度ではありません。また、異なるスコア間で対応づけられる数値しきい値もありません。判定は数値ではなく、読んで行います。 -
区分を割り当てます:
区分 意味 対応 clear-dup 最上位の候補が、同じ対象について同じ知見をすでに述べている 中止します。書き込む代わりに既存ページへリンクします( gbrain link/gbrain timeline-add)。plausible-dup 同じ領域を扱っており、新しい切り口の可能性がある 両方を最後まで読みます。同じ知見ならリンクし、書き込みません。本当に新しい切り口なら、既存ページへの相互リンクを付けて書き込みます。 clear 上位の検索結果に主張を扱うものがない 委任先のエンリッチメントスキルを通じて、通常どおり書き込みます。
判断フロー
New content to write
├─ Named thing? → Named-Entity Resolution Gate first
│ (entity card → alias-expanded search → READ the candidate)
├─ Extract core claim (1-2 sentences)
├─ gbrain search "<core claim>" --limit 5
└─ OPEN AND READ the top hit (gbrain get <slug>)
├─ clear-dup → STOP. Link to existing. Report "duplicate".
├─ plausible-dup → Read both. Same insight?
│ ├─ yes → STOP. Link to existing. Report "duplicate".
│ └─ no → Write with cross-link. Report "new angle".
└─ clear → Write via enrichment skills. Report "unique".
重複排除を省略する場合
- 運用/状態ファイル — 知識ではなく、時系列の記録です。
- 会議の文字起こし — 会議は定義上それぞれ固有です(会議内のエンティティは、委任先のスキルを通じて引き続き名前付きエンティティのゲートを通します)。
- 既存ページのタイムライン項目 — バックリンクは追加情報であり、重複ではありません。
- メディアファイル — 意味的な類似度ではなく、ファイル名/ハッシュで重複を判定します。
検証
バッチ処理後、ゲートの出力が要件を満たしていることを確認します。
gbrain check-backlinks check # mentioned entities link back (fix with: check-backlinks fix)
gbrain backlinks <new-slug> # each new page has inbound links
gbrain search "<core claim>" --limit 3 # the insight has exactly ONE home
check-backlinks check で、ゲートが追加したばかりのページに不足が報告された場合、情報強化の委任がスキップされています。取り込みの完了を宣言する前に、enrich を経由してください。
コントラクト
このスキルは、次のことを保証します。
- このスキルのフローを通じて新しいページが brain に追加される前に、名前付きエンティティの解決チェックと重複チェックが実行されます。
- 「重複」という判定には、必ず一致したスラッグが示され、複製を作成する代わりにリンクまたはタイムラインのエントリーが作成されます。
- 新しい名前付きエンティティのページには、作成時に同じ書き込み操作で
aliases:フロントマターリストが追加されます。 - 重複判定のバンドは、スコアだけでなく最上位の検索結果を読んで割り当てます。gbrain の融合スコアに対して数値による類似度のしきい値は使用しません。
- 情報強化は提供済みのスキル(ingest、enrich、signal-detector、concept-synthesis)に委任し、インラインで再記述または再実装することはありません。
- バッチ処理の最後に
gbrain check-backlinks checkによる検証を行います。 - ルーティングはフロントマターに記載された標準のトリガーと一致します。
writes_to:に記載されたディレクトリ配下に出力を書き込みます。- プライバシー契約を維持します。実名、フォーク固有のファイルシステムパスのリテラル、上流フォークへの参照は含めません。
動作コントラクト全体は上記の本文セクションに記載されています。このセクションは適合性テストのために存在します。
出力形式
チェックした項目ごとに判定を1行で示し、その後に検証結果を記載します。
Ingest gate — 3 item(s) checked
| item | entity resolution | band | action |
|---|---|---|---|
| notes-on-widget-co.md | resolved: companies/widget-co | clear-dup | linked (timeline entry on companies/widget-co) |
| pricing-thesis.md | n/a (prose) | plausible-dup | new angle — written to concepts/ with cross-link to concepts/pricing-power |
| charlie-example-intro.md | miss (near-miss: people/charlie-example) | — | read near-miss; same person → linked, no new page |
Verification: check-backlinks check → 0 gaps on admitted pages
「linked」または「duplicate」とするすべての行で、一致したスラッグを必ず示してください。行に「written」がある場合、会話から情報強化を担当したスキルを特定できるようにしてください。
失敗した場合
gbrain のエラー code、終了コード、[AGENT] ブロック、または通知ブロックが発生した場合は、エージェントオペレータープロトコルに従ってください。このスキル固有の対応は次のとおりです。
- 「これはすでに brain にありますか?」という検索で、機能低下の通知とともに結果が空だった場合、キーワードのみの検索結果が空でも、コンテンツが存在しない証明にはなりません。インポートする前に、スラッグ、URL、または正確なタイトルで確認してください。
gbrain capture/putがwrite_pending(終了コード10)を返した場合、コンテンツは受け付けられています。gbrain write-request <request_id>をポーリングしてください。再度キャプチャしてはいけません。- MCP の書き込みで
source_binding_requiredまたはinsufficient_scopeが返された場合、この接続ではそのソースに書き込めません。不足しているソースとスコープをユーザーに伝えてください。brain ホストのオペレーターがそれらを付与します。
アンチパターン
- ❌
cp file.md <brain-repo>/concepts/— 生のコピーであり、ゲートも情報強化もありません。 - ❌ フォルダーを brain リポジトリに一括で
mvしてからgbrain syncを実行する — sync は重複もすべて問題なくインデックス化します。一致 ID のスキップでは防げません。 - ❌ ベクトルスコアが低いことを、名前付きのものにページが存在しない証拠として信頼する — 名前付きページは、その一般的な説明の近くに埋め込まれるとは限りません。
- ❌ 最上位の検索結果を開かず、検索スコアだけでバンドを割り当てる。
- ❌ 他のシステムの数値による重複判定しきい値を、gbrain の融合スコアに流用する。
- ❌ 新しい名前付きページに
aliases:リストを付けずに書き込む — 次の同義語が次の重複を生みます。 - ❌ 提供済みのスキルに委任せず、エンティティ検出、バックリンク作成、コンセプトのリンク付けをインラインで再実装する。
- ❌
gbrain putによる書き込みが「1ページだけ」だからとゲートを省略する — 重複したスタブが生まれるのは、手動で1件だけ書き込むケースです。
Dedup(明確な境界)
- capture — クイック保存の入口です。重複排除では、同一バイト列に対して24時間以内の完全なコンテンツハッシュを使用します。このゲートは、実際のページとして脳に入るコンテンツ(移行、バルクインポート、受信箱からの昇格)を対象とした、セマンティック+固有表現のレイヤーです。「この考えを保存して」→ capture、「これらのファイルを脳に移行して」→ このゲートです。
- ingest — 新しい外部コンテンツ(会議、記事、メディア)と、そのエンリッチメントパイプラインを扱うルーターです。ingest はコンテンツをどう処理するかを決定し、このゲートはページをそもそも存在させるべきかを決定します。このゲートは書き込み前に動作し、「書き込み」という判定の後は、ingest とその専門スキルがすべてを処理します。
- enrich — このゲートが「書き込み」または「リンク」と判定した後の、ページ作成・更新の仕組み(階層、引用、タイムライン、バックリンク)です。
- concept-synthesis — すでに入り込んでしまった概念スタブを、事後に大規模に重複排除します。このゲートは書き込み時の予防策であり、concept-synthesis はクリーンアップ処理です。「既存の概念を重複排除して」→ concept-synthesis です。
- frontmatter-guard (host-side) — 直交する軸における、同じスタンドアロンゲートのパターンです。書き込まれる内容の構造的な妥当性に対し、こちらは書き込むかどうかの意味的な新規性を扱います。
- bulk-ingestion — バルク処理向けの姉妹機能です。そのパイプラインの重複排除キー(
source + source_id)が冪等にするのは再実行のみです。ソースをまたぐ重複の検出や、固有表現の解決は行いません。このゲートは、bulk-ingestion がフェーズ3の試行アイテムに適用し、コード化されたパイプライン(フェーズ1d/6)に組み込む、セマンティック+固有表現のレイヤーです。「大規模コーパスのパイプラインを構築して」→ bulk-ingestion、「書き込む前に、このページがすでに存在するか確認して」→ このゲートです。 - data-loss-gate — 逆方向のゲートです。確認なしに脳からデータが出ていくのを防ぎます。このゲートは、解決と重複排除なしにデータが入ってくるのを防ぎます。