name: wiki-update
description: Karpathy-style LLM wiki maintenance over the Obsidian asonas vault. Ingests source notes (daily / notes / essays / 1on1) and incrementally builds and updates entity / concept / event / org pages under wiki/. Also supports lint and index rebuild. Use when invoked as /wiki-update, called from /today or /wrapup, or when the user asks to update / refresh the Obsidian wiki.
argument-hint: "[ingest ... | lint | rebuild-index]"
disable-model-invocation: false
/wiki-update - Obsidian Wiki Maintenance
karpathy の "LLM Wiki" 方針に従い、Obsidian asonas vault の wiki/ 配下を LLM が育てる仕組みです。3 つのモードを持ちます。
- ingest: 指定したソースノートを読み、抽出した固有名詞・概念に対応する wiki ページを 1 パスでまとめて作成・更新します(karpathy 流の "10〜15 ページを一度に触る" 想定)。
- lint:
wiki/配下を走査し、矛盾・古い記述・孤立ページ・解決できない wikilink を検出してwiki/log.mdに列挙します。 - rebuild-index: 全 wiki ページを走査し、
wiki/index.mdを再生成します。
前提
- vault:
asonas(path:/Users/asonas/Documents/asonas/)。obsidianCLI を使う場合は必ずvault=asonasを明示します。 - wiki ディレクトリ:
/Users/asonas/Documents/asonas/wiki/ - wiki 配下は フラット構造。サブディレクトリを切らない。分類は frontmatter の
typeで行い、カタログ化はwiki/index.mdが担います。 - Obsidian は
[[bare-name]]を vault 全体から解決するため、wiki 配下にあろうと top-level にあろうとリンクは壊れません。
ページ書式
各 wiki ページは frontmatter + 本文の形を取ります。
---
type: entity # entity | concept | event | org | comparison | summary
aliases: [] # 別表記。例: [RubyKaigi 2025]
sources: # このページの記述の出典 wikilink(必須)
- "[[daily/2026-05-19]]"
- "[[notes/rubykaigi-2025-day1]]"
updated: 2026-05-20
---
本文は CLAUDE.md の ## 文章スタイル セクションに従う:です・ます調・冷静で論理的・箇条書き禁止・散文・高校生語彙。
各段落の末尾 or 末尾近くで、その段落の根拠となる daily / notes / essays への wikilink を 1〜2 個示すこと(karpathy の citation 原則)。
モード詳細
ingest
呼び出し:
/wiki-update ingest <source1> [source2 ...]
/wiki-update ingest today # 今日の daily note
/wiki-update ingest yesterday # 昨日の daily note
/wiki-update ingest 2026-05-19 # 指定日の daily note
引数解決:
today/yesterday/YYYY-MM-DD: 下記6種をまとめて同じ ingest セッションのソースとして読み込むdaily/<YYYY-MM-DD>.md(手書きの日報)activities/<YYYY-MM-DD>.md(machine-generated。カレンダー予定、GitHub、ブラウザ履歴、Claude Code、Bluesky 投稿などが集約されている。daily note からは transclude されているが Read ツールは transclude を展開しないため、明示的に読む必要がある)- 当日
mtimeのprojects/**/*.md(その日に手で更新したプロジェクトノート。find /Users/asonas/Documents/asonas/projects -name '*.md' -newermt <YYYY-MM-DD> -not -newermt <翌日>で検出) - 当日
mtimeのnotes/**/*.md(同上。単発の調査ノートも拾う) - その日に
bookmarks/.last_sync経由で取り込まれた新着 bookmarks(bookmarks/*.mdのうち frontmatterlast_syncedが当該日付の md) - その日に
/books-highlightsで更新された読書ハイライト(books/*.mdのうち frontmatterlast_syncedが当該日付の md)。書名・著者・章ごとのハイライトは概念ページ化の素材になる。引用は逐語なので wiki では要約・統合する
- vault 相対パス(例:
notes/foo.md,projects/tempest/foo.md,bookmarks/123456.md,books/シンプリシティ(ハイライト).md,activities/2026-05-20.md): そのまま読む。bookmark や個別ファイルを直接渡すと単一ファイル ingest になる - 引数省略時: today にフォールバック
activities/<YYYY-MM-DD>.md を読む際の注意:
- セクション区切りは
<!-- BEGIN: <source> -->〜<!-- END: <source> -->の HTML コメントで囲まれている。各セクションの中身(特に## Blueskyの投稿本文と## GitHubの PR タイトル)は固有名詞・概念の宝庫 - 「
_イベントなし_」とだけ書かれているセクションはスキップしてよい - カレンダーセクション(
## カレンダー)の予定タイトルは個人の打ち合わせ名や子の送迎などプライベートが多いので、wiki 化候補からは除外する(参照のみに留める)
手順
ソース読み込み: 指定された note を Read で全文取得する。
エンティティ抽出: 本文を読み、wiki ページ化すべき語を列挙する。基準は CLAUDE.md の
## リンク戦略の Step 2 と同じ:- プロジェクト名・リポジトリ名
- 技術用語(ツール名・プロトコル名・フレームワーク名)
- 人名
- 自分が繰り返し参照する概念
- 一般名詞・1 回限りの固有名詞はリンクにしない
既存ページ照合: 各エンティティについて
/Users/asonas/Documents/asonas/wiki/<名前>.mdの存否を確認する。新規作成の基準(2ソース・ルール): 既存ページがないエンティティは、無条件にページ化せず、まず再出現の証拠を確認する:
grep -rl --include='*.md' -F '<名前>' /Users/asonas/Documents/asonas/{daily,notes,essays,projects,weekly,1on1} | grep -v '今回のソース'- 別の日のソースにも登場している(2回目以降の出現) → ページを作成する
- 今回が初出 → ページは作らない。ソースノート側に赤リンク
[[名前]]だけ付け、log.md のエントリにdeferred: [[名前]]として記録する。次回その語が現れた ingest で deferred 一覧と突き合わせてページ化する - 例外として、初出でもページ化してよいのは「自分のプロジェクト・リポジトリ」「継続的に関与することが確実なもの(所属組織、購入した機材など)」に限る。例外を使った場合は log の note に理由を 1 行残す
この基準の目的は、一度きりの固有名詞による 1 段落スタブの量産を防ぎ、wiki を「繰り返し現れるトピックが積もる場所」に保つことにある。
更新 or 新規作成:
- 既存ページがある場合: 本文に新しい事実を統合する。重複は避け、既存記述と矛盾する場合は両論併記したうえで「2026-05-20 時点では後者が正しい」のように日付付きで判断を残す。frontmatter の
sourcesとupdatedを更新する。新規作成よりも既存ページの増補を常に優先する - 新規作成の場合: 上記の frontmatter + 散文本文で作成する。本文は最低 1 段落、根拠 wikilink 必須。
- 既存ページがある場合: 本文に新しい事実を統合する。重複は避け、既存記述と矛盾する場合は両論併記したうえで「2026-05-20 時点では後者が正しい」のように日付付きで判断を残す。frontmatter の
横断更新: karpathy 流に「1 回の ingest で 10〜15 ページを更新する」想定で、抽出した全エンティティを一度のセッションで処理する。1 ページずつユーザに確認しない。
ソースノート側へのリンク追加: ソース note 本文に該当語が出現していて wikilink になっていない場合、CLAUDE.md のリンク戦略に従って初出のみ
[[語]]を付ける。log.md への記録:
wiki/log.mdの先頭セクション直下に新エントリを追加(append-only。古いエントリは削除しない):## YYYY-MM-DD HH:MM ingest - sources: [[daily/2026-05-19]], [[activities/2026-05-19]], [[projects/tempest/2026-05-19 ...]] (+ bookmarks: 2 件) - updated: [[RubyKaigi 2025]], [[asonas/strudel-rb]], [[Strudel]] - created: [[Live Coding]] - deferred: [[初出のためページ化を見送った語]] - note: <特筆事項。矛盾検出・統合した主張など>日付指定の ingest で実際に読んだソース一覧をすべて記載すること。activities や projects/notes/bookmarks のいずれかが空(該当日に更新ファイルなし)でも、空であることを
(なし)の形で残しておくと運用上のトレースが楽になる。index 再生成: ingest の最後に必ず
rebuild-indexの手順を実行してwiki/index.mdを最新化する。ページの作成・更新が 1 件もなかった場合のみ省略してよい。
lint
呼び出し:
/wiki-update lint
手順
lint は「検出して終わり」にせず、機械的に直せる問題はその場で修復する。判断が必要な問題のみ報告に留める。
wiki/配下の全 .md を列挙(index.md,log.md,log-*.mdは除外)。各ページについて以下をチェック:
- 孤立ページ: vault 内のどのノートからも
[[name]]で参照されていない - 未解決リンク: 本文中の
[[X]]でX.mdが vault 内に存在しない - 古い
updated: 90 日以上更新されていない - 矛盾: 同一トピックに対して相反する記述が含まれる
- frontmatter 欠落:
type、sources、updatedのいずれかが未定義または空 - 過剰分割: 単一の同じソースのみを出典とし、本文が 2 段落以下で、被リンクが wiki 内の相互リンクと index に限られるページ群。統合候補として報告する
- 孤立ページ: vault 内のどのノートからも
自動修復(その場で直すもの):
type欠落 → 本文から判断して補完するupdated欠落 → ファイルの mtime の日付で補完するsourcesが空 → vault を grep してそのページ名に言及している daily / notes / projects を探し、見つかればsourcesに追記する。見つからなければ報告に残す- 修復したページは lint エントリの
fixed:行に列挙する
報告のみ(判断が必要なもの): 孤立ページ・矛盾・統合候補・出典が見つからないページ。検出結果を
wiki/log.mdの先頭に新エントリとして追加:## YYYY-MM-DD HH:MM lint - fixed: [[V]] (type 補完), [[U]] (sources 補完) - orphan: [[X]], [[Y]] - unresolved: [[X]] が [[Y]] を参照しているが Y は存在しない - stale: [[Z]] (last updated 2026-01-15) - contradiction: [[W]] 内で〜と〜が矛盾 - merge-candidate: [[A]] + [[B]] → [[C]] に統合可能(同一ソース・相互リンクのみ)何も検出されなければ「clean」と 1 行だけ記録する。
前回の lint エントリに残っている報告項目が今回も未解決のままなら、エントリの note に「前回からの持ち越し」と明記する。同じ項目を 2 回持ち越したら、その場で対処するかページを削除するかを決める。
rebuild-index
呼び出し:
/wiki-update rebuild-index
手順
wiki/配下の全 .md を frontmatter のtypeごとに分類する。index.md,log.md,log-*.mdは除外。wiki/index.mdを上書き再生成する。type の順はentity → concept → event → org → comparison → summary → orphan。各 type の下に該当ページを- [[name]] — frontmatter から拾った 1 行 description(先頭段落の 1 文目を要約)形式で並べる。- 孤立ページ(lint で検出されたもの)は
## orphanセクションに集める。
log.md のローテーション
log.md は append-only のまま無限に肥大化するため、月単位でローテーションする。
- ingest / lint / rebuild-index のいずれかを月初に最初に実行したとき、log.md に前月以前のエントリが残っていたら、それらを
wiki/log-YYYY-MM.md(エントリの属する月ごと)へ移動する。log.md には冒頭の説明文と当月分のエントリだけを残す log-*.mdは lint・rebuild-index の走査対象から除外する(frontmatter 不要)- 移動はエントリ単位で行い、内容の書き換えはしない
起動経路
- 手動:
/wiki-update ingest today等を直接実行。 /todayから: その日の daily note 作成・前日まとめが終わった直後に/wiki-update ingest yesterdayを呼ぶ。/wrapupから: 当日 wrapup の追記が終わった直後に/wiki-update ingest todayを呼ぶ。- 週次 lint: 金曜の
/wrapup経由の ingest が終わったあと、続けてlintを実行する。直近 7 日以内に lint 実行記録が log.md にある場合はスキップしてよい。
today / wrapup から呼ばれた際は、対話を増やさず黙々と ingest を完了させること(ユーザは別の作業に移っている前提)。
注意
wiki/配下の編集はすべて Read + Edit / Write で/Users/asonas/Documents/asonas/wiki/<file>.mdを直接編集する。Obsidian 公式 CLI は heading 指定の insert をサポートしないため、本文への精密な追記は filesystem 直接編集の方が確実。- daily / notes 等の ソース側ノートには新しい事実を書き足さない。wiki はソースを要約・統合する派生レイヤであり、源泉ではない。例外はソース側で漏れていた wikilink の付与のみ。
- LLM の創作を避けるため、ソースに書かれていない事実を wiki に追加しない。各記述は必ず
sourcesの wikilink で裏付けられること。