Executable trust
Opt-in gate for unapproved hooks, bin/ executables, and self-defined MCP from dependency packages.
Unapproved hooks, bin/ executables, and self-defined MCP (registry: false) from dependency packages are parked on ht apply / ht install. Those commands still succeed and print ht approve <pkg>. Text primitives and local .apm/ stay trusted. Apply root stays trusted. Text primitives are never gated. Parking is unchanged (depth > 0 when executables: is on). Root-manifest MCP is depth 0 and is not a new trust path.
Opt-in
The gate is off unless the project declares executables: (even {}) or apm-policy.yml has a non-empty executables: block.
This extends the existing apm-policy.yml document and the apply / install / audit paths — not a second policy engine.
Layers
One noun: executables. Layers:
- org
apm-policy.yml - user
~/.harnesstap/config.jsonc - project
apm.yml
Deny-wins, first-match-wins. Org executables.enforce is accepted but inert (degrades to recommend). bin_deploy folds into executables.deny for bin only.
User grants live under executables.{allow,deny} in ~/.harnesstap/config.jsonc, not ~/.apm/config.json.
Approve and deny
ht approve owner/repo
ht approve --user owner/repo
ht approve --pending
ht approve --all
ht approve --recommended
ht approve --list
ht deny owner/repo
ht deny --user owner/repo
ht policy explain owner/repo
ht policy explain owner/repo --format jsonht approve/ht denywrite project grants by default (apm.ymlexecutables.allow/executables.deny);--userwrites~/.harnesstap/config.jsonc(can only narrow past an org or project deny). Grant keys areowner/repoorowner/repo#version(version-blind in v1).ht approve --pendinglists packages with unapproved executables;--allapproves currently pending;--recommendedapproves the orgexecutables.recommendset;--listshows effective trust per installed package.ht denywrites a deny grant only (no --pending/--list).ht policy explain <target>prints the effective decision, deciding layer, and shadowed layers.
Lockfile
When the gate is on, apm.lock.yaml records exec_status per dep: deployed | gated_pending_approval | denied | absent.
CI
ht audit --ci fails required-executable-untrusted for executables.require packages whose executables are untrusted.
See also: Apply, Install, MCP Registry identities, Audit, Lockfile, Command reference, Desktop pending approvals.