Documentation Index
Fetch the complete documentation index at: https://docs.argentos.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Device Pairing & Discovery enables ArgentOS to operate across multiple devices on the same network. The system uses Bonjour (mDNS/DNS-SD) for automatic gateway discovery and a structured pairing workflow for device registration with role-based access tokens. This system answers two questions:- Discovery: Where is the ArgentOS gateway running on this network?
- Pairing: Is this device authorized to connect?
Bonjour Service Discovery
Service Type
ArgentOS gateways advertise as_argent-gw._tcp via mDNS/DNS-SD. This allows any device on the local network to discover running gateway instances without knowing their IP addresses.
Platform Support
| Platform | Discovery Method |
|---|---|
| macOS | dns-sd CLI tool (native) |
| Linux | avahi-browse (Avahi daemon) |
TXT Record Fields
Each beacon advertises metadata via DNS TXT records:| Field | Description | Example |
|---|---|---|
displayName | Human-readable gateway name | ”Jason’s Mac Studio” |
lanHost | LAN hostname or IP | ”192.168.1.100” |
tailnetDns | Tailscale DNS name | ”mac-studio.tail12345.ts.net” |
gatewayPort | Gateway WebSocket port | ”18789” |
sshPort | SSH port for remote access | ”22” |
gatewayTls | Whether TLS is enabled | ”true” |
gatewayTlsSha256 | TLS certificate fingerprint | SHA-256 hash |
cliPath | Path to argent CLI on the host | ”/Users/sem/bin/argent” |
role | Gateway role | ”primary” |
transport | Transport protocol | ”ws” |
Discovery Domains
Discovery searches multiple domains:local.— Standard mDNS local network discovery- Wide-area domain — Optional Tailnet DNS for cross-network discovery
Tailnet Fallback
When standard Bonjour discovery fails for wide-area domains, the system falls back to a Tailnet-based DNS approach:
This enables gateway discovery across Tailscale networks where mDNS may not propagate.
Discovery API
Device Pairing
Pairing State
Device pairing state is persisted to~/.argentos/devices/:
| File | Contents |
|---|---|
pending.json | Pending pairing requests (TTL: 5 minutes) |
paired.json | Approved paired devices |
Both files are written atomically (write to temp, rename) with
0o600 permissions for security.Pairing Request
A device initiates pairing by sending a request with its identity:Approval
The operator approves pairing on the primary device. On approval:- The pending request is removed
- A paired device record is created
- A role-scoped auth token is generated
- If the device was previously paired, roles and scopes are merged
Rejection
Paired Device
Auth Tokens
Each paired device receives role-scoped auth tokens for API access.Token Structure
Token Operations
| Operation | Function | Description |
|---|---|---|
| Verify | verifyDeviceToken() | Check token validity, role, and scopes |
| Ensure | ensureDeviceToken() | Get or create token for a role |
| Rotate | rotateDeviceToken() | Generate new token, preserving history |
| Revoke | revokeDeviceToken() | Mark token as revoked |
Scope Enforcement
Token verification checks that requested scopes are a subset of the token’s allowed scopes:Verification Failure Reasons
| Reason | Description |
|---|---|
device-not-paired | Device ID not found in paired devices |
role-missing | No role specified |
token-missing | No token for the requested role |
token-revoked | Token has been revoked |
token-mismatch | Token value does not match |
scope-mismatch | Requested scopes exceed token’s allowed scopes |
Concurrency Safety
All pairing operations use a serialized lock to prevent race conditions:Re-Pairing
When an already-paired device sends a new pairing request, the system detects this and setsisRepair: true. On approval, the existing device record is updated (roles and scopes are merged) rather than replaced.
Configuration
Device pairing state is stored under the ArgentOS state directory:No configuration is needed to enable device pairing — it is available by default when the gateway is running.
