.claude/skills/map-update/SKILL.md
M3E マップの strategy board のタスクステータスや Agent Status を一括更新するスキル。以下の場面でトリガーする:「マップ更新」「ステータス更新」「Agent Status 更新」「進捗反映」「マップに反映」「strategy 更新」と言われたとき、またはタスク完了後にマップへの反映が必要なとき。
npx skillsauth add akaghef/M3E map-updateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
M3E マップの開発進捗を効率的に反映するスキル。 一時スクリプトを書かずに、構造化された指示から直接マップを更新する。
http://localhost:4173(beta 開発サーバー)akaghef-betaGET /api/docs/akaghef-beta → 全状態取得POST /api/docs/akaghef-beta → 全状態書き戻し注意: final サーバー (4173) ではなく beta サーバー (4173) を使うこと。開発データは beta で管理する。
ユーザーまたはマネージャーから以下のような指示を受ける:
/map-update
- "conflict backup" → 完了(ノード削除)
- "entity list UI" → 途中(進捗: デザイン完了、実装着手中)
- Agent Status: data=infra構築中, visual=idle
curl -sf http://localhost:4173/api/docs/akaghef-beta -o /dev/null && echo "OK" || echo "SERVER_DOWN"
サーバーが停止していたら「M3E サーバーが停止しています」と報告して終了。
指示内容を解析し、以下の操作を行う Node.js スクリプトを c:/Users/chiec/dev/M3E/tmp/map_update.mjs に生成する。
スクリプトのテンプレート:
import http from "http";
const fetch = () => new Promise((resolve, reject) => {
http.get("http://localhost:4173/api/docs/akaghef-beta", res => {
let d = "";
res.on("data", c => d += c);
res.on("end", () => resolve(JSON.parse(d)));
}).on("error", reject);
});
const post = (data) => new Promise((resolve, reject) => {
const body = JSON.stringify(data);
const req = http.request({
hostname: "localhost", port: 4173,
path: "/api/docs/akaghef-beta", method: "POST",
headers: { "Content-Type": "application/json; charset=utf-8", "Content-Length": Buffer.byteLength(body) }
}, res => {
let d = "";
res.on("data", c => d += c);
res.on("end", () => resolve(JSON.parse(d)));
});
req.on("error", reject);
req.write(body);
req.end();
});
let idCounter = 1;
function newId() { return `n_upd_${Date.now()}_${idCounter++}`; }
function addChild(nodes, parentId, text, attrs = {}) {
const id = newId();
nodes[id] = {
id, parentId, children: [], nodeType: "text",
text, collapsed: false, details: "", note: "",
attributes: attrs, link: ""
};
if (nodes[parentId]) nodes[parentId].children.push(id);
return id;
}
const data = await fetch();
const nodes = data.state.nodes;
// === ここに更新ロジックを挿入 ===
// 例:
// for (const [id, n] of Object.entries(nodes)) {
// if (n.text === "conflict backup save/restore") {
// n.attributes.status = "done";
// addChild(nodes, id, "2026-04-09 完了", { type: "progress" });
// }
// }
const result = await post(data);
console.log(JSON.stringify(result));
マップ上のタスクは以下の3状態で表現する:
| 状態 | マップ上の表現 | |------|--------------| | 完了 | ノードを削除する(親の children から除去 + nodes から削除) | | 未着手 | ノード単体のまま(子ノードなし) | | 途中 | 子ノードとして進捗メモを追加 |
タスクが完了したら、そのノードをツリーから除去する。
function removeNode(nodes, nodeId) {
const node = nodes[nodeId];
if (!node) return;
// 親の children から除去
const parent = nodes[node.parentId];
if (parent) {
parent.children = parent.children.filter(cid => cid !== nodeId);
}
// 子ノードも再帰的に削除
for (const childId of (node.children || [])) {
removeNode(nodes, childId);
}
delete nodes[nodeId];
console.log("Removed (done):", node.text);
}
for (const [id, n] of Object.entries(nodes)) {
if (n.text === "完了したタスク名") {
removeNode(nodes, id);
break; // text検索なのでbreak
}
}
作業途中のタスクには子ノードとして進捗メモを追加する。
for (const [id, n] of Object.entries(nodes)) {
if (n.text === "タスク名") {
addChild(nodes, id, "2026-04-09 50%完了。○○まで実装済み", { type: "progress" });
console.log("Added progress to:", n.text);
}
}
DEV フォルダ配下の "Agent Status" フォルダの子ノードを更新する。 既存のエージェントノードのテキストを上書きする方式。
for (const [id, n] of Object.entries(nodes)) {
if (n.text === "Agent Status") {
for (const childId of n.children) {
const child = nodes[childId];
if (!child) continue;
const role = child.attributes?.role;
if (role === "data") {
child.text = "[data: idle ; PR#23 Cloud Sync Phase1完了]-[next: Markdown export]";
child.attributes.status = "idle";
}
// 他のロールも同様に更新
}
console.log("Updated Agent Status");
}
}
strategy の特定カテゴリに新しいタスクノードを追加する。
for (const [id, n] of Object.entries(nodes)) {
if (n.text === "Collaboration & Sync") {
addChild(nodes, id, "新しいタスク名", { status: "ready", agent: "data", priority: "P2" });
console.log("Added task under:", n.text);
}
}
node c:/Users/chiec/dev/M3E/tmp/map_update.mjs
結果を確認し、{"ok": true} を確認。
一時スクリプトは tmp/ に蓄積される。毎回削除しない。
tmp/ は .gitignore 済みなので git に影響しない。
必要に応じて tmp/ 内をまとめてクリーンする。
更新した内容を箇条書きで報告:
マップ更新完了:
- conflict backup save/restore → done + 進捗ノート追加
- Freeplane .mm export → done + 進捗ノート追加
- Agent Status:
[data: idle ; PR#23完了]-[next: 未定]
[visual: working ; entity list UI実装中]-[next: SSE自動更新]
map-update を実行するたびに、Agent Status も必ず更新する。
現在稼働中のエージェント(バックグラウンドタスク)の状況を確認し、Agent Status ツリーに反映する。
確認方法:
Agent ツールで run_in_background: true で起動したもの)の完了通知を確認workingidle + 次タスク名各ノードの text は以下の形式に統一する:
[{role}: {status} ; {current task}]-[next: {next task}]
idle / working / blocked の3値未定例:
[data: idle ; PR#23 Cloud Sync Phase1完了]-[next: 未定][visual: working ; entity list UI実装中]-[next: SSE自動更新][team: working ; PR#23レビュー・マージ中]-[next: —][manage: idle ; 全方針確定]-[next: Miro比較+H1評価基準]attributes は従来通り { "role": "data", "status": "idle" } を維持する。
tools
会話中のアイデア・判断・思いつきをbacklog/にmdファイルとして即座に書き出す。 フォーマットチェック不要、速度優先。エージェント間の非同期コミュニケーションプールとして機能する。 以下の場面でトリガーする: - 「tomd」「backlogに書いて」「mdに残して」「書き下して」と言われたとき - 会話中に設計判断やアイデアが出て「残しておいて」「プールして」と言われたとき - 「backlogに突っ込んで」「メモっといて(backlog)」と言われたとき
development
M3Eプロジェクトでエージェントが作業開始時にロールを確定するスキル。 ワークツリーで起動した各エージェントは、最初にこのスキルを実行して 担当ロール・ブランチ・作業範囲・割り当てタスクを確認する。 以下の場面でトリガーする: - 「/setrole」「setrole」「ロール設定」と言われたとき - エージェントがワークツリーで起動された直後 - 「自分の担当は?」「何をすればいい?」と聞かれたとき - ブランチや作業範囲の確認が必要なとき devM3E の Execute フェーズでサブエージェントを起動する際に自動実行される。
development
M3E開発でPR(Pull Request)のレビュー・マージ・事後処理を行うスキル。 pr-beta(PR作成)の対になるスキルで、マネージャー側のワークフローを担う。 以下の場面でトリガーする: - 「/pr-review」「PRレビューして」「PR見て」「マージして」と言われたとき - PR URLやPR番号が提示されたとき - devM3E の Integrate フェーズでマージ判断が必要なとき - 「PRどうなってる」「PR状況」と聞かれたとき dev-beta ブランチ(統合ロール)で使うことを想定。部下ブランチから呼ばれた場合でも動作するが、マージ権限は統合ロールのみ。
development
M3E開発で作業ブランチから dev-beta へのPR(Pull Request)を作成するスキル。 subworker(codex1/codex2/feature branch)が作業完了後に統合マネージャーへ マージ依頼を出すワークフローを自動化する。 以下の場面でトリガーする: - 「/pr-beta」「PRを作って」「dev-betaにマージ」「統合して」と言われたとき - 作業ブランチでの実装が完了し、統合フローに進むとき - devM3E の Integrate フェーズでPR作成が必要なとき dev-beta 以外のブランチにいるときに使う。dev-beta 上で呼ばれた場合はエラーにする。