Create a mask
Choose Connect your agent on the home page and sign in with GitHub to open the workspace builder. Enter an Agent name, choose its Request permissions and select Create mask. All three relay permissions are enabled by default; keep at least one selected
The browser generates an Ed25519 key pair on your device and registers its public half. The mask is this separate signing identity for your existing agent
Save the private key
After creation, a key sheet opens. Choose Save private key to start downloading the JSON file. Check your downloads and store the file somewhere only you and your agent can access. It is an unencrypted secret
The private key stays on your deviceOnly the public key is registered. Hider cannot recover the private key; reloading clears its in-memory copy
Keep the file out of chat, public repositories and logs. If it is lost or exposed, revoke that mask and create another. The setup protects the unsaved key until its download starts
Test the connection
After starting the key download, choose a Test destination and select Send test request in the same builder. Your key signs locally, the gateway verifies a one-time challenge and the destination returns a response
The receipt shows the actual HTTP result, duration and response size. A successful IP check also shows the address reported by the destination. Choose Inspect response to read the response body and full receipt ID
Already have a mask? Select Load saved key in the builder. The key must belong to this workspace and an active mask. It stays in tab memory; load it again after a reload
Use Activity for recorded requests or the workspace’s Browser test for further diagnostics. A receipt is a server-produced record, not a cryptographic attestation of privacy
Use your own agent
Give your agent AGENTS.md and the Node client. Extract the client and keep its
scripts/andlib/directories together. Run this command from the extracted directory:node scripts/agent.mjs --key ./agent.key.json --target ipUse your actual key filename and an allowed target. Node.js 22.13 or newer is required; no package installation is needed. The gateway address comes from the key file
The workspace’s Developer → Agent CLI view keeps the client, command and guide together
GitHub sign-in and agent access
Sign in with GitHub to create and manage your workspace. Each GitHub account has separate masks and request records
Your agent uses its saved Ed25519 key for challenge and relay requests. It does not need your browser cookie, GitHub token or a platform service token
Keys created on the previous ChatGPT Sites deployment remain registered there. This Railway workspace starts separately; changing a key file’s gateway address does not transfer the identity
Request permissions & route
Choose the relay permissions a mask needs before creating it. Keep at least one selected. Existing masks retain their original permissions; editing a local key file cannot expand them
- Exit IP
ip - Reads the address reported by
api.ipify.org. With a proxy configured this checks its actual exit; otherwise it reports the shared server exit - Example page
example - Fetches
example.comthrough the same signed route - HTTPS websites
web - Fetches a signed public HTTPS URL through the configured proxy. This GET request returns a response body; interactive JavaScript pages use a browser session
The operator configures the proxy and permitted hostnames. A proxy failure ends the request without direct fallback. Run an IP check and an intended destination to verify a route; configuration alone does not prove connectivity or a distinct, stable IP
Capability errors and limits
target_not_allowed means the mask does not permit that destination. Choose an enabled target or create a mask with the required permission. egress_not_configured means the operator must configure the proxy; host_not_allowed means the requested host is outside the configured policy
There are 20 lifetime identities per workspace, 60 signed relay/resource operations per mask per hour and 120 issued challenges per mask per hour. Owner browser operations share the request quota. Revoked and archived identities still count toward workspace capacity
The relay checks and pins public destination addresses, verifies TLS, blocks redirects and caps responses at 64 KiB within eight seconds. Custom upstream bodies, cookies and headers are not exposed. See Infrastructure for server configuration
Browser & contacts
Open Resources to inspect provider readiness and assign resources to a mask. The operator adds API credentials on the server and explicitly authorizes the GitHub owners who may use paid providers. A configured status means the required settings are present; create and read a resource to verify it
- Mailbox
AgentMail - Create one inbox per mask, list incoming messages and read a selected message. Message text is returned safely as text
- Incoming SMS
Twilio - Assign one unassigned SMS-capable number already owned by the configured account. Hider reads incoming messages received after assignment; buy and register numbers in Twilio first
- Isolated browser
Browserbase - Start a fresh five-minute session with a managed proxy and recording disabled. Navigate, read page text, click a CSS-selected element or fill an input. Signed agent browser creation and page commands require the mask’s web permission
Your agent uses its signing key for its own resource operations. The downloaded client includes scripts/resources.mjs; start with node scripts/resources.mjs --key ./agent.key.json --action inventory. Provider keys and the browser CDP connection stay on the server. All commands, exact actions and signing bytes are in AGENTS.md
Provider costs and resource lifetime
Proxy traffic, browser runtime, inboxes and number rental may incur provider charges. Set account budgets and quotas. Hider does not purchase numbers or send SMS or email
Mailboxes and numbers remain assigned after mask revocation or archiving. Manage their ongoing costs in the provider account. Browser sessions expire after five minutes or can be explicitly closed
Message lists contain at most 25 items, with text capped at 64 KiB. Attachments and pagination are not exposed. External accounts use ordinary authorized login or OAuth; account trading and automatic Google/social registration are not provided
What stays visible
A mask gives your agent a distinct signing identity and a gateway route. It does not make the entire agent or its other network activity anonymous
- Your device
- Holds the private key and the responses you receive
- Gateway & providers
- Can observe identity, requests and the resources they operate. Hosting and provider retention policies are separate
- Destination
- Sees the selected network exit, request content, cookies, account login and browser characteristics where applicable
A fresh browser separates storage between sessions. Public-address checks and request interception do not make it a system network sandbox: remote DNS can differ and WebRTC/other transports are not covered by a leak-free claim. Tor, a system VPN and zero-knowledge access are not implemented. No mode promises complete anonymity
Revoke, archive and retained records
Revoke stops a mask from authorizing new requests and clears its outstanding challenges. It preserves past receipts and does not cancel a request already in flight
Archive moves an already revoked mask out of the normal list. Archived masks and their receipts remain inspectable in the workspace. Archiving does not delete records or restore workspace capacity
The activity store retains the last 200 receipts per mask. Receipts contain status, timing and byte count, but not response bodies or client IP addresses. Operator and hosting logs are separate and may retain connection metadata
API reference
Use JSON POST bodies with the exact documented fields. The agent guide includes the canonical signing messages, response shape and recovery codes
/api/overviewMasks, receipts and runtime limits
GitHub owner session/api/agentsRegister a public key and allowed targets
GitHub owner + matching Origin/api/challengeRequest a fresh server nonce
Signed challenge request/api/relaySend a diagnostic or signed HTTPS GET
Signature + unused nonce/api/agents/{id}/revokeStop future requests from a mask
GitHub owner + matching Origin/api/agents/{id}/archiveArchive a revoked mask
GitHub owner + matching Origin/api/resourcesProvider readiness and assigned resources
GitHub owner session/api/resources/mailboxCreate the mask’s AgentMail inbox
Authorized owner + matching Origin/api/resources/phoneAssign an already-owned SMS number
Authorized owner + matching Origin/api/resources/browserStart a fresh browser with managed proxy
Authorized owner + matching Origin/api/resources/agentRead contacts and operate the mask’s browser
Signature + unused nonceStart a fresh challenge for each request. Verify the returned origin and expiry before signing. Always inspect result.status, even when the relay API itself returns HTTP 200
