How agent detection works
OpenHermit identifies AI agents in two ways:- User-agent string — most crawlers and agents identify themselves in the HTTP
User-Agentheader. The script checks this against known patterns. - Browser heuristics — headless browsers used by agents often expose
navigator.webdriver = trueor lack standard browser APIs.
Detected agents
| Agent | Company | User-agent pattern |
|---|---|---|
| GPTBot | OpenAI | GPTBot |
| ChatGPT-User | OpenAI | ChatGPT-User |
| OAI-SearchBot | OpenAI | OAI-SearchBot |
| Operator | OpenAI | openai-operator |
| Claude | Anthropic | ClaudeBot, Claude-Web, Anthropic |
| Perplexity | Perplexity AI | PerplexityBot |
| Gemini / Google | Google-Extended, Googlebot-Extended | |
| Copilot | Microsoft | bingbot.*copilot, copilot |
| YouBot | You.com | YouBot |
| Cohere | Cohere | cohere-ai |
| Headless Agent | Unknown | navigator.webdriver = true, no Chrome/Safari globals |
| Automated Browser | Unknown | navigator.webdriver = true |
How agents interact with your site
Manifest-reading agents (works today)
Any agent that can make HTTP requests can fetch your/.well-known/webmcp.json manifest and read your available actions, prompts, and field requirements. This works with:
- API-based agents (no browser needed)
- Curl, Python scripts, n8n automations
- Any agent framework that checks for WebMCP manifests
Browser-based agents (works today, limited)
Agents like ChatGPT Operator, Claude Computer Use, and similar tools that control a real browser will see your WebMCP meta tags and link tags injected by the script. Forward-looking agents will follow these to discover your manifest.navigator.modelContext agents (coming soon)
The W3C WebMCP spec proposes a native browser API for agents. When browsers ship this natively, agents will be able to discover and call actions directly from the page without any extension. OpenHermit-enabled sites will be compatible automatically.
What agents can do with your actions
Once an agent reads your manifest and finds an action, it can:- Read the before prompt — understand what data it needs to collect first
- Identify the form — via
selector(CSS selector) orpage_url - Fill the form — using the
fieldsschema to know what each field expects - Submit — and receive the success or failure prompt in response
- Follow the next action — if you’ve configured a
next_action_url

