コンテンツにスキップ

Agent のジョブ

Markdown で見る

時間のかかる調べものやファイルの編集は、Agent のジョブとして codex か claude の CLI に任せます。先に Agent の準備を済ませておきます。

Agent のジョブの画面。ジョブの一覧とログが並んでいる

会話から頼んだジョブは、読むだけのものも含めて、始める前と続ける前に確認画面が出ます。確認画面にはエージェントへの指示、作業場所、書き込めるかどうかが載り、「ジョブを始める」を押したときだけ始まります。確認画面が出ているあいだに話しかけても、承認にもキャンセルにもなりません。ジョブはあなたの権限で動くので、頼んだ覚えのない指示ならキャンセルしてください。

Git リポジトリへの編集は、別の worktree で進めます。終わったら差分を見て「取り込む」か「捨てる」を選びます。会話から取り込みを頼んだときも、変更の一覧を載せた確認画面で承認してから取り込みます。会話から変更を捨てるよう頼んだときも、確認画面で承認してから捨てます。捨てた変更は元に戻せません。

リポジトリの中のフォルダを作業場所にすると、ジョブは worktree の中の同じフォルダで動きます。そのため、作業場所はリポジトリにコミットされているフォルダでなければならず、コミットされていないフォルダを指定したジョブは始まりません。ジョブの変更を worktree の中でコミットにまとめるときも、それを取り込むときも、リポジトリのコミット用のフック(pre-commit、prepare-commit-msg、commit-msg、pre-merge-commit、post-commit)は動きません。まとめるのは worktree のファイルをディスクにあるとおりにした変更で、assume-unchanged や skip-worktree が付いたファイルの変更や、リポジトリの core.ignoreStat、core.fsmonitor、core.checkStat、core.trustctime の設定で git が見逃す変更も含みます。

sparse checkout のリポジトリでは、取り出していないファイルは消したものとして扱わず、範囲の外に書いたファイルは変更に含めます。skip-worktree が付いていて worktree に無いファイルのうち、sparse checkout が取り出さないもの以外(範囲の中にあるものや、sparse checkout が切られているときのもの)は、消したのか取り出していないだけなのかが分からないので、変更をまとめずに worktree を残し、ジョブのログに理由を出します。取り出していないファイルの場所にほかのファイルが置かれていて、コミットするとそれらが消える場合も同じです。

ASIST の git は、改行とシンボリックリンクの設定に加えて、~/.gitconfig の core.excludesFile で指定した無視するファイルの一覧も読みます。そのため、.DS_Store のように全部のリポジトリで無視しているファイルは、取り込みの前の確認でもジョブのコミットでも、あなたの git と同じく無視されます。

リポジトリで無視される場所(dist/ や .env など)に書いたファイルはコミットに入らないので、取り込まれません。エージェントが書いたと知らせたファイルがそうした場所にあるときは、ほかに変更がなくても worktree を残して取り込み待ちにし、差分の上と、取り込みや破棄の確認画面に、取り込まれないファイルとして名前を出します。続きのジョブが何も書かずに終わったときも、前のジョブが書いたそうしたファイルがあれば worktree は残ります。それらは取り込んだときも捨てたときも worktree と一緒に消えるので、必要なら先に開いて別の場所へ移してください。成果物のカードからは、ジョブが作業したフォルダの外でも、worktree の中のファイルなら開けます。取り込みは、あなたの作業ツリーにある git が追跡していないファイル(無視されている .env なども含みます)を上書きしません。ジョブのコミットがそこにファイルを持ち込むときは、取り込まずにそのファイルの名前を出します。

