Before you start
- This page is about hosted agents only. An AI app that runs on a company’s servers, like claude.ai or ChatGPT. It can never reach your home network on its own. An agent on your own machine sends its agent key and needs none of this.
- The bridge is on exactly when Postern has a public address. There is no separate switch. Set up remote access is the procedure.
- A key that never expires is refused here. Create or rotate one with an expiry first. Agent keys.
Turning the bridge on
The bridge is on exactly when Postern has a public address. There is no separate switch, and while it is off its paths answer 404 like any other path that is not/mcp.
To turn it on:
- In the Console, click Settings.
- Find the Remote access band.
- Type your address into Your gate’s public address.
- Click Publish this gate.
- Restart Postern.
Save the origin only
Save the origin only. Postern refuses an address carrying a path, a query, a fragment, or a username and password. It serves every address it publishes at the root, so a saved path would send agents to an address that answers nothing — while the boot log, both discovery documents and the Console’s own indicator all still read correctly. That is why Postern refuses one, and the refusal names the origin to save instead. A port is fine: Postern drops a default port, sohttps://host.ts.net:443 is stored as
https://host.ts.net, and a non-default port such as :10000 is legal.
An agent needs that address plus /mcp. The Console appends the suffix itself, in
one place, so its Copy button is the right source for the string.
What the internet reaches
With the bridge on, the internet reaches exactly eight addresses on one port:
The Console is not among them. Nothing else on the machine is reachable.
With the bridge on, a 401 also carries a
WWW-Authenticate challenge pointing at the
protected-resource document. With it off, a 401 carries no such header.
A hosted agent key must carry an expiry
claude.ai and ChatGPT refuse an agent key that never expires. Postern’s own bridge enforces that too, and says so in different words from a bad-key refusal:That message names a 365-day expiry. The Console offers only Never,
30 days, 60 days and 90 days. The mismatch is a product defect, not
an instruction. Pick 30 days or 90 days.
Anyone can register a client
The bridge accepts a client registration from anyone who can reach your public address. The OAuth standard requires that, so Postern cannot refuse one on the strength of who sent it. A registration on its own reaches no data of yours. So the client name and the destination on the sign-in page are your only check that the request came from the application you started. Approval sends a one-time code to that destination. That is why Postern prints both lines above the key box, and why neither is a setting.Hosted agents connect out on port 443 only
Say a hosted agent reports it could not reach you, and nothing at all appears in your logs. It never arrived. That company’s network resets an address on any other port before the request leaves it. The absent log line is evidence about the port, not about Postern. A hosted agent then remembers the failed check for a few minutes, so an immediate retry reads the cached failure rather than testing your fix. Wait five minutes, then try once.If something went wrong
Next
Set up remote access
Give Postern a public address, so a hosted agent can reach it.
Connect ChatGPT
The longest of the hosted paths, walked end to end.