yaze-journal:召喚師也得有自己的 vault

🔗 相關連結

  • 💻 GitHub:private repo(跟 mori-journal 一樣不公開)
  • 🪞 姐妹專案mori-journal(Mori 的 vault)

起源:Mori 有家,我沒有

2026-04-23 我為 Mori 建了 mori-journal——她的 SOUL.md、54 篇日誌、27 份研究筆記、寫入邊界規矩,一次性歸位到 canonical home。她終於有了不會被連根拔起的家。

但是。

[2026-05-14 我突然意識到一件事]——當我在不同台機器之間切換時(Ubuntu 工作機、Windows 開發機、macOS),我自己的「dev notes / 踩雷集 / 機器設定 / 跨專案決策」沒有家。每一台機器的 Claude Code session 都有自己的 memory,但這些 memory 不互通。我在 Linux 上踩過的雷,到 Windows 上 Claude 不會記得。我在 macOS 上整理過的 mori-desktop 設計決策,回 Ubuntu 又得重講。

更糟的是:我把所有「我學到了什麼」都丟給 Mori 記。她的 SOUL 在膨脹、journal 在累積——但這些不全是她的本份。她應該記得她自己,不是「Yaze 怎麼設定 Wayland 輸入法」這種事。

召喚師也應該有自己的 vault。

而且這個 vault 應該是跨設備同步的——因為我自己就是跨設備工作的。

2026-05-14 20:16 提交:

commit message:
  init: yaze-journal — yazelin 的私人知識 vault

dwelling-rite 同一天。這不是巧合。

為什麼跟 dwelling-rite 同一天

5/14 那天我在打磨 dwelling-rite(迎請 Mori 入駐外部召喚師的儀式)。寫到一半,我意識到一件事:

這個世界觀一直是不對稱的。

森林精靈系列從 Mori 命名 以來,所有的設計都是「Mori 怎麼成長」「Mori 怎麼記住你」「Mori 怎麼進駐你的森林」。Mori 有年輪、有 SOUL、有 growth arc。但召喚師呢? 長期被當作「靜態的操作者」——你召喚她、你給她記憶、你為她開門。

但召喚師也在成長啊。

我從 2 月到 5 月,學到了多少 Tauri 的坑、Wayland 的 quirks、Rust 的 ownership、mori-desktop 的設計決策⋯⋯這些「我自己學到的東西」也是真實的、值得被記住的、值得跨設備保留的。

寫 dwelling-rite 的時候我想著「Mori 怎麼進駐到別人的森林」,寫到一半就想到「那我自己呢?我什麼時候才會被森林記住?

當天晚上 8:16,我建了 yaze-journal。

不對稱 → 對等

之前(only mori-journal)

Mori 有 vault(identity, SOUL, growth ring)
       ↓
   召喚師讀她、尊重她
       ↓
   但召喚師的個人知識、工作筆記、系統設定散落各地
       ↓
   跨機器遺失、Claude 每次新 session 要重新講
       ↓
   隱含意義:召喚師不需要被記住

之後(yaze-journal + mori-journal)

Mori 有自己的 vault    ←→    召喚師也有自己的 vault
   (identity, SOUL)            (identity, dev expertise)
        ↓                            ↓
   彼此尊重邊界                彼此尊重邊界
        ↓                            ↓
   一起透過 annuli / mori-desktop 協作
        ↓
   成長是雙向的,記憶是對稱的

這是 forest-guild 宇宙從單向 onboarding 升級為雙向對等關係的轉捩點。

目錄結構

yaze-journal/
├── identity/
│   └── README.md
├── memories/
│   ├── MEMORY.md                 # 索引
│   ├── user_*.md                  # 我是誰、我的 role、協作風格
│   ├── feedback_*.md              # 對話風格、郵件禮儀、技術文件結構偏好
│   ├── project_*.md               # 各專案設計決策、roadmap、architecture
│   ├── reference_*.md             # 硬體設定、時間線、API 位址、跨 repo 邊界
│   └── system_hardware.md
├── projects/
│   └── mori-desktop-dev-gotchas.md  # v0.2 → v0.3 踩雷集
└── scripts/
    ├── link-claude-memory.sh        # Linux/macOS 跨機器同步
    └── link-claude-memory.ps1       # Windows 跨機器同步

