【必須】現在のアクティビティを完了にする、または完了にせず中断して寝かせる。「/af」「この作業完了」「クローズして」「一旦ここまで」「今日はここで止める」「いったん置いておく」など終える・中断する意図で発動。このスキルを経由せずにupdate_activityでcompleted・pending・snoozed・shelvedにしない。
restart
CALMのプラグインを更新し、ローカルMCPサーバーを強制再起動する。プラグインを更新した後や、CALMのPRをマージした後、環境変数などの設定を変えた後に、反映が要るときはClaudeが自分で実行してよい(ユーザーが打ってもよい)。embeddingサーバーも停止され、新しいサーバーの起動直後に自動で立ち上がる。
実行スコア 未検証
インストール方法を見る含まれるファイル(1)
- SKILL.md8.3 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
restart
CALMのローカルMCPサーバー(52837)を強制的に再起動する。
PRマージ後の後片付け全体(worktree削除やgit pull等)はリポジトリのCLAUDE.mdの手順に従う。本スキルはサーバーの再起動だけを行う。
launcherの通常起動は「生きていれば何もしない」ensure動作のため、プラグインをアップデートした後もコード変更が反映されないことがある。このスキルは既存プロセスを明示的に終了させてから新規プロセスを起動する。
embeddingサーバー(52836)はMCPサーバーの再起動より前に必ず停止する。新しいMCPサーバーが起動直後に自動でembeddingサーバーを立ち上げて温めるため、embedding側のコード変更も反映される。
再起動の前
打ってよいのは次の2つのときだけ。
- このセッションでCALMのPRをマージした後や設定を変えた後で、反映を待っている作業や確認があるとき
- CALMが古い版のまま動いていて困っているとき
反映を待つものが無いなら、claude plugin update calm@calm-marketplace で更新だけして、再起動はサーバーの陳腐化 watchdog に任せる。watchdog は処理中の呼び出しが0件になるのを待って自動で再起動する(確認間隔は CALM_STALENESS_CHECK_INTERVAL_SEC、既定1時間)。設定を変えただけでコードの更新が無いときは、更新は省いてよい。
- 他のセッションが書き込み中かもしれないので、
claude agents --jsonで生きているセッションを確かめる。確認は人に求めず、そのうえで自分の判断で進める claude plugin update calm@calm-marketplaceを実行する- 古い窓口から打たない: 次で
mcp_server.started_atを確かめ、直近の再起動より後の時刻であれば、別の窓口が既に打った後なので打ち直さない
Bashツールは呼び出しをまたいでシェル変数を引き継がず、セッションの ${CLAUDE_PLUGIN_ROOT} は更新前の版を指したままのことがある。そのため以降のコマンドは、同じ呼び出しの頭で更新後の版のディレクトリ(installed_plugins.json の user スコープのエントリ)を取り直し、空なら止める。
PLUGIN_DIR=$(jq -r '[.plugins["calm@calm-marketplace"][] | select(.scope=="user")][0].installPath // empty' ~/.claude/plugins/installed_plugins.json) && [ -n "$PLUGIN_DIR" ] && uv run --directory "$PLUGIN_DIR" python "$PLUGIN_DIR/scripts/restart_server.py" --status
新しい版のディレクトリは依存が未同期のことがあるため、--no-sync は付けない(uv run が先に同期する)。同期に失敗してコマンドが落ちたら、再起動はせず中断し、出力をそのまま報告する。
実行
上の条件を満たしたら、確認は取らずに以下をBashツールで実行する。
PLUGIN_DIR=$(jq -r '[.plugins["calm@calm-marketplace"][] | select(.scope=="user")][0].installPath // empty' ~/.claude/plugins/installed_plugins.json) && [ -n "$PLUGIN_DIR" ] && uv run --directory "$PLUGIN_DIR" python "$PLUGIN_DIR/scripts/restart_server.py"
外から終了させるため、watchdog の「処理中の呼び出しが0件になるまで待つ」ガードを通らない。停止の直前に処理中だった書き込みは、失敗に見えても DB には書かれていることがある。再起動の前後で失敗に見えた書き込みは、リトライする前に検索で記録があるかを確かめる(確かめずに再送すると重複する)。
直後
既存のセッション(bgを含む)は通常、再接続の操作なしでつながり直すため、/mcp の再接続や bg の stop→respawn は要らない。呼び出しが固まったセッションがあったときだけ、次のとおり対処する(固まったかどうかの見分け方は末尾の節)。
- 窓口(対話セッション): そのセッションで
/mcpからreconnectする。直らなければそのセッションを再起動する - bg:
claude stop <id>で止め、claude respawn <id>で会話を引き継いだまま起こし直す(依頼文の再送は不要)。respawnで短い参照(id)が変わることがあるので、SendMessageは新しい参照へ「get_configを呼んで疎通を確認して」と伝える。claude stopがauto modeのclassifierに止められたら、迂回せずユーザーに! claude stop <id>を頼む - 起こし直したbgがorchの子なら、そのorchの窓口へ
SendMessageで「bgを起こし直した」と伝える(窓口の説明に書かれたbg一覧を直すため)
結果の報告
スクリプトはJSON形式で結果を標準出力に返す。
uv_sync.okがfalse: 依存関係の同期に失敗している。detailを伝えつつ、mcp_serverの再起動自体は実行済みなのでその結果と合わせて報告するmcp_server.okがtrue: 再起動成功。old_pids(旧プロセス)とnew_pids(新プロセス)をユーザーに簡潔に伝えるmcp_server.okがfalse: 再起動失敗。detailの内容をそのままユーザーに伝え、--statusでの手動確認を促す。プラグイン更新直後の初回実行はvenv再構築が重く、稀にこのタイムアウトが起きることがある。その場合は再実行を促すembedding_server.stopped_pidsは停止したembeddingサーバーのPID。空配列なら元々停止していただけなので触れなくてよいcachesは削除したパスの記録。特に問題なければ触れなくてよいorphaned_processes.stoppedが空配列でない場合: 削除済みのプラグインディレクトリから動き続けていたプロセス(embeddingサーバー・MCPサーバー本体等)を検出して停止したことを伝える(pid・cwdで何を止めたか分かる)。launcherプロセス(各セッションのブリッジ)は対象外で、この一覧に出てくることはない。orphaned_processes.keptは、同種のプロセスのうち起動元ディレクトリがまだ存在していた(=孤児ではない)ものの記録で、特に問題なければ触れなくてよいplugin_cache_pruneはプラグインキャッシュ旧バージョンの掃除結果(removed/skipped)。削除件数があれば一言触れる、空配列なら触れなくてよい
再起動の後
CALMのツールが通るのを確かめてから、退避してあった分を流し込む。
- CALMに書けなかった間の記録を退避ファイルに書き出していた場合は、再起動の後に自分の分だけを名指しして流し込む。持ち主が生きていない分(respawnで消えたbg、閉じた窓口の分)は、中身を確かめてから名指しで流す。ディレクトリ直下を一括で流すような操作は行わない
- bgを起こし直した場合は、空席のorchの説明に書かれている、生きているbgの一覧(あれば)を、実際に起こし直した内容に直す
- 反映待ちは
--statusのmcp_server.started_atとマージした時刻を突き合わせて確かめ、済んだものは消す
固まった接続の見分け方
自動でつながり直さなかった場合の例外として、再起動の前からいた接続が古いサーバーを掴んだままのことがある(対処は「直後」の節)。エラー文言がauto modeのclassifierの拒否のように見えても、実際は古いサーバーへの接続が固まっているだけのことがある。--status の mcp_server.started_at が今回の再起動時刻より前なら、その接続は古いサーバーを掴んだままだと分かる。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
コメント
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
同じリポジトリのスキル
【必須】新しいアクティビティを作成してcheck-inする。「/as」「新しい作業始める」「アクティビティ作って」「これやる」など新規作業の開始で発動。このスキルを経由せずにadd_activityを呼ばない(orchの起票はorch skillに従う)。
【必須】open askを1件ずつ人間に提示し、回答をanswer_askで記録する。「askに答える」「open ask消化して」「溜まってるask片付けたい」などで発動。このスキルを経由せずにanswer_askを呼ばない。
【必須】add_askでaskを起票する前に、question/contextをテンプレートで組み立てる。離席中・セッション跨ぎでしか答えられない判断が出たときや、「これ聞いといて」「判断委譲しといて」「後で確認して」などで発動。このスキルを経由せずにaskの文面を書かない(メタaskを除く)。
add_askの応答のsimilar_asksを見て、同型の問いが繰り返され裁定が一貫していると気づいたとき、判例をまとめてメタask(kind="meta")を起票する。
人間の判断待ちaskの受け箱をMonitorで監視し、判断構造が同じopen askが溜まっていればメタaskを起票する。「ask storeを監視して」「asksを見張って」「open askの滞留をチェックして」などで発動。