The agent drives the page. Only you approve payments. Swapped frontends never load.
Every file from a pinned dapp is hashed in the network layer. A changed file is refused. Extensions never see response bodies.
The agent's control API reaches the page only. Approvals open in a separate window, with Touch ID on macOS. Remote debugging is refused.
The guard is the browser. There is no extension to hijack with a bad update.
Inside the agent's NEAR function-call key: one contract, one method, no deposits. The agent key signs.
Moves funds, new or barely used receiver, contract code changed this week. Only the approval window can sign.
Lookalike account, shared blocklist, full access key, account deletion, or a page whose code failed its pin.
git clone https://github.com/itsharshag/airlock && cd airlock && npm install
node scripts/make-account.js # then create it with the faucet (README)
node scripts/add-agent-key.js
node scripts/make-payee.js
T=https://airlock-tipjar.itsharshag.com
AIRLOCK_START_URL=$T AIRLOCK_PINS=$T npm start
# in Airlock: Sign the guestbook, Tip 0.1 NEAR, open https://airlock-news.itsharshag.com
# then open $T/__attacker/swap?on=1 to swap app.js for you only