Agent coding時代、いつでも気軽にPCをスリープさせたり、VSCodeの再起動をするには?
最近、Claude Code や Codex などのコーディングエージェントを使ってコードを書くことが増えていますよね、私もそうです。
しかし、困るのが「PC がスリープすると、エージェントも止まってしまう」ことです。
「あーこの処理が終わったら帰宅するか」「あ、もう一つやってから帰宅しよう」みたいなので延々椅子から離れられないとかよくある。
これを避けるために、私は常時起動の Linux BOX 上でエージェントを動かすようにしています。ただ、sshでやってるのはいかにも面倒。エディタも必要ですからね。
ということでVS Code Remote SSHの出番になるんですが、これも接続が切れたタイミングでターミナル上のプロセスも終了します(しないこともある)。
つらい。
そこで最近使っているのが Shpool です。
コーディングエージェント生存戦略としての Shpool
Shpool は、シェルのセッションを維持し、あとから再接続できるようにするためのツールです。sshが切れても終了しません、古来から screenや tmuxで実現できていますね、なぜ shpool なのかは後述するとして、
shpoolは次のように名前付きのセッションへ attach できます。(ない場合は作成)
shpool attach my-project
Shpool の中に入ると、プロンプトには次のようにセッション名が表示されます。
shpool:my-project john@linuxbox:~$ claude
この中で Claude Code や Codex を起動しておけば、VS Code を閉じたり、PC をスリープしたり、SSH が切れたりしても、あとから同じセッションに戻れます。
# 再接続
shpool attach my-project
これでエージェントを動かしたまま、別の PC から再接続したり、外出先から様子を見たりできます。
tmux や screen ではなく Shpool を使う理由
前述の通り tmux や screen でもできます。
ただ、私が欲しいのはターミナルマルチプレクサーではなく、単に「シェルセッションを維持して、切断後に再接続する」ことです。
画面分割やウィンドウ管理は VS Code 側で十分なので、Shpool くらい機能が絞られているほうが、コーディングエージェント用途にはちょうどよいと感じています。むしろ、画面の崩れになやまされるほうがつらい。今のところ、私の環境では Claude Code や Codex のような TUI アプリケーションも問題なく動いています。
そして list, attach, detach, kill というサブコマンドと、C-Space, C-qというキーバインド(今のコンソールをデタッチ)だけおぼえておけばよい手軽さがよいですね。
mise 経由で入れる
Shpool は Homebrew などでも入れられますが、私は mise 経由で入れています。
mise use --global rust@latest
mise use --global cargo:shpool
最初からパッケージが登録されているわけではないので、CargoのWrapper(?)をつかっていれています。
最近、Linux、macOS、WSL など複数の環境を行き来していると、Homebrew だけで開発ツールを管理するのは少し面倒になってきます。最近は asdf の代わりも含めて、こういった CLI ツール類は mise で管理することが増えています。
Tips: カレントディレクトリ名をセッション名にする
Shpool のセッション名を毎回考えるのが面倒?その場合はカレントディレクトリ名をそのまま使うと便利です。たとえば my-project というディレクトリにいるなら、自動的に my-project というセッション名で attach してほしい。
shpool attach `basename $PWD`
aliasしたほうがよいですが、ギリギリ自分でもタイプできる量ですね。
Shpool のセッション名には
/が使えないのが若干不便
2026/05/18 追記
セッション選択が不便なので、ツールをつくりました。これで再接続もらくらく!!しかもcwdで起動するし、セッション名も考えなくていい!
まとめ
単にエージェントのプロセスを生かしておきたい、という用途には Shpool がかなり合っています。(まあ、screenでもいいんですが、ターミナルマルチプレクサの相性問題は本当に面倒なんで)
セキュリティのことを考えると、分離環境であるDocker(Dev Container)に全部のせて、execで入る、みたいなのが一番いいんじゃないかとも思うんですが、そうなるとリモートのDocker engineとどうやって…みたいになるので、まあいまのところ中庸なのかな…と。
というところで現場からは以上です。
Discussion