Communitygithub.com

netresearch/jujutsu-workflow-skill

Jujutsu(jj)によるエージェントセーフなバージョン管理 — ローカルの変更管理にjj、リモート/PR/CI/監査インターフェースにはGitを使用します。Netresearchエージェントスキル。

jujutsu-workflow-skill とは?

このスキルは、AIエージェント(Claude Code、Codexなど)向けに設計された、Jujutsu(jj)を用いた安全かつ効率的なバージョン管理ワークフローを提供します。従来のGitの複雑なステージングやインデックス操作を回避し、jjのシンプルな変更追跡とリベース機能を活用することで、エージェントが自律的にコード変更を管理できるようにします。Gitはリモートリポジトリとの同期、PR作成、CI連携、監査のための正規インターフェースとして維持され、jjによるローカル操作とGitによるリモート操作を明確に分離します。スキルは、リポジトリ状態の検出、エージェントがハングしないための安全ルール(--no-pagerの使用、インタラクティブエディタの禁止)、非インタラクティブな変更分割、操作のアンドゥ/リカバリ、Gitへの安全なハンドオフ、並列エージェント用のワークスペース管理、そして「完了」前の検証手順を網羅しています。スクリプトによる自動検証も含まれており、エージェントのバージョン管理操作を堅牢かつ再現可能にします。

対応✓Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add netresearch/jujutsu-workflow-skill

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Jujutsu ワークフロー

エージェントコーディングにおいて、.jj/ リポジトリが存在する場合は、raw git よりも jj(Jujutsu)を優先してください。jjは優れたローカル変更レイヤーです。Gitはリモート/PR/CI/監査のための正規インターフェースとして残ります。変更は jj で行い、読み取り専用の確認にはGitを使用します。

1. 最初に検出とゲートを行う

${CLAUDE_SKILL_DIR}/scripts/detect_jj_state.sh を実行するか、手動で確認してください:

  • .jj/ が存在する → jjリポジトリ:jj を使用し、raw git で 変更(mutating)操作を行わない。
  • .jj/ かつ .git/ が存在する → 同一配置(colocated):変更は jj で行い、読み取りはgitで行う。git index/stagingには触れない。
  • .git/ のみ → 通常のGitリポジトリ:指示がない限り jj を導入しない。

references/git-interop.md を参照。

2. エージェントセーフティルール(譲れません)

  • 出力コマンドには常に --no-pager を指定し、jj config set --user ui.paginate never を設定する。
  • 常に -m を使用する。エディタ/TUIフォームは絶対に実行しない — bare jj describe|commit|squash、jj split(インタラクティブ)、jj squash -i、jj resolve、jj diffedit はエージェントを停止させる。
  • jj はjjコマンド実行時にのみワーキングコピーをスナップショットし、ファイル書き込みのたびに実行されるわけではない。

references/agent-safety.md を参照。

3. 編集ループ

jj --no-pager status
# ファイルを編集(次のjjコマンドでスナップショットされる)
jj --no-pager diff
jj describe -m "<プロジェクト規則に従ったメッセージ>"
nn new -m "<次の単位>"     # 論理単位ごとに1つの変更 — 肥大化したコミットを避ける

混在した変更を非インタラクティブに分割する:jj split <path> -m "<msg>"。references/command-map.md を参照。

4. リカバリ(取り消し可能)

jj --no-pager op log → jj undo(最後の操作)または jj op restore <id>。コンフリクトは第一級オブジェクトです:jj status がフラグを立てます。マーカーを編集して解決し、その後確認してください。references/recovery-playbook.md を参照。

5. Git経由でのハンドオフ

jj git fetch
jj rebase -d <デフォルトブランチ>
jj bookmark create <ブランチ> -r @-
jj git push --bookmark <ブランチ>      # 新しいブックマークは直接プッシュされる

保護された/デフォルトブランチには決してプッシュしない。許可されていない限り、公開履歴を書き換えない。gh/glab でPRを開く。references/pr-handoff.md を参照。

6. 並列エージェント

並行するエージェントごとに1つの jj workspace を使用する — ワーキングコピーを共有しない。references/parallel-agents.md を参照。

7. 「完了」前に確認する

${CLAUDE_SKILL_DIR}/scripts/verify_handoff.sh を実行するか、jj --no-pager status、jj --no-pager log --limit 10、jj --no-pager diff --stat、git status --short --branch を報告する。正確なコマンドと出力を報告し、それなしに「完了/テスト済み/準備完了」と主張しない。強制プッシュ、リカバリ、コンフリクトを開示する。

エージェントにとってjjがGitに勝る理由(および使用すべきでない場合):references/why-jj-for-agents.md を参照。

関連スキル