iPhone app plus a free Mac companion

Approve Mac security prompts from your iPhone.

Your Mac asked for a password and you are not at the desk. Nodlock pushes the prompt to your phone. You pass Face ID, see the dialog, type the password, and the Mac types it in. Ten seconds, from the sofa or from another country.

No account. No sign-up. No server run by us.

Nodlock

1Password wants to unlock

Prompt on your Mac

1Password

Enter your account password

••••••••
Unlock with Face ID

Paired with studio-mini

Features

Built for people who run things on their Mac

Remote builds, long-running agents, a headless Mac mini, a desktop that keeps asking for a password while you are away. Nodlock turns a blocked job into a tap on your phone.

A push the moment a prompt appears

The Mac companion watches for 1Password unlocks, SecurityAgent password boxes and keychain prompts. The second one shows up, your phone buzzes. No polling, no checking in.

  • Detects 1Password, SecurityAgent and keychain dialogs
  • Push carries a title and the prompting app, nothing else

See the prompt, type with Face ID

Open the notification, pass Face ID, and look at a live screenshot of the dialog. You know exactly what you are approving before you type a character.

  • 1Password and iCloud Keychain autofill both work
  • Return, Escape and Tab are one tap away
  • Tap the screenshot to click that spot on the Mac

Agent and CLI logins routed to your phone

Point $BROWSER at the push-url shim and every device-code, OAuth or SSO link an agent opens lands on your phone as a tappable link, instead of a browser window nobody is sitting in front of.

  • Okta, Auth0, Google, Microsoft, AWS SSO and Cloudflare Access out of the box
  • A Recent logins list keeps the last few links
  • Add your own URL patterns with one regex per line

Private by design

There is no Nodlock account and no Nodlock server. Your phone talks to your Mac over a channel you set up, and the developer never sees any of it.

  • Passwords travel once, get typed once, and are stored nowhere
  • Pairing credentials live in the iOS Keychain
  • No analytics, no tracking, no third-party SDKs

How it works

Three steps, then you forget about it

A built-in demo mode walks you through the whole flow before you install anything on the Mac. Tap "Try a demo" on the pairing screen.

  1. Step 1

    Install the companion and scan a QR

    The Mac half is a free, open-source menu-bar app for macOS 14 or later. Grant it Screen Recording and Accessibility, open Setup, and scan the pairing QR with your phone. Host and token land in the iOS Keychain.

  2. Step 2

    Wait for the next prompt

    The companion spots the dialog, takes a ScreenCaptureKit screenshot, and sends a push through APNs. The payload is a title and the name of the app that owns the prompt. The screenshot stays on your Mac.

  3. Step 3

    Face ID, type, done

    Open the notification, pass Face ID, read the screenshot, type the password, tap Unlock. The Mac types it into the dialog with CGEvent. The job that was blocked keeps running.

Security model

The short version of the threat model

Nodlock types passwords into your Mac, so the design starts from what an attacker would need. Every decision below is in the source, and you can read it.

No system is perfect. If you find a security issue, open an issue on GitHub or write to support@nodlock.app.

  • The panel binds loopback

    The Mac companion listens on 127.0.0.1:8377 and nothing else. It never opens a port on a routable interface. Remote access is a tunnel's job, and the tunnel is yours.

  • Two channels, on purpose

    APNs carries a title and the prompt's owner, so Apple never sees a screenshot or a password. The screenshot and the keystrokes travel over the panel connection, which terminates on loopback on your Mac.

  • A pairing token that only the QR shows

    16 random bytes from SecRandomCopyBytes, stored at mode 0600. Every request carries it, and the Mac compares it in constant time. The pairing QR is the only place it is ever displayed.

  • Cookie, not just a query string

    Loading the panel with a valid token sets an HttpOnly, SameSite=Strict cookie, so a forged cross-origin POST cannot ride along.

  • Your identity provider in front, if you want one

    Put a Cloudflare Access policy on the tunnel hostname and the panel sits behind your IdP, not just a bearer token. The pairing QR carries the service token, so the phone sends the Access headers for you.

  • Passwords transit, never persist

    A password goes phone to panel to CGEvent keystrokes in the dialog. It is not written to disk, not logged, not cached, on either device.

  • Face ID on the phone

    The unlock screen sits behind LocalAuthentication and re-locks the moment the app goes to the background. Pairing credentials live in the iOS Keychain, not in UserDefaults or a file.

  • Permissions belong to the app bundle

    Screen Recording and Accessibility are granted to the companion once. They stick across restarts because a signed bundle holds them, not a scripting runtime.

Read what runs on your Mac

Nodlock is free and open source. The Mac companion is Swift 6 with no third-party dependencies, so the code that screenshots your dialogs and types your passwords is a short read, not a black box.

macOS 14 or later on the Mac side. iOS 17 or later on the phone.