v0.2.0
Newly blocked
Compared with 0.1.0, every change in the behavior fixtures (49 of 710 rows) is a new denial; no fixture that 0.1.0 denied is allowed now.
- Credential files by any spelling. Credential names match regardless of case, so
.ENV,~/.AWS/credentials, and a Grep glob such as*.ENVare denied on a case-insensitive APFS volume..env.testand.env.prodare denied;.env.exampleand.env.agestay allowed. - Directories that hold credentials. A search rooted at
~/.awsor~/.gnupgis denied, as iscat ~/.aws/*. A search with no path operand (rg,ag,ack,grep -r) run from inside~/.sshis denied, and so arels ~/.sshandfind ~/.ssh, which list private key names. Reading a private file under~/.sshthrough input redirection, including a case alias such as~/.SSH, is denied; public keys,config,allowed_signers, andknown_hostsstay readable. - Wildcards in directory names.
~/Lib*/Cont*/…,~/Library/*/…,~/Library/[C]ontainers/…, and~/.s*/id_ed25519are denied because the shell can expand them into App Data or private SSH material.~/.s*/configand~/Library/Preferences/*.pliststay allowed. file://URLs.curlreadsfile://from disk, so the guard checks it as the path it names:curl file:///…/Library/Containers/…andcurl file:///…/.envare denied.- Hidden-file searches. Recursive
grep(-r,-d recurse,--directories=recurse),rg --hidden,rg -uu,rg -., andag --hiddenorag -uare denied because they read dotfiles such as.env. A later-uno longer overridesrg --no-hidden. - Home-directory scans without a
~/.ignore. 0.1.0 deniedrgandfdrun from the home directory only when a flag such as--no-ignorewas present, and otherwise relied on the user having a~/.ignorethat excludes~/Library. Nowrg,fd,ag,ack, andtreerun from the home directory are denied on their own. - Working-directory tracking and case.
cd --; rg …andrg …run from<symlink to an App Data tree>/..are denied because both resolve to a broad scan. Lower-caselibrary/containersin an unresolved expansion or in interpreter code is denied.
Fail-closed changes
- A known tool whose input field is missing or not a string (
command,file_path, or a non-string Greppath) is denied instead of passing. Tools the guard does not know still pass. - An empty or relative
HOMEis denied before the guard starts, and aHOMEwith a trailing slash no longer disables App Data matching. - A supervisor now owns the guard's process group and kills it, with its child processes, at the deadline. The outer watchdog fires 3 s after the supervisor reports the group, so the guard stays under Pi's 4.5 s hook timeout.
- The package ships its
tsconfig.jsonand refuses to start without it, so an ancestortsconfig.jsoncannot redirect the shell parser.
Known limits are listed in AGENTS.md in the repository.