
Mac上の平文シークレットを検出し、Touch IDの保護下に移し、それらを読み取るツールを壊すことなくジャストインタイムで注入します。無料で、ローカルファーストです。
開発マシンのためのジャストインタイム認証情報。
ドキュメント · クイックスタート · 対応ツール · コマンドリファレンス · セキュリティ
ステータス: macOSのみ(Apple Silicon)、現在開発中。
あなたのシークレットはマシン中に平文で散らばっています: .env ファイル、
~/.aws/credentials、~/.zshrc のエクスポート、.npmrc のトークン、MCP設定。
あなたとして実行されるものは何でもそれらを読めます。悪意のある curl | sh、怪しい npm install、あるいは今やあなたのエディタでフル権限で動いているAIエージェントのいずれかが。
jit は各シークレットをTouch IDで保護されたローカルの暗号化ボールトに移し、
ファイルを書き換えてツールが引き続き動作するようにします。ディスク上には今やデコイがあります。
実際の値は、バイオメトリックプロンプトの後、それを要求した特定のプロセスのメモリ内にのみ現れます。
結果: あなたは一度だけロックを解除し、jit は認証情報をツール(またはエージェント)に渡す前に確認を求め、それ以外の時間はディスク上にデコイがあります。
| Codeで起動 | claudeで起動 |
|---|---|
![]() | ![]() |
これがやらないこと: すでに侵害されたアカウントを安全にすることはせず、要求したプロセスのメモリに入った後のシークレットを保護もしません。境界は1ページに前もって明記されています: 意図的な制限。
カーネル拡張なし、ファイルシステムドライバなし、FUSEなし。ツールができることに基づいて選ばれた3つのメカニズム:
execve。 jit自身のイメージはあなたのコマンドに置き換えられるため、値はその1つのプロセスに存在し、jitはメモリから消えます。credential_process、dockerとgitのcredential helper、kubectl exec
プラグイン、Terraformのcredentials helper。ツールが尋ね、jitが答え、ファイルは関与しません。マウントはPOSIX FIFOで、mkfifo(2) でモード 0600 で作成されます。
open(".env") を呼ぶプログラムは、ライターが接続するまでカーネル内でブロックされます。
バックグラウンドサービスがそのライターです: パスを O_WRONLY で開き、リーダーを解放し、
メモリから復号されたバイトをカーネルパイプバッファに書き込み、閉じて、次のリーダーのために open(2) に戻ります。
ディスクには何も触れません。書き込まれる内容は読み取りごとに決定されます: 周囲のリーダーにはデコイ、あなたが承認した実行内でのみ実際の値。
呼び出し元の識別は説明と監査を行い、決定はしません。 プロセス名は偽造可能で、すぐに閉じるFIFOリーダーは識別を完全に回避できます。 プロンプトに答える人間がゲートであり、プロセス名は何に答えるかを示すだけです。詳細は 仕組み と ライブマウント にあります。
brew install jitpass/tap/jitpass
これが推奨ルートであり、セキュリティツールにとってはその理由が重要です。
リリースはApple Developer IDで署名され、Appleによって公証されています。
Homebrewはダウンロードしたものを隔離するため、Gatekeeperは実行が許可される前にバイナリを公証チケットと照合します。
私たちの言葉を信じるのではなく自分で検証するには、jit doctor を実行してください: その jit 行は
signed CZC6BH93GJ を報告し、これは jit upgrade が何かをインストールする前に実行するのと同じチェックです。
curl -sL https://dl.jitpass.com/jitpass/jit/releases/latest/download/jitpass_darwin_arm64.tar.gz | tar -xz jit
shasum -a 256 jit # リリースページのchecksums.txtと比較
codesign -dv --verify --verbose=2 ./jit # 期待値: Developer ID、TeamIdentifier=CZC6BH93GJ
sudo mv jit /usr/local/bin/
これはHomebrewがない人のためのもので、実際により弱い経路です:
curl は隔離ビットを設定しないため、Gatekeeperは公証チケットを参照せず、go install も同様です。
バイナリは依然として署名され公証されているため、上記の2行で実行前に両方を確認できますが、実際に実行する必要があります。HomebrewがあるならHomebrewを使ってください。
Apple Siliconのみ。Intel Macでは、ソースからビルドしてください:
go install github.com/jitpass/jit/cmd/jit@latest。
1つのルートを選んでください。以前ターボールからインストールしていてHomebrewに切り替える場合は、
brew install の後に古いコピーを削除してください(sudo rm /usr/local/bin/jit); そうしないと2つのjitがPATH上に別々にアップグレードされて存在し、
jit doctor がそれをフラグします。
アップグレード: brew upgrade jitpass、または jit upgrade: 検証済みの
自己アップデート(Developer-ID署名とチェックサムの両方が交換前にチェックされ、サービスを再起動します)。どちらの場合もボールトは変更されません。
Homebrewはバイナリと一緒にシェル補完をインストールするため、jit <TAB> で
サブコマンド、フラグ、ボールトパス、ラップ可能なツール名がそのまま補完されます。
ターボールまたはソースからインストールした場合は、自分で追加してください:
echo 'source <(jit completion zsh)' >> ~/.zshrc && exec zsh
どちらの場合も、jit doctor が補完がシェルに届いているかどうかを教えてくれます。
jit scan # 読み取り専用。スキャンしたファイルを変更せず、実際の値を出力しない。
jit vault init # ボールトを作成(マスターキーはログインキーチェーンに)
jit migrate --dry-run # マシン全体の修正計画のプレビュー
jit migrate # 適用: 計画を表示、[y/N] を確認、Touch IDを1回
jit migrate ~/code/myapp # または1つのプロジェクトだけを修正
jit run -- npm run dev # ツールを実行; 実際の値はそのプロセスのみに注入
パスなしの jit scan はホームディレクトリ全体をスイープするため、大きい場合は時間がかかります。
1か所に直接向かうには、パスを指定してください: jit scan ~/.aws。
日常的にはほとんど jit run -- <cmd> です。独自のログイントークンを保持するCLI
(gh、glab、stripe など)では、jit wrap gh を一度実行してから、通常どおり gh と入力し続けます。
何かが jit wrap、jit migrate、または何も必要かわからないですか?知る必要はありません。
jit scan は見つけたものを、jitが保護するもの(ラップを含む1つのコマンド)と、あなただけが修正できるものに分け、
素の jit migrate がその計画全体を実行します:
$ jit scan
YOUR SECRETS: 7 — 0 protected by jit (0%)
▱▱▱▱▱▱▱▱▱▱ to 100%: one command +71% · 2 secrets only you can fix +29%
jit will protect these — 5 secrets in 4 files, 0% → 71%
→ jit migrate
~/.zshrc STRIPE_API_KEY, DB_PASSWORD
~/.config/gh/hosts.yml GitHub CLI token · wraps gh
...
only you can protect these — 2 secrets, 71% → 100%
[rotate, then delete every copy]
! A production database password in 2 files
→ rotate it now, then delete every copy
(jit scan --full は依然として重大度付きの従来のカテゴリ別インベントリを提供し、
ラップ可能なCLIトークン セクションも含みます。)
認証情報を一度移行したら、いつもどおりツールを使い続けてください。
# AWS(およびTerraform、すべてのAWS SDK)
jit migrate ~/.aws/credentials # キーはボールトへ移動; 平文ファイルは残らない
aws s3 ls # オンデマンドでボールトから解決。プレフィックスもフラグも不要。
terraform apply # 同じ認証情報、同じコマンド
# GCPアプリケーションデフォルト認証情報(マシン全体の認証情報)
jit migrate ~/.config/gcloud/application_default_credentials.json
terraform apply # googleプロバイダーはADCを読み取る; Touch IDプロンプト後に動作
# Docker / docker-compose
jit migrate ~/.docker/config.json # レジストリログインはボールトへ移動
jit run -- docker compose up # jitがこの実行のためにそれらを注入
docker login ghcr.io # 引き続き動作; helperがボールトに保存
# かつて ~/.zshrc にあったシェルエクスポート
jit migrate ~/.zshrc # 1行のフックを残す; 新しいシェルには変数だけがある
./deploy.sh # それらの変数を読むスクリプトは変更なしで動作
# かつてプロンプトで入力し、今はシェル履歴にあるトークン
jit migrate ~/.zsh_history # それぞれがボールトへ移動; コマンドは残り、シークレットは残らない
jit guard history # 次のものが記録されるのを完全に防ぐ(zsh)
# (素の `jit migrate` もこれを提供。確認を求める計画内で)
# 独自のトークンを保持するCLI(gh、stripe、glab)
jit wrap gh # 一度だけ
gh pr list # トークンは呼び出しごとに注入、永久に
各ツールが初めて実際の認証情報に到達すると、jit は一度だけ確認し、ボールトがロックされるまで答えを記憶します。
それがボールトのロック解除の上にどう重なるか、--trust が何をするか、ツールごとのプロンプトをオフにする方法については、
2つのTouch IDの瞬間 を参照してください。
なぜ一部のツールはセットアップ不要で、他は jit run が必要なのか?1つのルール: ツールはjit自体にシークレットを要求できるか?
AWS(credential_process 経由)、ログイン時のシェル、dockerのレジストリログイン(credential helper経由)はすべてできるため、余分な入力は不要です。
実行時にファイルしか読めないツール(docker compose、プレーンなSDK)は要求できないため、jit run が値を渡します。
マシン全体の認証情報ファイル(GCP ADC、sops、npm、netrc)も同じ日常的な方法で動作します:
ツールを実行し、プロセスごとのプロンプトを承認します。明示的にしたい場合のみ jit run --with <name> を追加してください: 応答するプロンプトがないスクリプトやCI、またはプロジェクト自身の設定では決して到達できないハードゲートが必要な場合。
対応ツール には、すべてのツールに対して正確に入力すべき内容と、各ツールへの配信方法がリストされています。
jit は2つの異なる瞬間に指紋を求め、2つの異なる役割を果たします:
jit を初めて使用すると、1回の
Touch IDでセッション全体のボールトが開きます(5分間のアクティビティ後、再ロック;
どれだけ忙しくても8時間を超えることはありません)。コマンドごとではなく、一度だけロックを解除します。jit は引き渡す前に確認し、何が要求しているかを示します。これは、あなたが実行していないプログラムがボールトが開いている間に静かにキーを使用するのを防ぎます。$ aws s3 ls
Touch ID -> unlock your vault # ゲート1: 5分間ボールトを開く
Touch ID -> aws wants your aws credential # ゲート2: このツール、この認証情報
...your buckets...
$ aws s3 cp ./file s3://bucket/ # 同じツール、同じセッション: プロンプトなし
$ terraform apply
Touch ID -> terraform wants your aws credential # 別のツール: それ自体で確認を求める
ゲート2は、ロック解除されたボールトが無制限のアクセスにならないようにします: あなた自身が aws を使用した後でも、
同じキーに到達する怪しい npm install はそれを指名するプロンプトを引き起こすため、ノーと言えます。
2番目のゲートが不要ですか?オフにしてください; ボールトのロックは残ります(オフにすること自体にTouch IDが必要です。閉じるウィンドウを再び開くため):
jit service consent off # ボールトがロック解除されている間、ツールは静かに解決
jit service consent on # ツールごとに再度確認(デフォルト)
複数の認証情報を一度に必要とするものを開始しますか?jit run --trust -- terraform apply はその実行全体のツールを1つのジェスチャーで承認します。詳細:
プロセスごとの同意。
jit grant両方のゲートは、そこに答える人間がいることを前提としています。一晩中作業するAIエージェント、長時間のビルド、 スケジュールされたジョブ: 画面がロックされ、セッションが切断され、実行は誰も見ないプロンプトで停止します。 プロセスグラント は決定を削除するのではなく前倒しします - あなたがまだそこにいる間に与えられる1回のTouch IDで、 署名している内容を正確に示します:
$ jit grant --process claude --profile jamf --for 8h
Touch ID -> let claude under iTerm2 use 2 secrets (jamf) unattended for 8h
✓ granted g-7f3a2c81 claude -> jamf until 17:42
└ covers claude under iTerm2: 1 running now, any started before 17:42
次の8時間、あなたがそれを入力したターミナル の下のすべての claude(およびそれが起動するもの)は、プロンプトなしでそれらのシークレットを取得します -
画面ロック中も含めて、後で開始するセッションも含みます: 新しいタブ、次の claude、午前3時に発火するスクリプト。
信頼されるのは名前ではなく、あなたのターミナルが指名されているのです: マシンの別の場所で自分を claude と呼ぶプログラムは
そのツリーの子孫ではなく、何も継承しません。グラントは期限、そのターミナルを終了したとき、または jit grant revoke と入力した瞬間に終了します(指紋は不要 - アクセスを取り除くことは常に無料です)。代わりに終了時に消える正確に1つのプロセスが必要ですか?--pid。
すべての付与は監査証跡に独自のイベントとして記録されるため、翌朝あなたが眠っている間にエージェントが触れたものを正確に読めます。詳細:
プロセスグラント。
エディタ内のエージェントはあなたとして、あなたの権限で実行され、一日中あなたのためにファイルを読みます。
それがエージェントの存在意義であり、リポジトリ内の平文の .env が2年前とは非常に異なるリスクになった理由でもあります。
jitはエージェントを第一級市民として4つの面で扱います:
jit migrate ~/.claude.json # MCPサーバー設定: キーはボールトへ移動、
# 各サーバーは `jit run` 経由で起動
jit wrap claude # AI CLI自体: claude、codex、gemini、
# cursor-agent、copilot、cline、opencode、kiro-cli
jit grant --process claude --profile myapp --for 8h
# 誰も答えないプロンプトなしで一晩中作業させる
jit audit --parent claude # あなたが眠っている間に触れたものを正確に読み返す
claude によって要求された同じシークレット、それぞれが指名されています。
静かに ~/.aws/credentials を読むエージェントは、黙った成功ではなくプロンプトになります。jit run 経由で起動します。 移行されたMCP設定はキーではなくボールトパスを保持するため、
設定ファイル自体はディスク上に置いても安全で、それを読むエージェントに渡しても安全です。.env でgrepして直接読むエージェントはプレースホルダー値を取得し、読み取りはログに記録されます。jit audit --parent claude は、エージェントが使用したすべてのシークレット、トリガーしたすべてのプロンプト、拒否したすべてのものを示します。詳細は MCP / AIツール と プロセスごとの同意 にあります。
すべてのjitコマンドとすべてのロック解除は、jit audit で読み返す永続的なログに記録されます。新しい順で、イベントごとに1行の key=value 形式なので、実際のサービスのログのようにgrepできます。
コマンド引数はマスクされるため、ログはコマンドが実行されたことを証明しつつ、運んだシークレットを保存することはありません。
$ jit audit --since 1h
time=2026-07-24 10:15:04 level=info kind=cmd status=ok dur=312ms cmd="jit migrate ~/.aws/credentials" user=meni parent=claude
time=2026-07-24 10:16:22 level=info kind=use op="read a secret" cmd="aws s3 ls" parent=claude secrets=aws/default
time=2026-07-24 10:31:09 level=warn kind=unlock status=denied method=touchid-or-passcode cmd="node postinstall.js" parent=npm secrets=aws/default
中央の行はjitが存在する理由の物語です: aws/default は claude によって起動された aws s3 ls によって読み取られました。最後はあなたが拒否したプロンプトです: npm の下の node postinstall.js が同じキーに到達しようとし、拒否されました。jitはまた、サービスがソケットで拒否したもの(カーネルがあなたのものではないと言うプロセスがエージェントを調査している)を kind=error としてログに記録します。
grepではなくフラグで絞り込みます: --kind、--status ok|failed|denied、
--since/--until(2h/3d のような期間または日付)、--parent claude、
--secret aws、--user、--grep <regexp>。--follow(-f)を追加して tail -f のように新しいイベントをライブでストリーミングするか、--format json で機械解析可能なダンプを取得します。
両方の部分はボールトの隣の永続的なファイルであるため、先週も直近の1時間と同じように簡単に答えられます。
.env ファイル、シェルエクスポート、AWSとTerraform、kubeconfig、Dockerレジストリ
ログイン、GCP ADC、.npmrc / .netrc トークン、MCPサーバー設定、素のトークン
ファイル、シェル履歴に記録された認証情報、ラップ可能なCLI(gh、
stripe、vercel など)、およびログイン時に認証情報を発行するSSO CLI
(clisso)。すべての場合でファイルは引き続き動作し、実際の値はオンデマンドでボールトから取得されます。
各ツールに正確に入力すべき内容でグループ化された完全なカタログは、
対応ツール にあります: ツールが追加または削除されるにつれてコードを追跡します。
リストにないものも jit wrap add でラップできます。
すでに1Passwordでシークレットを管理していますか?CLIがインストールされていれば、
jit migrate はコピーではなくリンクします:
すでに1Passwordにある値はその op:// 参照としてボールト化されるため、
1Passwordが記録のシステムとして残り、jitは上記のすべてのメカニズムを通じて値をジャストインタイムで配信します
(jit vault link は1つのシークレットを手動で同じことを行います)。
jit は認証情報を決して破棄しません。マイグレーションは値をボールトに移動し、
元の場所に動作するフックを残します(デコイの .env、シェル設定の eval "$(jit export)" 行、
~/.aws/config の credential_process = jit …、または PATH シム)。ツールはオンデマンドでそれを解決し続けます。
認証情報は依然として存在し、平文ではなく暗号化されているだけです。
そしてすべての変更は元に戻せます。ファイルに触れる前に、jitはそれを暗号化してボールトにバックアップするため、
jit migrate undo はバイト単位で元に戻します:
jit migrate ~/code/myapp # 修正を適用、Touch IDを1回
# 考えが変わった、または何かが壊れた?
jit migrate undo ~/code/myapp # 触れたすべてのファイルがバイト単位で復元
ドキュメントは docs/ の下にあり、タスク別に整理されています:
git commit -s)、CLAなしPolyForm Perimeter License 1.0.0 - 個人および社内利用のみ無料。