コンテンツへスキップ
Latchkey
無料で始める
ドキュメントメニュー

CLI から単発のジョブを実行する

ターミナルやコーディングエージェントから、任意のコマンドを新しい Latchkey ランナーで実行します。CLI が作業ツリーをパックし、ログをストリーミングで返し、コマンド自身の終了コードで終了します。

Latchkey CLI (@latchkeydev/cli) は、新しい CI マシンを、ローカルコマンドのように呼び出せるものに変えます。 latchkey run 'npm test' は作業ツリーをパックし、隔離された Latchkey ランナーでコマンドを実行し、出力をターミナルにストリーミングし、コマンド自身の終了コードで終了します。これにより、スクリプト化できる検証ループになります: プッシュする前に、CI が実行するのと同じやり方で、クリーンな Linux マシン上でチェックを実行できます。プッシュ前の検証、CI でのみ発生する失敗の再現 (クリーンなワークスペース、新規インストール、Linux)、そして他のシェルコマンドと同じようにこれを操作するコーディングエージェントのために作られています。

インストールと認証#

CLI をインストールする

npm でグローバルにインストールするか (Node 20.18.1 以降)、npx @latchkeydev/cli でアドホックに実行します。スコープ付きのパッケージ名をインストールしてください: npm 上のスコープなしの latchkey パッケージは無関係のプロジェクトです。

terminal
$ npm install -g @latchkeydev/cli
$ latchkey --help

ジョブ実行可能な API キーを作成する

Settings, API Keys で (オーナーと管理者)、Allow running CLI jobs (includes reading) にチェックを入れてキーを生成します。権限は作成時に固定されます: 既存のキーが遡って権限を得ることはありません。完全なキー (lk_live_ で始まります) は一度だけ表示されます。

ログインする

latchkey login は課金対象のものを何も起動せずにキーを検証し、このマシン用に保存します (~/.config/latchkey/config.json)。CI やエージェントループでは、保存された設定を使わず、代わりに環境変数 LATCHKEY_TOKEN を設定してください。

ジョブを実行する#

terminal
$ latchkey run 'npm test'
$ latchkey run --size large --timeout 3600 'npm ci && npm run build && npm test'
$ latchkey run --env NODE_ENV=test 'npm test'

すべての実行は同じ 5 つのことを行います: 現在のディレクトリをコンテキストアーカイブにパックし、アップロードし、新しいランナーでコマンドを実行し、ログをライブでストリーミングして返し、コマンド自身の終了コードで終了します。キャンセルされたジョブは 130 で終了し、プラットフォームが期限切れにしたジョブは 124 で終了するため、スクリプトやエージェントはログテキストを 1 行も解析せずに結果で分岐できます。

コマンド一覧#

コマンド何をするか
latchkey loginAPI キーを検証し、このマシン用に保存する
latchkey run現在のディレクトリをパックし、新しいランナーでコマンドを実行し、ログをストリーミングし、コマンドの終了コードで終了する
latchkey list最近のジョブを、まだ実行中のものも含めて新しい順に一覧表示する
latchkey logsジョブのログを出力するか、--follow で完了までテールする
latchkey statusジョブの状態、ランナーサイズ、タイミング、終了コードを表示する
latchkey cancelキャンセルをリクエストする。実行中のジョブは約 10 秒以内に停止する
latchkey watch自己修復が修正できなかった CI の失敗をポーリングし、それぞれをコーディングエージェントに引き渡す

実際に使うことになる run のフラグ: --size はランナーを選択します (small がデフォルト。mediumlargexlarge はワークフローで使う ランナーサイズ に対応します)。--env KEY=VALUE はシークレットや設定をファイルとして送らずに渡します。--timeout は 30 秒から 2 時間まで受け付けます (ジョブのデフォルトは 30 分)。--detach はジョブを送信して終了するため、後からテールできます。--no-context は何もアップロードせず、空のワークスペースでコマンドを実行します。すべてのリモートコマンドは機械可読な出力のための --output json を受け付け、パッケージには、コーディングエージェントが完全な契約を読み取れる独自の詳細リファレンス (SKILL.md) が同梱されています。

ジョブと一緒に送られるもの#

