System Atlas
見て回れるアイソメトリックの構成アトラスを HTML で作ります。
skill の情報
| 提供元 | 追加で入れるもの — hermes skills install official/creative/system-atlas で導入します |
| パス | optional-skills/creative/system-atlas |
| バージョン | 1.0.0 |
| 作者 | Harshyt Goel (adapted by Nous Research) |
| ライセンス | MIT |
| 対応プラットフォーム | linux, macos |
| タグ | architecture, diagrams, isometric, documentation |
| 関連 skill | architecture-diagram, excalidraw |
参考: SKILL.md 全文
System Atlas Skill
アトラスは 1 つのデータファイル(data.mjs)で、そこから 2 つのビューを描き出します。1 つは操作できるアイソメトリックの地図です(自己完結した 1 枚の atlas.html。ホバーで読み、クリックで固定し、中に入ると手順が見え、流れるデータパケットを調べられ、章ごとに構造物を数個ずつ見せてシステムを明かしていきます)。もう 1 つは生成されるテキスト版(SYSTEM.md)で、判断の表、すべての構造物、フロー、未解決の質問を ID つきで載せます。人が編集するのはデータファイルだけで、両方のビューはそこから作り直されます。横には手書きの用語集(CONTEXT.md)と ADR を置きます。
できること: 段階的に見せる操作可能な構成図、フィードバックの回をまたいだ質問の追跡、生成されるテキスト版、繰り返せる更新の流れ。 しないこと: 一度きりの静的な図(architecture-diagram か excalidraw の skill を使います)、README だけで足りる完成済みのシステム、PR 用の図 1 枚。
こんなときに使います
誰かが構成を図で話し合いたい、設計したい、レビューしたい、説明したいときに使います。たとえば「アトラスを作って」「システムを地図にして」「構成を見て回れるようにして」「コードベース/エージェント/パイプラインを図にして話し合えるようにして」「クリックして回れる図がほしい」「全体がどうつながるのか案内して」といった依頼です。構成の議論から未解決の質問が山のように出て、フィードバックの回をまたいで追いかける必要があるときにも使います。判断が変わったあとに既存のアトラスを更新するのにも使えます。いちばん向いているのは、システムがまだ新しく、用語も判断も質問も動いていて、フィードバックが 1 回では終わらない場合です。
事前に必要なもの
- Node.js(最近のバージョンなら何でもかまいません。ビルドは
node:fs,node:path,node:urlしか使わないので、npm install は要りません)。 - 確認用の静的サーバー(
npx serveかpython3 -m http.server)。
実行のしかた
mkdir -p <atlas home>/atlas
cp <skill>/assets/{template.html,build.mjs} <atlas home>/atlas/
cp <skill>/assets/data.example.mjs <atlas home>/atlas/data.mjs # then fill it in
node <atlas home>/atlas/build.mjs # writes ../SYSTEM.md and ../atlas.htmlデータファイルの各フィールドの説明は、すべて assets/data.example.mjs にあります。
早見表
| ファイル | 役割 | 編集するか |
|---|---|---|
atlas/data.mjs |
唯一の正本。構造物、フロー、章、判断、質問、本文 | する |
atlas/template.html + atlas/build.mjs |
描画部と生成部 | 見た目だけ |
atlas.html |
ビルドされたアトラス。ビルドし直すたびに同じ URL へ公開し直します | しない(生成物) |
SYSTEM.md |
ビルドされたテキスト版 | しない(生成物) |
CONTEXT.md |
用語集。名詞 1 つにつき 1 行 | 手で |
adr/ |
後から覆しにくい判断 | 手で |
research/ |
掘り下げ調査の根拠 | 追記のみ |
手順
この順番を守ってください。どの手順も、最初のときに受けた指摘から生まれたものです。
- 描く前に材料を読みます。 ビジョンを書いた文書、リポジトリにすでにある入口、それにユーザーが許す範囲の先行事例です(許可を聞いてください。ブランチや情報源を禁じられることがあります)。フレームワークの上に作るなら、先にそのドキュメントを読みます。長いドキュメントは
delegate_taskでサブエージェントに渡し、具体的な設計上の問いを添えて、注意点と「それが与えてくれないもの」の一覧つきの入門メモを返してもらいます。これを飛ばして描くと、実在する何にも対応しない箱ができあがります。 - 描く前に話し合います。 チャットで構造を提案し、ランタイムの実際の基本要素に対応づけます。質問するのは、リポジトリから導けないことだけにします。残りは既定値を採り、どれを既定にしたかを伝えます。
- 最初のアトラスはシステム全体です。
assets/をアトラスの置き場にコピーし(data.example.mjsはdata.mjsに名前を変えます)、データを埋めてnodeでビルドし、公開します。アトラスの置き場は、そのリポジトリのドキュメント方針で決まります。何かをコミットする前に聞いてください。ドキュメントを受け入れるリポジトリなら、ツリー内のdocs/{system}/atlas/です。ADR とCONTEXT.mdしかコミットしないリポジトリなら、アトラス、SYSTEM.md、research/は git で無視されるスクラッチ用ディレクトリに置き、公開したらSYSTEM.mdと調査結果を仕様の issue に添付します(一式をまとめてコミットしたら、3,900 行のドキュメント PR になり、同じ設計を 3 通りに言い直した箇所をすり合わせるのにレビューが 4 往復かかったことがあります)。HTML 成果物の作り方の指針がほしければ、skill_view で design-md か architecture-diagram の skill を読み込みます。どちらにしても、見た目の決まりはreferences/design-language.mdで読みます。 - 段階的に見せます。 システム全体を一度に見せると雑音にしか見えません。章は 10 前後にします。各章で足す構造物は 3 つまでにし、すでに見せた構造物だけを通る小さなフローを 1 つ流します。最後の章ではすべてを見せ、フローを選べるようにします。まだ見せていない構造物も索引には残し、薄く表示して章番号を添えます。パネルは要約を先に出します。1 文を置き、*Read more* と *Steps* は折りたたみます。
- 形とラベル。 箱に文字を載せるだけでは足りません。役割ごとに形を決め、各構造物の下に読める名前のラベルをキャンバス上に置きます。design-language を見てください。
- テキスト版。
CONTEXT.mdは用語集で、それ以外のものは入れません(名詞を 1 行ずつ)。ADR は、覆しにくく、背景を知らないと意外に見え、本当のトレードオフの末に決めた判断にだけ書きます。この 2 つがツリー内に置くものです。SYSTEM.mdは生成物で、research/には根拠を置きます。どちらもアトラスと同じ場所(手順 3 のとおり、スクラッチ用ディレクトリかdocs/)に置きます。頼まれない限り issue は立てません。 - フィードバックは質問 ID で受けます。 質問はすべて
Q-<code><n>の形で、状態を持ちます。未解決(文字列)、解決済み{q, r}(回答と日付)、引き継ぎ{q, to}(名前のある次の手順に渡したもの)のどれかです。ユーザーの言葉をそのまま記録します。「それは質問じゃない」と言われたら外します。「これがわからない」と言われたら、解決済みにする*前に*具体例で説明します。1 回のやり取りが終わるたびに、ビルドし直し、公開し直し、メモリを更新します。 - 掘り下げ調査の結果を戻します。 サブエージェント(
delegate_task)での調査は、共通の指示書 1 つをもとに行います(こちらが持つインターフェース、候補を分ける要件、コストを見積もるための利用モデル、決まった成果物の形)。コストと適合度をそろえた表で総括を書きます。解決した内容は{q, r: '… (from the deep dive, date)'}の形でデータに取り込みます。ユーザーが提案を却下したら、*すべての*ファイルを洗って書き直します。古くなった節の上に注意書きを載せるだけでは足りません。 - 最新に保ちます。 正本は 1 つ、変更のたびにビルドし直して公開し直し、生成されたファイルは決して手で直さず、ドキュメントのフォルダにはファイル一式を説明する
README.mdを置きます(表はreferences/process-and-lessons.mdにあります)。
公開
atlas.html は自己完結した 1 ファイルです。ビルド手順は要らず、Google Fonts のスタイルシート以外に外部の素材もありません。フォルダを好きな静的サーバー(npx serve, python3 -m http.server)で配信して URL を渡すか、コミットしたファイルをリポジトリのページホスティングに配信させます。URL は 1 つにし、データを変えるたびに公開し直します。2 つ目のコピーは作りません。公開 URL を固定しておくなら、META.artifactUrl に書いておくと SYSTEM.md からリンクされます。
つまずきやすいところ
<!doctype html>を先頭に、<meta charset="utf-8">をその直後に置いてください。そうしないと互換モードになり、矢印が文字化けします。- 描画部は描くたびに場面全体を作り直します。ホバーのハンドラーに余計な
render()が紛れ込むと、カーソルの下の要素が外れ、ブラウザーがクリックを発生させなくなります。スクリーンショットでは地図が完璧に見えるのに、何も反応しない状態になります。 - アプリ内ブラウザーの中には
file://を静的なスナップショットとして描くものがあります。ディスクから開くのではなく、静的サーバー経由で確かめてください。 - 質問は決して削除しません。解決済みにするか、外したと記録して、ID が変わらないようにします。
- 判断のたびに、出力を grep して古い言葉(
pending、古いモデル名、却下された設計)が残っていないか探します。読む人はすべてを読みます。 - 大きな HTML/JS をシェルのヒアドキュメントで書くと壊れやすいです。
write_fileを使い、データ部分は JSON にシリアライズできる形に保ちます。
確認
node <atlas home>/atlas/build.mjsが終了コード 0 で終わり、SYSTEM.mdとatlas.htmlの両方を書き出すこと。- ビルドされたスクリプトの構文を確かめ(
new Function(js))、配信したページを実際のブラウザーで 1280×800 程度で開くこと。最初の章、途中の章、最後の章、中に入ったビュー、ライトテーマを見ます。 - 構造物をクリックし、パネルに pinned と出て *Go inside* が選べることを確かめること。パケットの点をクリックし、中身が開くことを確かめること。
- どの構造物にも
one、what、how、shortラベル、役割のkind、それに質問があること。まだ実在しない構造物には印がついていること。章があり、章ごとにフローがあり、最後の章がシステム全体であること。 SYSTEM.mdに、判断の表、ID と状態つきの質問の索引、「このファイルの保守のしかた」のフッターがあること。- プロジェクトのメモリに、アトラスの URL、ドキュメントのパス、日付つきの確定した判断、ユーザーが却下したものとその理由、次の一手が記録されていること。