Skip to main content

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:
1

Explicit Header

X-Quint-Agent: my-bot header sets the agent ID directly. Source: quint_agent_header.
2

Proxy Auth

HTTP_PROXY=http://my-bot@localhost:9090 extracts the username from the proxy URL. Source: proxy_auth.
3

Cloud Token

JWT tokens (qt_agent_*, qt_subagent_*) carry agent_id in claims. Source: cloud_token.
4

In-Band Auth

The _quint field in MCP initialize params can carry agent_name. Source: quint_auth.
5

Cookie

The _quint_agent cookie (HttpOnly, Secure, SameSite=None) persists identity across requests in MITM mode.
6

Auto-Discovery

User-Agent parsing + word-based naming. Source: auto_resolve.

User-Agent Discovery

Quint recognizes 16 agent tools from their User-Agent strings:
SubstringCanonical Name
claude-codeclaude-code
claudeclaude
cursorcursor
aideraider
continuecontinue
clinecline
copilotcopilot
windsurfwindsurf
zedzed
python-httpxpython-httpx
python-requestspython-requests
go-http-clientgo-http-client
node-fetchnode-fetch
curlcurl
wgetwget
Matching is case-insensitive, first-match-wins. If no known tool is found, Quint uses the first token before / (if short and not a browser UA).

Word-Based Naming

When an agent is auto-discovered, it gets a deterministic human-readable name:
{provider}:{adjective}-{color}-{animal}
Examples: anthropic:bold-amber-falcon, openai:swift-coral-otter, google:keen-jade-hawk

How It Works

  1. Build a seed string from the agent’s IP, tool name, and provider
  2. Hash with FNV-64a
  3. Index into three word lists:
    • 100 adjectives (bold, swift, keen, calm, …)
    • 100 colors (amber, coral, jade, slate, …)
    • 95 animals (falcon, otter, hawk, wolf, …)
This produces ~950,000 unique names. The same seed always generates the same name, so an agent’s identity is stable across requests.
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:
anthropic:bold-amber-falcon  (calls api.anthropic.com)
openai:swift-coral-otter     (calls api.openai.com)
The identity cache key is IP:toolName:provider, ensuring provider isolation.

Child Agent Naming

When a sub-agent is detected, child agents get derived names:
derived_{parentName}_{shortID}
The 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:
FieldDescription
SubjectIDUnique identifier (UUID)
AgentIDHuman-readable ID
AgentNameDisplay name (word-based or explicit)
AgentTypeClassification: claude, chatgpt, cursor, generic
ProviderAI provider: anthropic, openai, google, etc.
ModelExtracted model name (e.g., claude-sonnet-4-20250514)
SourceHow identity was resolved (see priority chain above)
DepthNesting depth in agent hierarchy (0 = root)
ParentJTIParent token ID (for sub-agents)
IsCloudTokenWhether identity came from a cloud JWT
TokenTypeToken type: app, bearer, agent, subagent, session, override

Model Extraction

In forward proxy mode, Quint reads the first 8KB of POST request bodies to extract the model field:
{"model": "claude-sonnet-4-20250514", "messages": [...]}
This enables model-aware features like sub-agent detection via model divergence.