latchkey run は実行したディレクトリをパッケージ化します。それを囲むリポジトリは決して対象になりません。そのため、サブディレクトリから実行するとそのサブディレクトリだけが送られます。何が含まれるかは 3 つのルールが決め、最後に意見を表明したルールが勝ちます:

  • パッケージ化されるツリー内のすべての .gitignore が適用されるため、ignore された依存関係のインストール物やビルド出力は手元に残り、ジョブは CI と同じようにゼロからインストールします。対象になるのはツリー内にある ignore ファイルだけです: サブディレクトリから実行すると、リポジトリルートの .gitignore は適用されなくなります (パッケージ化のルートに .latchkeyignore を置くのが解決策です)。
  • クレデンシャルの形をしたファイル (.env ファイル、秘密鍵、クラウドのクレデンシャルファイル) は組み込みの拒否リストによって除外され、除外はすべて出力に表示されます。.gitignore がそれらを再び含めることは決してできません。
  • .latchkeyignore ファイル (同じ構文) は両方より優先されます: さらに除外するためにも、拒否リストが除外したものを意図的に再び含めるためにも使えます。後者の場合は、ファイル名を明示した目立つ警告が表示されます。

制限#

制限
コマンドライン16,384 文字
環境変数ジョブあたり 64 個
ジョブのタイムアウト30 秒から 2 時間、デフォルトは 30 分
コンテキストのアップロード圧縮時 200 MB、非圧縮時 1 GiB、250,000 エントリ
ジョブの作成ワークスペースあたり毎時 120 ジョブ
ジョブの記録ステータスとログはジョブ終了後、約 24 時間読み取り可能です。latchkey list にはそれより古いジョブも引き続き表示されます

上限を超えたコンテキストは、何かがアップロードまたは課金される前に、ローカルでのパックの段階で失敗します。最も大きなパスが名指しで表示されるため、修正はたいてい .latchkeyignore の 1 行で済みます。

課金#

CLI ジョブは通常のランナー分数です: 同じサイズのワークフロージョブと同じ 1 分あたりの料金で、ジョブごとに切り上げられ、まず同じ毎月の 無料分プール から差し引かれます。メーターはコマンドの開始からジョブの終了までを計測します。キュー待ちとプロビジョニングの時間が課金されることはありません。コスト分析 ページでは、この支出は独自の CLI Jobs 行として表示されます。これらのジョブはどのリポジトリにもワークフローにも属さないためです。

自己修復はここでも機能します#

すべての CLI ジョブは、ワークフロージョブと同じ 自己修復 の仕組みの下で実行されます。環境の失敗 (不安定なレジストリ、欠けているシステムパッケージ、満杯のディスク) はジョブの実行中にその場で診断され、適用できる修復があれば修正されます: 修復後のリトライが通れば 0 で終了し、何も適用できなければコマンド本来の終了コードがそのまま残ります。コードの本物の欠陥は変更されずに通過するため、終了コードは真実を語ります。ワークフロージョブとの違いが 1 つあります: CLI ジョブにはリポジトリがないため、修復がプルリクエストを開くことはありません。修正はランナー上で行われるか、まったく行われないかのどちらかです。診断は課金対象の時間内で実行されるため、失敗した実行は成功した実行よりも目に見えて多く課金されます (通常はおよそ 1 分の追加)。失敗の反復作業をするときは、その分を見込んでおいてください。

逆方向: watch#

latchkey run は、あなたが Latchkey に何かの確認を頼むものです。latchkey watch は、Latchkey があなたに何かが壊れたと伝えるものです: 自己修復が診断したものの修正できなかった失敗 (ワークフローの実行に加えて、CLI ジョブも) をポーリングし、新しいものをそれぞれ、正確に一度だけコーディングエージェント (デフォルトは Claude Code、それ以外は --agent) に引き渡します。エージェントは MCP サーバー を通じて完全な失敗コンテキストを読み取るため、まずそちらで接続してください。一回限りの一覧表示には --once を、何も起動せずに出力だけするには --no-spawn を使います。watch はどのキーでも実行できます。読み取りしか行わないためです。

組み合わせて使う#

よくある質問#

ジョブは git 履歴を見られますか?

いいえ。.git ディレクトリは常に除外され、再び含めることはできません。ジョブに見えるのは、ディスク上にあるままのファイルです。コマンドがコミット SHA やブランチ名を必要とする場合は、--env で渡してください。

ジョブはローカルのサービスやデータベースにアクセスできますか?

いいえ。ランナーは、あなたのノート PC への経路を持たない、新しく隔離されたマシンです。見えるのはアップロードされたツリーと、渡した環境変数だけで、それ以外は何もありません。対話的なコマンドが固まるのも同じ理由です: 向こう側にはターミナルがないため、入力を求めるものはすべて、タイムアウトがジョブを終わらせるまで待ち続けます。

Ctrl-C を押すとどうなりますか?

止まるのはテールであって、ジョブではありません: ジョブはランナー上で実行 (と課金) を続けます。中断通知には 2 つのフォローアップが表示されます。ジョブを停止する latchkey cancel <id> と、再アタッチする latchkey logs <id> --follow です。

References