Skip to content

🧠 スタックちゃんの記憶 (memory)

このリポジトリ自体を スタックちゃんの長期記憶 として育てるための SQLite ベースのナレッジ層。

思想

  • markdown ドキュメントは 人間向け (概念・設計・手順)
  • SQLite (memory/stackchan-memory.db) は 機械向け (クエリ可能な活動ログ・在庫・履歴)
  • 両者は並走。git で時系列管理されているので 「先週何やった?」が必ず答えられる
  • 将来 Donack 自身がこの DB を参照して会話できる素地

ディレクトリ

memory/
  schema.sql              ← DDL (テーブル定義 + FTS5 全文検索)
  seed.sql                ← 初期データ (5/19〜5/24)
  stackchan-memory.db     ← 実体 (SQLite, git 管理)

mac-studio/bridge/src/memory/ に CLI ツールがあります。

スキーマ

テーブル用途主なカラム
activities実装・購入・トラブル・知識獲得など全ての行為occurred_at, category, title, body, tags, related_issue/pr/commit
partsパーツ資産(docs/parts.md の構造化版)name, model_number, category, device_assignment, status, price_jpy
events物理イベント (買い物・組み立て・展示会)occurred_at, type, title, location
firmware_historyfirmware 書き込み履歴flashed_at, version, git_sha, target_device
shopping_listこれから買いたいウィッシュリストitem_name, priority, status, est_price_jpy, reason
activity_parts活動とパーツの紐付けM:N 中間表
activities_ftsFTS5 全文検索(title/body/tags)自動同期

カテゴリ:

  • activities.category: event / implementation / troubleshoot / purchase / idea / knowledge / meta
  • parts.category: main_board / sensor / actuator / cable / tool / display / compute
  • parts.status: in_stock / in_use / broken / retired
  • parts.device_assignment: k151 / minimal / pi5 / workshop / pool

CLI 使い方

mac-studio/bridge/ 配下で:

bash
# DB 初期化(schema + seed)
npm run mem -- init

# 活動ログ追加
npm run mem -- add activity \
  --title "Module-LLM の Wi-Fi 設定でハマった" \
  --body "USB CDC で SSH..." \
  --category troubleshoot \
  --tags "module-llm,wifi"

# パーツ追加
npm run mem -- add part \
  --name "Unit Vibrator" \
  --category actuator \
  --device k151 \
  --price 800 \
  --from sengoku

# 買い物リスト
npm run mem -- list shopping                     # status=wanted を優先順位順
npm run mem -- list shopping --all               # bought / dropped も含めて
npm run mem -- add shopping --name "Unit Touch" --priority 2 --reason "撫で検知"
npm run mem -- mark-bought 3                      # 買ったらマーク
npm run mem -- drop-shopping 8                    # やめた候補

# イベント追加
npm run mem -- add event \
  --title "M5Stack JP コミュニティ集会" \
  --type meetup \
  --location "秋葉原"

# 一覧
npm run mem -- list activities --since 2026-05-23 --limit 20
npm run mem -- list parts --device k151
npm run mem -- list parts --status in_stock
npm run mem -- list events

# 全文検索
npm run mem -- search "voicevox"
npm run mem -- search "module-llm AND tts"

# 統計
npm run mem -- stats

seed 済みの内容(2026-05-19 〜 2026-05-24)

実装開始から VOICEVOX 統合・複数端末ガイド整備までの主要イベント・活動を投入済。

bash
$ npm run mem -- stats
# activities by category
  implementation  6
  troubleshoot    3
  purchase        2
  event           1
  idea            1
  knowledge       1
# parts by status
  in_stock        17
  in_use          6
# events by type
  purchase        2
  unboxing        1
  assembly        1
  demo            1

運用ルール

  1. 新しいことをやったらすぐ追加 (実装完了 / 詰まり / 学び / 購入 / 試験)
  2. issue / PR / commit と紐付け--issue --pr --commit フラグ)
  3. タグを付ける (後で集計しやすい: firmware, voicevox, m5stack, troubleshoot 等)
  4. git で DB を commit する (バイナリだが単一ユーザー前提、conflict 時は seed.sql 再生成)

docs/parts.md との関係

  • markdown (docs/parts.md) — 人間が眺める用(カテゴリ表・物理接続図・購入履歴)
  • SQLite (parts テーブル) — 集計・クエリ用(ステータス別・端末別・購入元別)

両方をメンテナンス(将来は markdown を SQLite から生成する自動化も検討)。

スタックちゃんとの会話で記憶を呼ぶ (MCP 連携)

memory は MCP サーバー として bridge から起動され、Claude (bridge ClaudeBackend) が会話中に自動で呼び出します。

利用可能ツール (Claude から見えるもの)

ツール用途
memory_search_activities活動ログを FTS5 全文検索
memory_list_activities期間・カテゴリで活動ログ一覧
memory_list_parts配属 (k151/minimal/pi5/workshop) ・状態別にパーツ一覧
memory_list_events物理イベント (購入・組み立て・展示会)
memory_list_firmwarefirmware 書き込み履歴
memory_add_activity新しい活動を記録
memory_stats集計(カテゴリ別件数)

加えて Claude には Read / Glob / Grep / Bash も許可されているので、リポジトリ内のコードやドキュメントの参照、gh CLI での GitHub 操作、git 操作なども可能。

会話例

スタックちゃんに「K151 で未接続のセンサーを教えて」と話しかけると:

  1. Claude が memory_list_parts({status:'in_stock', device:'k151', category:'sensor'}) を呼ぶ
  2. memory MCP server が SQLite クエリを実行
  3. 4 つのセンサー(PIR / ToF / DLight / ENV-Pro)が返る
  4. Claude が日本語で「PaHUB でまとめて繋ぐと良いよ」のような提案つきで答える
  5. VOICEVOX で音声合成 → CoreS3 の顔から出力

他にできるシナリオ

  • いまの open issue を教えて」 → Bash で gh issue list 実行 → 一覧読み上げ
  • 次の買い物リスト」 → shopping_list_top → 優先順位順に読み上げ
  • これも欲しい、Unit Touch」 → shopping_add_item({item_name: "Unit Touch"})
  • M3 ねじ買ってきたよ」 → shopping_mark_bought で買い物リスト更新
  • 先週の買い物」 → memory_list_events --type=purchase
  • 最近のトラブル」 → memory_list_activities --category=troubleshoot
  • ENV-Pro と PaHUB を繋ぐコードを書いて」 → Read で firmware を読み、提案を口頭、PR は別途
  • 今の作業を覚えておいて」 → memory_add_activity

bridge 側設定 (mac-studio/bridge/src/backends/claude.ts)

ts
options: {
  systemPrompt: DONACK_SYSTEM_PROMPT,
  allowedTools: ['Read', 'Glob', 'Grep', 'Bash', 'mcp__memory__memory_*'],
  mcpServers: {
    memory: {
      type: 'stdio',
      command: 'node',
      args: ['--import', 'tsx', 'src/mcp/memory-server.ts'],
    },
  },
}

将来の拡張

  • [ ] Cloud memory (Turso / Cloudflare D1) によるレスポンス改善 + 複数端末リアルタイム同期
  • [ ] shopping_list 専用テーブル + リマインダー自動発火
  • [ ] vibe coding 時の Write/Edit/PR 自動化 (現状は Read 系のみ許可)
  • [ ] JCARVIS との memory 共有 (双方向同期)
  • [ ] markdown ↔ SQLite の双方向同期
  • [ ] 写真メタデータ自動抽出(EXIF から acquired_at)
  • [ ] 月次レポート自動生成

ファイル

aieo-product / stack-chan project