This is a Python port of Vercel's
detect-agentpackage.
A lightweight utility for detecting if code is being executed by an AI agent or automated development environment.
uv add detect_agentfrom detect_agent import determine_agent
result = determine_agent()
if result["is_agent"]:
agent = result["agent"]
print(f"Running in {agent['name']} environment")
# Adapt behavior for AI agent contextDetection rules are vendored from upstream agents.json (validated against agents.schema.json) and evaluated in array order; the first match wins.
This package can detect the following AI agents and development environments:
- Cursor (Anysphere)
- Claude Code (Anthropic)
- Claude Cowork (Anthropic)
- Devin (Cognition Labs)
- Gemini CLI (Google)
- Codex (OpenAI)
- Antigravity (Google DeepMind)
- Augment
- Cline
- OpenCode
- OpenClaw
- Goose (Block)
- Junie (JetBrains)
- Kiro (AWS)
- Pi
- GitHub Copilot
- Replit
- Custom agents (via the
AI_AGENTenvironment variable)
See agents.json for the exact environment variables and conditions used to detect each one.
We're promoting AI_AGENT as a universal environment variable standard for AI development tools. This allows any tool or library to easily detect when it's running in an AI-driven environment.
Set the AI_AGENT environment variable to identify your tool:
export AI_AGENT="your-tool-name"
# or
AI_AGENT="your-tool-name" your-command- Use lowercase with hyphens for multi-word names
- Include version information if needed, separated by an
@symbol - Examples:
claude-code,cursor-cli,devin@1,[email protected]
uv sync --extra dev
uv run pytest
# Lint and format check (CI)
uv run ruff check . && uv run ruff format --check .
# Fix and format
uv run ruff check . --fix && uv run ruff format .import os
from detect_agent import determine_agent
def setup_environment():
result = determine_agent()
if result["is_agent"]:
agent = result["agent"]
# Running in AI environment - adjust behavior
os.environ["LOG_LEVEL"] = "verbose"
print(f"Detected AI agent: {agent['name']}")import time
from detect_agent import determine_agent
def track_usage(event: str):
result = determine_agent()
analytics.track(
event,
{
"agent": result["agent"]["name"] if result["is_agent"] else "human",
"timestamp": time.time(),
},
)from detect_agent import determine_agent
def should_enable_feature(feature: str) -> bool:
result = determine_agent()
# Enable experimental features for AI agents
if result["is_agent"] and feature == "experimental-ai-mode":
return True
return FalseTo add support for a new AI agent:
- Sync detection rules from upstream
agents.jsonintodetect_agent/agents.json. Agents are evaluated in array order — the first match wins. - Sync or extend test cases in
tests/testcases.json. - Update this README with the new agent information.