How Hither works
For people and agents who want the model behind the setup steps, and the limits.
Hither lets an AI agent use a person's computer. The person approves the agent on that computer and chooses what it can use.
Five words
| Word | Meaning |
|---|---|
| Computer | The person's machine. |
| Helper | The app installed on the computer. It runs as that OS user and connects out to Hither, so the computer opens no port. |
| Agent | The AI asking to use the computer: Claude, Codex, Pi or a script. |
| Connection | One agent joined to one computer, approved by a person on that computer. Permissions and folder rules belong to it, so one agent can have different access on two computers. |
| Permission | Files, Terminal, Browser or MCP servers. Each is a switch with finer controls. |
An agent can hold connections to several computers, and a person can have several computers and agents. Connections come in two kinds:
| Temporary | Lasting | |
|---|---|---|
| Who gets one | Any agent | An agent signed in to an account |
| Ends | Within 24 hours of the request | When someone revokes it |
| Terminal | Sandboxed only, none on Windows | Sandboxed, or full access if the person says yes on the computer |
| MCP servers | Never | Off until the person turns them on |
An account agent's connections are lasting unless it asks for a temporary one. An agent without an account only ever gets temporary connections. To keep one, the agent's owner first moves the agent into an account (a claim), and then the computer's owner allows it on that computer (an extension). Only the person at the computer can make a connection last.
Agents with and without an account
| Anonymous agent | Account agent | |
|---|---|---|
| How it starts | MCP sign-in with Continue without an account, or POST /api/agents over REST | MCP sign-in with an account |
| Connections | Temporary only. 5 live at once, 20 new per day. | Temporary or lasting |
| Moves to an account | An MCP agent, with a claim link. A REST agent can't. | Already in one |
| Deleted | MCP: after 7 days with no live connection. REST: when its 24-hour token expires. | When the person removes it |
The service issues every credential. An agent never makes its own secret, and it uses the same credential before and after the person approves.
Life of a connection
- Pending. The agent asks for a computer with
connect_computerorPOST /api/connect/requestand gives the person the setup link. - Active. The person opens the link on the computer, chooses permissions, runs the setup command and approves in the terminal. Setup installs the helper if needed. The service checks each call's credential and connection, then forwards it to the helper, which checks permissions again and runs the call as the computer's user.
- Ended. The person cancels, denies or revokes it, removes the computer, or it expires. New calls fail, though a command already started may finish.
A temporary connection that ended by expiring can still be made lasting for 12 hours afterwards. Every other ending is final.
While the helper is offline, calls return device_offline and nothing runs. The agent can queue work for when the computer returns. The agent's own built-in tools never touch the computer; they act where the agent runs. The service at https://hither.dev relays calls and can read them (what it sees).
Limits
This table is the one home for these numbers.
| What | Limit |
|---|---|
| Setup link and pairing code | 10 minutes |
| Temporary access | Up to 24 hours from the request. durationSeconds accepts 60 to 86,400. |
| Anonymous agent connections | 5 pending or active at once, 20 new per UTC day |
| Account agent connection requests | 10 per hour |
| Connection requests from all agents | 500 per hour |
REST agents (POST /api/agents) | 10 per hour from one address, 500 per hour in total |
| REST agent token | 24 hours from creation. It can't be renewed. |
| OAuth access token | 1 hour, refreshed by the client |
| Anonymous MCP agent | Deleted after 7 days with no live connection |
| Claim link | 10 minutes, single use. A new link replaces the old one. |
| Setup link emails (account agents only) | 3 per request, 10 per agent per hour, 5 per recipient per UTC day, 500 per hour in total |
| Making a connection lasting | While it is active, or up to 12 hours after it expired |
request_extension | Repeats while one is waiting count once. After the owner decides, 10 minutes before the next. |
deadlineInMs | 30 seconds by default, 1 to 55 seconds |
shell_exec timeoutMs | 1 to 55 seconds |
| Text read, write or edit | 1 MB |
files_read page | 1,000 lines |
files_list, files_search | Depth 20, 1,000 entries per page |
files_search budget | 3 seconds, 16,000,000 bytes, 1 MB scanned per file |
| Small transfer chunk | 192 KB before base64 |
| Large transfer | 10 GiB per file. The job lasts 1 hour, a download link 5 minutes. |
| Terminal sessions | 8 running per connection, 1 MB output buffer each |
Session idle expiry, idleMinutes | 120 minutes by default, 1 to 1,440 |
shell_read | maxBytes 64 KiB by default, up to 512 KiB. waitMs up to 20 seconds. |
| Finished sessions | Readable for 5 minutes. The helper keeps the last 32. |
| Queued job deadline | 30 minutes by default, 12 hours at most, never past the connection's end |
| Queued job arguments, result | 1.5 MB each. Results stay 1 hour past the deadline. |
| Active queued jobs | 32 per computer, 1,000 in total |
| Queued job storage | 64 MiB per computer, 256 MiB in total |
/api/jobs/wait | 55 seconds per call |
| Helper result journal | 24 hours, 1,024 requests or 16 MB, whichever comes first. 64 KB per reply. |
operations | The last 100 records |
| Browser import | 50,000 history entries, 50,000 bookmarks |