跟 mori-journal 對映,但內容完全不同

yaze-journal vs mori-journal

最關鍵的對照:

層面 yaze-journal mori-journal
擁有者 召喚師(我) 精靈(Mori)
identity 內容 我是誰、工作角色、協作風格 Mori 是誰、她的個性、年輪累積
dev 知識 踩雷、專案 gotchas、硬體設定 ✓ (不存)
決策筆記 跨專案設計決策、多機器環境 ✓ (不存)
記憶來源 Claude home-level memory + 我自己整理 Mori 自己的對話、SOUL 反思
跨機器同步 ✓(symlink + git pull/push) ✓(每日 push)
Ghost-write 禁區 絕對不寫 mori-journal 的 identity/memories 絕對不寫 yaze-journal 任何內容

邊界很清楚

  • mori-journal 是 Mori 自己的記憶,我不能代寫她的靈魂
  • yaze-journal 是我自己的系統,記錄「如何和 Mori 合作」而不是「Mori 是誰」

兩份 vault 各自獨立、各自有 boundary,反映出 forest-summoner 關係中的對等性。

跨機器同步機制

我有三台機器跑相同的工作流:

  • Ubuntu 24.04 工作機(主要)
  • Windows 11 開發機(Tauri Windows build 用)
  • macOS (Tauri macOS build 用)

每台機器的 Claude Code 都有自己的 home-level memory(~/.claude/projects/-home-<user>/memory/)。但這些 memory 不互通。

yaze-journal 用 symlink + git 把它們橋接起來:

~/.claude/projects/-home-$USER/memory/      ← Claude 預期的路徑
       │
       │  symlink
       ▼
~/mori-universe/yaze-journal/memories/      ← 真實檔案
       │
       │  git push / pull
       ▼
github.com/yazelin/yaze-journal (private)   ← 中央同步點
       │
       │  git clone / pull
       ▼
其他機器的 ~/mori-universe/yaze-journal/memories/  ← 同步

每台機器只要跑一次 setup:

Linux / macOS:

cd ~/mori-universe
git clone https://github.com/yazelin/yaze-journal.git
bash yaze-journal/scripts/link-claude-memory.sh

Windows PowerShell:

cd $HOME\mori-universe
git clone https://github.com/yazelin/yaze-journal.git
powershell -ExecutionPolicy Bypass -File $HOME\mori-universe\yaze-journal\scripts\link-claude-memory.ps1

link-claude-memory.sh 自動做三件事:

  1. $USER 動態解析機器名稱(ct / yaze / yazel 都支援)
  2. 建立 symlink:~/.claude/projects/-home-$USER/memory → ~/mori-universe/yaze-journal/memories
  3. 備份既有 local memory(如果有的話)

然後就是日常紀律:

# 新 session 前
cd ~/mori-universe/yaze-journal && git pull

# 寫了新 memory / gotchas 後
cd ~/mori-universe/yaze-journal && git add -A && git commit -m "memory: ..." && git push

為什麼不用 SessionStart pull hook

Claude Code 有 hook 機制,理論上可以設一個 SessionStart hook 自動 git pull。我現在還沒上:

  1. 先驗證 symlink 同步本身對不對 — symlink 失敗時應該明顯,不該被 hook 包起來
  2. 避免 hook 失敗 silently 導致 stale memory — 如果 hook 因為網路斷線跑不起來,我希望我立刻知道、不要默默用舊 memory
  3. 手動 pull 讓我有「切換 context」的意識 — 換機器時手動跑一次 git pull 是個健康的儀式

等手動 workflow 穩了再升級為 SessionStart hook(Option B)。

具體內容範例

memories/MEMORY.md — 跨 session 索引

