Lauther for agents

Give your agent your pocket.

It asks, you answer, nothing happens without you. One MCP server, and Claude Code, Cursor or Windsurf can put a question on your phone before it deploys, deletes or spends — then wait for your thumb.

Why

An agent that acts for one person needs that person's pocket

Your agent runs on a laptop or a server, and you are somewhere else. The phone is where you are, and a push is the one thing that reaches you there.

A call, from anything

No session to attach to. The agent makes a tool call; a cron job or a CI step makes an HTTP request. Both end up as the same question on the same phone.

One request at a time

Every question is its own push with its own buttons. Approval for one deploy is approval for that deploy, and the next question asks again.

Answered by you

The answer comes from your thumb, or from your fingerprint when you ask for one. The agent gets a result it can act on, and you get a record of which way it went.

Install

Three steps, about a minute

1

Install the app

Free on Android and iPhone. Sign in with a link sent to your email.

2

Mint a token

In the app: Apps → + → New token. You get an lpt_… string, shown once. Revoke or regenerate it any time.

3

Add the server

Paste the config below into Claude Code, Cursor or Windsurf. Nothing to install: npx fetches it. Node 18 and up.

// .mcp.json (Claude Code) · .cursor/mcp.json (Cursor)
{"mcpServers": {"lauther": {
  "command": "npx",
  "args": ["-y", "lauther-mcp"],
  "env": {"LAUTHER_TOKEN": "lpt_…"}
}}}
Tell the agent when to ask. Most models reach for an approval tool when the project rules say so. A line like this does it:
Before anything irreversible — deploying, deleting data, spending
money, force-pushing, emailing real people, touching production —
call ask_approval and wait. Proceed only on APPROVED.
The tools

Two tools, and what the agent sees

The server describes each tool to the model in plain language, so the agent knows when to reach for it and what each result means.

ask_approval

Asks a question and waits for Approve or Deny. Inputs: question, details, require_biometric, timeout_seconds (5–900, default 120).

APPROVED after 34s. Confirmed by
biometric. You may proceed…
DENIED after 9s. Do not proceed. Do
not retry the same question…
NO ANSWER after 120s. Silence is
not consent…

send_notification

One-way: the migration finished, the build broke. Inputs: title, message, priority (lowest to urgent), url. Only urgent crosses your quiet hours.

The result says what happened, including the case of an account with no device registered, so the agent is not handed a cheerful success for a notification nobody received.

The answers

A timeout is not consent

Three outcomes, each with its own instruction to the model. Telling them apart is the point.

APPROVED
Proceed with exactly what was asked, and nothing further. When a fingerprint was required, the result says so.
DENIED
Stop. The agent reports the refusal and leaves the same question, and every other route to the same result, alone.
NO ANSWER
Stop. Silence is not consent, so a question nobody answered ends the run and waits for you to restart it.
An error
If the call itself fails, the result says no approval was obtained, and the agent stops there too.
It waits as long as you are away. The API holds a request for 25 seconds; past that the server keeps asking about the same notification, so a ten-minute wait puts one question on your phone rather than one every half minute.
The fingerprint

Ask for a person, not a click

Set require_biometric and the app asks for a fingerprint or face before an approval counts. The result then reads Confirmed by biometric: a record that a person gave the yes, which a log line cannot offer. Denying needs no fingerprint, because refusing should always be cheap. A phone with no screen lock can deny and cannot approve.

APPROVED after 34s. Confirmed by biometric. You may proceed…
Get the app

Your pocket, on both stores

Free for everything personal. Install on one platform and your account follows you to the other. See pricing →

Calling from a script instead of an agent? The same questions are one HTTP request: the approve endpoint. JavaScript users can reach for the client package.