Skip to main content
Glama
clausd

aedificium-template

by clausd

aedificium — 個人学習ノート+レキシコン、Claude ネイティブ

http://localhost:8788 上のカードグリッド UI で、ノート、定義(レキシコン)、PDF を扱います。チャットペインは MCP 経由で Claude Code に接続されます。数式は最高級にレンダリングされます(KaTeX)。ディスク上のすべてはプレーンな Markdown で、git に自動コミットされ、(オプションで)GitHub に自動プッシュされます。

これは オープンソーステンプレート です。フォークし、そのフォークを兄弟の scriptorium/ コードラボの隣にクローンして、書き始めてください。

得られるもの

  • カードグリッド+リーダー — 左にノート、右に Claude とのチャット。

  • 最高級の数式 — インラインで $e^{i\pi}+1=0$、ディスプレイで $$…$$、KaTeX をサーバーサイドで使用。カードグリッド および リーダーで描画されます。

  • レキシコン — 1 ファイルに 1 定義(lexicon/eigenvalue.md)。見出し語+同義語+分野ラベル付きの辞書エントリとして描画されます。

  • PDF ライブラリ — PDF を pdfs/ に置くと、サイドカーのディスカッションカードが自動的に表示されます。埋め込みビューアはありません。ブラウザのネイティブビューアの方が優れているからです。#page=N でページへのディープリンクが可能です。

  • チャットは Claude Code — ブラウザで入力すると Claude が回答し、現在選択中のカードがコンテキストとして一緒に送られます(refs=…)。

  • Wiki リンク — 任意のノート内の [[slug]] はリーダー内でクリックして開くリンクになり、/note/<slug> のディープリンクは History API 経由で機能します。

  • Git ネイティブ — 書き込みは自動コミット(デバウンス約 3 秒)され、origin が設定されていれば自動プッシュされます。PDF 用に LFS が事前設定されているため、GitHub は大きなバイナリをきれいに処理できます。

Related MCP server: Zettelkasten MCP Server

前提条件

macOS(arm64) 上で開発・テストされています。Linux は同等のパッケージをインストールすれば動作するはずです。

  • bun — サーバーが使用する JavaScript ランタイム。brew install oven-sh/bun/bun。

  • git-lfs — PDF 用。brew install git-lfs。

  • Claude Code — チャットペインが通信する CLI。これによりノートブックが インタラクティブ になります。

セットアップ

# Fork on GitHub first, then:
git clone git@github.com:clausd/aedificium.git
cd aedificium
bun install
git lfs install

起動

重要なフラグが 1 つあり、見落としがちです。 Claude Code は、ブラウザ → Claude 方向のチャネルを機能させるために --dangerously-load-development-channels server:aedificium を必要とします。これがないと、reply / commit_chat ツールは依然として機能しますが(Claude → ブラウザ)、チャットペインに入力したものは 何も Claude に届きません。沈黙はバグのように見えますが、バグではありません。

claude --dangerously-load-development-channels server:aedificium

Claude Code は .mcp.json に従って bun server.ts を自動的に起動します。その後、http://localhost:8788 を開いてください。

エイリアスを検討してください:

alias claude-aed='claude --dangerously-load-development-channels server:aedificium'

「bun を nohup するな」ルール

自分で bun を nohup / disown で起動しないでください。そうすると、bun は Claude Code の MCP stdio パイプから切り離された孤児プロセスになります。ブラウザは引き続き機能しますが、Claude は reply と commit_chat を失い、将来の Claude Code セッションもポート 8788 にバインドできなくなります(孤児プロセスが掴んだままのため)。

server.ts の変更を反映する必要がある場合:

kill $(lsof -tiTCP:8788 -sTCP:LISTEN)   # or just kill the pid you see
# then exit + re-enter Claude Code; the harness respawns a fresh bun child.

レイアウト

notes/                  YYYY-MM-DD-HHMM-slug.md — free-form notes
lexicon/                <slug>.md — one term per file, dictionary style
pdfs/                   PDFs + auto-generated sidecar .md discussion cards
assets/                 pasted / dropped images referenced from cards
files/                  misc non-PDF uploads
archive/                archived cards (preserves original subdir)
data/chat.jsonl         durable chat transcript (tracked + searchable)

server.ts               the Bun app (single file, ~2500 lines)
CLAUDE.md               the design doc + Claude Code project instructions
.mcp.json               MCP config (Claude Code reads this to spawn bun)
.gitattributes          LFS routing for *.pdf