取り込みで見せる差分には、ジョブがあなたのブランチを取り込んだりその上にやり直したりしたときも、ジョブ自身の変更だけが出ます。取り込みは、差分を見たときにリポジトリで開いていたブランチに入ります。そのブランチの名前は、差分の上と、会話から頼んだときの確認画面に出ます。差分を見たあとで別のブランチ(同じコミットから作ったものも含みます)を開いたり、差分を数え始めたコミット(ジョブのブランチと開いているブランチが分かれたコミット)が変わったりしたときは、取り込まずに理由と新しい差分を見せます。ジョブと共通の履歴がないブランチを開いているあいだと、HEAD がブランチを指していないあいだ(bisect の途中など)は取り込めません。取り込みの途中で ASIST が異常終了したときや、ジョブのブランチを自分で取り込んだときのように、ジョブのコミットが開いているブランチの履歴にすでに入っているときは、カードにそのことが出ます。そのあとのコミットで変更を戻していても同じです。「取り込む」を押すと、新しいコミットは作らずに取り込み済みとして記録し、worktree を消します。作業ツリーに未コミットの変更があっても、この記録はできます。

サブモジュールに触れたジョブは、ASIST では取り込みません。サブモジュールが指すコミットや .gitmodules を変えたとき、サブモジュールを足したり消したりしたとき、サブモジュールを初期化したとき、サブモジュールの中でコミットしたりファイルを変えたりしたときがこれにあたります。そうしたジョブは worktree を残して取り込み待ちのままになり、差分の上にそのサブモジュールとブランチの名前、worktree の場所が出ます。サブモジュールの中で作ったコミットはその worktree の中の複製にしかないことがあり、そのときはあなたのチェックアウトで git submodule update をしても取ってこられません。必要なら worktree から push してからブランチを自分で取り込むか、捨ててください。捨てるとその複製も消えるので、worktree にサブモジュールの作業があるかもしれないときは、カードの「捨てる」を押したときも確認画面が出ます。

エージェントが worktree の中で自分のブランチに切り替えたジョブや、ジョブのブランチの名前を変えたジョブ(「ブランチを切ってコミットして」と頼んだときなど)も、ASIST では取り込みません。ASIST はそのブランチに何もコミットせず、worktree を残して取り込み待ちにし、カードにそのブランチの名前を出します。ブランチを自分で取り込むか、捨ててください。捨てても、エージェントのブランチはリポジトリに残ります。

ASIST の git が開けないリポジトリでは、書き込むジョブを始めずに git の理由を出します。読むだけのジョブは、そのフォルダでそのまま動きます。ASIST の git は safe.directory の設定を読まないので、別のアカウントが clone したものや、Windows の FAT や exFAT のドライブにあるものなど、持ち主があなたと違うと git が見るリポジトリがこれにあたります。

Git で管理していない既存のフォルダへの編集は、そのフォルダに直接書きます。作業場所を指定しないジョブは、専用の作業フォルダを作ってそこで動きます。記憶の整理は、変更が記憶のフォルダの中のファイルだけのときに限って自動で取り込みます。

Dock の「Agent」に、ジョブの一覧、選んだジョブのログ、その下に成果物のカードが並びます。成果物を押すと、ファイルのカードで中身を見られます。ログは文字を選んでコピーでき、「コピー」で全文をクリップボードに入れます。

会話からは 2 つのカードで見ます。「ジョブどうなってる?」で出る一覧のカードは、判断が要るもの(取り込み待ち、衝突)、実行中、最近終わったものの順に並びます。ジョブのカードは、段階に合わせて箱を 1 つだけ見せます。取り込み待ちなら差分と「取り込む / 捨てる」、実行中ならいまのステップとログ、完了なら要約と成果物、失敗なら理由とログの末尾です。判断が要るときと終わったときは、話しかけなくてもカードが出ます。

キャンセルしたジョブは、エージェントと、エージェントが動かしていたコマンドがすべて終わったことを確かめるまで「停止中」と出ます。確かめられないときはログにそのことが出るので、「中止をもう一度試す」で止め直します。ASIST が異常終了したときも、実行中のジョブには停止が送られます。次に起動したときは、止まったことを確かめてから成果物を確定し、確かめられなければ worktree を残します。終わったジョブの履歴は、新しいものから 50 件を残します。

エンジンと既定のモードは、設定の Agent で選びます。