Agent Identity & Naming
Quint automatically identifies and names every AI agent that passes through the proxy. Each agent gets a stable, human-readable identity based on its User-Agent string, provider, and network origin.Resolution Priority
Identity is resolved in order — first match wins:Explicit Header
X-Quint-Agent: my-bot header sets the agent ID directly. Source: quint_agent_header.Proxy Auth
HTTP_PROXY=http://my-bot@localhost:9090 extracts the username from the proxy URL. Source: proxy_auth.Cookie
The
_quint_agent cookie (HttpOnly, Secure, SameSite=None) persists identity across requests in MITM mode.User-Agent Discovery
Quint recognizes 16 agent tools from their User-Agent strings:| Substring | Canonical Name |
|---|---|
claude-code | claude-code |
claude | claude |
cursor | cursor |
aider | aider |
continue | continue |
cline | cline |
copilot | copilot |
windsurf | windsurf |
zed | zed |
python-httpx | python-httpx |
python-requests | python-requests |
go-http-client | go-http-client |
node-fetch | node-fetch |
curl | curl |
wget | wget |
/ (if short and not a browser UA).
Word-Based Naming
When an agent is auto-discovered, it gets a deterministic human-readable name:anthropic:bold-amber-falcon, openai:swift-coral-otter, google:keen-jade-hawk
How It Works
- Build a seed string from the agent’s IP, tool name, and provider
- Hash with FNV-64a
- Index into three word lists:
- 100 adjectives (bold, swift, keen, calm, …)
- 100 colors (amber, coral, jade, slate, …)
- 95 animals (falcon, otter, hawk, wolf, …)
If no provider is detected, the prefix defaults to
agent (e.g., agent:calm-teal-fox).Provider-Scoped Identities
Different providers from the same IP address get separate identities. If a single machine runs agents that call both OpenAI and Anthropic, Quint tracks them as distinct agents:IP:toolName:provider, ensuring provider isolation.
Child Agent Naming
When a sub-agent is detected, child agents get derived names:shortID is the first 4 hex characters of SHA-256("{parentID}:{childNumber}"), making child names deterministic and traceable to their parent.
Identity Fields
Each resolved identity carries:| Field | Description |
|---|---|
SubjectID | Unique identifier (UUID) |
AgentID | Human-readable ID |
AgentName | Display name (word-based or explicit) |
AgentType | Classification: claude, chatgpt, cursor, generic |
Provider | AI provider: anthropic, openai, google, etc. |
Model | Extracted model name (e.g., claude-sonnet-4-20250514) |
Source | How identity was resolved (see priority chain above) |
Depth | Nesting depth in agent hierarchy (0 = root) |
ParentJTI | Parent token ID (for sub-agents) |
IsCloudToken | Whether identity came from a cloud JWT |
TokenType | Token type: app, bearer, agent, subagent, session, override |
Model Extraction
In forward proxy mode, Quint reads the first 8KB of POST request bodies to extract themodel field: