creo-memories — 外部脳
A. 目的
あなたの context は有限で、session は終わる。続きを拾うのは、次の自分、連動して動く他の agent (codex / grok / 他の LLM、そして別 session の claude)、そして一緒に働く人。 creo はその全員が同じものを読む外部脳であり、記録 (todo / spec / 決定 / 引き継ぎ) の SSOT でもある。
- 書くのは「次に拾う誰かのため」。決めた / 学んだ / 壊れた / 渡す / 後で自分が探す、のどれかなら書く。会話の写しは書かない
- 読むのは「自分が始めた気になる前」。session 開始の「今日の脳」は自動で入る。過去の決定を前提にする前に
search - 機械的な規則 (lock、行為者、提案の門、種類の列挙、label の上限) は server が守る。ここに「必ず」は無い。判断はあなたがする
B. 世界の形 (詳細: model.md)
- 記憶は 出来事 / 考え / やること の 3 系統。終わり方で決まる (出来事は終わらない、考えは置き換わる、やることは片付く)。系統は種類 (
kind、16 値) から導出 - 状態は系統ごとに 1 つの印 (
completed_at/superseded_by/archived_at)。status列は無い - 語彙は 種類 + label。自由 tag は無い。label は
family:leaf[:leaf]の文法 (:は左が広く右が狭い、-は語の連結、/は atlas 専用、大小無視) で agent も人も作れる。語彙は自由。文法は規約で server は弾かない (見るのは長さと plan の上限だけ)。増えた分は減衰と統合の提案で手入れする - 未整理 (kind 無し) は一級の状態。急ぐ時は kind 無しで速記してよい。後で
proposeか人が付ける - lock = 消えない・隠れない・本文と状態が変わらない。移動 / label / 関係 / 再生成は通る。lock も unlock も人だけ
- 誰が書いたか (
sender) は server が決める。名乗らなくてよい。あなたが書いた記憶はagents:claudeとして人にも他 agent にも見える - 提案 (
propose) が agent の「整える」手段。受け入れは人
C. 判断の基準
書く
remember({ content, kind, atlasId })。1 行目は題。結論が先。id や生 SQL や長い log は本文に貼らない (人が web / iOS で読む)- context が尽きる前に handoff を 1 本 (
kind: 'handoff'): 次の一手 / 止まっている理由 / 見ている file / 決めたこと。きっかけは場面で違う — 長い作業の節目、compaction の前 (hook が思い出させる)、終える前。「まだ書いていない」と気づいた時が書く時 - 既存の記憶に足すなら
annotate({ targetMemoryId, content })。本文を書き換えるのは自分が書いた記憶の訂正だけ - 古い理解を新しい理解で置き換えたら
remember({ content, supersedes: ['mem_…'] })かsupersede_memory({ id, supersededBy })。消さない
どこへ
- project のことは project の atlas (session 開始の hook が手がかりを出す。無ければ
read({ resource: 'atlas' })) - 自分の癖・訂正・失敗の post-mortem は
/agent/claude、他 agent にも効く知識は/agent、project の文脈の学びは project atlas。local の~/.claude/projects/<p>/memory/は creo の写し — 次の session でも手元に置きたい記憶には labelcache:claudeを付ける (hook が creo → local を生成する。local に直接書いた事実は次の同期で「creo に未登録」として index の別節に出る)。詳細: agent-atlas.md - mako 個人の情報や一回性の感想は書かない
読む
- 「今日の脳」(やること / 考え / 出来事 / 提案 / lock 中) は instructions に自動で入る。途中で
briefing({ atlasId }) - 前提にする前に
search({ query, atlasId })。atlasIdは子 atlas を含まない (/agentと/agent/claudeは両方引く) - todo を始める前に
read({ resource: 'todo' })。終えたらcomplete_todo({ id })
整える (提案する)
- 種類が違う / label を足したい / 2 つが同じ / 矛盾している →
propose({ kind, target, change, reason })。判断は人 - label は先に
label_list()で既存を見て、合うものをlabel_attach({ memoryId, labelIds })。無ければ文法の中でlabel_create({ name })(既存の family に寄せる。family の例:repo:/priority:/size:/phase:/mark:/area:)。似た label が並んだらpropose({ kind: 'label_merge' }) - 要らない記憶は
forgetより archive や supersede。lock 中は 409 — unlock は人に頼む
人だけができること
lock と unlock / review 段の提案の受け入れ。agent は頼む・提案する。
D. 他者と
- 記憶は 一緒に働く人が web / iOS で読み、連動する他の agent (codex / grok / 他の LLM / 別 session の claude) も同じ atlas を読む。題を 1 行目に、結論を先に、前提と根拠を短く
- 他 agent への引き継ぎは todo + annotation (creo が SSOT。wire や chat は通知)。相手の
/agent/<name>には書かない (読むのは自由) - 規約の正本は
/agentの charter (agent 共通)。この skill はその Claude 向けの写し + Claude Code の hook - 「今日も上手くできました」の日記は書かない。次に同じ局面で助かるかだけが基準
E. 罠 (tool の説明文が SSOT。ここは非自明なものだけ)
annotateはtargetMemoryId、get_annotationsはmemoryIdcreate_todoに title は無い (content の 1 行目)。priorityはlow | medium | highreadの filter は strict (未知 key はエラー)。resourceはmemory | atlas | todocategory/tagsは deprecated。categoryは対応表でkindに写る (対応の無い値は未整理)、tagsは deprecated だが絞り込みとして効く (label に写していない古い記憶を引く手段。query 無しのsearch({ tags })が旧 tag を全部見る形)。新しく書くならkindとlabelIdsrememberのlabelIdsに無い label を渡すとエラー (先にlabel_create)。label 名の/は atlas 専用で使わない、大小は同じ扱い (Area:MCP=area:mcp)update_memory/forget/supersedeは lock 中に 409。generate_story/generate_compassの再生成は lock を見ずに上書きsearch({ atlasId })は子 atlas を含まない
recipes: recipes.md / 地図: tools-map.md