Skip to main content

detect_agent

This is a Python port of Vercel's detect-agent package.

A lightweight utility for detecting if code is being executed by an AI agent or automated development environment.

Installation

uv add detect_agent

Usage

from 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 context

Agent Definitions

Detection rules are vendored from upstream agents.json (validated against agents.schema.json) and evaluated in array order; the first match wins.

Supported Agents

This package can detect the following AI agents and development environments:

  • Cursor (Anysphere)
  • Claude Code (Anthropic)
  • Claude Cowork (Anthropic)
  • Kimi Code (Moonshot AI)
  • Grok Build (xAI)
  • 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_AGENT environment variable)

See agents.json for the exact environment variables and conditions used to detect each one.

The AI_AGENT Standard

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.

For AI Tool Developers

Set the AI_AGENT environment variable to identify your tool:

export AI_AGENT="your-tool-name"
# or
AI_AGENT="your-tool-name" your-command

Recommended Naming Convention

  • Use lowercase with hyphens for multi-word names
  • Include version information if needed, separated by an @ symbol
  • Examples: claude-code, cursor-cli, devin@1, custom-agent@2.0

Development

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 .

Use Cases

Adaptive Behavior

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']}")

Telemetry and Analytics

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(),
        },
    )

Feature Toggles

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 False

Contributing

Adding New Agent Support

To add support for a new AI agent:

  1. Sync detection rules from upstream agents.json into detect_agent/agents.json. Agents are evaluated in array order — the first match wins.
  2. Sync or extend test cases in tests/testcases.json.
  3. Update this README with the new agent information.

Links

Release files for detect_agent 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for detect_agent 0.6.0
File Size Uploaded
detect_agent-0.6.0.tar.gz 45.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for detect_agent 0.6.0
File Interpreter ABI Platform
detect_agent-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 57.3 kB

Release files / detect_agent-0.6.0.tar.gz

Download URL detect_agent-0.6.0.tar.gz
Size 45.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e1b1bba5d4e20f59f97aeae4016291f9563818a33ff7c0e8a18c6b948b5cd939
BLAKE2b-256 checksum
How to use checksums
500762586d442e629fd4208da5dd1bee7bb604898604d9343b0a3fb9c973fc06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / detect_agent-0.6.0-py3-none-any.whl

Download URL detect_agent-0.6.0-py3-none-any.whl
Size 11.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d218806fda221486d886d68526acd950cef9eb09571189968bfc004acd5ca595
BLAKE2b-256 checksum
How to use checksums
f8654df635649962338b3f4cd4cbb0f360e1354f8b2043b4728284de8a1a3341
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page