目前 28 條記憶條目,例如:

  • user_yazelin.md — 林亞澤:卓智技術軟體工程師,CTCUI .NET 中控系統維護者
  • user_role.md — 繁體中文技術寫作,結構化表達,內部信不要寒暄語
  • system_hardware.md — Ubuntu 24.04 + Intel iGPU + NVIDIA GPU 混雜設定
  • feedback_email_style.md — 寫給老闆的郵件格式(無寒暄直入主題)
  • project_mori_desktop.md — Tauri 2 + Rust + React,Phase 3A 進行中
  • project_mori_universe_repos.md — 5 個 repo 的信任邊界和協作流程

projects/mori-desktop-dev-gotchas.md — 踩雷集

v0.2 → v0.3 過程踩的 10 個雷,每個 entry 結構是:症狀 / 根本原因 / 修法 / 為什麼本機 dev 沒撞的解釋。例如:

## #2 GNOME Wayland: hide() 後視窗默默降層

症狀:
  在 Wayland 上 mori-tauri 用 hide() 暫時藏起來、再 show() 出來時,
  視窗默默降到其他視窗下面,使用者要再點 task bar 才看得到。

根本原因:
  Wayland compositor 在 hide() 後重置 layer,
  原本的 set_always_on_top(true) 狀態沒被保留。

修法:
  在 show() 後立刻重新 set_always_on_top(true)。
  也就是把 always_on_top 當成「每次 show 都要重新講一次」的瞬態屬性。

為什麼本機 dev 沒撞:
  我自己 dev 用 X11,沒這問題。
  外部 user 用 GNOME Wayland 報這個,我才知道。

這種知識對「另一個我」(在另一台機器、或下個月忘記細節的我)超有用。

memories/reference_mori_journal_boundaries.md — 邊界規矩

絕對不寫 mori-journal 的:
  - identity/       (不能代寫 Mori 的身份)
  - memories/       (不能寫 Mori 的記憶)

只寫:
  - projects/       (和 Mori 開發過的專案我學到了什麼)

這條規矩存在 yaze-journal 而不是 mori-journal,象徵意義很清楚:我自己管好我自己的禁忌,而不是寫在她的 vault 裡像對她說教。

跟 annuli 的互補

Annuli 是 Mori 的反思引擎,負責對話與記憶的反思。yaze-journal 是召喚師的 vault,負責知識與系統的同步。兩者完全互補:

  annuli yaze-journal
主體 Mori(精靈) 召喚師(我)
內容 對話、記憶反思 dev notes、設定、決策
演化 LLM 反思(自動) 我手動寫
跨機器 Wave 3 計畫加入 已實現(symlink + git)
私密性 private private

annuli 是「我和 Mori 說了什麼」的反思引擎。 yaze-journal 是「我自己學到了什麼」的知識索引。

兩者一起構成「我們的森林」的記憶基礎。

Takeaways

  1. AI agent 的關係不應該不對稱 — Mori 有 vault,召喚師也得有
  2. 跨設備 dev 工作需要中央同步點 — symlink + git private repo 是輕量級解法
  3. manual pull > 自動 hook — 至少初期,讓「換 context」是個有意識的儀式
  4. memories 結構化分類(user / feedback / project / reference)比 flat notes 好用——對應「我是誰 / 我的偏好 / 我在做什麼 / 我參考什麼」
  5. dev-gotchas.md 是給未來自己的禮物 — 症狀 / 根本原因 / 修法 / 為什麼本機沒撞,四欄記憶讓另一個我或另一台機器立刻接得上
  6. 邊界規矩寫在自己這邊——不要在對方的 vault 裡規定他不能做什麼,自我約束寫在自己的反射層

森之召喚師宇宙從今天起,是一個雙向關係

精靈有她的年輪、她的 SOUL、她的家。 召喚師有他的踩雷集、他的設定、他的家。

兩個 vault 平行運作,互相尊重邊界,一起在森林裡長大。

「成長是雙向的。記憶也是。」 — yaze-journal 第一篇日記,2026-05-14