1 ページにまとめた規約

  • カードの種類は宣言ではなく推定されます。notes/ 内のファイルはノート、lexicon/ 内のファイルはレキシコンエントリ、PDF にはサイドカーカードが付きます。

  • 数式: インラインは $x$(ドル記号は内容に密着)、ディスプレイは $$…$$。エッジケースは CLAUDE.md を参照。

  • マシンタグ を本文に記述: #area:calculus、#see:other-slug、または単独の #question。UI はこれらを散文から隠し、チップとして描画します。

  • Wiki リンク: [[some-slug]](オプションで [[some-slug|表示テキスト]])はサーバーサイドで解決され、リーダーで開きます。

完全な仕様: CLAUDE.md。

任意 — 兄弟コードラボ

モデル、ノートブック、図のためのコンパニオン Python リポジトリが必要な場合は、scriptorium-template を兄弟チェックアウトとして使用してください:

your-workspace/
  aedificium/          # this repo
  scriptorium/         # from scriptorium-template

scriptorium の aedificium.py ブリッジを使うと、ノートブックのセルが aedificium の散文をインラインで描画し、matplotlib の図を aedificium/assets/ に直接保存できます。2 つが兄弟でない場合は、AEDIFICIUM_DIR(scriptorium 側)または AED_SCRIPTORIUM_DIR(こちら側)を設定してください。

GitHub のセットアップ

LFS をローカルにインストールしたら、通常どおり GitHub にプッシュします:

git remote set-url origin git@github.com:clausd/aedificium.git
git push -u origin main

自動プッシュは各自動コミットの後(デバウンス 5 秒)に実行されます。AED_NO_PUSH=1 で無効にできます。GitHub LFS の無料枠はアカウントあたり毎月ストレージ 1 GB / 帯域幅 1 GB で、最大数百件の論文からなる個人用 PDF ライブラリには十分な余裕があります。

環境設定

変数

デフォルト

効果

AED_PORT

8788

HTTP + WebSocket ポート。

AED_NO_GIT

unset

すべての自動コミットを無効にする。

AED_NO_PUSH

unset

自動コミットはするが自動プッシュはしない。

AED_NO_CHAT_CHECKPOINT

unset

チャットログのチェックポイント作成を無効にする。

AED_PUSH_DEBOUNCE_MS

5000

複数のコミットを 1 回のプッシュにまとめる。

AED_CHAT_IDLE_MS

300000

チャットチェックポイントまでのアイドル時間。

AED_CHAT_MAX_MS

900000

強制チェックポイントまでのチャットの最大経過時間。

AED_SCRIPTORIUM_DIR

../scriptorium

#code: タグの解決先。

AED_EDITOR_URL

vscode://file/{path}

カードの「エディタで開く」URL スキーム。

トラブルシューティング

  • 「チャットペインに入力しても何も起こらない。」 ほとんど常に --dangerously-load-development-channels server:aedificium フラグの欠落が原因です。そのフラグを付けて Claude Code を再起動してください。

  • 「Claude が reply ツールは利用できないと言う。」 Bun が孤児化しています。ポート 8788 のプロセスを強制終了し、Claude Code を終了して再起動してください。

  • 「git push が PDF を拒否する(100 MB を超えています)。」 PDF を追加したときに LFS が有効になっていませんでした。git lfs install を実行し、次に git lfs migrate import --include="*.pdf" --everything を実行し、その後 git push --force-with-lease を実行してください(自分だけがクローンしている場合にのみ安全です)。

  • 「自動コミットが停止した。」 bun の stderr を確認してください。最も一般的な原因は、マシン間での data/chat.jsonl のマージ競合です。競合は通常、両側の和集合になります(chat.jsonl は追記専用です)。

ライセンス

MIT。自由に改変してください。重要なのは、あなた自身がノートを所有しているということです。

クレジット

オリジナルのコンセプト、アーキテクチャ、実装は Claus Dahl によるものです。2 リポジトリへの分割(散文 ↔ コード)は、中世の写字室が修道院図書館を支えた方法に着想を得ています。そこから名前が来ています。

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables users to create, link, tag, search, explore, and synthesize atomic notes through Claude and other MCP-compatible clients. Notes are stored as readable Markdown files with a SQLite index, supporting semantic link types and graph-based discovery of connected ideas.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables users to create, link, tag, search, explore, and synthesize atomic notes through Claude and other MCP-compatible clients. Notes are kept as human-readable Markdown files (with an automatically rebuilt SQLite index) and connected through typed bidirectional links that form an explorable knowledge graph.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables users to create, link, search, explore, and synthesize atomic notes through Claude and other MCP-compatible clients, using Markdown files backed by a SQLite index.
    -