{
  "version": 2,
  "description": "花生壳CLI 智能体识别规则表。基于 is-ai-agent (Rust crate) 规范。顺序即优先级（先命中先得）。",
  "aiAgentVar": "AI_AGENT",
  "ciVar": "CI",
  "agents": [
    { "key": "AMP", "name": "amp", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "AMP_CURRENT_THREAD_ID" } ] } },
    { "key": "WORKBUDDY", "name": "workbuddy", "match": { "type": "anyOf", "conditions": [ { "type": "env_value", "name": "CODEBUDDY_HOST", "value": "workbuddy-desktop" } ] } },
    { "key": "CODEBUDDY", "name": "codebuddy", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CODEBUDDY" }, { "type": "env_set", "name": "CODEBUDDY_SESSION_ID" }, { "type": "env_set", "name": "CODEBUDDY_PROJECT_DIR" }, { "type": "env_set", "name": "CODEBUDDY_HOST" }, { "type": "env_set", "name": "CODEBUDDY_CONFIG_DIR" } ] } },
    { "key": "COWORK", "name": "cowork", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CLAUDE_CODE_IS_COWORK" } ] } },
    { "key": "CLAUDE", "name": "claude", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CLAUDECODE" }, { "type": "env_set", "name": "CLAUDE_CODE_ENTRYPOINT" }, { "type": "env_set", "name": "CLAUDE_CODE_SESSION_ID" }, { "type": "env_set", "name": "CLAUDE_CODE_EXECPATH" } ] } },
    { "key": "CURSOR", "name": "cursor", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CURSOR_AGENT" } ] } },
    { "key": "CURSOR_CLI", "name": "cursor", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CURSOR_SANDBOX" } ] } },
    { "key": "QWEN", "name": "qwen", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "QWEN_CODE" } ] } },
    { "key": "VECLI", "name": "vecli", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "VECLI_SANDBOX" }, { "type": "env_set", "name": "VECLI_DIR" } ] } },
    { "key": "GEMINI", "name": "gemini", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "GEMINI_CLI" } ] } },
    { "key": "CODEX", "name": "codex", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CODEX_THREAD_ID" }, { "type": "env_set", "name": "CODEX_SANDBOX" }, { "type": "env_set", "name": "CODEX_SANDBOX_NETWORK_DISABLED" }, { "type": "env_set", "name": "CODEX_CI" } ] } },
    { "key": "ANTIGRAVITY", "name": "antigravity", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "ANTIGRAVITY_AGENT" }, { "type": "env_set", "name": "ANTIGRAVITY_PROJECT_ID" } ] } },
    { "key": "AUGMENT", "name": "augment", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "AUGMENT_AGENT" } ] } },
    { "key": "CLINE", "name": "cline", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CLINE_ACTIVE" }, { "type": "env_set", "name": "CLINE_TASK_ID" } ] } },
    { "key": "ROO_CODE", "name": "roo-code", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "ROO_CODE_TASK_ID" } ] } },
    { "key": "CRUSH", "name": "crush", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "CRUSH" } ] } },
    { "key": "IFLOW", "name": "iflow-cli", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "IFLOW_CLI" } ] } },
    { "key": "GROK", "name": "grok", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "GROK_AGENT" } ] } },
    { "key": "WARP", "name": "warp", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "OZ_RUN_ID" } ] } },
    { "key": "PI", "name": "pi", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "PI_CODING_AGENT" } ] } },
    { "key": "KIRO", "name": "kiro", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "KIRO_AGENT_PATH" } ] } },
    { "key": "FIREBENDER", "name": "firebender", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "FIREBENDER_TERMINAL" } ] } },
    { "key": "OPENCODE", "name": "opencode", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "OPENCODE" }, { "type": "env_set", "name": "OPENCODE_PID" }, { "type": "env_set", "name": "OPENCODE_BIN_PATH" }, { "type": "env_set", "name": "OPENCODE_SERVER" }, { "type": "env_set", "name": "OPENCODE_APP_INFO" }, { "type": "env_set", "name": "OPENCODE_MODES" }, { "type": "env_set", "name": "OPENCODE_CLIENT" } ] } },
    { "key": "TRAE", "name": "trae", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "TRAE_AI_SHELL_ID" }, { "type": "env_set", "name": "TRAE_STATIC_CLIENT_TYPE" }, { "type": "env_set", "name": "TRAE_CONFIG_CHANNEL" }, { "type": "env_set", "name": "TRAE_PRODUCT_REGION" } ] } },
    { "key": "GOOSE", "name": "goose", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "GOOSE_TERMINAL" } ] } },
    { "key": "REPLIT", "name": "replit", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "REPL_ID" } ] } },
    { "key": "GITHUB_COPILOT", "name": "github-copilot", "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "COPILOT_AGENT_SESSION_ID" }, { "type": "env_set", "name": "COPILOT_AGENT" }, { "type": "env_set", "name": "COPILOT_CLI" }, { "type": "env_set", "name": "COPILOT_AGENT_JOB_ID" }, { "type": "env_set", "name": "COPILOT_MODEL" }, { "type": "env_set", "name": "COPILOT_ALLOW_ALL" }, { "type": "env_set", "name": "COPILOT_GITHUB_TOKEN" } ] } },
    { "key": "KIMI", "name": "kimi", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "KIMI_API_KEY" } ] } },
    { "key": "JUNIE", "name": "junie", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "JUNIE_DATA" }, { "type": "env_set", "name": "JUNIE_SHIM_PATH" } ] } },
    { "key": "OPENCLAW", "name": "openclaw", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "OPENCLAW_SHELL" } ] } },
    { "key": "QODER", "name": "qoder", "aliases": ["qoderwork", "qoder-work"], "match": { "type": "anyOf", "conditions": [ { "type": "env_value", "name": "DINGTALK_DWS_AGENTCODE", "value": "QoderWork" }, { "type": "env_set", "name": "QODER_PLUGIN_ROOT" }, { "type": "env_set", "name": "QODER_PROJECT_DIR" }, { "type": "env_set", "name": "QODERCN_PERSONAL_ACCESS_TOKEN" } ] } },
    { "key": "COZE", "name": "coze", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "COZE_PROJECT_ID" }, { "type": "env_set", "name": "COZE_CONFIG_FILE" }, { "type": "env_set", "name": "COZE_ORG_ID" }, { "type": "env_set", "name": "COZE_SPACE_ID" } ] } },
    { "key": "QCODE", "name": "qcode", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "QCODE_API_KEY" }, { "type": "env_set", "name": "QCODE_PLUGIN_ROOT" } ] } },
    { "key": "DOUBAO", "name": "doubao", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "env_set", "name": "DOUBAO_API_KEY" }, { "type": "env_set", "name": "ARK_API_KEY" } ] } },
    { "key": "DEVIN", "name": "devin", "unverified": true, "match": { "type": "anyOf", "conditions": [ { "type": "file_exists", "path": "/opt/.devin" } ] } },
    { "key": "UNKNOWN", "name": "unknown", "confidence": "low", "match": { "type": "env_name_matches", "pattern": "^(TRAE|CODEBUDDY|WORKBUDDY|COZE|QCODE|DOUBAO|CURSOR|CLAUDE|GEMINI|CODEX|COPILOT|OPENCODE|GOOSE|QWEN|KIMI|CLINE|ROO_CODE|ANTIGRAVITY|AUGMENT|VECLI|CRUSH|IFLOW|GROK|WARP|PI|KIRO|FIREBENDER|AMP|QODER)_", "excludeVars": ["PATH", "HOME", "USERPROFILE", "TEMP", "TMP", "SystemRoot", "NPM_"], "map": { "TRAE": "trae", "CODEBUDDY": "codebuddy", "WORKBUDDY": "workbuddy", "COZE": "coze", "QCODE": "qcode", "DOUBAO": "doubao", "CURSOR": "cursor", "CLAUDE": "claude-code", "GEMINI": "gemini-cli", "CODEX": "codex-cli", "COPILOT": "github-copilot", "OPENCODE": "opencode", "GOOSE": "goose", "QWEN": "qwen-code", "KIMI": "kimi", "CLINE": "cline", "ROO_CODE": "roo-code", "ANTIGRAVITY": "antigravity", "AUGMENT": "augment", "VECLI": "vecli", "CRUSH": "crush", "IFLOW": "iflow-cli", "GROK": "grok-cli", "WARP": "warp", "PI": "pi", "KIRO": "kiro", "FIREBENDER": "firebender", "AMP": "amp", "QODER": "qoder" } } }
  ]
}
