Reach your own agent from the keyboard.
SHALL is an iPhone app and keyboard for an AI agent you already run on a computer you own. It connects to the address you enter and to nothing else: there is no SHALL server in the middle, and there is no account.
What it does
SHALL ships three pieces in one app. All three talk to the same place: the agent at the address you configured.
The keyboard
Tap the Agent key and write a request without switching apps. Your current selection, the visible text of the field, or the clipboard can be attached to it, and the answer can be inserted in place. Available in text fields that support third-party keyboards.
The app
Where you connect your agent by entering its address and its key, send a request, and read what comes back. It keeps a bounded history of your runs and can tell you when one finishes; those notices are produced on the device, so SHALL has to be running to notice.
The share extension
Text or a picture from another app reaches your agent through the system share sheet. It is sent when you tap an action on it, and not before.
It collects nothing, because there is no server
We operate no server that your device talks to, we receive nothing from your device, and there is no account to create. Your request goes to your machine, and we are not on that path. That is not a policy choice that could quietly be reversed; it is how the app is built, and everything below follows from it.
Normal typing is never transmitted
Every keystroke you make on the SHALL keyboard stays on the device, whether or not Full Access is enabled. The keyboard records no keystrokes, learns nothing from them, and has nowhere to send them.
Nothing is sent before you act
In the app you type into a field you can see and tap Send; nothing is sent before that tap. In the keyboard there is a step in between: a review screen shows the exact text that will be transmitted and names the destination it is going to, and only the confirm button on that screen sends it.
The clipboard, only in the action you tapped
The keyboard never reads your clipboard on its own. It reads the pasteboard only inside the Clipboard action you tapped, and writes it only inside the Copy action you tapped. There are three pasteboard operations in the whole keyboard, and a test fails the build if a fourth is ever added.
Full Access is used for two things
iOS asks for it before a third-party keyboard can use the network or the pasteboard, and it warns you for good reason. SHALL uses it to reach your agent from the keyboard, and for the clipboard action. No location, no contacts, no photos, no iCloud, no background uploads.
The key stays in the Keychain
Your agent's key is stored in the iOS Keychain, marked available only on this device. It is never written to a file, a log or an iCloud backup, and it leaves the device only as the authorisation header of a request to your own agent.
There is nothing to collect it with
No analytics of any kind, no advertising identifier, no third-party SDKs, no tracking. SHALL writes no log files of its own, so there is no place for a prompt, an answer, a clipboard or a key to end up.
There is one thing on this page that is not ours to promise, and it is the largest one.
Your agent is not covered by any of this
The most important thing SHALL does is hand your request to software you run. What that agent does with it — what it stores, what it sends onward, what tools it invokes — is governed by that agent and by whatever services it is configured to use. The credential you give SHALL grants that agent's full capabilities on the machine it runs on, which is why the machine belongs on a private network.
What you need first
SHALL is a client for an agent you already run. It does not host an agent and it does not include one, so without your own agent to point it at, it has nothing to connect to. You need four things, and an iPhone running iOS 17.0 or later.
-
A running hermes-agent your phone can reach
It has to listen on an interface your phone can actually reach; a loopback-only binding will not work. Bind it to your private network interface, and to nothing that is reachable from the open internet.
-
Tailscale on the computer and on the iPhone
Both devices on the same tailnet. SHALL carries an App Transport Security exception for
ts.net, so plain HTTP inside the WireGuard tunnel is permitted. Anywhere else, use HTTPS. -
The full MagicDNS hostname
This is the single most common way to lose an hour with this app, so it is worth being blunt: the short machine name does not resolve from iOS. Use the complete name, with the tailnet in it, and include the scheme —
http://your-machine.your-tailnet.ts.net:8642, nothttp://your-machine:8642. SHALL acceptshttpandhttpsand nothing else. -
The bearer token for that agent
Know what you are putting on a phone: that credential grants your agent's full toolset, terminal commands included, on the machine it runs on. SHALL stores it in the Keychain and reads it fresh on every request, so revoking it on your host takes effect immediately.
You can see what the product does before any of that is in place.
If you do not run an agent of your own
There is a demo built into the app. It answers on the device, reaches nothing, works in Airplane Mode, and is labelled as the demo everywhere it appears; it exists so you can see what the product does before you decide to connect anything. A connection that fails never becomes the demo: once an agent is configured, SHALL reports what went wrong instead of answering locally.
Where things stand
SHALL is not in the App Store, there is no public test, and there is nothing on this page to download. This site exists because App Store Connect asks for a privacy address and a support address, and because someone who hears about the product should be able to read what it is. If you want to ask something, write to hello@getshall.com.