Just-in-time credentials for your dev machine.
Documentation · Quickstart · Supported tools · Command reference · Security
Status: macOS-only (Apple Silicon), and still successful development.
Your secrets unrecorded successful plaintext each complete your machine: .env files, ~/.aws/credentials, ~/.zshrc exports, .npmrc tokens, MCP configs. Anything running arsenic you tin publication them. A bad curl | sh, a sketchy npm install, aliases one of the AI agents now moving successful your editor pinch your afloat permissions.
jit moves each concealed into a section encrypted vault gated by Touch ID, and rewrites the files truthful your devices support working. On disk there's now a decoy. The real worth only appears, successful memory, for the circumstantial process that asked for it, after a biometric prompt. The result: you unlock once, jit asks earlier handing a credential to a instrumentality (or an agent), and there's a decoy connected disk the remainder of the time.
Or without Homebrew:
Apple Silicon only — connected an Intel Mac, build from root with go instal github.com/jitpass/jit/cmd/jit@latest.
Pick 1 route. If you installed from the tarball earlier and are switching to Homebrew, region the aged transcript aft the brew instal (sudo rm /usr/local/bin/jit); different 2 jits beryllium connected PATH upgrading separately, and jit expert will emblem it.
Releases are signed pinch a Developer ID and notarized by Apple, truthful some paths run without a Gatekeeper prompt: Homebrew quarantines its downloads and Gatekeeper clears them against the notarization ticket, while curl (and spell install) group nary quarantine emblem astatine all. To cheque what you sewage alternatively than take our connection for it, tally jit expert — its jit statement reports signed CZC6BH93GJ, utilizing the aforesaid cheque jit upgrade runs earlier it will install anything.
Upgrading: brew upgrade jitpass, aliases jit upgrade — a verified self-update (Developer-ID signature and checksum some checked earlier the swap, restarts the service). Either measurement your vault is untouched.
Homebrew installs ammunition completion pinch the binary, truthful jit <TAB> completes subcommands, flags, vault paths, and wrappable instrumentality names retired of the box. Installed from the tarball aliases from source, adhd it yourself:
Either way, jit expert tells you if completion isn't reaching your shell.
jit scan pinch nary way sweeps your full location directory, truthful springiness it a infinitesimal on a ample one. To spell consecutive astatine 1 place, constituent it astatine a path: jit scan ~/.aws.
Day to time it's mostly jit tally -- <cmd>. For CLIs that transportation their ain login token (gh, glab, stripe, and more) you jit wrap gh erstwhile and past keep typing gh arsenic normal forever.
Not judge whether thing needs jit wrap, jit migrate, aliases nothing? You don't person to know. jit scan splits everything it finds into what jit will protect (one bid - the wraps included) and what only you tin fix, and bare jit migrate runs that full plan:
(jit scan --full still gives the classical per-category inventory with severities, including the Wrappable CLI Tokens section.)
Migrate the credential once, past support utilizing the instrumentality the measurement you ever have.
The first clip each instrumentality reaches for a existent credential, jit asks erstwhile and remembers your reply until the vault locks. See Two Touch ID moments for really that sits connected apical of the vault unlock, what --trust does, and really to turn the per-tool prompts off.
Why do immoderate devices request nary setup while others return a jit run? One rule: can the instrumentality inquire jit for the concealed itself? AWS (via credential_process), your shell astatine login, and docker's registry logins (via a credential helper) each can, so you type thing extra. Tools that only publication a record astatine runtime (docker compose, plain SDKs) can't ask, truthful jit tally hands them the value.
The machine-global credential files (GCP ADC, sops, npm, netrc) activity the same mundane way: tally your instrumentality and o.k. the per-process prompt. Add jit tally --with <name> only erstwhile you want it explicit: for scripts and CI wherever there's no punctual to answer, aliases erstwhile you want a difficult gross a project's ain config can never reach. Supported tools lists precisely what to type for each tool, and really each is delivered.
Two Touch ID moments, not one
jit asks for your fingerprint astatine 2 different moments, doing 2 different jobs:
- Unlocking your vault. The first clip you usage jit aft it locks, one Touch ID opens the vault for the full convention (5 minutes of activity, past it re-locks; and ne'er longer than 8 hours, nevertheless engaged you are). You unlock once, not erstwhile per command.
- Handing a credential to a tool. On apical of that, the first clip a given tool reaches for a existent credential, jit asks earlier handing it complete and names what's asking. This is what stops a programme you didn't tally from quietly using your keys while the vault is open.
Gate 2 is what keeps an unlocked vault from being a free-for-all: moreover after you've utilized aws yourself, a sketchy npm instal reaching for those aforesaid keys still triggers a punctual naming it, truthful you tin opportunity no.
Don't want the 2nd gate? Turn it off; the vault fastener stays (turning it off itself takes a Touch ID, since it reopens the model it closes):
Kicking disconnected thing that needs respective credentials astatine once? jit tally --trust -- terraform use approves that full run's devices successful 1 gesture. Full details: per-process consent.
Leaving the keyboard? Approve the activity earlier you go
Both gates presume a quality is location to answer. An AI supplier moving overnight, a long build, a scheduled job: the surface locks, the convention drops, and the run stalls connected a punctual cipher will see. A process grant moves your decision earlier alternatively of removing it - 1 Touch ID, fixed while you're still there, that names precisely what you're signing:
For the adjacent 8 hours, each claude nether the terminal you typed that in (and what it launches) gets those secrets pinch nary prompts - done surface lock and all, including sessions you commencement later: a caller tab, the adjacent claude, a script that fires astatine 3am. It's your terminal being named, not a sanction being trusted: a programme calling itself claude location other connected the machine doesn't descend from that character and inherits nothing. The assistance ends astatine its deadline, erstwhile you discontinue that terminal, aliases the infinitesimal you type jit assistance revoke (which needs nary fingerprint - taking entree distant is ever free). Want one nonstop process instead, gone erstwhile it exits? --pid. Every service lands in the audit way arsenic its ain event, truthful the greeting aft you tin publication exactly what your supplier touched while you slept. Full details: process grants.
The audit trail: what happened, and who did it
Every jit bid and each unlock lands successful a durable log you publication backmost with jit audit, newest first, 1 key=value statement per event, truthful it greps for illustration a real work log. Command arguments are masked, truthful the log proves a bid ran without ever storing the concealed it carried.
The mediate statement is the communicative jit exists to tell: aws/default was publication by aws s3 ls, launched by claude. The past is simply a punctual you declined: a node postinstall.js nether npm reaching for those aforesaid keys, refused. jit besides logs what the work turned distant astatine its socket (a process the kernel says isn't yours, probing the agent) arsenic kind=error.
Narrow it pinch flags alternatively of grep: --kind, --status ok|failed|denied, --since/--until (an property for illustration 2h/3d aliases a date), --parent claude, --secret aws, --user, --grep <regexp>. Add --follow (-f) to watercourse new events unrecorded for illustration tail -f, aliases --format json for a machine-parseable dump. Both halves are durable files beside the vault, truthful it answers for past week arsenic readily as the past hour.
.env files, ammunition exports, AWS and Terraform, kubeconfig, Docker registry logins, GCP ADC, .npmrc / .netrc tokens, MCP server configs, bare token files, credentials recorded successful your ammunition history, wrappable CLIs (gh, stripe, vercel, …), and SSO CLIs that mint credentials astatine login (clisso). In each lawsuit the record keeps moving and the existent worth comes from the vault connected demand.
The afloat catalog, grouped by precisely what to type for each tool, is Supported tools: it tracks the codification arsenic devices are added or removed. Anything not listed tin still beryllium wrapped with jit wrap add.
jit ne'er destroys a credential. Migrate moves the worth into the vault and leaves a working hook wherever it was (a decoy .env, an eval "$(jit export)" line successful your ammunition config, credential_process = jit … successful ~/.aws/config, aliases a PATH shim), truthful your devices support resolving it connected demand. The credential still exists, conscionable encrypted alternatively of sitting successful plaintext.
And each alteration is reversible. Before rubbing a file, jit backs it up encrypted into the vault, truthful jit migrate undo puts it backmost byte-for-byte:
The docs unrecorded nether docs/, organized by task:
- Quickstart: setup, migrating, surviving pinch the fix, measurement by step
- How it works: the vault, the service, mounts, and shims successful 1 page
- FAQ: developer and information questions, answered bluntly
- Per-process consent: what the per-tool prompts do, and really to tune aliases move them off
- Process grants: pre-approve a moving instrumentality to activity unattended for a bounded, revocable, audited window
- Audit trail: publication backmost each command, unlock, and refusal, filterable and followable
- Command reference: each bid and flag, generated from the CLI
- Security architecture: the threat exemplary and the honorable limits
- CONTRIBUTING.md: build/test setup; sign-off via DCO (git perpetrate -s), nary CLA
PolyForm Perimeter License 1.0.0 - free for individual and internal company usage only.
English (US) ·
Indonesian (ID) ·