jit
jit is a macOS (Apple Silicon) tool that moves plaintext secrets from .env files, ~/.aws/credentials, shell exports, .npmrc, and MCP configs into a Touch ID-gated local encrypted vault, leaving decoy files on disk and injecting real values only into the specific process that requests them via execve, native credential-helper protocols (AWS credential_process, docker/git credential helpers), or ephemeral named-pipe (FIFO) mounts. It adds per-process consent prompts naming the requesting tool/agent, time-bounded "process grants" for unattended AI agents (e.g. Claude, Codex) to use credentials overnight, and a durable audit log of every credential read, unlock, and denial. It explicitly targets the risk that AI coding agents and CLIs run with full user permissions and can read plaintext secrets, treating agent MCP configs and wrapped AI CLIs as first-class.
What it is
jit (github.com/jitpass/jit) is a macOS Apple-Silicon-only, still-in-development tool that pulls plaintext secrets into a Touch ID-gated local vault, leaves decoys on disk, and injects real values into one authorized process at a time. The summary covers the three injection mechanisms; what follows is the operational detail — the trust model, the install-verification constraint, and the working commands — that the summary omits.
How it works
The FIFO mechanism is the one worth understanding: the mount is a POSIX FIFO created via mkfifo(2) at mode 0600. A reader calling open(".env") blocks in the kernel until the background service opens the path O_WRONLY, writes decrypted bytes from memory into the kernel pipe buffer, closes, and loops. What gets written is decided per read — decoys for an ambient reader, real values only inside a run you authorized. Nothing touches disk; no kernel extension, filesystem driver, or FUSE.
Critically: caller identity explains and audits, it never decides. Process names are forgeable and a fast-closing FIFO reader can evade identification entirely. The human answering the biometric prompt is the actual gate — the process name only tells you what to answer.
What to do
Preferred install (sets the quarantine bit so Gatekeeper checks notarization):
brew install jitpass/tap/jitpassVerify signing: jit doctor reports the jit line as signed CZC6BH93GJ. Core workflow:
jit scan # read-only; changes nothing, prints no real value
jit vault init # master key stored in login keychain
jit migrate --dry-run # preview the machine-wide fix plan
jit migrate # apply: shows plan, [y/N], one Touch ID
jit run -- npm run dev # inject real values into that process only
jit wrap gh # once, for CLIs carrying their own login tokenThe tarball path is explicitly weaker — curl sets no quarantine bit, so Gatekeeper never consults the notarization ticket (same for go install). If you use it, actually run the checks:
shasum -a 256 jit
codesign -dv --verify --verbose=2 ./jit # expect Developer ID, TeamIdentifier=CZC6BH93GJIf switching from tarball to Homebrew, remove the old copy (sudo rm /usr/local/bin/jit) or two jits upgrade separately on PATH.
Caveats
Stated limits, up front: it does not make an already-compromised account safe, and it does not protect a secret once it is in the memory of the process that asked for it. Apple Silicon only (Intel requires build-from-source). Still in development.
flowchart TD
R[Process opens .env FIFO] --> D{Inside an authorized jit run?}
D -->|Yes| Real[Real decrypted value from memory]
D -->|No, ambient reader| Decoy[Decoy bytes]
Real --> G[Human answered Touch ID prompt = the gate]
G -.identity only explains, never decides.-> RealTechnologies named here
- JitPass
- macOS
- .env files
- jit scan
- ~/.aws/credentials
- jit migrate
- .npmrc
- jit audit
- ~/.zshrc
- jit wrap
- jit job
- shell history
- jit grant
- MCP configs
- jit mcp install
- kubeconfig
- jit guard history
- .netrc
- Docker registries
- jit doctor
- jit vault export/rekey
- GCP ADC
- jit run
- Terraform
- 1Password
- Doppler
- Varlock
- dotenvx
- AWS
- Docker
- Model Context Protocol
Techniques named here
- Prompt injection via poisoned content
- Secret exfiltration via agent transcripts
- Cold read of decoy secret
- Caller identity forgery
Related in DevSecOps
JFrog: The Governance Gap Between Your Policy and Your Pipeline

Dev Machine Guard Now Supports Windows - StepSecurity

Socket: TanStack npm Packages Compromised
