>cantscroll_ docs

documentation

cantscroll watches for ai coding agents on your mac and locks distracting apps on your paired iphone while they work — automatically, until the session ends. this is the setup + reference for the free mac agent and the cli.

getting started

you need a mac and an iphone on ios 16.2 or later. the mac agent is free; the iphone app is a subscription. total setup is about two minutes.

1 · install the mac agent

terminal
~ $brew tap cantscroll/cantscroll
~ $brew install cantscroll
~ $brew services start cantscroll/cantscroll/cantscroll
✓ agent running
heads up macOS may show "background item added" under an unfamiliar developer name — that's the cantscroll agent (a signing-certificate quirk). keep it on, or the agent can't detect your coding sessions.

2 · pair your iphone

run cantscroll pair — it prints a qr code. open the cantscroll app on your iphone and scan it. pairing is one-time and end-to-end encrypted; keys stay on your devices.

terminal
~ $cantscroll pair
scan this with the cantscroll app…

3 · choose apps to block

in the app, approve the screen time prompt and pick the apps you want shielded during coding sessions — instagram, x, reddit, youtube, whatever pulls you away.

4 · start coding

that's it. the next time claude code (or another agent) starts working, your phone locks the apps you chose. when the session ends, they come back. no timers, no willpower. want to focus without an agent running? tap a duration in the app, or run cantscroll start --duration 45m.

how it works

the mac agent runs quietly in the background and watches for ai coding agents. claude code is detected precisely via its session hooks; cursor and other agents are detected by their running process. the moment one starts, the agent signals your paired iphone, which applies your chosen shields through apple's screen time api. when the agent exits (or your session's time is up), the shields lift.

any network

on the same wi-fi, mac and iphone talk over a direct, end-to-end encrypted connection (mutual-tls over bonjour) — near-instant. on different networks, cantscroll falls back to apple's push service automatically; blocking still works, typically within a few seconds. there's a device-side safety net that lifts shields at the scheduled end even if both go offline.

custom agents

run a coding tool cantscroll doesn't know yet? add it by process name:

terminal
~ $cantscroll add-trigger <process>
~ $cantscroll list-triggers

system processes (bash, ssh, and the like) are rejected — cantscroll only triggers on real coding agents.

cli reference

everything the agent does is drivable from the terminal. the essentials:

cantscroll statuscurrent state — session, paired device, watched agents
cantscroll pairpair an iphone (shows a qr code)
cantscroll start [--duration 45m]start a manual focus session
cantscroll stopend the current session
cantscroll pause 15msnooze blocking for a set time
cantscroll add-trigger <name>watch a custom agent process
cantscroll list-triggersshow configured agents
cantscroll panicinstantly unblock everything — no confirmation
cantscroll doctorend-to-end self-check
cantscroll logs [--follow]view / stream agent logs
cantscroll disable / enableturn blocking off / back on
cantscroll updatecheck for and install updates via homebrew
cantscroll uninstallremove hooks + agent (see below)
escape hatch cantscroll panic always works, instantly, with no password — it unblocks everything and holds off re-blocking for ten minutes. cantscroll is a commitment device, not a cage.

troubleshooting

my phone isn't blocking

run cantscroll status on the mac. if it shows a session but the phone isn't shielding: make sure screen time access is on (iphone → settings → screen time → allow cantscroll), and that you've picked apps to block in the app. on different networks, allow a few seconds for apple's push to arrive.

"not connected" on the phone

the direct connection needs both devices on the same wi-fi. on split networks (mac on wi-fi, phone on cellular), cantscroll uses apple's push instead — blocking still works, just with a short delay. it reconnects automatically when they're back on the same network.

my agent isn't detected

check cantscroll list-triggers. claude code and cursor are on by default; add anything else with cantscroll add-trigger <process>. note that some agents run entirely in the browser with no local process — those can't be detected.

something's stuck

cantscroll doctor runs an end-to-end self-check and points at what's wrong. cantscroll logs --follow streams what the agent is doing. and cantscroll panic always gets you unblocked immediately.

uninstall

removing cantscroll is clean and complete — no leftover background processes, no lingering config. on the mac:

terminal
~ $cantscroll uninstall# removes agent + editor hooks
~ $brew services stop cantscroll/cantscroll/cantscroll
~ $brew uninstall cantscroll
~ $brew untap cantscroll/cantscroll

to also remove local data (session history and logs), which is otherwise harmless:

terminal
~ $rm -rf ~/Library/Application\ Support/CantScroll ~/Library/Logs/CantScroll

on the iphone, delete the app like any other. to stop a subscription, cancel it in settings → your name → subscriptions (or app store → subscriptions) — deleting the app alone does not cancel billing.

privacy & security

your data stays on your devices. there's no account and no login. the connection between your mac and iphone is end-to-end encrypted — over the local network it's mutual-tls; when it falls back to apple's push, the payload is encrypted with a key only your two paired devices hold. the relay that forwards those pushes only ever sees ciphertext.

session history, streaks, and focus stats are computed and stored on your device, never uploaded. cantscroll doesn't track you, sell data, or run analytics on your behavior. optional, anonymous diagnostics are off by default and never include app names, domains, or identifiers.

full details are in the privacy policy and terms of use.