本文へスキップ
プロジェクト

nuthatch.

git worktree を、作る・移る・消す。ぜんぶ hop ひとつで。

  • hop feat/x --create
  • hop
  • hop -
  • hop rm feat/x
  • hop clean

できること

設定ファイルも状態ファイルもありません。どのリポジトリでも、入れたその日から使えます。

ターミナルで hop feat/x --create を実行すると、新しい worktree のパスが表示される

作る

hop feat/x --create で、ブランチと worktree をその場で作ります。置き場所はいつも <root の親>/_worktree/<repo>/<branch> です。

worktree とまだ作っていないブランチの一覧で、選択が下へ移る

移る

hop で一覧から選んで cd します。hop <branch> は直接、hop - は直前の worktree へ、hop root は元のクローンへ戻ります。

hop clean が merged、gone、prunable の worktree を見つけ、確認のあとまとめて消す

消す

hop rm <branch> で worktree を消します。ブランチは残ります。hop clean は、マージ済み、upstream が消えた、作業ディレクトリが消えた worktree を見つけ、一覧を見せてまとめて確認してから消します。

安全のために

  • 未コミットの変更があれば止まる。それでも消すときだけ --force を付けます。
  • git がロックした worktree には触らない。--force を付けても消しません。hop がロックを外すこともありません。
  • _worktree の外にある worktree は確かめる。選択画面から消すときは、必ず y/N を聞きます。
  • hop clean が自動で消すのは、_worktree 配下のものだけ。それ以外は、--ext を付けない限り候補に入りません。

AI エージェントにも

  • 対話なしで終わる。ブランチを指定すれば非対話で完結し、--json はどこでも使えます。
  • パスは stdout、ログは stderr。結果をそのまま変数に受けられます。エラーは次の一手を教えてくれます。
  • プラグインで使い方を教えられる。Claude Code と Codex 向けに、using-hop スキルを配っています。
p=$(hop feat/x --create)   # path on stdout
hop ls --json              # {"schemaVersion":1,"command":"ls","data":[...],"warnings":[]}

インストール

バイナリ(おすすめ)

curl -fsSL https://raw.githubusercontent.com/n-seiji/nuthatch/main/install.sh | sh
# or, with mise
mise use github:n-seiji/nuthatch
  • •macOS (arm64 / x64) と Linux (x64) 用です。Node.js は要りません。
  • •hop は ~/.local/bin に入ります。HOP_INSTALL_DIR で変えられます。
  • •v0.2.1 以降のバイナリには、ビルドの来歴証明 (build-provenance attestation) が付きます。

npm

npm i -g @n-seiji/nuthatch
# or, with mise
mise use -g npm:@n-seiji/nuthatch
  • •Linux arm64 にはバイナリがないので、こちらを使います。
  • •Node で動くぶん遅くなります (README の計測で hop ls は約 400ms、バイナリは約 60ms)。

シェル連携 (zsh)

# ~/.zshrc
eval "$(hop init zsh)"
  • •これで hop が、選んだ worktree へそのまま cd します。

エージェント用プラグイン

# Claude Code
/plugin marketplace add n-seiji/nuthatch
/plugin install hop@nuthatch

# Codex
codex plugin marketplace add n-seiji/nuthatch
codex plugin install hop