{
  "canonical_name": "vercel-labs/agent-browser",
  "compilation_id": "pack_dd5fe8929e3a4fa096de4e58ed6d58b5",
  "created_at": "2026-05-13T13:58:04.305731+00:00",
  "created_by": "project-pack-compiler",
  "feedback": {
    "carrier_selection_notes": [
      "viable_asset_types=skill, recipe, host_instruction, eval, preflight",
      "recommended_asset_types=skill, recipe, host_instruction, eval, preflight"
    ],
    "evidence_delta": {
      "confirmed_claims": [
        "identity_anchor_present",
        "capability_and_host_targets_present",
        "install_path_declared_or_better"
      ],
      "missing_required_fields": [],
      "must_verify_forwarded": [
        "Run or inspect `npm install -g agent-browser` in an isolated environment.",
        "Confirm the project exposes the claimed capability to at least one target host."
      ],
      "quickstart_execution_scope": "allowlisted_sandbox_smoke",
      "sandbox_command": "npm install -g agent-browser",
      "sandbox_container_image": "node:22-slim",
      "sandbox_execution_backend": "docker",
      "sandbox_planner_decision": "deterministic_isolated_install",
      "sandbox_validation_id": "sbx_ca1f498cc2c54c55b1e4598985e35bb6"
    },
    "feedback_event_type": "project_pack_compilation_feedback",
    "learning_candidate_reasons": [],
    "template_gaps": []
  },
  "identity": {
    "canonical_id": "project_08325e75cda09a6826e0da4b8432434a",
    "canonical_name": "vercel-labs/agent-browser",
    "homepage_url": null,
    "license": "unknown",
    "repo_url": "https://github.com/vercel-labs/agent-browser",
    "slug": "agent-browser",
    "source_packet_id": "phit_de0fa7fa46924b548afa4e51256cec61",
    "source_validation_id": "dval_567cd1eb369b45518f7850b5520fb183"
  },
  "merchandising": {
    "best_for": "需要流程自动化能力，并使用 local_cli的用户",
    "github_forks": 2029,
    "github_stars": 32838,
    "one_liner_en": "Browser automation CLI for AI agents",
    "one_liner_zh": "Browser automation CLI for AI agents",
    "primary_category": {
      "category_id": "workflow-automation",
      "confidence": "high",
      "name_en": "Workflow Automation",
      "name_zh": "流程自动化",
      "reason": "matched_keywords:automation, agent, browser"
    },
    "target_user": "使用 local_cli 等宿主 AI 的用户",
    "title_en": "agent-browser",
    "title_zh": "agent-browser 能力包",
    "visible_tags": [
      {
        "label_en": "Browser Agents",
        "label_zh": "浏览器 Agent",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "product_domain-browser-agents",
        "type": "product_domain"
      },
      {
        "label_en": "Web Task Automation",
        "label_zh": "网页任务自动化",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "user_job-web-task-automation",
        "type": "user_job"
      },
      {
        "label_en": "Browser Automation",
        "label_zh": "浏览器自动化",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "core_capability-browser-automation",
        "type": "core_capability"
      },
      {
        "label_en": "Node-based Workflow",
        "label_zh": "节点式流程编排",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "workflow_pattern-node-based-workflow",
        "type": "workflow_pattern"
      },
      {
        "label_en": "Evaluation Suite",
        "label_zh": "评测体系",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "selection_signal-evaluation-suite",
        "type": "selection_signal"
      }
    ]
  },
  "packet_id": "phit_de0fa7fa46924b548afa4e51256cec61",
  "page_model": {
    "artifacts": {
      "artifact_slug": "agent-browser",
      "files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json",
        "REPO_INSPECTION.md",
        "CAPABILITY_CONTRACT.json",
        "EVIDENCE_INDEX.json",
        "CLAIM_GRAPH.json"
      ],
      "required_files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json"
      ]
    },
    "detail": {
      "capability_source": "Project Hit Packet + DownstreamValidationResult",
      "commands": [
        {
          "command": "npm install -g agent-browser",
          "label": "Node.js / npm · 官方安装入口",
          "source": "https://github.com/vercel-labs/agent-browser#readme",
          "verified": true
        }
      ],
      "display_tags": [
        "浏览器 Agent",
        "网页任务自动化",
        "浏览器自动化",
        "节点式流程编排",
        "评测体系"
      ],
      "eyebrow": "流程自动化",
      "glance": [
        {
          "body": "判断自己是不是目标用户。",
          "label": "最适合谁",
          "value": "需要流程自动化能力，并使用 local_cli的用户"
        },
        {
          "body": "先理解能力边界，再决定是否继续。",
          "label": "核心价值",
          "value": "Browser automation CLI for AI agents"
        },
        {
          "body": "未完成验证前保持审慎。",
          "label": "继续前",
          "value": "publish to Doramagic.ai project surfaces"
        }
      ],
      "guardrail_source": "Boundary & Risk Card",
      "guardrails": [
        {
          "body": "Prompt Preview 只展示流程，不证明项目已安装或运行。",
          "label": "Check 1",
          "value": "不要把试用当真实运行"
        },
        {
          "body": "local_cli",
          "label": "Check 2",
          "value": "确认宿主兼容"
        },
        {
          "body": "publish to Doramagic.ai project surfaces",
          "label": "Check 3",
          "value": "先隔离验证"
        }
      ],
      "mode": "skill, recipe, host_instruction, eval, preflight",
      "pitfall_log": {
        "items": [
          {
            "body": "GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Chrome 147.0 crashes with \"trap int3\" when running in docker",
            "category": "安装坑",
            "evidence": [
              "community_evidence:github | cevd_9045278ef5e043dcadccf9288477813c | https://github.com/vercel-labs/agent-browser/issues/1339 | 来源讨论提到 node 相关条件，需在安装/试用前复核。"
            ],
            "severity": "high",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker",
            "user_impact": "可能阻塞安装或首次运行。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Detected: Trojan:Win32/Posilod.EB!cl",
            "category": "安装坑",
            "evidence": [
              "community_evidence:github | cevd_edbde732c7a7410e96ad0fa301e4222d | https://github.com/vercel-labs/agent-browser/issues/1281 | 来源讨论提到 windows 相关条件，需在安装/试用前复核。"
            ],
            "severity": "high",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Detected: Trojan:Win32/Posilod.EB!cl",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个运行相关的待验证问题：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse",
            "category": "运行坑",
            "evidence": [
              "community_evidence:github | cevd_0896b0b429c641f0b93ca9dcbbee6db8 | https://github.com/vercel-labs/agent-browser/issues/1319 | 来源讨论提到 macos 相关条件，需在安装/试用前复核。"
            ],
            "severity": "high",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个配置相关的待验证问题：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash",
            "category": "配置坑",
            "evidence": [
              "community_evidence:github | cevd_32ddde976ec0445da607d0adffc5df4c | https://github.com/vercel-labs/agent-browser/issues/1349 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。"
            ],
            "severity": "medium",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个配置相关的待验证问题：v0.25.5",
            "category": "配置坑",
            "evidence": [
              "community_evidence:github | cevd_d5d23fc6d09149fbb21ee500e7a328ec | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.5 | 来源类型 github_release 暴露的待验证使用条件。"
            ],
            "severity": "medium",
            "suggested_check": "来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。",
            "title": "来源证据：v0.25.5",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "README/documentation is current enough for a first validation pass.",
            "category": "能力坑",
            "evidence": [
              "capability.assumptions | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | README/documentation is current enough for a first validation pass."
            ],
            "severity": "medium",
            "suggested_check": "将假设转成下游验证清单。",
            "title": "能力判断依赖假设",
            "user_impact": "假设不成立时，用户拿不到承诺的能力。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.2",
            "category": "运行坑",
            "evidence": [
              "community_evidence:github | cevd_777821422c534a2881b58523db3ac2f3 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.2 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。"
            ],
            "severity": "medium",
            "suggested_check": "来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。",
            "title": "来源证据：v0.25.2",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.3",
            "category": "运行坑",
            "evidence": [
              "community_evidence:github | cevd_5c7d80190d7548b6ad87152255949f2b | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.3 | 来源讨论提到 node 相关条件，需在安装/试用前复核。"
            ],
            "severity": "medium",
            "suggested_check": "来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。",
            "title": "来源证据：v0.25.3",
            "user_impact": "可能增加新用户试用和生产接入成本。"
          },
          {
            "body": "未记录 last_activity_observed。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | last_activity_observed missing"
            ],
            "severity": "medium",
            "suggested_check": "补 GitHub 最近 commit、release、issue/PR 响应信号。",
            "title": "维护活跃度未知",
            "user_impact": "新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "downstream_validation.risk_items | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "进入安全/权限治理复核队列。",
            "title": "下游验证发现风险项",
            "user_impact": "下游已经要求复核，不能在页面中弱化。"
          },
          {
            "body": "No sandbox install has been executed yet; downstream must verify before user use.",
            "category": "安全/权限坑",
            "evidence": [
              "risks.safety_notes | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | No sandbox install has been executed yet; downstream must verify before user use."
            ],
            "severity": "medium",
            "suggested_check": "转成明确权限清单和安全审查提示。",
            "title": "存在安全注意事项",
            "user_impact": "用户安装前需要知道权限边界和敏感操作。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "risks.scoring_risks | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "把风险写入边界卡，并确认是否需要人工复核。",
            "title": "存在评分风险",
            "user_impact": "风险会影响是否适合普通用户安装。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Dashboard privileged POST routes should reject cross-origin requests",
            "category": "安全/权限坑",
            "evidence": [
              "community_evidence:github | cevd_6acd97eb554140c28938a0eb08e44c34 | https://github.com/vercel-labs/agent-browser/issues/1345 | 来源类型 github_issue 暴露的待验证使用条件。"
            ],
            "severity": "medium",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Dashboard privileged POST routes should reject cross-origin requests",
            "user_impact": "可能影响授权、密钥配置或安全边界。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Harden inspect-mode DevTools WebSocket handshakes",
            "category": "安全/权限坑",
            "evidence": [
              "community_evidence:github | cevd_ab6c062eedaf466d8f40864ca24bf8ea | https://github.com/vercel-labs/agent-browser/issues/1347 | 来源类型 github_issue 暴露的待验证使用条件。"
            ],
            "severity": "medium",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Harden inspect-mode DevTools WebSocket handshakes",
            "user_impact": "可能影响授权、密钥配置或安全边界。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills",
            "category": "安全/权限坑",
            "evidence": [
              "community_evidence:github | cevd_648ff78f18f34d51a44b9176d011738f | https://github.com/vercel-labs/agent-browser/issues/1351 | 来源讨论提到 node 相关条件，需在安装/试用前复核。"
            ],
            "severity": "medium",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills",
            "user_impact": "可能影响授权、密钥配置或安全边界。"
          },
          {
            "body": "GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Per-session /api/command should require same-origin or token auth",
            "category": "安全/权限坑",
            "evidence": [
              "community_evidence:github | cevd_d21bab57490142daba6d89ed22776087 | https://github.com/vercel-labs/agent-browser/issues/1344 | 来源类型 github_issue 暴露的待验证使用条件。"
            ],
            "severity": "medium",
            "suggested_check": "来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。",
            "title": "来源证据：Per-session /api/command should require same-origin or token auth",
            "user_impact": "可能影响授权、密钥配置或安全边界。"
          }
        ],
        "source": "ProjectPitfallLog + ProjectHitPacket + validation + community signals",
        "summary": "发现 23 个潜在踩坑项，其中 3 个为 high/blocking；最高优先级：安装坑 - 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker。",
        "title": "踩坑日志"
      },
      "snapshot": {
        "contributors": 106,
        "forks": 2029,
        "license": "unknown",
        "note": "站点快照，非实时质量证明；用于开工前背景判断。",
        "stars": 32838
      },
      "source_url": "https://github.com/vercel-labs/agent-browser",
      "steps": [
        {
          "body": "不安装项目，先体验能力节奏。",
          "code": "preview",
          "title": "先试 Prompt"
        },
        {
          "body": "理解输入、输出、失败模式和边界。",
          "code": "manual",
          "title": "读说明书"
        },
        {
          "body": "把上下文交给宿主 AI 继续工作。",
          "code": "context",
          "title": "带给 AI"
        },
        {
          "body": "进入主力环境前先完成安装入口与风险边界验证。",
          "code": "verify",
          "title": "沙箱验证"
        }
      ],
      "subtitle": "Browser automation CLI for AI agents",
      "title": "agent-browser 能力包",
      "trial_prompt": "# agent-browser - Prompt Preview\n\n> 复制下面这段 Prompt 到你常用的 AI，先试一次，不需要安装。\n> 它的目标是让你直接体验这个项目的服务方式，而不是阅读项目介绍。\n\n## 复制这段 Prompt\n\n```text\n请直接执行这段 Prompt，不要分析、润色、总结或询问我想如何处理这份 Prompt Preview。\n\n你现在扮演 agent-browser 的“安装前体验版”。\n这不是项目介绍、不是评价报告、不是 README 总结。你的任务是让我用最小成本体验它的核心服务。\n\n我的试用任务：我想用它完成一个真实的流程自动化任务。\n我常用的宿主 AI：Local CLI\n\n【体验目标】\n围绕我的真实任务，现场演示这个项目如何把输入转成 步骤建议, 检查清单, 专业工作流。重点是让我感受到工作方式，而不是给我项目背景。\n\n【业务流约束】\n- 你必须像一个正在提供服务的项目能力包，而不是像一个讲解员。\n- 每一轮只推进一个步骤；提出问题后必须停下来等我回答。\n- 每一步都必须让我感受到一个具体服务动作：澄清、整理、规划、检查、判断或收尾。\n- 每一步都要说明：当前目标、你需要我提供什么、我回答后你会产出什么。\n- 不要安装、不要运行命令、不要写代码、不要声称测试通过、不要声称已经修改文件。\n- 需要真实安装或宿主加载后才能验证的内容，必须明确说“这一步需要安装后验证”。\n- 如果我说“用示例继续”，你可以用虚构示例推进，但仍然不能声称真实执行。\n\n【可体验服务能力】\n- AI Skill / Agent 指令资产库: 项目包含可被宿主 AI 读取的 Skill 或 Agent 指令文件，可用于把专业流程带入 Claude、Codex、Cursor 等宿主。 输入：用户任务, 宿主 AI 对话上下文, 项目内 Skill/Agent 文档；输出：步骤建议, 检查清单, 专业工作流。\n\n【必须安装后才可验证的能力】\n- 多宿主安装与分发: 项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 输入：宿主 AI 工具, 插件配置, 安装命令；输出：宿主内可发现的插件/技能集合。\n- 命令行启动或安装流程: 项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 输入：终端环境, 包管理器, 项目依赖；输出：安装结果, 列表/更新/运行结果。\n\n【核心服务流】\n请严格按这个顺序带我体验。不要一次性输出完整流程：\n1. introduction：项目介绍。围绕“项目介绍”模拟一次用户任务，不展示安装或运行结果。\n2. architecture-overview：系统架构。围绕“系统架构”模拟一次用户任务，不展示安装或运行结果。\n3. cli-commands：CLI 命令参考。围绕“CLI 命令参考”模拟一次用户任务，不展示安装或运行结果。\n4. browser-automation：浏览器自动化核心。围绕“浏览器自动化核心”模拟一次用户任务，不展示安装或运行结果。\n5. sessions-authentication：会话与认证管理。围绕“会话与认证管理”模拟一次用户任务，不展示安装或运行结果。\n\n【核心能力体验剧本】\n每一步都必须按“输入 -> 服务动作 -> 中间产物”执行。不要只说流程名：\n1. introduction\n输入：用户提供的“项目介绍”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n2. architecture-overview\n输入：用户提供的“系统架构”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n3. cli-commands\n输入：用户提供的“CLI 命令参考”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n4. browser-automation\n输入：用户提供的“浏览器自动化核心”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n5. sessions-authentication\n输入：用户提供的“会话与认证管理”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n【项目服务规则】\n这些规则决定你如何服务用户。不要解释规则本身，而要在每一步执行时遵守：\n- 先确认用户任务、输入材料和成功标准，再模拟项目能力。\n- 每一步都必须形成可检查的小产物，并等待用户确认后再继续。\n- 凡是需要安装、调用工具或访问外部服务的能力，都必须标记为安装后验证。\n\n【每一步的服务约束】\n- Step 1 / introduction：Step 1 必须围绕“项目介绍”形成一个小中间产物，并等待用户确认。\n- Step 2 / architecture-overview：Step 2 必须围绕“系统架构”形成一个小中间产物，并等待用户确认。\n- Step 3 / cli-commands：Step 3 必须围绕“CLI 命令参考”形成一个小中间产物，并等待用户确认。\n- Step 4 / browser-automation：Step 4 必须围绕“浏览器自动化核心”形成一个小中间产物，并等待用户确认。\n- Step 5 / sessions-authentication：Step 5 必须围绕“会话与认证管理”形成一个小中间产物，并等待用户确认。\n\n【边界与风险】\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 安装前预览只能展示工作方式，不能证明兼容性、性能或输出质量。\n- 涉及安装、插件加载、工具调用或外部服务的能力必须安装后验证。\n\n【可追溯依据】\n这些路径只用于你内部校验或在我追问“依据是什么”时简要引用。不要在首次回复主动展开：\n- https://github.com/vercel-labs/agent-browser\n- https://github.com/vercel-labs/agent-browser#readme\n- skill-data/agentcore/SKILL.md\n- skill-data/core/SKILL.md\n- skill-data/dogfood/SKILL.md\n- skill-data/electron/SKILL.md\n- skill-data/slack/SKILL.md\n- skill-data/vercel-sandbox/SKILL.md\n- skills/agent-browser/SKILL.md\n- README.md\n- package.json\n- pnpm-workspace.yaml\n\n【首次问题规则】\n- 首次三问必须先确认用户目标、成功标准和边界，不要提前进入工具、安装或实现细节。\n- 如果后续需要技术条件、文件路径或运行环境，必须等用户确认目标后再追问。\n\n首次回复必须只输出下面 4 个部分：\n1. 体验开始：用 1 句话说明你将带我体验 agent-browser 的核心服务。\n2. 当前步骤：明确进入 Step 1，并说明这一步要解决什么。\n3. 你会如何服务我：说明你会先改变我完成任务的哪个动作。\n4. 只问我 3 个问题，然后停下等待回答。\n\n首次回复禁止输出：后续完整流程、证据清单、安装命令、项目评价、营销文案、已经安装或运行的说法。\n\nStep 1 / brainstorming 的二轮协议：\n- 我回答首次三问后，你仍然停留在 Step 1 / brainstorming，不要进入 Step 2。\n- 第二次回复必须产出 6 个部分：澄清后的任务定义、成功标准、边界条件、\n  2-3 个可选方案、每个方案的权衡、推荐方案。\n- 第二次回复最后必须问我是否确认推荐方案；只有我明确确认后，才能进入下一步。\n- 第二次回复禁止输出 git worktree、代码计划、测试文件、命令或真实执行结果。\n\n后续对话规则：\n- 我回答后，你先完成当前步骤的中间产物并等待确认；只有我确认后，才能进入下一步。\n- 每一步都要生成一个小的中间产物，例如澄清后的目标、计划草案、测试意图、验证清单或继续/停止判断。\n- 所有演示都写成“我会建议/我会引导/这一步会形成”，不要写成已经真实执行。\n- 不要声称已经测试通过、文件已修改、命令已运行或结果已产生。\n- 如果某个能力必须安装后验证，请直接说“这一步需要安装后验证”。\n- 如果证据不足，请明确说“证据不足”，不要补事实。\n```\n",
      "voices": [
        {
          "body": "来源平台：github。github/github_issue: High LLM turn count due to frequent `snapshot` calls when using `agent-b（https://github.com/vercel-labs/agent-browser/issues/1351）；github/github_issue: Chrome 147.0 crashes with \"trap int3\" when running in docker（https://github.com/vercel-labs/agent-browser/issues/1339）；github/github_issue: Support enabling WebAuthn for passkey authentication with a virtual auth（https://github.com/vercel-labs/agent-browser/issues/688）；github/github_issue: Feature Request: Chrome Extension-based Connection for Seamless Login St（https://github.com/vercel-labs/agent-browser/issues/1319）；github/github_issue: ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain traili（https://github.com/vercel-labs/agent-browser/issues/1349）；github/github_issue: Windows 11: --headed not surfacing window when invoked from non-TTY cont（https://github.com/vercel-labs/agent-browser/issues/1348）；github/github_issue: Harden inspect-mode DevTools WebSocket handshakes（https://github.com/vercel-labs/agent-browser/issues/1347）；github/github_issue: Dashboard privileged POST routes should reject cross-origin requests（https://github.com/vercel-labs/agent-browser/issues/1345）；github/github_issue: Per-session /api/command should require same-origin or token auth（https://github.com/vercel-labs/agent-browser/issues/1344）；github/github_issue: Detected: Trojan:Win32/Posilod.EB!cl（https://github.com/vercel-labs/agent-browser/issues/1281）；github/github_release: v0.27.0（https://github.com/vercel-labs/agent-browser/releases/tag/v0.27.0）；github/github_release: v0.26.0（https://github.com/vercel-labs/agent-browser/releases/tag/v0.26.0）。这些是项目级外部声音，不作为单独质量证明。",
          "items": [
            {
              "kind": "github_issue",
              "source": "github",
              "title": "High LLM turn count due to frequent `snapshot` calls when using `agent-b",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1351"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Chrome 147.0 crashes with \"trap int3\" when running in docker",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1339"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Support enabling WebAuthn for passkey authentication with a virtual auth",
              "url": "https://github.com/vercel-labs/agent-browser/issues/688"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Feature Request: Chrome Extension-based Connection for Seamless Login St",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1319"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain traili",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1349"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Windows 11: --headed not surfacing window when invoked from non-TTY cont",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1348"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Harden inspect-mode DevTools WebSocket handshakes",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1347"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Dashboard privileged POST routes should reject cross-origin requests",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1345"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Per-session /api/command should require same-origin or token auth",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1344"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Detected: Trojan:Win32/Posilod.EB!cl",
              "url": "https://github.com/vercel-labs/agent-browser/issues/1281"
            },
            {
              "kind": "github_release",
              "source": "github",
              "title": "v0.27.0",
              "url": "https://github.com/vercel-labs/agent-browser/releases/tag/v0.27.0"
            },
            {
              "kind": "github_release",
              "source": "github",
              "title": "v0.26.0",
              "url": "https://github.com/vercel-labs/agent-browser/releases/tag/v0.26.0"
            }
          ],
          "status": "已收录 12 条来源",
          "title": "社区讨论"
        }
      ]
    },
    "homepage_card": {
      "category": "流程自动化",
      "desc": "Browser automation CLI for AI agents",
      "effort": "安装已验证",
      "forks": 2029,
      "icon": "bolt",
      "name": "agent-browser 能力包",
      "risk": "可发布",
      "slug": "agent-browser",
      "stars": 32838,
      "tags": [
        "浏览器 Agent",
        "网页任务自动化",
        "浏览器自动化",
        "节点式流程编排",
        "评测体系"
      ],
      "thumb": "gray",
      "type": "Skill Pack"
    },
    "manual": {
      "markdown": "# https://github.com/vercel-labs/agent-browser 项目说明书\n\n生成时间：2026-05-13 13:40:16 UTC\n\n## 目录\n\n- [项目介绍](#introduction)\n- [系统架构](#architecture-overview)\n- [CLI 命令参考](#cli-commands)\n- [浏览器自动化核心](#browser-automation)\n- [React 组件审查](#react-introspection)\n- [会话与认证管理](#sessions-authentication)\n- [网络监控与拦截](#network-monitoring)\n- [仪表板组件](#dashboard-components)\n- [文档站点](#documentation-site)\n- [安装与构建](#installation-build)\n\n<a id='introduction'></a>\n\n## 项目介绍\n\n### 相关页面\n\n相关主题：[系统架构](#architecture-overview), [CLI 命令参考](#cli-commands)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n- [skill-data/core/references/commands.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/commands.md)\n- [skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n- [skills/agent-browser/SKILL.md](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md)\n- [skill-data/dogfood/SKILL.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/dogfood/SKILL.md)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n- [cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n</details>\n\n# 项目介绍\n\n## 概述\n\nagent-browser 是由 Vercel Labs 开发的高性能浏览器自动化工具，采用 Rust 原生实现，不依赖 Node.js 包装层。它通过 Chrome DevTools Protocol (CDP) 直接控制 Chrome/Chromium 浏览器，提供无障碍树快照（Accessibility Tree Snapshot）技术和元素引用系统，实现可靠的浏览器交互能力。资料来源：[skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n\n## 核心特性\n\n### 技术架构\n\n| 特性 | 说明 |\n|------|------|\n| 实现语言 | Rust 原生代码 |\n| 浏览器引擎 | Chrome/Chromium via CDP |\n| 无依赖 | 无需 Playwright 或 Puppeteer |\n| 会话管理 | 支持多会话、状态持久化 |\n| 认证存储 | 内置认证库（Authentication Vault） |\n| 视频录制 | 支持操作过程录制 |\n| 引擎选择 | 支持 `--engine` 切换 Chrome 与 Lightpanda |\n\n资料来源：[AGENTS.md:43-46](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n### 跨平台兼容性\n\nagent-browser 可与任意 AI Agent 配合使用，包括 Cursor、Claude Code、Codex、Continue、Windsurf 等主流工具。它提供了标准化的 CLI 接口，使 AI Agent 能够通过自然语言指令控制浏览器完成复杂任务。资料来源：[skills/agent-browser/SKILL.md:15-19](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md)\n\n## 系统架构\n\n### 架构组件\n\n```mermaid\ngraph TD\n    A[AI Agent] --> B[agent-browser CLI]\n    B --> C[Browser Automation Daemon]\n    C --> D[CDP Client]\n    D --> E[Chrome/Chromium]\n    \n    C --> F[Snapshot Engine]\n    C --> G[State Manager]\n    C --> H[React DevTools Hook]\n    \n    F --> I[Accessibility Tree]\n    G --> J[Session Storage]\n    G --> K[Auth Vault]\n    \n    L[Dashboard] --> C\n    L --> M[Extensions Panel]\n    L --> N[Network Panel]\n```\n\n### 核心模块\n\n项目的核心代码位于 `cli/src/native/` 目录下，包含以下关键模块：\n\n| 模块 | 路径 | 功能 |\n|------|------|------|\n| daemon | `cli/src/native/` | 守护进程，处理命令调度 |\n| actions | `cli/src/native/actions.rs` | 浏览器操作动作处理 |\n| browser | `cli/src/native/` | 浏览器实例管理 |\n| CDP client | `cli/src/native/` | Chrome DevTools Protocol 通信 |\n| snapshot | `cli/src/native/` | 无障碍树快照生成 |\n| state | `cli/src/native/` | 会话状态管理 |\n| react | `cli/src/native/react/` | React 开发者工具集成 |\n\n资料来源：[AGENTS.md:43](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 命令体系\n\n### 核心命令分类\n\nagent-browser 提供模块化的命令体系，涵盖浏览器操作的各个方面：\n\n```mermaid\ngraph TD\n    A[agent-browser] --> B[导航命令]\n    A --> C[元素交互]\n    A --> D[浏览器设置]\n    A --> E[网络控制]\n    A --> F[存储管理]\n    A --> G[React工具]\n    \n    B --> B1[open/goto]\n    B --> B2[back/forward]\n    B --> B3[reload/pushstate]\n    \n    C --> C1[click/tap]\n    C --> C2[fill/setvalue]\n    C --> C3[snapshot/innertext]\n    C --> C4[find/highlight]\n    \n    D --> D1[viewport/device]\n    D --> D2[timezone/locale]\n    D --> D3[geolocation/permissions]\n```\n\n### 常用命令速查\n\n| 命令 | 说明 | 示例 |\n|------|------|------|\n| `open <url>` | 启动并导航 | `agent-browser open https://example.com` |\n| `snapshot` | 获取无障碍树快照 | `agent-browser snapshot -i` |\n| `click @e1` | 通过引用点击元素 | `agent-browser click @e1` |\n| `screenshot` | 截图 | `agent-browser screenshot --annotate output.png` |\n| `find` | 查找元素 | `agent-browser find role button Submit` |\n| `network route` | 拦截网络请求 | `agent-browser network route * --abort --resource-type script` |\n| `cookies` | 管理 Cookie | `agent-browser cookies set --curl file.curl` |\n\n资料来源：[cli/src/output.rs:1-30](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n## 元素引用系统\n\n### 快照与引用机制\n\nagent-browser 的核心创新在于其无障碍树快照和元素引用系统。用户必须先获取快照才能进行元素交互，确保引用始终有效：\n\n```bash\n# 正确流程\nagent-browser open https://example.com\nagent-browser snapshot -i          # 先获取引用\nagent-browser click @e1            # 使用引用\n\n# 错误流程\nagent-browser open https://example.com\nagent-browser click @e1            # 引用尚未存在！\n```\n\n资料来源：[skill-data/core/references/snapshot-refs.md:1-15](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n\n### 引用格式\n\n引用格式清晰展示元素的关键属性：\n\n```\n@e1 [button] \"Submit\"                    # 按钮元素\n@e2 [input type=\"email\"]                 # 邮箱输入框\n@e3 [div role=\"article\"] \"标题文本\"       # 文章容器\n```\n\n## 专精技能\n\n### 技能体系架构\n\n```mermaid\ngraph LR\n    A[agent-browser skills] --> B[core]\n    A --> C[electron]\n    A --> D[slack]\n    A --> E[dogfood]\n    A --> F[vercel-sandbox]\n    A --> G[agentcore]\n```\n\n### 技能说明\n\n| 技能 | 用途 | 使用命令 |\n|------|------|----------|\n| core | 核心工作流和通用模式 | `agent-browser skills get core` |\n| electron | Electron 桌面应用自动化 | `agent-browser skills get electron` |\n| slack | Slack 工作区自动化 | `agent-browser skills get slack` |\n| dogfood | 探索性测试 / QA / Bug 追踪 | `agent-browser skills get dogfood` |\n| vercel-sandbox | Vercel Sandbox 微虚拟机环境 | `agent-browser skills get vercel-sandbox` |\n| agentcore | AWS Bedrock AgentCore 云浏览器 | `agent-browser skills get agentcore` |\n\n资料来源：[skills/agent-browser/SKILL.md:5-25](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md)\n\n## React 开发者工具\n\n### React 渲染分析\n\nagent-browser 集成了 React 开发者工具，能够分析 React 应用的渲染状态和性能瓶颈：\n\n```rust\n// React 挂起状态类型权重\npub enum SuspendType {\n    ClientHook => 7,      // 最高优先级\n    RequestApi => 6,\n    ServerFetch => 5,\n    Cache => 4,\n    Stream => 3,\n    Unknown => 2,\n    Framework => 1,       // 最低优先级\n}\n```\n\n### 阻塞组件识别\n\n系统通过 `BoundaryKind` 分类识别阻塞渲染的组件类型：\n\n| 类型 | 说明 | 权重 |\n|------|------|------|\n| RouteSegment | 路由段边界 | 3 |\n| ExplicitSuspense | 显式 Suspense 边界 | 2 |\n| Component | 普通组件 | 1 |\n\n资料来源：[cli/src/native/react/suspense.rs:1-50](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n\n## 可观测性仪表板\n\n### Dashboard 功能\n\nDashboard 提供了完整的浏览器状态可视化界面：\n\n```mermaid\ngraph TD\n    A[Dashboard] --> B[Extensions Panel]\n    A --> C[Network Panel]\n    A --> D[Snapshot Display]\n    A --> E[Step Indicators]\n    \n    B --> B1[Extension List]\n    B --> B2[Extension Details]\n    \n    C --> C1[Request List]\n    C --> C2[HAR Export]\n    C --> C3[Request Details]\n```\n\n### 面板功能\n\n| 面板 | 功能 |\n|------|------|\n| Extensions Panel | 列出已加载的 Chrome 扩展，显示描述和路径 |\n| Network Panel | 监控网络请求，支持 HAR 导出和请求详情查看 |\n| Snapshot Display | 展示无障碍树快照，支持步骤折叠展示 |\n| Step Indicators | 显示执行步骤的详细信息 |\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx)\n\n## 安装与配置\n\n### 安装命令\n\n```bash\n# 安装 agent-browser\nagent-browser install\n\n# Chrome 自动下载\n# 从 Chrome for Testing 直接获取\n```\n\n### 预导航设置\n\n支持在首次导航前进行环境配置：\n\n```bash\nagent-browser batch \\\n  '[\"open\"]' \\\n  '[\"network\",\"route\",\"*\",\"--abort\",\"--resource-type\",\"script\"]' \\\n  '[\"cookies\",\"set\",\"--curl\",\"cookies.curl\",\"--domain\",\"localhost\"]' \\\n  '[\"navigate\",\"http://localhost:3000/target\"]'\n```\n\n资料来源：[skill-data/core/references/commands.md:20-35](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/commands.md)\n\n## 测试体系\n\n### 测试类型\n\n| 测试类型 | 命令 | 说明 |\n|----------|------|------|\n| 单元测试 | `cd cli && cargo test` | 快速测试，约 320 个测试用例，无需 Chrome |\n| 端到端测试 | `cd cli && cargo test e2e -- --ignored --test-threads=1` | 18 个 e2e 测试，启动真实 Chrome 实例 |\n\n### 测试要求\n\n- Chrome 必须已安装\n- e2e 测试必须串行运行 (`--test-threads=1`) 以避免 Chrome 实例冲突\n\n资料来源：[AGENTS.md:52-62](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 发布流程\n\n### 发布自动化\n\nCI 系统在 PR 合并后自动执行以下操作：\n\n1. 比较 `package.json` 版本与 npm 版本\n2. 构建全部 7 个平台的二进制文件\n3. 发布到 npm\n4. 自动创建 GitHub Release\n\n### 版本同步\n\n```bash\npnpm version:sync\n```\n\n此命令会同步更新 `cli/Cargo.toml`、`cli/Cargo.lock` 和 `packages/dashboard/package.json` 中的版本号。\n\n资料来源：[AGENTS.md:15-35](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 使用场景\n\n### 探索性测试与 QA\n\n支持完整的操作录制和问题追踪：\n\n```bash\nagent-browser --session {SESSION} record start\n# 执行测试步骤\nagent-browser --session {SESSION} screenshot --annotate issue-{NNN}.png\nagent-browser --session {SESSION} record stop\n```\n\n### Slack 工作区自动化\n\n针对 Slack 的专业技能支持消息监控、反应追踪和搜索功能：\n\n```bash\nagent-browser snapshot --json > conversation.json\nagent-browser click @e_reaction_button\nagent-browser screenshot reactions.png\n```\n\n资料来源：[skill-data/dogfood/SKILL.md:50-70](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/dogfood/SKILL.md)\n\n## 技术栈总结\n\n```mermaid\ngraph TD\n    A[agent-browser] --> B[Rust Core]\n    A --> C[TypeScript Dashboard]\n    A --> D[React Components]\n    A --> E[Node.js CLI Wrapper]\n    \n    B --> F[CDP Protocol]\n    B --> G[Browser Automation]\n    B --> H[React DevTools]\n    \n    C --> I[shadcn/ui]\n    C --> J[Tailwind CSS]\n    \n    D --> K[Next.js]\n```\n\n| 层级 | 技术 | 位置 |\n|------|------|------|\n| 核心引擎 | Rust | `cli/src/native/` |\n| CLI 接口 | TypeScript | `cli/src/` |\n| 仪表板 | React + Next.js | `packages/dashboard/` |\n| UI 组件 | shadcn/ui | `packages/dashboard/src/components/` |\n| 样式 | Tailwind CSS | 项目全局 |\n\n---\n\n<a id='architecture-overview'></a>\n\n## 系统架构\n\n### 相关页面\n\n相关主题：[项目介绍](#introduction), [浏览器自动化核心](#browser-automation), [仪表板组件](#dashboard-components)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/Cargo.toml](https://github.com/vercel-labs/agent-browser/blob/main/cli/Cargo.toml)\n- [cli/src/main.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/main.rs)\n- [cli/src/native/mod.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/mod.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/native/interaction.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/interaction.rs)\n- [cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n- [packages/dashboard/src/components/chat-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/chat-panel.tsx)\n- [packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx)\n- [packages/dashboard/src/components/network-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/network-panel.tsx)\n- [packages/dashboard/src/components/console-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/console-panel.tsx)\n- [AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n</details>\n\n# 系统架构\n\n## 概述\n\nagent-browser 是一个基于 Rust 的浏览器自动化工具，通过命令行界面和可视化仪表盘提供对浏览器的远程控制能力。该项目采用客户端-守护进程架构，支持 Chrome 和 Lightpanda 两种渲染引擎，并提供丰富的交互 API 用于网页自动化任务。\n\n架构的核心设计理念是将浏览器控制逻辑封装在 Rust 原生守护进程中，通过 CLI 命令或 Web 仪表盘与之通信，实现高效、可扩展的浏览器自动化解决方案。\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 整体架构\n\nagent-browser 采用分层架构设计，主要分为以下几个层次：\n\n| 层次 | 技术栈 | 职责 |\n|------|--------|------|\n| CLI 层 | Rust | 命令行入口，解析用户命令并转发至守护进程 |\n| 守护进程层 | Rust | 浏览器实例管理、CDP 通信、状态维护 |\n| 渲染引擎层 | Chrome/Lightpanda | 实际页面渲染和执行 |\n| 仪表盘层 | React/Next.js | 可视化控制界面和结果展示 |\n| 技能数据层 | Markdown | 领域特定的操作指南和参考文档 |\n\n资料来源：[cli/src/main.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/main.rs)\n\n### 核心模块划分\n\n```mermaid\ngraph TD\n    A[CLI 命令行] --> B[命令分发器]\n    B --> C[Native 守护进程]\n    C --> D[浏览器引擎]\n    C --> E[CDP 客户端]\n    C --> F[状态管理]\n    \n    G[Web 仪表盘] --> H[WebSocket/HTTP]\n    H --> C\n    \n    D --> I[快照系统]\n    D --> J[交互系统]\n    D --> K[React 检查]\n    \n    style A fill:#e1f5fe\n    style G fill:#fff3e0\n    style D fill:#f3e5f5\n```\n\n---\n\n## 守护进程架构\n\n守护进程（Daemon）是系统的核心组件，负责管理浏览器生命周期和执行各种自动化操作。\n\n### 核心子模块\n\n| 模块 | 文件路径 | 功能描述 |\n|------|----------|----------|\n| daemon | cli/src/native/mod.rs | 主进程管理和命令路由 |\n| actions | cli/src/native/actions.rs | 具体操作实现（点击、滚动、截图等）|\n| interaction | cli/src/native/interaction.rs | 键盘和鼠标交互处理 |\n| browser | cli/src/native/ | 浏览器实例管理 |\n| CDP client | cli/src/native/ | Chrome DevTools Protocol 通信 |\n| snapshot | cli/src/native/ | 页面快照生成 |\n| state | cli/src/native/ | 会话状态维护 |\n\n资料来源：[cli/src/native/mod.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/mod.rs)\n\n### 命令处理流程\n\n守护进程接收命令后，通过分发器（Dispatcher）将请求路由到对应的处理函数：\n\n```mermaid\ngraph LR\n    A[输入命令] --> B[命令解析]\n    B --> C{命令类型判断}\n    C -->|点击| D[handle_tap]\n    C -->|滚动| E[handle_scroll]\n    C -->|截图| F[handle_screenshot]\n    C -->|快照| G[handle_snapshot]\n    C -->|输入| H[handle_setvalue]\n    C -->|键盘| I[handle_key]\n    D --> J[执行结果]\n    E --> J\n    F --> J\n    G --> J\n    H --> J\n    I --> J\n```\n\n支持的命令类型包括：\n\n- **导航命令**: open, close, goto, back, forward, reload\n- **交互命令**: click, tap, scroll, hover, drag, mouse, press, type\n- **查询命令**: snapshot, screenshot, get, find, count, styles, innertext, innerhtml\n- **设置命令**: set, viewport, device, timezone, locale, geolocation, permissions\n- **网络命令**: network, cookies, storage, har\n- **扩展命令**: addscript, addinitscript, removeinitscript, addstyle\n- **React 检查**: react_tree, react_inspect, react_renders_start\n\n资料来源：[cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n---\n\n## 交互系统\n\n交互模块负责处理用户与浏览器页面的所有交互操作，包括鼠标、键盘和各种输入设备。\n\n### 键盘映射\n\n交互系统维护了完整的键盘映射表，支持标准键位和虚拟键码：\n\n```mermaid\ngraph TD\n    A[按键输入] --> B{按键类型}\n    B -->|功能键| C[特殊处理]\n    B -->|方向键| D[Arrow映射]\n    B -->|普通键| E[字符转换]\n    \n    C --> F[返回 key, code, keyCode]\n    D --> F\n    E --> G[char_to_key_info]\n    G --> F\n```\n\n支持的键位映射：\n\n| 输入 | 键名 | 键码 |\n|------|------|------|\n| arrowup, up | ArrowUp | 38 |\n| arrowdown, down | ArrowDown | 40 |\n| arrowleft, left | ArrowLeft | 37 |\n| arrowright, right | ArrowRight | 39 |\n| home | Home | 36 |\n| end | End | 35 |\n| pageup | PageUp | 33 |\n| pagedown | PageDown | 34 |\n| space, 空格 | Space | 32 |\n\n资料来源：[cli/src/native/interaction.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/interaction.rs)\n\n### 鼠标操作\n\n鼠标操作支持以下子命令：\n\n| 操作 | 说明 |\n|------|------|\n| move \\<x\\> \\<y\\> | 移动鼠标到指定坐标 |\n| down [btn] | 按下鼠标按钮 |\n| up [btn] | 释放鼠标按钮 |\n| wheel \\<dy\\> [dx] | 滚动鼠标滚轮 |\n\n---\n\n## 快照与元素引用系统\n\n快照系统是 agent-browser 的核心功能之一，用于获取页面当前状态并生成可引用元素标识符。\n\n### 快照格式\n\n快照输出包含元素引用（ref）和关键属性：\n\n```\n@e1 [button] \"Submit\"                    # 按钮元素\n@e2 [input type=\"email\"]                 # 输入框\n@e3 [div class=\"container\"] \"内容文本\"    # 容器元素\n```\n\n引用格式说明：\n\n```\n@e1 [tag type=\"value\"] \"text content\" placeholder=\"hint\"\n│    │   │             │               │\n│    │   │             │               └── 额外属性\n│    │   │             └── 可见文本内容\n│    │   └── 关键属性\n│    └── HTML 标签名\n└── 唯一引用 ID\n```\n\n### 元素定位方式\n\n| 定位器 | 说明 | 示例 |\n|--------|------|------|\n| role | ARIA 角色 | role=button |\n| text | 文本内容 | text=\"Submit\" |\n| label | 表单标签 | label=\"用户名\" |\n| placeholder | 占位符 | placeholder=\"输入...\" |\n| alt | 图片替代文本 | alt=\"描述\" |\n| title | 标题属性 | title=\"提示\" |\n| testid | 测试 ID | testid=\"btn-submit\" |\n| first/last/nth | 位置选择 | first, last, nth=2 |\n\n最佳实践：\n\n```bash\n# 正确流程\nagent-browser open https://example.com\nagent-browser snapshot -i          # 获取引用\nagent-browser click @e1            # 使用引用\n\n# 错误流程\nagent-browser open https://example.com\nagent-browser click @e1            # 引用不存在！\n```\n\n资料来源：[skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n\n---\n\n## React 检查系统\n\nagent-browser 提供了专门的 React 应用分析功能，包括 Suspense 边界检测和组件树分析。\n\n### 阻塞器类型与权重\n\n| 阻塞器类型 | 权重 | 可操作性 |\n|------------|------|----------|\n| ClientHook | 7 | 90% |\n| RequestApi | 6 | 88% |\n| ServerFetch | 5 | 82% |\n| Cache | 4 | 74% |\n| Stream | 3 | 60% |\n| Unknown | 2 | 35% |\n| Framework | 1 | 18% |\n\n权重值越高表示该阻塞器对用户体验的影响越大，可操作性分数表示该类型阻塞被用户交互绕过的可能性。\n\n### 边界类型\n\n| 边界类型 | 权重 | 说明 |\n|----------|------|------|\n| RouteSegment | 3 | 路由段级别的 Suspense |\n| ExplicitSuspense | 2 | 显式声明的 Suspense 边界 |\n| Component | 1 | 组件级别的 Suspense |\n\n资料来源：[cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n\n---\n\n## Web 仪表盘架构\n\n仪表盘是可视化控制界面，使用 Next.js 构建，提供图形化的浏览器控制能力。\n\n### 组件结构\n\n```mermaid\ngraph TD\n    A[Dashboard Root] --> B[控制面板]\n    A --> C[结果展示区]\n    A --> D[侧边栏]\n    \n    B --> E[ExtensionsPanel]\n    B --> F[ControlsForm]\n    \n    C --> G[ChatPanel]\n    C --> H[ConsolePanel]\n    C --> I[NetworkPanel]\n    \n    D --> J[ResizablePanels]\n    D --> K[Header]\n```\n\n### 核心组件\n\n| 组件 | 功能 | 文件 |\n|------|------|------|\n| ChatPanel | 消息和工具调用展示 | chat-panel.tsx |\n| ConsolePanel | JavaScript 控制台输出 | console-panel.tsx |\n| NetworkPanel | 网络请求监控和 HAR 导出 | network-panel.tsx |\n| ExtensionsPanel | Chrome 扩展管理 | extensions-panel.tsx |\n| ConsolePanel | 控制台消息格式化 | console-panel.tsx |\n\n#### 控制台面板功能\n\n控制台面板支持表达式求值和结果展示：\n\n- 语法高亮显示（紫色表示输入，绿色表示输出）\n- 错误消息红色高亮\n- 时间戳记录\n- 加载状态动画\n\n#### 网络面板功能\n\n| 功能 | 说明 |\n|------|------|\n| 请求列表 | 显示所有捕获的网络请求 |\n| 请求详情 | 展开查看请求头、响应体等 |\n| HAR 导出 | 保存网络会话为 HAR 文件 |\n| 过滤功能 | 按 URL 模式过滤请求 |\n\n资料来源：[packages/dashboard/src/components/console-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/console-panel.tsx)\n\n---\n\n## 引擎系统\n\nagent-browser 支持多种浏览器引擎，通过 `--engine` 参数选择。\n\n### 支持的引擎\n\n| 引擎 | 说明 |\n|------|------|\n| chrome | Chrome 浏览器的完整实现 |\n| lightpanda | 轻量级替代方案 |\n\n引擎安装通过 `install` 命令自动下载 Chrome from Chrome for Testing。\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 标志与配置系统\n\nCLI 工具支持丰富的命令行参数配置。\n\n### 常用标志\n\n| 标志 | 说明 |\n|------|------|\n| --annotate | 启用截图注释功能 |\n| --color-scheme | 设置颜色方案（dark/light）|\n| --download-path | 设置下载文件保存路径 |\n| --content-boundaries | 显示内容边界 |\n| --max-output | 最大输出大小限制 |\n| --allowed-domains | 允许访问的域名列表 |\n| --action-policy | 操作策略配置 |\n\n配置解析采用手动参数解析方式，按顺序处理 args 数组：\n\n```rust\n\"--annotate\" => {\n    let (val, consumed) = parse_bool_arg(args, i);\n    flags.annotate = val;\n    flags.cli_annotate = true;\n    if consumed {\n        i += 1;\n    }\n}\n```\n\n资料来源：[cli/src/flags.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/flags.rs)\n\n---\n\n## 会话管理\n\nagent-browser 支持会话管理，允许用户在不同会话间切换和恢复状态。\n\n### 会话相关命令\n\n```bash\n# 连接到指定会话\nagent-browser --session {SESSION} connect 9222\n\n# 关闭会话\nagent-browser --session {SESSION} close\n\n# 录制操作\nagent-browser --session {SESSION} record start\nagent-browser --session {SESSION} record stop\n```\n\n会话持久化机制允许：\n\n- 保存和恢复浏览器状态\n- 跨会话追踪问题\n- 批量复现和调试\n\n---\n\n## 网络与存储管理\n\n### 网络监控\n\n支持完整的网络请求监控和操作：\n\n| 操作 | 说明 |\n|------|------|\n| route | 路由匹配和拦截 |\n| unroute | 取消路由规则 |\n| requests | 查看请求列表 |\n| har | 导出 HAR 文件 |\n\n### Cookie 管理\n\n```bash\n# 获取 Cookie\nagent-browser cookies get\n\n# 设置 Cookie\nagent-browser cookies set --url https://example.com --name key --value val\n\n# 清除 Cookie\nagent-browser cookies clear\n\n# 从文件导入\nagent-browser cookies set --curl cookie.txt --domain example.com\n```\n\n### 存储管理\n\n支持 Web Storage API：\n\n| 存储类型 | 说明 |\n|----------|------|\n| local | localStorage |\n| session | sessionStorage |\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## 技能数据系统\n\nagent-browser 使用 Markdown 格式的技能数据（Skill Data）来定义特定领域的工作流程和参考文档。\n\n### 技能数据组织\n\n```\nskill-data/\n├── core/              # 核心通用技能\n│   └── references/    # 参考文档\n├── slack/             # Slack 特定技能\n│   ├── references/\n│   └── SKILL.md\n└── dogfood/           # 测试用技能\n```\n\n### 技能文档结构\n\n每个技能文档通常包含：\n\n1. **目标描述** - 明确要完成的任务\n2. **操作步骤** - 具体的命令序列\n3. **参考文档** - 元素定位和属性说明\n4. **最佳实践** - 推荐的工作流程\n\n---\n\n## 测试架构\n\n### 单元测试\n\n```bash\ncd cli && cargo test\n```\n\n- 运行所有单元测试（约 320 个）\n- 测试速度快，无需启动 Chrome\n- 覆盖核心业务逻辑\n\n### 端到端测试\n\n```bash\ncd cli && cargo test e2e -- --ignored --test-threads=1\n```\n\n- 18 个 E2E 测试用例\n- 启动真实 headless Chrome 实例\n- 测试完整命令管道\n- 要求串行执行避免实例冲突\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 发布流程架构\n\n项目使用手动发布模式，流程如下：\n\n```mermaid\ngraph TD\n    A[创建发布分支] --> B[更新版本号]\n    B --> C[运行版本同步]\n    C --> D[编写更新日志]\n    D --> E[创建 PR]\n    E --> F{合并到 main}\n    F -->|是| G[CI 检测版本差异]\n    F -->|否| H[等待合并]\n    G -->|需要发布| I[构建 7 平台二进制]\n    G -->|无需发布| J[跳过构建]\n    I --> K[发布到 npm]\n    K --> L[创建 GitHub Release]\n```\n\n版本同步命令：`pnpm version:sync` 自动更新：\n\n- cli/Cargo.toml\n- cli/Cargo.lock\n- packages/dashboard/package.json\n\n---\n\n## 技术栈总结\n\n| 层级 | 技术选型 | 版本管理 |\n|------|----------|----------|\n| CLI 核心 | Rust | Cargo |\n| 浏览器自动化 | CDP (Chrome DevTools Protocol) | - |\n| 仪表盘前端 | Next.js + React + TypeScript | pnpm |\n| UI 组件 | shadcn/ui + Tailwind CSS | - |\n| 构建工具 | Vite (仪表盘) | - |\n| 包管理 | pnpm workspace | - |\n\n---\n\n<a id='cli-commands'></a>\n\n## CLI 命令参考\n\n### 相关页面\n\n相关主题：[浏览器自动化核心](#browser-automation), [安装与构建](#installation-build)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/commands.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/commands.rs)\n- [cli/src/flags.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/flags.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n- [skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n</details>\n\n# CLI 命令参考\n\n## 概述\n\n`agent-browser` 是一个基于 Rust 原生构建的浏览器自动化 CLI 工具，为 AI 代理（Cursor、Claude Code、Codex、Continue、Windsurf 等）提供浏览器控制能力。CLI 命令参考涵盖了所有可通过命令行执行的原子操作，包括元素交互、状态查询、浏览器设置、网络控制等功能模块。\n\n该工具通过 Chrome DevTools Protocol (CDP) 实现浏览器控制，不依赖 Playwright 或 Puppeteer，执行效率高且资源占用低。 资料来源：[skills/agent-browser/SKILL.md]()\n\n## 命令架构\n\nCLI 命令采用统一的解析-分发架构，将用户输入转换为对应的原生处理器执行。\n\n```mermaid\ngraph TD\n    A[CLI 输入] --> B[commands.rs 命令解析]\n    B --> C{命令类型}\n    C -->|定位命令| D[find 命令解析]\n    C -->|动作命令| E[actions.rs 动作分发]\n    C -->|设置命令| F[flags.rs 标志处理]\n    \n    D --> G[role/text/label/placeholder/alt/title/testid/first/last]\n    E --> H[click/tap/fill/type/highlight 等]\n    F --> I[--annotate/--color-scheme/--download-path 等]\n    \n    G --> J[原生 CDP 调用]\n    H --> J\n    I --> J\n```\n\n## 核心命令分类\n\n### 元素定位命令\n\n元素定位命令用于通过多种策略查找 DOM 元素，并可指定后续操作。\n\n| 定位器 | 命令格式 | 说明 |\n|--------|----------|------|\n| role | `find role <role> [action] [--name <name>] [--exact]` | 通过 ARIA 角色定位 |\n| text | `find text <text> [action] [--exact]` | 通过可见文本定位 |\n| label | `find label <label> [action] [text] [--exact]` | 通过标签文本定位 |\n| placeholder | `find placeholder <text> [action] [text] [--exact]` | 通过占位符文本定位 |\n| alt | `find alt <text> [action] [--exact]` | 通过 alt 属性定位 |\n| title | `find title <text> [action] [--exact]` | 通过 title 属性定位 |\n| testid | `find testid <id> [action] [text]` | 通过测试 ID 定位 |\n| first | `find first <selector> [action] [text]` | 定位第一个匹配元素 |\n| last | `find last <selector> [action] [text]` | 定位最后一个匹配元素 |\n\n**默认操作**：若未指定操作，默认为 `click`。 资料来源：[cli/src/commands.rs:位置 1]()\n\n### 元素交互命令\n\n交互命令通过 `actions.rs` 中的处理器执行具体浏览器操作。\n\n| 命令 | 功能 | 处理器函数 |\n|------|------|------------|\n| `click` | 点击元素 | handle_dispatch |\n| `highlight` | 高亮显示元素 | handle_highlight |\n| `tap` | 移动端点击 | handle_tap |\n| `fill` | 填充输入框 | handle_setvalue |\n| `type` | 模拟键盘输入 | handle_setvalue |\n| `boundingbox` | 获取元素边界框 | handle_boundingbox |\n| `innertext` | 获取元素文本 | handle_innertext |\n| `innerhtml` | 获取元素 HTML | handle_innerhtml |\n| `inputvalue` | 获取输入值 | handle_inputvalue |\n| `setvalue` | 设置输入值 | handle_setvalue |\n| `count` | 统计匹配元素数量 | handle_count |\n| `styles` | 获取元素样式 | handle_styles |\n| `select` | 选择下拉选项 | handle_select |\n| `check` | 勾选复选框 | handle_check |\n| `uncheck` | 取消勾选 | handle_uncheck |\n\n资料来源：[cli/src/native/actions.rs:1-20]()\n\n### 状态查询命令\n\n用于检查元素的各种状态属性。\n\n| 命令 | 返回值 | 说明 |\n|------|--------|------|\n| `visible` | true/false | 元素是否可见 |\n| `enabled` | true/false | 元素是否启用 |\n| `checked` | true/false | 复选框/单选框是否选中 |\n| `isvisible` | true/false | 显式可见性检查 |\n| `isenabled` | true/false | 显式启用状态检查 |\n| `ischecked` | true/false | 显式选中状态检查 |\n| `gettext` | 文本内容 | 获取元素文本 |\n| `getattribute` | 属性值 | 获取元素属性 |\n\n使用格式：`agent-browser is <what> <selector>` 资料来源：[cli/src/output.rs]()\n\n### 浏览器导航命令\n\n| 命令 | 功能 |\n|------|------|\n| `back` | 后退一页 |\n| `forward` | 前进一页 |\n| `reload` | 刷新当前页面 |\n| `open <url>` | 打开指定 URL |\n\n### 快照与引用系统\n\n快照命令生成可访问性树，包含元素引用（ref）用于后续交互。\n\n```bash\nagent-browser snapshot -i          # 生成带引用的快照\nagent-browser snapshot @e5         # 快照特定区域\nagent-browser snapshot --json      # 输出 JSON 格式\n```\n\n**引用格式说明**：\n\n```\n@e1 [tag type=\"value\"] \"text content\" placeholder=\"hint\"\n│    │   │             │               │\n│    │   │             │               └─ 额外属性\n│    │   │             └─ 可见文本\n│    │   └─ 关键属性\n│    └─ HTML 标签名\n└─ 唯一引用 ID\n```\n\n**常见模式示例**：\n\n| 引用 | 格式 | 说明 |\n|------|------|------|\n| @e1 | `[button] \"Submit\"` | 带文本的按钮 |\n| @e2 | `[input type=\"email\"]` | 邮箱输入框 |\n| @e3 | `[input type=\"password\"]` | 密码输入框 |\n| @e4 | `[a href=\"/page\"] \"Link Text\"` | 链接 |\n| @e5 | `[select]` | 下拉选择框 |\n\n资料来源：[skill-data/core/references/snapshot-refs.md]()\n\n### 元素查找命令\n\n查找命令用于定位元素并执行操作：\n\n```bash\nagent-browser find <locator> <value> <action> [text]\n```\n\n**参数说明**：\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| locator | string | 是 | 定位策略 (role/text/label/...) |\n| value | string | 是 | 定位值 |\n| action | string | 否 | 执行的操作，默认 click |\n| text | string | 否 | 额外文本匹配 |\n\n**可选参数**：\n\n| 参数 | 说明 |\n|------|------|\n| `--exact` | 精确匹配文本 |\n| `--name <name>` | 按名称过滤 (role 定位器) |\n\n资料来源：[cli/src/commands.rs:位置 1]()\n\n### 鼠标操作命令\n\n```bash\nagent-browser mouse <action> [args]\n```\n\n| 操作 | 参数 | 说明 |\n|------|------|------|\n| `move` | `<x> <y>` | 移动到坐标 |\n| `down` | `[btn]` | 鼠标按下 |\n| `up` | `[btn]` | 鼠标释放 |\n| `wheel` | `<dy> [dx]` | 滚动 |\n\n### 浏览器设置命令\n\n```bash\nagent-browser set <setting> [value]\n```\n\n| 设置项 | 值格式 | 说明 |\n|--------|--------|------|\n| `viewport` | `<w> <h>` | 设置视口大小 |\n| `device` | `<name>` | 设置设备模拟 |\n| `geo` | `<lat> <lng>` | 设置地理坐标 |\n| `offline` | `on\\|off` | 离线模式 |\n| `headers` | `<json>` | 设置请求头 |\n| `credentials` | `<user> <pass>` | 设置认证凭证 |\n| `media` | `[dark\\|light] [reduced-motion]` | 媒体偏好 |\n\n### 网络控制命令\n\n```bash\nagent-browser network <action>\n```\n\n| 操作 | 参数 | 说明 |\n|------|------|------|\n| `route` | `<url> [--abort\\|--body <json>] [--resource-type <csv>]` | 拦截请求 |\n| `unroute` | `[url]` | 取消拦截 |\n| `requests` | `[--clear] [--filter <pattern>]` | 查看请求 |\n| `har` | `<start\\|stop> [path]` | HAR 记录 |\n\n### Cookie 与存储命令\n\n| 命令 | 说明 |\n|------|------|\n| `cookies get` | 获取所有 cookie |\n| `cookies set` | 设置 cookie |\n| `cookies clear` | 清除所有 cookie |\n| `storage local` | 管理 localStorage |\n| `storage session` | 管理 sessionStorage |\n\n**cookies set 选项**：\n\n| 选项 | 说明 |\n|------|------|\n| `--url` | 指定 URL |\n| `--domain` | 指定域名 |\n| `--path` | 指定路径 |\n| `--httpOnly` | HTTP Only 标志 |\n| `--secure` | Secure 标志 |\n| `--sameSite` | SameSite 策略 |\n| `--expires` | 过期时间 |\n| `--curl <file>` | 从文件导入 (支持 JSON/cURL/Cookie 头) |\n\n### 标签页管理命令\n\n```bash\nagent-browser tab [new|list|close|<n>]\n```\n\n| 操作 | 说明 |\n|------|------|\n| `new` | 新建标签页 |\n| `list` | 列出所有标签页 |\n| `close` | 关闭当前标签页 |\n| `<n>` | 切换到指定编号标签页 |\n\n### 差异对比命令\n\n```bash\nagent-browser diff snapshot       # 比较当前与上次快照\nagent-browser diff screenshot     # 与基线截图对比\n```\n\n### 截图命令\n\n```bash\nagent-browser screenshot [path] [--annotate]\n```\n\n| 选项 | 说明 |\n|------|------|\n| path | 保存路径 |\n| `--annotate` | 添加元素标注 |\n\n## CLI 标志配置\n\n标志在程序启动时解析，影响全局行为。\n\n| 标志 | 说明 | 来源文件 |\n|------|------|----------|\n| `--annotate` | 启用截图标注 | cli/src/flags.rs |\n| `--color-scheme` | 颜色方案 (dark/light) | cli/src/flags.rs |\n| `--download-path` | 下载保存路径 | cli/src/flags.rs |\n| `--content-boundaries` | 内容边界检测 | cli/src/flags.rs |\n| `--max-output` | 最大输出大小 | cli/src/flags.rs |\n| `--allowed-domains` | 允许的域名列表 | cli/src/flags.rs |\n| `--action-policy` | 操作策略配置 | cli/src/flags.rs |\n\n**示例**：\n\n```bash\nagent-browser --annotate --download-path ./downloads open https://example.com\nagent-browser --color-scheme dark --allowed-domains \"example.com,api.example.com\"\n```\n\n## 特殊上下文命令\n\n以下命令用于特定上下文环境：\n\n| 命令 | 处理器 | 功能 |\n|------|--------|------|\n| `timezone` | handle_timezone | 设置时区 |\n| `locale` | handle_locale | 设置地区 |\n| `geolocation` | handle_geolocation | 设置地理位置 |\n| `permissions` | handle_permissions | 管理权限 |\n| `dialog` | handle_dialog | 处理对话框 |\n| `upload` | handle_upload | 文件上传 |\n| `addscript` | handle_addscript | 注入脚本 |\n| `addinitscript` | handle_addinitscript | 注入初始化脚本 |\n| `removeinitscript` | handle_removeinitscript | 移除初始化脚本 |\n| `addstyle` | handle_addstyle | 注入样式 |\n| `react_tree` | handle_react_tree | React 组件树 |\n| `react_inspect` | handle_react_inspect | React 检查器 |\n| `react_renders_start` | handle_react_renders_start | 渲染监控开始 |\n| `console` | handle_console | 控制台操作 |\n| `errors` | handle_errors | 页面错误 |\n| `state_save` | handle_state_save | 保存状态 |\n| `state_load` | handle_state_load | 加载状态 |\n| `state_list` | handle_state_list | 列出状态 |\n\n资料来源：[cli/src/native/actions.rs:20-45]()\n\n## 等待命令\n\n```bash\nagent-browser wait [options]\n```\n\n| 选项 | 说明 |\n|------|------|\n| `<ms>` | 等待毫秒数 |\n| `--load <strategy>` | 等待加载策略 (domcontentloaded/load/networkidle) |\n\n## 使用模式与最佳实践\n\n### 基本交互流程\n\n```mermaid\ngraph LR\n    A[open URL] --> B[snapshot 获取引用]\n    B --> C[find 定位元素]\n    C --> D[click/tap/fill 执行操作]\n    D --> E[验证结果]\n```\n\n### 推荐模式\n\n1. **先快照再交互**：始终在交互前获取元素引用\n2. **导航后重新快照**：页面跳转后需重新获取引用\n3. **动态内容重新快照**：DOM 变化后重新获取引用\n\n```bash\n# 正确顺序\nagent-browser open https://example.com\nagent-browser snapshot -i\nagent-browser click @e1\n\n# 错误顺序\nagent-browser open https://example.com\nagent-browser click @e1  # 引用不存在！\n```\n\n资料来源：[skill-data/core/references/snapshot-refs.md]()\n\n## 输出格式\n\nCLI 支持多种输出格式：\n\n| 格式 | 命令选项 | 适用场景 |\n|------|----------|----------|\n| 文本树 | 默认 | 快速查看页面结构 |\n| JSON | `--json` | 程序化解析 |\n| 截图 | `screenshot` | 可视化验证 |\n| 带标注截图 | `screenshot --annotate` | 元素定位调试 |\n\n## 错误处理\n\n错误响应格式：\n\n```json\n{\n  \"ok\": false,\n  \"error\": \"错误描述\"\n}\n```\n\n常用错误处理：\n\n```bash\n# 检查元素可见性后再操作\nagent-browser is visible @e1\n# 然后根据结果决定是否操作\n\n# 等待元素出现\nagent-browser wait 500\nagent-browser snapshot -i\n\n---\n\n<a id='browser-automation'></a>\n\n## 浏览器自动化核心\n\n### 相关页面\n\n相关主题：[CLI 命令参考](#cli-commands), [React 组件审查](#react-introspection), [网络监控与拦截](#network-monitoring)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/cdp/client.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/cdp/client.rs)\n- [cli/src/native/cdp/chrome.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/cdp/chrome.rs)\n- [cli/src/native/element.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/element.rs)\n- [cli/src/native/screenshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/screenshot.rs)\n- [cli/src/native/snapshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/snapshot.rs)\n- [cli/src/native/diff.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/diff.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n</details>\n\n# 浏览器自动化核心\n\n## 概述\n\n浏览器自动化核心是 `agent-browser` 项目的底层引擎，负责通过 Chrome DevTools Protocol (CDP) 实现对 Chromium 内核浏览器的远程控制。该模块完全使用 Rust 实现，提供高性能的原生浏览器自动化能力，无需依赖 Node.js、Playwright 或 Puppeteer 等外部工具。\n\n核心职责包括：\n\n- 建立与 Chrome/Chromium 实例的 CDP 连接\n- 执行 DOM 元素查询与操作\n- 捕获页面快照和屏幕截图\n- 管理浏览器状态和网络条件\n- 处理用户交互事件（鼠标、键盘、触摸）\n\n```mermaid\ngraph TD\n    A[CLI 命令] --> B[Command Dispatcher]\n    B --> C[State Manager]\n    C --> D[CDP Client]\n    D --> E[Chrome Instance]\n    E --> D\n    D --> C\n    C --> F[Response Formatter]\n    F --> A\n```\n\n## 架构分层\n\n| 层级 | 模块 | 职责 |\n|------|------|------|\n| 命令接口层 | `actions.rs` | 解析和分发用户命令 |\n| 状态管理层 | State | 维护浏览器会话状态、元素引用 |\n| 协议通信层 | `cdp/client.rs` | CDP WebSocket 通信 |\n| 浏览器连接层 | `cdp/chrome.rs` | Chrome 实例连接管理 |\n| 功能实现层 | `element.rs`, `snapshot.rs`, `screenshot.rs`, `diff.rs` | 具体功能实现 |\n\n## CDP 客户端架构\n\n### 连接管理\n\nCDP 客户端模块负责维护与 Chrome 实例的长连接。通过 Chrome 启动时获取的调试端口，建立 WebSocket 连接。\n\n主要连接流程：\n\n```mermaid\nsequenceDiagram\n    participant CLI\n    participant CDP as CDP Client\n    participant Chrome as Chrome Instance\n    \n    CLI->>Chrome: Launch with debug port\n    Chrome-->>CLI: Return WebSocket URL\n    CLI->>CDP: Connect(WebSocket URL)\n    CDP->>Chrome: WebSocket Handshake\n    Note over CDP,Chrome: CDP Session Established\n    CLI->>CDP: Send Command\n    CDP->>Chrome: CDP Request\n    Chrome-->>CDP: CDP Response\n    CDP-->>CLI: Parsed Result\n```\n\n### 消息协议\n\nCDP 通信采用 JSON-RPC 2.0 格式，每条消息包含：\n\n```json\n{\n  \"id\": 1,\n  \"method\": \"DOM.getDocument\",\n  \"params\": {}\n}\n```\n\n响应消息结构：\n\n```json\n{\n  \"id\": 1,\n  \"result\": { ... }\n}\n```\n\n## 元素系统\n\n### 元素引用机制\n\n元素系统通过可读的引用 ID（如 `@e1`, `@e2`）来标识 DOM 元素，相比于 XPath 或 CSS 选择器更加稳定和人类可读。\n\n资料来源：[cli/src/native/element.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/element.rs)\n\n### 元素操作命令\n\n| 命令 | 功能 | 参数示例 |\n|------|------|----------|\n| `click` | 点击元素 | `@e1`, `--new-tab` |\n| `fill` | 填充输入框 | `@e1 \"text\"` |\n| `type` | 模拟打字 | `@e1 \"text\"` |\n| `hover` | 鼠标悬停 | `@e1` |\n| `focus` | 聚焦元素 | `@e1` |\n| `blur` | 失焦元素 | `@e1` |\n| `scroll` | 滚动操作 | `down 500`, `up 200` |\n\n### 元素属性获取\n\n```bash\nagent-browser get text @e1           # 获取可见文本\nagent-browser get html @e1           # 获取 innerHTML\nagent-browser get attr @e1 href      # 获取属性值\nagent-browser get value @e1          # 获取输入值\nagent-browser get title              # 获取页面标题\nagent-browser get url                # 获取当前 URL\nagent-browser get count \".item\"      # 统计匹配元素\nagent-browser get box @e1            # 获取边界框\nagent-browser get styles @e1         # 获取计算样式\n```\n\n## 快照系统\n\n### 无障碍树快照\n\n快照系统生成页面的可访问性树视图，包含元素引用 ID、标签类型和关键属性。\n\n资料来源：[cli/src/native/snapshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/snapshot.rs)\n\n### 快照命令选项\n\n| 选项 | 描述 |\n|------|------|\n| `-i` | 仅交互元素（推荐默认选项） |\n| `-u` | 在链接上包含 href URL |\n| `-c` | 紧凑模式（无空结构节点） |\n| `-d <n>` | 限制深度为 n 层 |\n| `-s \"<selector>\"` | 限定作用域为 CSS 选择器 |\n| `--json` | 机器可读的 JSON 输出 |\n\n### 快照输出示例\n\n```\nPage: Example - Log in\nURL: https://example.com/login\n\n@e1 [heading] \"Log in\"\n@e2 [form]\n  @e3 [input type=\"email\"] placeholder=\"Email\"\n  @e4 [input type=\"password\"] placeholder=\"Password\"\n  @e5 [button type=\"submit\"] \"Continue\"\n  @e6 [link] \"Forgot password?\"\n```\n\n### Iframe 处理\n\n快照自动检测并内联 iframe 内容。当捕获主框架快照时，每个 Iframe 节点会被解析，其子可访问性树直接包含在输出中。iframe 内部元素的引用携带框架上下文，交互命令可以直接使用，无需手动切换框架。\n\n```bash\nagent-browser snapshot -i\n# @e1 [heading] \"Checkout\"\n# @e2 [Iframe] \"payment-frame\"\n#   @e3 [input] \"Card number\"\n#   @e4 [input] \"Expiry\"\n#   @e5 [button] \"Pay\"\n# @e6 [button] \"Cancel\"\n```\n\n## 截图系统\n\n### 截图命令\n\n资料来源：[cli/src/native/screenshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/screenshot.rs)\n\n```bash\nagent-browser screenshot                    # 保存到临时目录\nagent-browser screenshot path.png           # 保存到指定路径\nagent-browser screenshot --full             # 整页截图\nagent-browser screenshot --annotate         # 带元素标注的截图\nagent-browser pdf output.pdf                # 导出为 PDF\n```\n\n### 截图格式\n\n截图以 Base64 编码的 PNG 格式传输和存储，在 UI 组件中渲染时使用：\n\n```tsx\n<img\n  src={`data:image/png;base64,${result.screenshot}`}\n  alt={result.title}\n  className=\"w-full block\"\n/>\n```\n\n资料来源：[examples/environments/app/page.tsx](https://github.com/vercel-labs/agent-browser/blob/main/examples/environments/app/page.tsx)\n\n## 差异比较系统\n\n### Diff 功能\n\n资料来源：[cli/src/native/diff.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/diff.rs)\n\n差异系统支持快照和截图的对比：\n\n```bash\nagent-browser diff snapshot              # 对比当前与上次快照\nagent-browser diff screenshot --baseline  # 对比截图与基线\n```\n\n### 快照差异示例\n\n```\n- @e1 [button] \"Submit\"\n+ @e1 [button] \"Loading...\"\n- @e2 [div class=\"content\"]\n+ @e2 [div class=\"content expanded\"]\n```\n\n## 状态检查系统\n\n### 元素状态查询\n\n| 命令 | 功能 |\n|------|------|\n| `agent-browser is visible @e1` | 检查元素是否可见 |\n| `agent-browser is enabled @e1` | 检查元素是否启用 |\n| `agent-browser is checked @e1` | 检查复选框/单选框选中状态 |\n\n## 高级交互\n\n### React 调试集成\n\n系统提供 React 专用的调试命令，用于 React 应用的高级分析：\n\n| 命令 | 功能 |\n|------|------|\n| `react_tree` | 获取 React 组件树 |\n| `react_inspect` | 检查组件属性 |\n| `react_renders_start` | 启动渲染计数 |\n| `react_renders_stop` | 停止渲染计数 |\n\n资料来源：[cli/src/native/actions.rs:60-62](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n### 鼠标控制\n\n```bash\nagent-browser mouse move 100 200      # 移动鼠标\nagent-browser mouse down left         # 鼠标按下\nagent-browser mouse up left           # 鼠标释放\nagent-browser mouse wheel 100 50      # 滚轮滚动\n```\n\n### 键盘控制\n\n```bash\nagent-browser press Enter             # 按下指定键\nagent-browser press \"Control+a\"       # 组合键\n```\n\n## 浏览器环境配置\n\n### 视口与设备模拟\n\n```bash\nagent-browser set viewport 1920 1080   # 设置视口尺寸\nagent-browser set device \"iPhone 14\"  # 模拟设备\n```\n\n###地理位置模拟\n\n```bash\nagent-browser set geo 37.7749 -122.4194  # 模拟经纬度\n```\n\n### 网络条件控制\n\n```bash\nagent-browser set offline on           # 离线模式\nagent-browser network route \"**\" --abort  # 中断所有请求\nagent-browser network unroute \"**\"     # 恢复请求\n```\n\n### Cookie 和存储管理\n\n```bash\nagent-browser cookies get              # 获取所有 Cookie\nagent-browser cookies set --url https://example.com --name key --value val\nagent-browser cookies clear\nagent-browser storage local           # 操作 localStorage\nagent-browser storage session          # 操作 sessionStorage\n```\n\n## 工作流程\n\n### 典型自动化流程\n\n```mermaid\ngraph TD\n    A[打开页面] --> B[获取快照]\n    B --> C{定位目标元素}\n    C -->|新页面| D[重新获取快照]\n    D --> C\n    C -->|定位成功| E[执行操作]\n    E --> F[等待加载]\n    F --> G[验证结果]\n    G -->|需要更多信息| B\n    G -->|完成| H[输出结果]\n```\n\n### 推荐实践\n\n1. **始终先快照再交互**：元素引用需要在当前页面状态下获取\n\n   ```bash\n   agent-browser open https://example.com\n   agent-browser snapshot -i          # 先获取引用\n   agent-browser click @e1            # 再执行操作\n   ```\n\n2. **导航后重新快照**：页面导航后必须重新获取元素引用\n\n   ```bash\n   agent-browser click @e5            # 导航到新页面\n   agent-browser snapshot -i          # 必须重新获取引用\n   agent-browser click @e1            # 使用新的引用\n   ```\n\n3. **动态内容后重新快照**：页面内容变化后需要更新引用\n\n   ```bash\n   agent-browser click @e1            # 打开下拉菜单\n   agent-browser snapshot -i          # 看到新出现的选项\n   agent-browser click @e7            # 选择菜单项\n   ```\n\n## 命令参考\n\n### 完整命令列表\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n| 类别 | 命令 | 说明 |\n|------|------|------|\n| 页面 | `open`, `goto`, `back`, `forward`, `reload`, `stop` | 导航控制 |\n| 快照 | `snapshot` | 获取可访问性树 |\n| 截图 | `screenshot`, `pdf` | 视觉捕获 |\n| 元素 | `click`, `fill`, `type`, `hover`, `focus`, `scroll` | 交互操作 |\n| 获取 | `get` | 属性和状态查询 |\n| 检查 | `is` | 状态验证 |\n| 查找 | `find` | 元素搜索 |\n| 鼠标 | `mouse` | 底层鼠标控制 |\n| 设置 | `set` | 浏览器配置 |\n| 网络 | `network` | 网络控制 |\n| 存储 | `cookies`, `storage` | 存储管理 |\n| 标签页 | `tab` | 多标签页控制 |\n| 差异 | `diff` | 对比功能 |\n\n## 扩展机制\n\n### Chrome 扩展集成\n\n系统支持 Chrome 扩展的检测和管理：\n\n```bash\nagent-browser extensions list          # 列出已安装扩展\nagent-browser extensions enable <id>   # 启用扩展\nagent-browser extensions disable <id>  # 禁用扩展\n```\n\n扩展信息在 UI 中展示为可折叠列表：\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx)\n\n每个扩展条目显示：\n\n- 扩展名称和图标\n- 描述信息\n- 文件路径\n- 启用/禁用状态\n\n## 底层动作处理\n\n### 命令分发机制\n\n所有命令通过统一的分发器处理：\n\n```rust\nmatch subcommand.as_str() {\n    \"dispatch\" => handle_dispatch(cmd, state).await,\n    \"highlight\" => handle_highlight(cmd, state).await,\n    \"tap\" => handle_tap(cmd, state).await,\n    \"boundingbox\" => handle_boundingbox(cmd, state).await,\n    \"innertext\" => handle_innertext(cmd, state).await,\n    \"innerhtml\" => handle_innerhtml(cmd, state).await,\n    \"inputvalue\" => handle_inputvalue(cmd, state).await,\n    \"setvalue\" => handle_setvalue(cmd, state).await,\n    \"count\" => handle_count(cmd, state).await,\n    \"styles\" => handle_styles(cmd, state).await,\n    \"bringtofront\" => handle_bringtofront(state).await,\n    \"timezone\" => handle_timezone(cmd, state).await,\n    \"locale\" => handle_locale(cmd, state).await,\n    \"geolocation\" => handle_geolocation(cmd, state).await,\n    \"permissions\" => handle_permissions(cmd, state).await,\n    \"dialog\" => handle_dialog(cmd, state).await,\n    \"upload\" => handle_upload(cmd, state).await,\n    // ... 更多处理器\n}\n```\n\n资料来源：[cli/src/native/actions.rs:30-55](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n### 状态持久化\n\n会话状态包括：\n\n- 当前浏览器连接\n- 元素引用缓存\n- 历史快照\n- 网络请求记录\n- 用户凭据保险库\n\n使用 `agent-browser close` 关闭会话，或 `agent-browser close --all` 关闭所有会话。\n\n---\n\n<a id='react-introspection'></a>\n\n## React 组件审查\n\n### 相关页面\n\n相关主题：[浏览器自动化核心](#browser-automation), [CLI 命令参考](#cli-commands)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/react/mod.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/mod.rs)\n- [cli/src/native/react/tree.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/tree.rs)\n- [cli/src/native/react/renders.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/renders.rs)\n- [cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n- [cli/src/native/react/vitals.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/vitals.rs)\n- [cli/src/native/react/installHook.js](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/installHook.js)\n- [skill-data/core/references/commands.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/commands.md)\n</details>\n\n# React 组件审查\n\n## 概述\n\nReact 组件审查是 agent-browser 提供的一套完整的 React 运行时 introspection（运行时自检）功能。该功能基于 React DevTools 协议，允许开发者在浏览器自动化场景中深入检查 React 组件树的拓扑结构、组件属性与状态、渲染性能以及 Suspense 边界状态。\n\n这套审查机制的核心设计目标是**零侵入性**和**框架无关性**。通过在页面文档加载前注入 React DevTools Hook，agent-browser 能够在不修改目标应用源码的情况下，获取与 React DevTools 浏览器扩展完全一致的自检能力。\n\n## 架构设计\n\n### 整体架构\n\nReact 组件审查模块位于 `cli/src/native/react/` 目录下，采用模块化设计，将不同功能职责分离到独立子模块中：\n\n```mermaid\ngraph TD\n    A[用户启动 Browser] --> B[--enable react-devtools]\n    B --> C[installHook.js 注入]\n    C --> D[__REACT_DEVTOOLS_GLOBAL_HOOK__]\n    D --> E[React 检测并注册渲染器]\n    \n    E --> F[React 子系统]\n    F --> G[tree - 组件树]\n    F --> H[inspect - 组件详情]\n    F --> I[renders - 渲染追踪]\n    F --> J[suspense - 边界分析]\n    \n    K[vitals - 独立模块] -.-> L[Web 标准 API]\n    K -.-> M[pushstate - SPA 导航]\n    \n    G --> N[format_tree / TreeNode]\n    H --> O[inspectElementRaw]\n    I --> P[format_renders_report / RendersData]\n    J --> Q[format_suspense_report / Boundary]\n```\n\n### 核心模块职责\n\n| 模块 | 文件路径 | 导出内容 | 功能描述 |\n|------|----------|----------|----------|\n| **mod.rs** | `cli/src/native/react/mod.rs` | 主入口 | 定义 INSTALL_HOOK_JS 常量，统一导出子模块 |\n| **tree.rs** | `cli/src/native/react/tree.rs` | `TreeNode`, `format_tree` | 序列化组件树为可读格式 |\n| **renders.rs** | `cli/src/native/react/renders.rs` | `RendersData`, `format_renders_report` | 追踪组件重新渲染 |\n| **suspense.rs** | `cli/src/native/react/suspense.rs` | `Boundary`, `format_suspense_report` | 分析 Suspense 边界状态 |\n| **vitals.rs** | `cli/src/native/react/vitals.rs` | `VitalsData`, `format_vitals_report` | 采集 Web Vitals 指标 |\n| **installHook.js** | `cli/src/native/react/installHook.js` | Hook 脚本 | 注入 React DevTools 全局钩子 |\n\n### 启动机制\n\nReact 自检功能的启用需要用户在启动 agent-browser 时显式传递 `--enable react-devtools` 参数。启用后，agent-browser 会通过 CDP (Chrome DevTools Protocol) 的 `addScriptToEvaluateOnNewDocument` 方法在所有页面 JS 执行前注册 Hook 脚本。\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant CLI as agent-browser CLI\n    participant CDP as CDP Client\n    participant Browser as Chrome Browser\n    participant React as React Runtime\n    \n    U->>CLI: agent-browser open --enable react-devtools <url>\n    CLI->>CDP: 创建 BrowserContext\n    CDP->>Browser: 初始化 CDP 会话\n    CLI->>CDP: addScriptToEvaluateOnNewDocument(installHook.js)\n    Browser->>React: 页面加载完成\n    React->>React: 检测 __REACT_DEVTOOLS_GLOBAL_HOOK__\n    React->>React: 注册渲染器到 Hook\n    Note over React: React 自检功能就绪\n```\n\n## React DevTools Hook 机制\n\n### Hook 脚本工作原理\n\n`installHook.js` 是 React DevTools Chrome 扩展的官方 Hook 实现（MIT 协议，来源：facebook/react）。该脚本的核心功能是创建一个全局 Symbol 键 `__REACT_DEVTOOLS_GLOBAL_HOOK__`，供 React 运行时在启动时检测并注册自身的渲染器信息。\n\n脚本中定义了以下关键 Symbol 标识符：\n\n```javascript\nconst A = Symbol.for(\"react.element\");\nconst M = Symbol.for(\"react.transitional.element\");\nconst z = Symbol.for(\"react.portal\");\nconst $ = Symbol.for(\"react.fragment\");\n// ... 更多 React 内部 Symbol\n```\n\n### 渲染器注册流程\n\nReact 渲染器（如 react-dom、react-native）在初始化时会检测 `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` 是否存在。如果存在，渲染器会将自身的 Fiber 实现回调函数注册到这个 Hook 上，包括：\n\n- `findFiberByHostInstance` - 通过 DOM 节点查找 Fiber\n- `findHostInstanceByFiber` - 通过 Fiber 查找 DOM 节点\n- `inspectElement` - 检索组件元素详情\n- `flushInitialProperties` - 刷新初始属性\n- `patchIntervalDictionary` - 性能监控间隔配置\n\n资料来源：[cli/src/native/react/installHook.js:1-50]()\n\n## 组件树审查 (react tree)\n\n### 功能描述\n\n`react tree` 命令用于获取当前页面的完整 React 组件树结构。该命令会遍历所有已注册的 Fiber 节点，按照树形拓扑关系输出组件层级。\n\n### 使用方式\n\n```bash\nagent-browser open --enable react-devtools <url>\nagent-browser react tree\n```\n\n### 输出格式\n\n命令输出包含每个组件的以下信息：\n\n| 字段 | 说明 |\n|------|------|\n| Fiber ID | React 内部用于标识 Fiber 节点的唯一 ID |\n| 组件类型 | 如 `div`、`button`、`MyComponent` |\n| 显示名 | 经过处理的可读名称（如 DisplayName） |\n| 渲染次数 | 该组件被渲染的总次数 |\n\n### 数据结构\n\n```rust\n// cli/src/native/react/tree.rs\npub struct TreeNode {\n    pub id: String,           // Fiber ID\n    pub name: String,         // 组件类型名\n    pub display_name: String, // 可读显示名\n    pub render_count: u64,    // 渲染次数统计\n    pub children: Vec<TreeNode>, // 子节点\n}\n```\n\n## 组件详情审查 (react inspect)\n\n### 功能描述\n\n`react inspect` 命令用于深度检查指定 Fiber ID 对应的组件详情，包括组件类型、当前 props、hooks 状态以及渲染来源位置。\n\n### 使用方式\n\n```bash\nagent-browser react inspect <fiberId>\n```\n\n### 检查维度\n\n| 检查维度 | 说明 | 数据来源 |\n|----------|------|----------|\n| 类型信息 | 组件的元素类型（如 `div`、`forward_ref`） | `_currentElement` |\n| Props | 当前渲染使用的属性对象 | `node.props` |\n| Hooks | 组件挂载的 hooks 状态 | Hook 内部数据结构 |\n| 样式 | 内联样式信息 | `node._instance` |\n| 源码位置 | 组件定义的文件和行号 | 源码映射 |\n\n### 内部实现\n\n`inspectElement` 函数通过以下流程获取组件详情：\n\n1. 验证目标 Fiber ID 存在于已注册的 `v` Map 中\n2. 根据元素类型（HostComponent/ClassComponent/FunctionComponent）提取对应数据\n3. 递归遍历 parents 路径构建上下文链\n4. 返回序列化的元素描述对象\n\n资料来源：[cli/src/native/react/installHook.js:60-80]()\n\n## 渲染追踪 (react renders)\n\n### 功能描述\n\n`react renders` 命令用于记录和分析 React 组件的重新渲染行为。通过追踪渲染次数和渲染耗时，帮助开发者识别性能瓶颈。\n\n### 使用方式\n\n```bash\n# 开始记录渲染\nagent-browser react renders start\n\n# 执行页面交互操作...\n\n# 停止记录并输出报告\nagent-browser react renders stop\nagent-browser react renders stop --json  # JSON 格式输出\n```\n\n### 数据模型\n\n```rust\n// cli/src/native/react/renders.rs\npub struct RendersData {\n    pub total_renders: u64,           // 总渲染次数\n    pub components: Vec<RenderStats>, // 各组件统计\n    pub timestamp: DateTime<Utc>,    // 记录时间戳\n}\n\npub struct RenderStats {\n    pub fiber_id: String,\n    pub name: String,\n    pub render_count: u64,\n    pub avg_duration_ms: f64,\n}\n```\n\n### 输出报告格式\n\n```json\n{\n  \"total_renders\": 42,\n  \"components\": [\n    {\n      \"fiber_id\": \"e42\",\n      \"name\": \"ProductList\",\n      \"render_count\": 15,\n      \"avg_duration_ms\": 2.3\n    }\n  ]\n}\n```\n\n## Suspense 边界分析 (react suspense)\n\n### 功能描述\n\n`react suspense` 命令用于识别和分析 React Suspense 边界及其动态加载状态。该功能能够区分静态 Suspense 边界和动态加载中的 Suspense 边界。\n\n### 使用方式\n\n```bash\nagent-browser react suspense\nagent-browser react suspense --only-dynamic  # 仅显示动态边界\nagent-browser react suspense --json          # JSON 格式输出\n```\n\n### 边界分类\n\n| 边界类型 | 说明 | 标记 |\n|----------|------|------|\n| 静态边界 | 始终resolved，无动态加载行为 | `static` |\n| 动态边界 | 包含未完成的异步加载（pending） | `suspended` |\n\n### 数据结构\n\n```rust\n// cli/src/native/react/suspense.rs\npub struct Boundary {\n    pub id: String,                  // 边界唯一标识\n    pub name: String,                // Suspense 组件名\n    pub state: BoundaryState,        // 当前状态\n    pub children: Vec<String>,       // 边界内组件\n}\n\npub enum BoundaryState {\n    Resolved,   // 已完成加载\n    Suspended,  // 等待异步加载\n}\n```\n\n## Web Vitals 监测 (vitals)\n\n### 功能描述\n\n`vitals` 命令用于采集 Core Web Vitals 核心指标，这是 React 组件审查中与框架相关性最低但实用性最高的模块。该功能依赖标准的 Web APIs，而非 React 特有机制。\n\n### 采集指标\n\n| 指标 | 全称 | 说明 | 理想阈值 |\n|------|------|------|----------|\n| LCP | Largest Contentful Paint | 最大内容绘制时间 | < 2.5s |\n| CLS | Cumulative Layout Shift | 累积布局偏移 | < 0.1 |\n| TTFB | Time to First Byte | 首字节时间 | < 800ms |\n| FCP | First Contentful Paint | 首次内容绘制 | < 1.8s |\n| INP | Interaction to Next Paint | 交互到下次绘制 | < 200ms |\n\n### 使用方式\n\n```bash\n# 采集当前页面指标\nagent-browser vitals\n\n# 采集指定 URL 指标\nagent-browser vitals <url>\n\n# JSON 格式输出\nagent-browser vitals --json\n```\n\n### 数据模型\n\n```rust\n// cli/src/native/react/vitals.rs\npub struct VitalsData {\n    pub lcp: Option<f64>,     // Largest Contentful Paint (ms)\n    pub cls: Option<f64>,     // Cumulative Layout Shift\n    pub ttfb: Option<f64>,    // Time to First Byte (ms)\n    pub fcp: Option<f64>,     // First Contentful Paint (ms)\n    pub inp: Option<f64>,     // Interaction to Next Paint (ms)\n    pub hydration_time: Option<f64>, // React 水合时间 (ms)\n    pub url: String,\n    pub timestamp: DateTime<Utc>,\n}\n```\n\n## SPA 导航模拟 (pushstate)\n\n### 功能描述\n\n`pushstate` 命令用于模拟单页应用（SPA）中的客户端路由导航。该功能与 React 本身无直接关联，但与 React Router 等路由库协同工作。\n\n### 使用方式\n\n```bash\nagent-browser pushstate <url>\n```\n\n### 工作机制\n\n1. 在当前页面执行 `history.pushState()` 或 `history.replaceState()`\n2. 触发 `popstate` 事件监听器\n3. React Router 等框架监听该事件后执行组件切换\n4. agent-browser 自动检测 Next.js 路由并同步状态\n\n## 命令行接口集成\n\n### Action 路由表\n\nReact 相关命令通过 `cli/src/native/actions.rs` 中的路由表注册到 CLI 框架：\n\n```rust\n\"react_tree\" => handle_react_tree(cmd, state).await,\n\"react_inspect\" => handle_react_inspect(cmd, state).await,\n\"react_renders_start\" => handle_react_renders_start(cmd, state).await,\n\"react_renders_stop\" => handle_react_renders_stop(cmd, state).await,\n\"react_suspense\" => handle_react_suspense(cmd, state).await,\n\"vitals\" => handle_vitals(cmd, state).await,\n\"pushstate\" => handle_pushstate(cmd, state).await,\n```\n\n资料来源：[cli/src/native/actions.rs:1-30]()\n\n## 最佳实践\n\n### 1. 启动参数配置\n\n始终在需要 React 审查功能的会话中包含 `--enable react-devtools` 参数：\n\n```bash\nagent-browser open --enable react-devtools https://your-react-app.com\n```\n\n### 2. 性能分析工作流\n\n```mermaid\ngraph LR\n    A[启动 Browser] --> B[react renders start]\n    B --> C[执行用户交互]\n    C --> D[react renders stop]\n    D --> E[分析渲染热点]\n    E --> F{发现异常?}\n    F -->|是| G[react inspect 定位]\n    F -->|否| H[检查 Web Vitals]\n    G --> I[优化组件]\n    H --> J[vitals --json]\n```\n\n### 3. 渲染问题排查步骤\n\n1. 执行 `react tree` 获取组件树概览\n2. 定位可疑组件的 Fiber ID\n3. 使用 `react inspect <id>` 检查 props 和 hooks\n4. 执行 `react renders start` 记录重新渲染\n5. 触发可疑操作后 `react renders stop` 查看报告\n\n### 4. Suspense 问题排查\n\n```bash\n# 查看所有边界\nagent-browser react suspense\n\n# 仅关注动态加载\nagent-browser react suspense --only-dynamic\n\n# 导出 JSON 供自动化分析\nagent-browser react suspense --json > suspense-report.json\n```\n\n## 技术限制与注意事项\n\n### 1. Hook 时机依赖\n\nReact DevTools Hook 仅在 React 初始化时被检测。如果页面在 Hook 注入前已完成初始化，审查功能将不可用。当前架构通过 `addScriptToEvaluateOnNewDocument` 确保 Hook 在所有页面脚本前注册。\n\n### 2. 非 React 框架\n\n`vitals` 和 `pushstate` 为框架无关实现，可用于 Vue、Angular 等其他 SPA 框架的监测。\n\n### 3. 生产环境警告\n\nReact DevTools Hook 会影响 React 的内部状态管理，建议仅在开发和调试环境中使用。\n\n## 总结\n\nReact 组件审查模块为 agent-browser 提供了完整的 React 运行时自检能力。通过整合 React DevTools 协议，该模块实现了组件树可视化、属性状态检查、渲染性能追踪和 Suspense 边界分析等功能。这些能力使得 agent-browser 能够自动化测试 React 应用时提供精确的组件级别诊断信息，极大地提升了浏览器自动化测试的深度和准确性。\n\n---\n\n<a id='sessions-authentication'></a>\n\n## 会话与认证管理\n\n### 相关页面\n\n相关主题：[网络监控与拦截](#network-monitoring), [浏览器自动化核心](#browser-automation)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/state.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n- [cli/src/native/storage.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/storage.rs)\n- [cli/src/native/auth.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/auth.rs)\n- [cli/src/native/cookies.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/cookies.rs)\n- [cli/src/native/policy.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/policy.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n</details>\n\n# 会话与认证管理\n\n## 概述\n\nagent-browser 的会话与认证管理系统负责管理浏览器自动化会话的生命周期、认证凭证、Cookie 存储以及 Web Storage（localStorage/sessionStorage）。该系统是 Rust 原生实现，运行在 `cli/src/native/` 目录下的浏览器自动化守护进程中，支持 Chrome 和 Lightpanda 两种浏览器引擎。\n\n会话管理器的核心职责包括：\n\n- 会话目录的创建与清理\n- Cookie 的增删改查\n- Web Storage 的持久化与恢复\n- 认证状态的保存与加载\n- 状态快照的序列化与反序列化\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 核心架构\n\n### 目录结构\n\nagent-browser 使用统一的本地状态目录存储所有会话相关数据：\n\n```bash\n~/.agent-browser/\n├── sessions/          # 会话数据目录\n├── auth/              # 认证存储\n└── encryption.key     # 加密密钥\n```\n\n当无法解析用户主目录时，系统会回退到临时目录：\n\n```bash\n<tempdir>/agent-browser/\n```\n\n资料来源：[cli/src/native/state.rs:80-88](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n\n### 模块划分\n\n```mermaid\ngraph TD\n    A[CLI 命令层] --> B[动作分发层]\n    B --> C[认证模块 auth.rs]\n    B --> D[Cookie 模块 cookies.rs]\n    B --> E[Storage 模块 storage.rs]\n    B --> F[策略模块 policy.rs]\n    C --> G[状态管理 state.rs]\n    D --> G\n    E --> G\n    F --> G\n    G --> H[CDP 客户端]\n    H --> I[浏览器实例]\n```\n\n---\n\n## 状态管理\n\n### 状态根目录\n\n`state.rs` 提供了获取状态目录的核心函数：\n\n| 函数 | 返回值 | 说明 |\n|------|--------|------|\n| `get_state_dir()` | `PathBuf` | 返回 `~/.agent-browser` 或回退目录 |\n| `get_sessions_dir()` | `PathBuf` | 返回 `~/.agent-browser/sessions` |\n\n资料来源：[cli/src/native/state.rs:80-93](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n\n### 会话操作\n\n系统支持以下会话级别的状态操作：\n\n| 操作命令 | 功能描述 |\n|----------|----------|\n| `state_save` | 保存当前会话状态 |\n| `state_load` | 加载指定会话状态 |\n| `state_list` | 列出所有已保存的会话 |\n| `state_clean` | 清理旧会话（默认 30 天） |\n| `state_rename` | 重命名会话 |\n\n资料来源：[cli/src/native/actions.rs:180-185](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n### 存储状态模型\n\n`StorageState` 结构体定义了会话持久化的数据模型：\n\n```rust\nstruct StorageState {\n    cookies: Vec<Cookie>,\n    // ... 其他字段\n}\n\nstruct Cookie {\n    name: String,\n    value: String,\n    domain: String,\n    path: String,\n    expires: f64,\n}\n```\n\n资料来源：[cli/src/native/state.rs:95-105](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n\n---\n\n## Cookie 管理\n\n### CLI 命令接口\n\n```bash\n# Cookie 操作\nagent-browser cookies get                    # 获取当前 Cookie\nagent-browser cookies set --url <url> ...    # 设置 Cookie\nagent-browser cookies clear                  # 清除所有 Cookie\n\n# 完整参数选项\n--url <domain>      # Cookie 关联的域名\n--domain <host>     # Cookie 域\n--path <path>       # Cookie 路径\n--httpOnly          # HttpOnly 标记\n--secure            # Secure 标记\n--sameSite <policy> # SameSite 策略\n--expires <timestamp>  # 过期时间戳\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n### 支持的 Cookie 属性\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| `name` | String | Cookie 名称 |\n| `value` | String | Cookie 值 |\n| `domain` | String | 所属域名 |\n| `path` | String | URL 路径 |\n| `expires` | f64 | Unix 时间戳格式的过期时间 |\n| `httpOnly` | bool | HttpOnly 标志 |\n| `secure` | bool | Secure 标志 |\n| `sameSite` | String | SameSite 策略 |\n\n### 自动导入功能\n\n系统支持从多种格式自动导入 Cookie：\n\n- **JSON 格式** - 标准 Cookie 对象数组\n- **cURL 格式** - 使用 `--curl` 参数指定文件\n- **Cookie Header 格式** - 直接解析 `Cookie:` 头部\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## Web Storage 管理\n\n### 存储类型\n\nagent-browser 支持两种 Web Storage API：\n\n| 存储类型 | CLI 命令 | 说明 |\n|----------|----------|------|\n| localStorage | `storage local` | 持久化存储，跨会话保留 |\n| sessionStorage | `storage session` | 会话级存储，标签页关闭后清除 |\n\n### CLI 命令\n\n```bash\n# Storage 操作\nagent-browser storage local get    # 获取 localStorage\nagent-browser storage local set   # 设置 localStorage\nagent-browser storage local clear # 清除 localStorage\n\nagent-browser storage session get # 获取 sessionStorage\nagent-browser storage session set # 设置 sessionStorage\nagent-browser storage session clear # 清除 sessionStorage\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n### 动作处理器映射\n\n| 操作 | 处理器函数 |\n|------|-----------|\n| 获取存储 | `handle_storage_get` |\n| 设置存储 | `handle_storage_set` |\n| 清除存储 | `handle_storage_clear` |\n\n资料来源：[cli/src/native/actions.rs:140-142](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n---\n\n## 认证系统\n\n### 认证存储架构\n\n认证模块负责管理敏感凭证数据，存储在 `~/.agent-browser/auth/` 目录下。该目录包含：\n\n- HTTP 认证凭证\n- 代理认证信息\n- 证书配置\n\n### 认证配置命令\n\n```bash\n# 设置认证凭证\nagent-browser set credentials <username> <password>\n\n# 设置代理认证\nagent-browser set proxy-auth <username> <password>\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## 策略管理\n\n### 动作策略\n\npolicy.rs 模块定义了浏览器动作的安全策略：\n\n| 策略类型 | 说明 |\n|----------|------|\n| 内容边界 | `--content-boundaries` 控制元素交互范围 |\n| 最大输出 | `--max-output` 限制输出数据量 |\n| 允许域名 | `--allowed-domains` 白名单限制 |\n| 动作策略 | `--action-policy` 动作执行策略 |\n\n### 策略参数\n\n```bash\n# 域名限制\nagent-browser --allowed-domains example.com,vercel.com\n\n# 输出限制\nagent-browser --max-output 10000\n\n# 内容边界\nagent-browser --content-boundaries true\n```\n\n资料来源：[cli/src/flags.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/flags.rs)\n\n---\n\n## 工作流程\n\n### 会话创建与保存流程\n\n```mermaid\nsequenceDiagram\n    participant CLI\n    participant Actions\n    participant State\n    participant CDP\n    participant Browser\n\n    CLI->>Actions: cookies_set / storage_set\n    Actions->>CDP: 执行 CDP 命令\n    CDP->>Browser: 设置 Cookie/Storage\n    Browser-->>CDP: 确认\n    CDP-->>Actions: 结果\n    Actions->>State: state_save\n    State->>State: 序列化到 ~/.agent-browser/sessions/\n```\n\n### 状态恢复流程\n\n```mermaid\nsequenceDiagram\n    participant CLI\n    participant Actions\n    participant State\n    participant CDP\n    participant Browser\n\n    CLI->>Actions: state_load\n    Actions->>State: 读取会话文件\n    State-->>Actions: StorageState 对象\n    Actions->>CDP: 创建/恢复 Cookie\n    CDP->>Browser: 注入 Cookie\n    Actions->>CDP: 恢复 Storage\n    CDP->>Browser: 注入 Storage\n```\n\n---\n\n## CLI 完整命令参考\n\n### 会话管理\n\n| 命令 | 参数 | 说明 |\n|------|------|------|\n| `tab new` | - | 创建新标签页 |\n| `tab list` | - | 列出所有标签页 |\n| `tab close` | `<n>` | 关闭指定标签页 |\n| `tab <n>` | - | 切换到指定标签页 |\n\n### 认证与存储\n\n```bash\n# Cookie 完整操作\nagent-browser cookies get\nagent-browser cookies set --url https://example.com --name session --value abc123\nagent-browser cookies clear\n\n# Storage 完整操作\nagent-browser storage local get\nagent-browser storage session get\nagent-browser storage local set --key theme --value dark\nagent-browser storage clear\n\n# 状态管理\nagent-browser state_save --name my-session\nagent-browser state_load --name my-session\nagent-browser state_list\nagent-browser state_clean --days 7\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## 安全考虑\n\n### 敏感数据处理\n\n1. **加密存储** - 认证数据使用加密密钥保护\n2. **临时回退** - 无法访问主目录时使用临时目录\n3. **会话清理** - 支持自动清理过期会话（默认 30 天）\n\n### 最佳实践\n\n- 定期使用 `state_clean` 清理旧会话\n- 使用 `--allowed-domains` 限制 Cookie 作用域\n- 避免在命令行中直接传递敏感凭证\n- 使用 `state_save` 定期备份重要会话状态\n\n---\n\n## 相关文档\n\n- [技能文档](../skill-data/core/references/snapshot-refs.md) - 快照与元素引用\n- [Slack 技能](../skill-data/slack/references/slack-tasks.md) - 会话管理示例\n- [架构说明](../AGENTS.md) - 完整系统架构\n\n---\n\n<a id='network-monitoring'></a>\n\n## 网络监控与拦截\n\n### 相关页面\n\n相关主题：[会话与认证管理](#sessions-authentication), [浏览器自动化核心](#browser-automation)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/network.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/network.rs)\n- [cli/src/native/stream/http.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/stream/http.rs)\n- [cli/src/native/stream/websocket.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/stream/websocket.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n- [packages/dashboard/src/components/network-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/network-panel.tsx)\n</details>\n\n# 网络监控与拦截\n\n## 概述\n\n网络监控与拦截是 agent-browser 提供的核心功能之一，允许用户在浏览器会话中对网络请求和响应进行实时监控、拦截、修改和录制。该功能基于 Chrome DevTools Protocol (CDP) 实现，支持 HTTP 请求、WebSocket 连接等多种网络协议。\n\n通过这套系统，用户可以：\n\n- 实时观察页面发出的所有网络请求\n- 对特定请求进行拦截和响应修改\n- 模拟网络错误和异常场景\n- 录制完整的网络会话为 HAR 格式\n- 管理 Cookie 和 Web Storage\n\n## 核心功能模块\n\nagent-browser 的网络监控与拦截系统主要由以下几个模块组成：\n\n| 模块 | 功能描述 | 源码位置 |\n|------|----------|----------|\n| 网络路由 | 请求拦截、abort、响应修改 | `cli/src/native/network.rs` |\n| HTTP 流处理 | HTTP 请求/响应解析 | `cli/src/native/stream/http.rs` |\n| WebSocket 处理 | WebSocket 帧解析和转发 | `cli/src/native/stream/websocket.rs` |\n| Dashboard UI | 可视化网络监控面板 | `network-panel.tsx` |\n\n## 网络命令接口\n\nagent-browser 通过 CLI 提供完整的网络操作命令。以下是主要命令的详细说明：\n\n资料来源：[cli/src/output.rs:50-60]()\n\n### network 命令族\n\n```bash\nagent-browser network <action>\n  route <url> [--abort|--body <json>] [--resource-type <csv>]\n  unroute [url]\n  requests [--clear] [--filter <pattern>]\n  har <start|stop> [path]\n```\n\n## 请求拦截与路由\n\n### route - 请求路由与拦截\n\n`route` 命令用于设置 URL 路由规则，可以对匹配的请求进行拦截处理。\n\n```bash\nagent-browser network route <url> [--abort|--body <json>] [--resource-type <csv>]\n```\n\n#### 参数说明\n\n| 参数 | 类型 | 必需 | 说明 |\n|------|------|------|------|\n| `url` | string | 是 | 要拦截的目标 URL，支持模式匹配 |\n| `--abort` | flag | 否 | 中止匹配的请求，不返回任何响应 |\n| `--body <json>` | string | 否 | 返回自定义 JSON 响应体 |\n| `--resource-type <csv>` | string | 否 | 按资源类型过滤（如 document, script, stylesheet） |\n\n#### 使用示例\n\n```bash\n# 中止所有对特定 API 的请求\nagent-browser network route \"*/api/auth/*\" --abort\n\n# 模拟 API 返回自定义数据\nagent-browser network route \"*/api/user\" --body '{\"id\": 1, \"name\": \"test\"}'\n\n# 仅拦截特定资源类型\nagent-browser network route \"*/assets/*\" --resource-type \"stylesheet\"\n```\n\n### unroute - 移除路由规则\n\n```bash\nagent-browser network unroute [url]\n```\n\n移除已设置的路由规则。省略 `url` 参数时，移除所有规则。\n\n```bash\n# 移除特定规则\nagent-browser network unroute \"*/api/auth/*\"\n\n# 清除所有规则\nagent-browser network unroute\n```\n\n## 请求监控\n\n### requests - 实时请求列表\n\n`requests` 命令用于查看当前会话的网络请求列表。\n\n```bash\nagent-browser network requests [--clear] [--filter <pattern>]\n```\n\n| 参数 | 说明 |\n|------|------|\n| `--clear` | 清空请求历史记录 |\n| `--filter <pattern>` | 按 URL 模式过滤请求 |\n\n## HAR 录制\n\nHAR (HTTP Archive) 是一种标准的网络会话记录格式，用于保存和重放浏览器网络活动。\n\n### 开始录制\n\n```bash\nagent-browser network har start\n```\n\n开始捕获所有网络请求和响应。\n\n### 停止录制并保存\n\n```bash\nagent-browser network har stop [path]\n```\n\n停止录制并将结果保存为 HAR 文件。默认文件名为 `capture.har`。\n\n```bash\n# 保存到默认文件\nagent-browser network har stop\n\n# 保存到指定路径\nagent-browser network har stop /path/to/recording.har\n```\n\n### Dashboard 可视化\n\n在 agent-browser 的 Dashboard 界面中，网络面板提供了可视化的请求监控功能：\n\n- **RequestDetail 组件**：显示单个请求的详细信息，包括 URL、请求头、响应头等\n- **HAR 导出对话框**：支持将录制的网络会话导出为 HAR 文件\n\n资料来源：[packages/dashboard/src/components/network-panel.tsx:100-140]()\n\n## 存储管理\n\n### Cookie 管理\n\nagent-browser 提供完整的 Cookie 管理功能：\n\n```bash\nagent-browser cookies [get|set|clear]\n```\n\n| 操作 | 说明 |\n|------|------|\n| `get` | 获取当前 Cookie 列表 |\n| `set` | 设置 Cookie（支持 --url, --domain, --path, --httpOnly, --secure, --sameSite, --expires 参数） |\n| `clear` | 清除所有 Cookie |\n\n#### set 子命令参数\n\n| 参数 | 说明 |\n|------|------|\n| `--url <url>` | 设置 Cookie 的目标 URL |\n| `--domain <domain>` | Cookie 所属域名 |\n| `--path <path>` | Cookie 路径 |\n| `--httpOnly` | 标记为 HttpOnly |\n| `--secure` | 标记为 Secure |\n| `--sameSite <strict\\|lax\\|none>` | SameSite 属性 |\n| `--expires <timestamp>` | 过期时间戳 |\n| `--curl <file>` | 从 cURL 格式文件导入 |\n\n#### 从 cURL 导入\n\n```bash\nagent-browser cookies set --curl request.txt --domain \"example.com\"\n```\n\n支持自动检测 JSON、cURL 和 Cookie 头格式。\n\n### Web Storage 管理\n\n```bash\nagent-browser storage <local|session>\n```\n\n| 类型 | 说明 |\n|------|------|\n| `local` | 管理 localStorage |\n| `session` | 管理 sessionStorage |\n\n## 架构设计\n\n### 网络监控流程\n\n```mermaid\ngraph TD\n    A[用户发起请求] --> B[CDP Network Agent]\n    B --> C{匹配路由规则?}\n    C -->|是| D[应用路由处理]\n    C -->|否| E[转发到服务器]\n    D --> F{abort?}\n    F -->|是| G[返回中止响应]\n    F -->|否| H{自定义 body?}\n    H -->|是| I[返回自定义响应]\n    H -->|否| E\n    E --> J[接收服务器响应]\n    J --> K[记录到 HAR]\n    K --> L[返回给浏览器]\n    G --> L\n    I --> L\n```\n\n### 请求拦截状态机\n\n```mermaid\nstateDiagram-v2\n    [*] --> Idle: 初始化\n    Idle --> Monitoring: network route 设置\n    Monitoring --> Intercepted: 请求匹配\n    Intercepted --> Aborted: --abort\n    Intercepted --> Modified: --body\n    Modified --> Monitoring: 完成修改\n    Aborted --> Monitoring: 继续监控\n    Monitoring --> Stopped: 关闭会话\n    Stopped --> [*]\n```\n\n## 典型使用场景\n\n### 场景一：API  mocking\n\n当后端 API 尚未开发完成时，使用 `route` 命令模拟响应：\n\n```bash\n# 模拟用户列表 API\nagent-browser network route \"*/api/users\" --body '[\n  {\"id\": 1, \"name\": \"Alice\"},\n  {\"id\": 2, \"name\": \"Bob\"}\n]'\n\n# 模拟详情 API\nagent-browser network route \"*/api/users/*\" --body '{\"id\": 1, \"name\": \"Alice\", \"email\": \"alice@example.com\"}'\n```\n\n### 场景二：调试网络错误\n\n测试应用在网络异常情况下的表现：\n\n```bash\n# 中止特定域名的所有请求\nagent-browser network route \"https://analytics.example.com/*\" --abort\n\n# 测试静态资源加载失败\nagent-browser network route \"*assets*.js\" --abort\n```\n\n### 场景三：录制和重放网络会话\n\n```bash\n# 开始录制\nagent-browser network har start\n\n# 执行测试操作...\nagent-browser click @e1\nagent-browser fill @e2 \"test query\"\nagent-browser click @e3\n\n# 停止录制并保存\nagent-browser network har stop debug.har\n```\n\n### 场景四：导入已有 Cookie\n\n```bash\n# 从浏览器导出的 cURL 命令导入 Cookie\nagent-browser cookies set --curl logged-in.txt --domain \"app.example.com\"\n```\n\n## 最佳实践\n\n### 1. 清理路由规则\n\n完成调试后，记得清除所有路由规则避免影响其他测试：\n\n```bash\nagent-browser network unroute\n```\n\n### 2. 使用资源类型过滤\n\n对于大型应用，使用 `--resource-type` 减少规则数量：\n\n```bash\n# 仅拦截 XHR 和 Fetch 请求\nagent-browser network route \"*api*\" --resource-type \"xhr,fetch\"\n```\n\n### 3. HAR 文件管理\n\n录制大型会话时，注意磁盘空间：\n\n```bash\n# 使用有意义的文件名\nagent-browser network har stop $(date +%Y%m%d_%H%M%S)_api_test.har\n```\n\n## 命令速查表\n\n| 功能 | 命令 |\n|------|------|\n| 拦截请求 | `network route <url> --abort` |\n| 自定义响应 | `network route <url> --body <json>` |\n| 查看请求 | `network requests` |\n| 过滤请求 | `network requests --filter \"<pattern>\"` |\n| 清除请求列表 | `network requests --clear` |\n| 开始 HAR 录制 | `network har start` |\n| 停止 HAR 录制 | `network har stop [path]` |\n| 移除路由规则 | `network unroute [url]` |\n| 获取 Cookie | `cookies get` |\n| 设置 Cookie | `cookies set --url <url> --domain <domain>` |\n| 清除 Cookie | `cookies clear` |\n| 管理 localStorage | `storage local` |\n| 管理 sessionStorage | `storage session` |\n\n---\n\n<a id='dashboard-components'></a>\n\n## 仪表板组件\n\n### 相关页面\n\n相关主题：[文档站点](#documentation-site), [系统架构](#architecture-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [packages/dashboard/src/app/page.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/app/page.tsx)\n- [packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx) *(已获取)*\n- [packages/dashboard/src/components/activity-feed.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/activity-feed.tsx)\n- [packages/dashboard/src/components/chat-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/chat-panel.tsx)\n- [packages/dashboard/src/components/network-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/network-panel.tsx)\n- [packages/dashboard/src/store/chat.ts](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/store/chat.ts)\n- [packages/dashboard/src/store/activity.ts](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/store/activity.ts)\n\n> 注：本页主要基于已获取的 `extensions-panel.tsx` 源码及项目结构分析生成。其他组件文件内容需在实际检索后补充完善。\n</details>\n\n# 仪表板组件\n\n## 概述\n\n`agent-browser` 项目的仪表板（Dashboard）是一个基于 React + TypeScript 构建的 Web 界面，用于可视化展示浏览器自动化任务的状态、结果和执行历史。仪表板组件采用模块化架构，通过 Zustand 状态管理库实现跨组件的状态共享，支持截图展示、快照查看、活动记录等功能。\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:1-80]()\n\n## 架构设计\n\n### 技术栈\n\n| 层级 | 技术选型 | 说明 |\n|------|----------|------|\n| 前端框架 | React 18+ | 组件化 UI 开发 |\n| 语言 | TypeScript | 类型安全 |\n| 状态管理 | Zustand | 轻量级状态管理 |\n| 样式 | Tailwind CSS | 原子化 CSS 框架 |\n| 构建工具 | Vite | 快速开发构建 |\n\n### 组件目录结构\n\n```\npackages/dashboard/src/\n├── app/\n│   └── page.tsx              # 主仪表板页面\n├── components/\n│   ├── extensions-panel.tsx  # Chrome 扩展管理面板\n│   ├── activity-feed.tsx     # 活动流展示\n│   ├── chat-panel.tsx        # 聊天交互面板\n│   └── network-panel.tsx     # 网络请求监控面板\n└── store/\n    ├── chat.ts               # 聊天相关状态\n    └── activity.ts           # 活动记录状态\n```\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:1-10]()\n\n## 核心组件\n\n### ExtensionsPanel（扩展面板）\n\n`ExtensionsPanel` 组件负责展示和管理已安装的 Chrome 浏览器扩展。组件采用可折叠的卡片式布局，支持显示扩展名称、描述和安装路径。\n\n#### 组件结构\n\n```tsx\n// packages/dashboard/src/components/extensions-panel.tsx\nfunction ExtensionsPanel({ extensions }: { extensions: Extension[] }) {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  return (\n    <div className=\"border rounded-lg\">\n      <Header count={extensions.length} />\n      {isExpanded && (\n        <div className=\"space-y-1 bg-muted/30 px-3 py-2 text-[11px]\">\n          {ext.description && (\n            <div>\n              <span className=\"text-muted-foreground\">Description: </span>\n              <span className=\"text-foreground\">{ext.description}</span>\n            </div>\n          )}\n          <div>\n            <span className=\"text-muted-foreground\">Path: </span>\n            <span className={cn(\"break-all font-mono text-foreground\")}>\n              {ext.path}\n            </span>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:15-45]()\n\n#### 扩展数据模型\n\n```typescript\ninterface Extension {\n  id: string;\n  name: string;\n  description?: string;\n  path: string;\n  version?: string;\n}\n```\n\n#### Header 子组件\n\n```tsx\nfunction Header({ count }: { count: number }) {\n  return (\n    <div className=\"flex shrink-0 items-center gap-1.5 px-3 py-2\">\n      <span className=\"text-[10px] text-muted-foreground\">\n        Chrome Extensions\n      </span>\n      {count > 0 && (\n        <Badge\n          variant=\"secondary\"\n          className=\"ml-auto h-4 px-1.5 text-[10px] tabular-nums\"\n        >\n          {count}\n        </Badge>\n      )}\n    </div>\n  );\n}\n```\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:55-70]()\n\n### ActivityFeed（活动流）\n\n活动流组件用于实时展示 agent-browser 的执行活动，包括命令执行、状态变更和操作记录。该组件从 Zustand store 订阅活动数据，支持虚拟滚动以优化大数据量场景下的渲染性能。\n\n### ChatPanel（聊天面板）\n\n聊天面板提供人机交互界面，允许用户发送指令并接收 agent-browser 的响应。该组件与 `chat.ts` 状态存储紧密集成，支持消息历史、会话管理和流式响应展示。\n\n### NetworkPanel（网络面板）\n\n网络监控面板用于显示浏览器发出的 HTTP 请求和响应，支持以下功能：\n\n- 请求/响应头查看\n- 请求方法过滤（GET、POST、PUT、DELETE 等）\n- 状态码高亮\n- 请求耗时统计\n\n资料来源：[packages/dashboard/src/components/network-panel.tsx]()\n\n## 状态管理\n\n### Chat Store\n\n`chat.ts` 使用 Zustand 管理聊天会话状态：\n\n```typescript\n// packages/dashboard/src/store/chat.ts\ninterface ChatState {\n  messages: Message[];\n  sendMessage: (content: string) => void;\n  clearHistory: () => void;\n}\n```\n\n| 状态字段 | 类型 | 描述 |\n|----------|------|------|\n| `messages` | `Message[]` | 消息列表 |\n| `sendMessage` | `function` | 发送消息动作 |\n| `clearHistory` | `function` | 清空历史记录 |\n\n### Activity Store\n\n`activity.ts` 管理操作活动日志：\n\n```typescript\n// packages/dashboard/src/store/activity.ts\ninterface ActivityState {\n  activities: Activity[];\n  addActivity: (activity: Activity) => void;\n  clearActivities: () => void;\n}\n```\n\n## 主页面布局\n\n主仪表板页面 (`page.tsx`) 采用响应式布局，整合所有面板组件：\n\n```tsx\n// packages/dashboard/src/app/page.tsx 结构示意\nexport default function DashboardPage() {\n  return (\n    <div className=\"min-h-screen bg-background\">\n      <header> {/* 顶部导航 */} </header>\n      <main className=\"flex\">\n        <aside> {/* 侧边栏 */} </aside>\n        <section className=\"flex-1\">\n          {/* 主内容区域 */}\n          <ChatPanel />\n          <ActivityFeed />\n        </section>\n        <aside>\n          <NetworkPanel />\n          <ExtensionsPanel />\n        </aside>\n      </main>\n    </div>\n  );\n}\n```\n\n资料来源：[packages/dashboard/src/app/page.tsx]()\n\n## 数据流图\n\n```mermaid\ngraph TD\n    A[用户交互] --> B{操作类型}\n    B -->|发送指令| C[ChatPanel]\n    B -->|查看活动| D[ActivityFeed]\n    B -->|监控网络| E[NetworkPanel]\n    B -->|管理扩展| F[ExtensionsPanel]\n    \n    C --> G[chat.ts store]\n    D --> H[activity.ts store]\n    \n    G --> I[CLI 进程]\n    H --> I\n    \n    I --> J[浏览器实例]\n    J --> K[CDP 连接]\n    K --> G\n    K --> H\n    \n    E --> L[网络请求数据]\n    F --> M[扩展列表数据]\n```\n\n## 样式系统\n\n仪表板组件使用 Tailwind CSS 进行样式管理，遵循以下设计规范：\n\n| 样式类别 | 工具类前缀 | 示例 |\n|----------|------------|------|\n| 间距 | `p-`, `m-`, `gap-` | `px-3 py-2` |\n| 字体 | `text-` | `text-[10px]` |\n| 颜色 | `text-`, `bg-`, `border-` | `text-muted-foreground` |\n| 圆角 | `rounded-` | `rounded-lg` |\n| 布局 | `flex-`, `grid-` | `flex shrink-0` |\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:20-35]()\n\n## Badge 组件使用\n\nBadge 组件用于显示数量统计，采用 `variant=\"secondary\"` 变体：\n\n```tsx\n<Badge\n  variant=\"secondary\"\n  className=\"ml-auto h-4 px-1.5 text-[10px] tabular-nums\"\n>\n  {count}\n</Badge>\n```\n\n关键样式属性：\n- `tabular-nums`：使用等宽数字字体，确保数字对齐\n- `h-4 px-1.5`：紧凑的尺寸设计\n- `ml-auto`：右对齐布局\n\n## 与 CLI 的集成\n\n仪表板通过以下方式与 `agent-browser` CLI 集成：\n\n1. **WebSocket 连接**：通过 CDP（Chrome DevTools Protocol）建立通信\n2. **命令执行**：调用 CLI 子命令执行浏览器操作\n3. **结果展示**：将命令执行结果（截图、快照）渲染到对应面板\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant D as 仪表板\n    participant C as CLI\n    participant B as 浏览器\n    \n    U->>D: 输入指令\n    D->>C: 执行命令\n    C->>B: CDP 操作\n    B-->>C: 执行结果\n    C-->>D: 返回数据\n    D-->>U: 更新界面\n```\n\n## 开发指南\n\n### 添加新面板组件\n\n1. 在 `packages/dashboard/src/components/` 创建新组件\n2. 使用 Zustand 创建对应的 store（如需要）\n3. 在 `page.tsx` 中导入并放置组件\n4. 添加 Tailwind 样式类\n\n### 状态更新流程\n\n```typescript\n// 示例：更新活动记录\nconst activityStore = useActivityStore();\nactivityStore.addActivity({\n  id: crypto.randomUUID(),\n  type: 'command',\n  message: '执行截图命令',\n  timestamp: Date.now()\n});\n```\n\n## 已知限制\n\n- 部分组件源码（如 `activity-feed.tsx`、`chat-panel.tsx`）需在完整检索后补充说明\n- 网络面板的实时数据流功能依赖 CLI 的 HAR 捕获能力\n- 扩展管理功能仅支持 Chrome 浏览器\n\n## 相关资源\n\n- [CLI 输出模块参考](../cli/src/output.md)\n- [核心技能文档](../skill-data/core/SKILL.md)\n- [Electron 应用集成](../skill-data/electron/SKILL.md)\n\n---\n\n<a id='documentation-site'></a>\n\n## 文档站点\n\n### 相关页面\n\n相关主题：[仪表板组件](#dashboard-components), [安装与构建](#installation-build)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [docs/next.config.mjs](https://github.com/vercel-labs/agent-browser/blob/main/docs/next.config.mjs)\n- [docs/src/app/layout.tsx](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/app/layout.tsx)\n- [docs/src/lib/docs-navigation.ts](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/lib/docs-navigation.ts)\n- [docs/src/lib/mdx-to-markdown.ts](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/lib/mdx-to-markdown.ts)\n- [docs/src/components/docs-sidebar.tsx](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/components/docs-sidebar.tsx)\n- [AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n</details>\n\n# 文档站点\n\n## 概述\n\nagent-browser 项目的文档站点是一个基于 Next.js 构建的现代化文档平台，为用户提供完整的产品使用指南、命令参考和工作流说明。该站点作为项目的主要知识库，集中管理所有技术文档内容。\n\n## 技术架构\n\n### 框架选型\n\n文档站点采用 Next.js 作为底层框架，利用其静态站点生成（SSG）能力提供快速的页面加载和良好的 SEO 表现。\n\n```mermaid\ngraph TD\n    A[用户访问] --> B[Next.js 静态生成]\n    B --> C[MDX 内容渲染]\n    C --> D[侧边栏导航组件]\n    D --> E[文档页面展示]\n    \n    F[内容源文件] --> G[MDX to Markdown 转换]\n    G --> C\n```\n\n### 核心配置文件\n\n#### next.config.mjs\n\nNext.js 配置文件位于 `docs/next.config.mjs`，负责站点的构建和运行时配置。该文件定义了站点的基本行为和构建优化选项。\n\n#### 布局组件 (layout.tsx)\n\n根布局文件 `docs/src/app/layout.tsx` 定义了文档站点的整体布局结构，包括全局样式注入、字体配置和基础 HTML 结构。\n\n## 核心模块\n\n### 文档导航系统\n\n#### docs-navigation.ts\n\n文档导航模块 (`docs/src/lib/docs-navigation.ts`) 是整个文档站点的核心模块，负责管理文档的层级结构和导航逻辑。\n\n| 属性 | 类型 | 描述 |\n|------|------|------|\n| 导航配置 | 结构化对象 | 定义文档分类和页面映射 |\n| 层级关系 | 嵌套结构 | 支持多级文档分类 |\n| 路径映射 | 哈希表 | 快速定位文档页面 |\n\n### MDX 转换模块\n\n#### mdx-to-markdown.ts\n\nMDX 到 Markdown 的转换模块 (`docs/src/lib/mdx-to-markdown.ts`) 负责处理文档内容的格式转换，支持 MDX 语法的解析和渲染。\n\n### 侧边栏组件\n\n#### docs-sidebar.tsx\n\n侧边栏组件 (`docs/src/components/docs-sidebar.tsx`) 负责渲染文档导航界面，提供以下功能：\n\n- 文档分类展示\n- 当前页面高亮\n- 可折叠的分类组\n- 响应式布局支持\n\n## 内容结构\n\n### 主要文档分类\n\n根据项目结构，文档站点包含以下主要分类：\n\n| 分类名称 | 内容范围 | 源文件位置 |\n|----------|----------|------------|\n| 核心指南 | 基本使用、工作流、最佳实践 | `skill-data/core/` |\n| Slack 集成 | Slack 工作空间自动化 | `skill-data/slack/` |\n| 探索测试 | QA 测试和缺陷追踪 | `skill-data/dogfood/` |\n| 更新日志 | 版本发布说明 | `docs/src/app/changelog/page.mdx` |\n\n### 文档模板结构\n\n每个技能文档遵循统一模板格式：\n\n```markdown\n# 技能标题\n\n## 使用前置条件\n- 环境要求\n- 依赖安装\n\n## 快速开始\n- 基础命令\n- 常见工作流\n\n## 参考资料\n- 详细命令列表\n- 参数说明\n```\n\n## 变更日志管理\n\n### CHANGELOG.md 结构\n\n项目使用 `CHANGELOG.md` 管理版本变更记录，包含以下标准章节：\n\n- **新功能 (New Features)** - 新增功能说明\n- **错误修复 (Bug Fixes)** - 问题修复记录\n- **改进 (Improvements)** - 优化和增强说明\n- **贡献者 (Contributors)** - 版本贡献者列表\n\n### 文档变更日志同步\n\n文档站点的变更日志 (`docs/src/app/changelog/page.mdx`) 与主 `CHANGELOG.md` 保持同步，但使用不同的格式约定：\n\n- 版本号添加 `v` 前缀（如 `v0.24.0`）\n- 包含完整的发布日期\n- 使用 `---` 分隔符区分版本条目\n\n```markdown\n## v0.24.0\n\n<p className=\"text-[#888] text-sm\">March 30, 2026</p>\n\n---\n```\n\n## 开发指南\n\n### 本地开发\n\n文档站点的开发和运行需要以下步骤：\n\n1. 进入文档目录：`cd docs`\n2. 安装依赖：`npm install`\n3. 启动开发服务器：`npm run dev`\n\n### 构建流程\n\n构建文档站点时，Next.js 会执行以下操作：\n\n1. 扫描 `docs/src/app/` 目录下的所有页面\n2. 处理 MDX/Markdown 内容文件\n3. 应用 `mdx-to-markdown.ts` 定义的转换规则\n4. 生成静态 HTML 文件用于部署\n\n## 相关资源\n\n| 资源类型 | 路径 | 描述 |\n|----------|------|------|\n| 配置文件 | `docs/next.config.mjs` | Next.js 构建配置 |\n| 布局组件 | `docs/src/app/layout.tsx` | 根布局定义 |\n| 导航逻辑 | `docs/src/lib/docs-navigation.ts` | 导航结构管理 |\n| 转换模块 | `docs/src/lib/mdx-to-markdown.ts` | 内容格式转换 |\n| 侧边栏 | `docs/src/components/docs-sidebar.tsx` | 导航界面组件 |\n\n## 技术要点\n\n### 内容同步机制\n\n文档站点内容与 `skill-data/` 目录下的源文件保持紧密关联。CLI 工具通过 `agent-browser skills get` 命令动态加载技能内容，确保文档与实际安装版本一致。\n\n### 响应式设计\n\n文档站点采用响应式设计策略：\n\n- 桌面端：侧边栏固定显示，主体内容居中\n- 移动端：侧边栏收起，通过汉堡菜单触发\n- 断点配置：使用 Tailwind CSS 标准的响应式断点\n\n### 无障碍支持\n\n站点实现基本的无障碍特性：\n\n- 语义化 HTML 标签\n- 键盘导航支持\n- 足够的颜色对比度\n- ARIA 标签配置\n\n---\n\n<a id='installation-build'></a>\n\n## 安装与构建\n\n### 相关页面\n\n相关主题：[项目介绍](#introduction), [CLI 命令参考](#cli-commands)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [scripts/build-all-platforms.sh](https://github.com/vercel-labs/agent-browser/blob/main/scripts/build-all-platforms.sh)\n- [scripts/copy-native.js](https://github.com/vercel-labs/agent-browser/blob/main/scripts/copy-native.js)\n- [cli/build.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/build.rs)\n- [docker/Dockerfile.build](https://github.com/vercel-labs/agent-browser/blob/main/docker/Dockerfile.build)\n- [docker/docker-compose.yml](https://github.com/vercel-labs/agent-browser/blob/main/docker/docker-compose.yml)\n- [pnpm-lock.yaml](https://github.com/vercel-labs/agent-browser/blob/main/pnpm-lock.yaml)\n</details>\n\n# 安装与构建\n\n本页面详细介绍 agent-browser 项目的安装依赖、环境配置、源码构建流程以及多平台部署方案。agent-browser 是一个基于 Rust 实现的核心浏览器自动化守护进程，配合 TypeScript/React 前端组件构成完整的浏览器控制工具链。\n\n## 系统要求\n\n### 硬件与操作系统\n\n| 组件 | 最低要求 | 推荐配置 |\n|------|---------|----------|\n| CPU | 2 核 | 4 核及以上 |\n| 内存 | 4 GB | 8 GB |\n| 磁盘空间 | 2 GB | 10 GB（包含 Chromium） |\n| 操作系统 | macOS 10.15+ / Linux (glibc 2.17+) / Windows 10+ | 最新稳定版 |\n\nagent-browser 支持 macOS (Intel/Apple Silicon)、Linux (x86_64/aarch64) 和 Windows (x86_64) 三大平台。项目使用 Rust 语言实现核心引擎，前端采用 TypeScript + React 技术栈，通过 pnpm 作为包管理器。资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n### 必需依赖\n\n```bash\n# Rust 工具链 (使用 rustup 安装)\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Node.js (v18+)\n# 推荐使用 nvm 或 fnm 管理版本\n\n# pnpm (v8+)\nnpm install -g pnpm\n\n# Chrome/Chromium (用于运行时)\n# Linux: apt install chromium 或下载 Chrome for Testing\n# macOS: brew install chromium\n# Windows: 下载 Chrome for Testing\n```\n\n## 项目结构\n\n```\nagent-browser/\n├── cli/                    # Rust 核心守护进程\n│   ├── src/\n│   │   ├── native/         # 浏览器自动化核心模块\n│   │   │   ├── daemon.rs   # 守护进程主入口\n│   │   │   ├── actions.rs  # 浏览器操作指令处理\n│   │   │   ├── browser.rs  # 浏览器实例管理\n│   │   │   ├── cdp/        # Chrome DevTools Protocol 客户端\n│   │   │   ├── snapshot/   # 页面快照生成\n│   │   │   └── state/      # 会话状态管理\n│   │   ├── react/         # React 组件分析模块\n│   │   └── commands.rs     # CLI 命令解析\n│   ├── build.rs           # 构建脚本\n│   └── Cargo.toml\n├── packages/\n│   └── dashboard/          # React 前端界面\n│       ├── src/\n│       │   └── components/ # UI 组件\n│       └── package.json\n├── scripts/                # 构建辅助脚本\n│   ├── build-all-platforms.sh\n│   └── copy-native.js\n├── docker/                 # Docker 部署配置\n│   ├── Dockerfile.build\n│   └── docker-compose.yml\n└── pnpm-lock.yaml\n```\n\n资料来源：[AGENTS.md:49-53](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 环境配置\n\n### 克隆源码\n\n```bash\ngit clone https://github.com/vercel-labs/agent-browser.git\ncd agent-browser\n```\n\n### 安装 Node.js 依赖\n\n```bash\n# 安装所有 workspace 依赖\npnpm install\n\n# 仅安装前端依赖\npnpm install --filter @agent-browser/dashboard\n```\n\n项目采用 pnpm workspace 架构，所有子项目的依赖通过根目录的 `pnpm-lock.yaml` 统一锁定版本。\n\n### 配置 Rust 环境\n\n```bash\n# 验证 Rust 安装\nrustc --version\ncargo --version\n\n# 添加交叉编译工具链 (可选，用于多平台构建)\nrustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu\nrustup target add x86_64-apple-darwin aarch64-apple-darwin\nrustup target add x86_64-pc-windows-gnu\n```\n\n## 构建流程\n\n### 完整构建\n\n项目提供一键构建脚本，可同时编译所有平台的原生二进制文件和前端资源：\n\n```bash\n./scripts/build-all-platforms.sh\n```\n\n该脚本执行以下步骤：\n\n```mermaid\ngraph TD\n    A[开始构建] --> B[检查 Rust 工具链]\n    B --> C[清理旧构建产物]\n    C --> D[编译 CLI 原生二进制]\n    D --> E[复制二进制到 packages/dashboard/native]\n    E --> F[构建前端资源]\n    F --> G[生成平台特定包]\n    G --> H[完成]\n    \n    D --> D1[Linux x86_64]\n    D --> D2[Linux aarch64]\n    D --> D3[macOS Intel]\n    D --> D4[macOS Apple Silicon]\n    D --> D5[Windows x86_64]\n```\n\n资料来源：[scripts/build-all-platforms.sh](https://github.com/vercel-labs/agent-browser/blob/main/scripts/build-all-platforms.sh)\n\n### 分步构建\n\n#### 1. 编译 Rust 原生模块\n\n```bash\ncd cli\n\n# 开发构建 (快速)\ncargo build\n\n# 发布构建 (优化)\ncargo build --release\n\n# 指定目标平台\ncargo build --release --target x86_64-unknown-linux-gnu\n```\n\n构建产物位于 `cli/target/release/agent-browser` (或 `cli/target/debug/agent-browser` 用于开发)。\n\n#### 2. 复制原生二进制到前端\n\n```bash\nnode scripts/copy-native.js\n```\n\n该脚本将编译好的原生二进制文件复制到前端包的 `native/` 目录，供 Electron 或 WebAssembly 加载使用。资料来源：[scripts/copy-native.js](https://github.com/vercel-labs/agent-browser/blob/main/scripts/copy-native.js)\n\n#### 3. 构建前端界面\n\n```bash\n# 构建生产版本\npnpm build\n\n# 开发模式 (热重载)\npnpm dev\n```\n\n### 构建脚本详解\n\n`cli/build.rs` 是 Cargo 构建脚本，在编译前执行以下任务：\n\n```rust\n// 伪代码展示 build.rs 功能\nfn main() {\n    // 1. 打印版本信息\n    println!(\"cargo:rustc-env=VERSION={}\", version);\n    \n    // 2. 链接必要的系统库\n    println!(\"cargo:rustc-link-lib=ssl\");\n    println!(\"cargo:rustc-link-lib=crypto\");\n    \n    // 3. 设置编译条件\n    println!(\"cargo:rerun-if-changed=build.rs\");\n    println!(\"cargo:rerun-if-changed=Cargo.toml\");\n}\n```\n\n资料来源：[cli/build.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/build.rs)\n\n## Docker 构建\n\n### Dockerfile.build\n\n项目提供专用的 Docker 构建镜像，基于 Rust 官方镜像，包含所有交叉编译工具链：\n\n```dockerfile\nFROM rust:1.75-bookworm AS builder\n\n# 安装交叉编译目标依赖\nRUN apt-get update && apt-get install -y \\\n    gcc-arm-linux-gnueabihf \\\n    libc6-dev-armhf-cross \\\n    gcc-aarch64-linux-gnu \\\n    libc6-dev-arm64-cross \\\n    && rm -rf /var/lib/apt/lists/*\n\nWORKDIR /app\nCOPY . .\nRUN cargo build --release --target x86_64-unknown-linux-gnu\n```\n\n资料来源：[docker/Dockerfile.build](https://github.com/vercel-labs/agent-browser/blob/main/docker/Dockerfile.build)\n\n### docker-compose.yml\n\n```yaml\nversion: '3.8'\n\nservices:\n  build:\n    build:\n      context: ..\n      dockerfile: docker/Dockerfile.build\n    volumes:\n      - ../target:/app/target\n    environment:\n      - CARGO_HOME=/app/.cargo\n```\n\n资料来源：[docker/docker-compose.yml](https://github.com/vercel-labs/agent-browser/blob/main/docker/docker-compose.yml)\n\n### 使用 Docker 构建\n\n```bash\n# 构建镜像\ndocker-compose -f docker/docker-compose.yml build\n\n# 运行构建\ndocker-compose -f docker/docker-compose.yml run build\n```\n\n## 测试\n\n### 单元测试\n\n```bash\ncd cli\ncargo test\n```\n\n运行所有单元测试（约 320 个测试），这些测试执行速度快，无需启动 Chrome 实例。资料来源：[AGENTS.md:61-63](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n### 端到端测试\n\n```bash\ncd cli\ncargo test e2e -- --ignored --test-threads=1\n```\n\n端到端测试会启动真实的 headless Chrome 实例，完整测试原生守护进程命令管道。运行要求：\n\n| 要求 | 说明 |\n|------|------|\n| Chrome 必须已安装 | 用于启动 headless 浏览器实例 |\n| 串行执行 | 必须使用 `--test-threads=1` 避免 Chrome 实例冲突 |\n| 测试数量 | 共 18 个 e2e 测试 |\n\n资料来源：[AGENTS.md:68-73](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 发布流程\n\n项目使用自动化发布流程：\n\n```mermaid\ngraph LR\n    A[创建 Git Tag] --> B[CI 触发构建]\n    B --> C[编译 7 个平台二进制]\n    C --> D[发布到 npm]\n    D --> E[创建 GitHub Release]\n    \n    E --> F[从 CHANGELOG.md 提取说明]\n    F --> G[发布完成]\n```\n\n构建脚本会：\n\n1. 编译所有 7 个平台的二进制文件（macOS Intel/macOS ARM/Linux x64/Linux ARM/Windows x64 等）\n2. 发布到 npm 仓库\n3. 自动创建 GitHub Release，Release 内容从 `CHANGELOG.md` 的 `<!-- release:start -->` 和 `<!-- release:end -->` 标记之间提取\n\n资料来源：[AGENTS.md:17-21](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 常见问题\n\n### 编译错误：链接库缺失\n\n```bash\n# macOS\nbrew install openssl pkg-config\n\n# Linux (Debian/Ubuntu)\nsudo apt install libssl-dev pkg-config\n\n# Linux (Fedora/RHEL)\nsudo dnf install openssl-devel pkg-config\n```\n\n### 交叉编译失败\n\n确保已安装对应平台的交叉编译工具链：\n\n```bash\n# Linux ARM\nrustup target add aarch64-unknown-linux-gnu\nsudo apt install gcc-aarch64-linux-gnu libc6-dev-arm64-cross\n\n# macOS ARM on Linux\nrustup target add aarch64-apple-darwin\n```\n\n### Chrome/Chromium 未找到\n\nagent-browser 需要 Chrome for Testing 提供浏览器二进制。使用 `--engine` 参数指定浏览器引擎：\n\n```bash\nagent-browser --engine chrome open https://example.com\n```\n\n或通过安装命令自动下载：\n\n```bash\nagent-browser install chrome\n```\n\n## 环境变量参考\n\n| 变量名 | 作用 | 默认值 |\n|--------|------|--------|\n| `RUST_LOG` | 日志级别 | `info` |\n| `CARGO_HOME` | Cargo 缓存目录 | `~/.cargo` |\n| `TARGET_DIR` | 构建产物目录 | `cli/target` |\n| `AGENT_BROWSER_CHROMIUM_PATH` | 指定 Chromium 路径 | 自动检测 |\n\n## 构建产物\n\n成功构建后，项目生成以下产物：\n\n| 产物 | 位置 | 说明 |\n|------|------|------|\n| `agent-browser` (CLI) | `cli/target/release/` | 命令行工具主程序 |\n| Dashboard 资源 | `packages/dashboard/dist/` | 前端 Web 界面 |\n| 原生绑定 | `packages/dashboard/native/` | 跨平台二进制集合 |\n| Docker 镜像 | 本地镜像仓库 | 可部署的容器化版本 |\n\n---\n\n---\n\n## Doramagic 踩坑日志\n\n项目：vercel-labs/agent-browser\n\n摘要：发现 23 个潜在踩坑项，其中 3 个为 high/blocking；最高优先级：安装坑 - 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker。\n\n## 1. 安装坑 · 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Chrome 147.0 crashes with \"trap int3\" when running in docker\n- 对用户的影响：可能阻塞安装或首次运行。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_9045278ef5e043dcadccf9288477813c | https://github.com/vercel-labs/agent-browser/issues/1339 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 2. 安装坑 · 来源证据：Detected: Trojan:Win32/Posilod.EB!cl\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Detected: Trojan:Win32/Posilod.EB!cl\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_edbde732c7a7410e96ad0fa301e4222d | https://github.com/vercel-labs/agent-browser/issues/1281 | 来源讨论提到 windows 相关条件，需在安装/试用前复核。\n\n## 3. 运行坑 · 来源证据：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_0896b0b429c641f0b93ca9dcbbee6db8 | https://github.com/vercel-labs/agent-browser/issues/1319 | 来源讨论提到 macos 相关条件，需在安装/试用前复核。\n\n## 4. 配置坑 · 来源证据：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_32ddde976ec0445da607d0adffc5df4c | https://github.com/vercel-labs/agent-browser/issues/1349 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n\n## 5. 配置坑 · 来源证据：v0.25.5\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：v0.25.5\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_d5d23fc6d09149fbb21ee500e7a328ec | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.5 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 6. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | README/documentation is current enough for a first validation pass.\n\n## 7. 运行坑 · 来源证据：v0.25.2\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.2\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_777821422c534a2881b58523db3ac2f3 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.2 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n\n## 8. 运行坑 · 来源证据：v0.25.3\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.3\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_5c7d80190d7548b6ad87152255949f2b | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.3 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 9. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | last_activity_observed missing\n\n## 10. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n\n## 11. 安全/权限坑 · 存在安全注意事项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：No sandbox install has been executed yet; downstream must verify before user use.\n- 对用户的影响：用户安装前需要知道权限边界和敏感操作。\n- 建议检查：转成明确权限清单和安全审查提示。\n- 防护动作：安全注意事项必须面向用户前置展示。\n- 证据：risks.safety_notes | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | No sandbox install has been executed yet; downstream must verify before user use.\n\n## 12. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n\n## 13. 安全/权限坑 · 来源证据：Dashboard privileged POST routes should reject cross-origin requests\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Dashboard privileged POST routes should reject cross-origin requests\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_6acd97eb554140c28938a0eb08e44c34 | https://github.com/vercel-labs/agent-browser/issues/1345 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 14. 安全/权限坑 · 来源证据：Harden inspect-mode DevTools WebSocket handshakes\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Harden inspect-mode DevTools WebSocket handshakes\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_ab6c062eedaf466d8f40864ca24bf8ea | https://github.com/vercel-labs/agent-browser/issues/1347 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 15. 安全/权限坑 · 来源证据：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_648ff78f18f34d51a44b9176d011738f | https://github.com/vercel-labs/agent-browser/issues/1351 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 16. 安全/权限坑 · 来源证据：Per-session /api/command should require same-origin or token auth\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Per-session /api/command should require same-origin or token auth\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_d21bab57490142daba6d89ed22776087 | https://github.com/vercel-labs/agent-browser/issues/1344 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 17. 安全/权限坑 · 来源证据：Support enabling WebAuthn for passkey authentication with a virtual authenticator\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Support enabling WebAuthn for passkey authentication with a virtual authenticator\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_3a4a36591a7e45c1b85d35b020e63d5a | https://github.com/vercel-labs/agent-browser/issues/688 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 18. 安全/权限坑 · 来源证据：Windows 11: --headed not surfacing window when invoked from non-TTY context (PowerShell -File via bash 2>&1)\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Windows 11: --headed not surfacing window when invoked from non-TTY context (PowerShell -File via bash 2>&1)\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_fda08c46f8b5454e8e93b061d6d3c992 | https://github.com/vercel-labs/agent-browser/issues/1348 | 来源讨论提到 npm 相关条件，需在安装/试用前复核。\n\n## 19. 安全/权限坑 · 来源证据：v0.25.4\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.25.4\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_3b8dd03ae1104698b37da46bc0d08fb7 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.4 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 20. 安全/权限坑 · 来源证据：v0.26.0\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.26.0\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_9db59c2c8cb44b39916cf70c0c9eae22 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.26.0 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 21. 安全/权限坑 · 来源证据：v0.27.0\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.27.0\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_98f07270bf7b43658e439416c320183e | https://github.com/vercel-labs/agent-browser/releases/tag/v0.27.0 | 来源讨论提到 npm 相关条件，需在安装/试用前复核。\n\n## 22. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | issue_or_pr_quality=unknown\n\n## 23. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | release_recency=unknown\n\n<!-- canonical_name: vercel-labs/agent-browser; human_manual_source: deepwiki_human_wiki -->\n",
      "markdown_key": "agent-browser",
      "pages": "draft",
      "source_refs": [
        {
          "evidence_id": "github_repo:1132001614",
          "kind": "repo",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/vercel-labs/agent-browser"
        },
        {
          "evidence_id": "art_cccb1b4ae4964f20859d2ae468a3f039",
          "kind": "docs",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/vercel-labs/agent-browser#readme"
        }
      ],
      "summary": "DeepWiki/Human Wiki 完整输出，末尾追加 Discovery Agent 踩坑日志。",
      "title": "agent-browser 说明书",
      "toc": [
        "https://github.com/vercel-labs/agent-browser 项目说明书",
        "目录",
        "项目介绍",
        "概述",
        "核心特性",
        "系统架构",
        "命令体系",
        "元素引用系统",
        "Doramagic 踩坑日志"
      ]
    }
  },
  "quality_gate": {
    "blocking_gaps": [],
    "category_confidence": "medium",
    "compile_status": "ready_for_review",
    "five_assets_present": true,
    "install_sandbox_verified": true,
    "missing_evidence": [],
    "next_action": "publish to Doramagic.ai project surfaces",
    "prompt_preview_boundary_ok": true,
    "publish_status": "publishable",
    "quick_start_verified": true,
    "repo_clone_verified": true,
    "repo_commit": "82eadcee41240b1c8477870f846bc8528e77a8a6",
    "repo_inspection_error": null,
    "repo_inspection_files": [
      "pnpm-lock.yaml",
      "package.json",
      "README.md",
      "docs/pnpm-lock.yaml",
      "docs/package.json",
      "docs/tsconfig.json",
      "docs/components.json",
      "docs/public/schema.json",
      "docs/src/lib/utils.ts",
      "docs/src/lib/search-index.ts",
      "docs/src/lib/mdx-to-markdown.ts",
      "docs/src/lib/github.ts",
      "docs/src/lib/page-titles.ts",
      "docs/src/lib/rate-limit.ts",
      "docs/src/lib/docs-navigation.ts",
      "docs/src/lib/page-metadata.ts",
      "docs/src/app/page.mdx",
      "docs/src/app/configuration/page.mdx",
      "docs/src/app/skills/page.mdx",
      "docs/src/app/dashboard/page.mdx",
      "docs/src/app/streaming/page.mdx",
      "docs/src/app/installation/page.mdx",
      "docs/src/app/quick-start/page.mdx",
      "docs/src/app/profiler/page.mdx",
      "docs/src/app/cdp-mode/page.mdx",
      "docs/src/app/snapshots/page.mdx",
      "docs/src/app/native-mode/page.mdx",
      "docs/src/app/sessions/page.mdx",
      "docs/src/app/changelog/page.mdx",
      "docs/src/app/next/page.mdx",
      "docs/src/app/ios/page.mdx",
      "docs/src/app/diffing/page.mdx",
      "docs/src/app/security/page.mdx",
      "docs/src/app/commands/page.mdx",
      "docs/src/app/selectors/page.mdx",
      "docs/src/app/api/docs-markdown/route.ts",
      "docs/src/app/api/docs-chat/route.ts",
      "docs/src/app/api/search/route.ts",
      "docs/src/app/providers/browserless/page.mdx",
      "docs/src/app/providers/kernel/page.mdx"
    ],
    "repo_inspection_verified": true,
    "review_reasons": [],
    "tag_count_ok": true,
    "unsupported_claims": []
  },
  "schema_version": "0.1",
  "user_assets": {
    "ai_context_pack": {
      "asset_id": "ai_context_pack",
      "filename": "AI_CONTEXT_PACK.md",
      "markdown": "# agent-browser - Doramagic AI Context Pack\n\n> 定位：安装前体验与判断资产。它帮助宿主 AI 有一个好的开始，但不代表已经安装、执行或验证目标项目。\n\n## 充分原则\n\n- **充分原则，不是压缩原则**：AI Context Pack 应该充分到让宿主 AI 在开工前理解项目价值、能力边界、使用入口、风险和证据来源；它可以分层组织，但不以最短摘要为目标。\n- **压缩策略**：只压缩噪声和重复内容，不压缩会影响判断和开工质量的上下文。\n\n## 给宿主 AI 的使用方式\n\n你正在读取 Doramagic 为 agent-browser 编译的 AI Context Pack。请把它当作开工前上下文：帮助用户理解适合谁、能做什么、如何开始、哪些必须安装后验证、风险在哪里。不要声称你已经安装、运行或执行了目标项目。\n\n## Claim 消费规则\n\n- **事实来源**：Repo Evidence + Claim/Evidence Graph；Human Wiki 只提供显著性、术语和叙事结构。\n- **事实最低状态**：`supported`\n- `supported`：可以作为项目事实使用，但回答中必须引用 claim_id 和证据路径。\n- `weak`：只能作为低置信度线索，必须要求用户继续核实。\n- `inferred`：只能用于风险提示或待确认问题，不能包装成项目事实。\n- `unverified`：不得作为事实使用，应明确说证据不足。\n- `contradicted`：必须展示冲突来源，不得替用户强行选择一个版本。\n\n## 它最适合谁\n\n- **正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**：README 或插件配置提到多个宿主 AI。 证据：`README.md` Claim：`clm_0004` supported 0.86\n- **希望把专业流程带进宿主 AI 的用户**：仓库包含 Skill 文档。 证据：`skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md`, `skill-data/dogfood/SKILL.md`, `skill-data/electron/SKILL.md` 等 Claim：`clm_0005` supported 0.86\n\n## 它能做什么\n\n- **AI Skill / Agent 指令资产库**（可做安装前预览）：项目包含可被宿主 AI 读取的 Skill 或 Agent 指令文件，可用于把专业流程带入 Claude、Codex、Cursor 等宿主。 证据：`skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md`, `skill-data/dogfood/SKILL.md`, `skill-data/electron/SKILL.md` 等 Claim：`clm_0001` supported 0.86\n- **多宿主安装与分发**（需要安装后验证）：项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0002` supported 0.86\n- **命令行启动或安装流程**（需要安装后验证）：项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 证据：`AGENTS.md`, `README.md` Claim：`clm_0003` supported 0.86\n\n## 怎么开始\n\n- `npm install -g agent-browser` 证据：`README.md` Claim：`clm_0006` supported 0.86\n- `npm install agent-browser` 证据：`README.md` Claim：`clm_0007` supported 0.86\n- `git clone https://github.com/vercel-labs/agent-browser` 证据：`README.md` Claim：`clm_0008` supported 0.86\n- `npx skills add vercel-labs/agent-browser` 证据：`README.md` Claim：`clm_0009` supported 0.86\n- `npm install -g appium` 证据：`README.md` Claim：`clm_0010` supported 0.86\n- `npx opensrc <package>           # npm package (e.g., npx opensrc zod)` 证据：`AGENTS.md` Claim：`clm_0011` supported 0.86\n- `npx opensrc pypi:<package>      # Python package (e.g., npx opensrc pypi:requests)` 证据：`AGENTS.md` Claim：`clm_0012` supported 0.86\n- `npx opensrc crates:<package>    # Rust crate (e.g., npx opensrc crates:serde)` 证据：`AGENTS.md` Claim：`clm_0013` supported 0.86\n- `npx opensrc <owner>/<repo>      # GitHub repo (e.g., npx opensrc vercel/ai)` 证据：`AGENTS.md` Claim：`clm_0014` supported 0.86\n\n## 继续前判断卡\n\n- **当前建议**：需要管理员/安全审批\n- **为什么**：继续前可能涉及密钥、账号、外部服务或敏感上下文，建议先经过管理员或安全审批。\n\n### 30 秒判断\n\n- **现在怎么做**：需要管理员/安全审批\n- **最小安全下一步**：先跑 Prompt Preview；若涉及凭证或企业环境，先审批再试装\n- **先别相信**：真实输出质量不能在安装前相信。\n- **继续会触碰**：命令执行、宿主 AI 配置、本地环境或项目文件\n\n### 现在可以相信\n\n- **适合人群线索：正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`README.md` Claim：`clm_0004` supported 0.86\n- **适合人群线索：希望把专业流程带进宿主 AI 的用户**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md`, `skill-data/dogfood/SKILL.md`, `skill-data/electron/SKILL.md` 等 Claim：`clm_0005` supported 0.86\n- **能力存在：AI Skill / Agent 指令资产库**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md`, `skill-data/dogfood/SKILL.md`, `skill-data/electron/SKILL.md` 等 Claim：`clm_0001` supported 0.86\n- **能力存在：多宿主安装与分发**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0002` supported 0.86\n- **能力存在：命令行启动或安装流程**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`AGENTS.md`, `README.md` Claim：`clm_0003` supported 0.86\n- **存在 Quick Start / 安装命令线索**（supported）：可以相信项目文档出现过启动或安装入口；不要因此直接在主力环境运行。 证据：`README.md` Claim：`clm_0006` supported 0.86\n\n### 现在还不能相信\n\n- **真实输出质量不能在安装前相信。**（unverified）：Prompt Preview 只能展示引导方式，不能证明真实项目中的结果质量。\n- **宿主 AI 版本兼容性不能在安装前相信。**（unverified）：Claude、Cursor、Codex、Gemini 等宿主加载规则和版本差异必须在真实环境验证。\n- **不会污染现有宿主 AI 行为，不能直接相信。**（inferred）：Skill、plugin、AGENTS/CLAUDE/GEMINI 指令可能改变宿主 AI 的默认行为。 证据：`.claude-plugin/marketplace.json`, `AGENTS.md`, `skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md` 等\n- **可安全回滚不能默认相信。**（unverified）：除非项目明确提供卸载和恢复说明，否则必须先在隔离环境验证。\n- **真实安装后是否与用户当前宿主 AI 版本兼容？**（unverified）：兼容性只能通过实际宿主环境验证。 证据：`.claude-plugin/marketplace.json`\n- **项目输出质量是否满足用户具体任务？**（unverified）：安装前预览只能展示流程和边界，不能替代真实评测。\n- **安装命令是否需要网络、权限或全局写入？**（unverified）：这影响企业环境和个人环境的安装风险。 证据：`README.md`\n\n### 继续会触碰什么\n\n- **命令执行**：包管理器、网络下载、本地插件目录、项目配置或用户主目录。 原因：运行第一条命令就可能产生环境改动；必须先判断是否值得跑。 证据：`AGENTS.md`, `README.md`\n- **宿主 AI 配置**：Claude/Codex/Cursor/Gemini/OpenCode 等宿主的 plugin、Skill 或规则加载配置。 原因：宿主配置会改变 AI 后续工作方式，可能和用户已有规则冲突。 证据：`.claude-plugin/marketplace.json`, `AGENTS.md`, `skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md` 等\n- **本地环境或项目文件**：安装结果、插件缓存、项目配置或本地依赖目录。 原因：安装前无法证明写入范围和回滚方式，需要隔离验证。 证据：`.claude-plugin/marketplace.json`, `AGENTS.md`, `README.md`\n- **环境变量 / API Key**：项目入口文档明确出现 API key、token、secret 或账号凭证配置。 原因：如果真实安装需要凭证，应先使用测试凭证并经过权限/合规判断。 证据：`CHANGELOG.md`, `README.md`, `evals/README.md`, `evals/lib/claude.ts` 等\n- **宿主 AI 上下文**：AI Context Pack、Prompt Preview、Skill 路由、风险规则和项目事实。 原因：导入上下文会影响宿主 AI 后续判断，必须避免把未验证项包装成事实。\n\n### 最小安全下一步\n\n- **先跑 Prompt Preview**：用安装前交互式试用判断工作方式是否匹配，不需要授权或改环境。（适用：任何项目都适用，尤其是输出质量未知时。）\n- **只在隔离目录或测试账号试装**：避免安装命令污染主力宿主 AI、真实项目或用户主目录。（适用：存在命令执行、插件配置或本地写入线索时。）\n- **先备份宿主 AI 配置**：Skill、plugin、规则文件可能改变 Claude/Cursor/Codex 的默认行为。（适用：存在插件 manifest、Skill 或宿主规则入口时。）\n- **不要使用真实生产凭证**：环境变量/API key 一旦进入宿主或工具链，可能产生账号和合规风险。（适用：出现 API、TOKEN、KEY、SECRET 等环境线索时。）\n- **安装后只验证一个最小任务**：先验证加载、兼容、输出质量和回滚，再决定是否深用。（适用：准备从试用进入真实工作流时。）\n\n### 退出方式\n\n- **保留安装前状态**：记录原始宿主配置和项目状态，后续才能判断是否可恢复。\n- **准备移除宿主 plugin / Skill / 规则入口**：如果试装后行为异常，可以把宿主 AI 恢复到试装前状态。\n- **记录安装命令和写入路径**：没有明确卸载说明时，至少要知道哪些目录或配置需要手动清理。\n- **准备撤销测试 API key 或 token**：测试凭证泄露或误用时，可以快速止损。\n- **如果没有回滚路径，不进入主力环境**：不可回滚是继续前阻断项，不应靠信任或运气继续。\n\n## 哪些只能预览\n\n- 解释项目适合谁和能做什么\n- 基于项目文档演示典型对话流程\n- 帮助用户判断是否值得安装或继续研究\n\n## 哪些必须安装后验证\n\n- 真实安装 Skill、插件或 CLI\n- 执行脚本、修改本地文件或访问外部服务\n- 验证真实输出质量、性能和兼容性\n\n## 边界与风险判断卡\n\n- **把安装前预览误认为真实运行**：用户可能高估项目已经完成的配置、权限和兼容性验证。 处理方式：明确区分 prompt_preview_can_do 与 runtime_required。 Claim：`clm_0015` inferred 0.45\n- **宿主 AI 插件或 Skill 规则冲突**：新规则可能改变用户现有宿主 AI 的工作方式。 处理方式：安装前先检查插件 manifest 和 Skill 文件，必要时隔离测试。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0016` supported 0.86\n- **命令执行会修改本地环境**：安装命令可能写入用户主目录、宿主插件目录或项目配置。 处理方式：先在隔离环境或测试账号中运行。 证据：`AGENTS.md`, `README.md` Claim：`clm_0017` supported 0.86\n- **待确认**：真实安装后是否与用户当前宿主 AI 版本兼容？。原因：兼容性只能通过实际宿主环境验证。\n- **待确认**：项目输出质量是否满足用户具体任务？。原因：安装前预览只能展示流程和边界，不能替代真实评测。\n- **待确认**：安装命令是否需要网络、权限或全局写入？。原因：这影响企业环境和个人环境的安装风险。\n\n## 开工前工作上下文\n\n### 加载顺序\n\n- 先读取 how_to_use.host_ai_instruction，建立安装前判断资产的边界。\n- 读取 claim_graph_summary，确认事实来自 Claim/Evidence Graph，而不是 Human Wiki 叙事。\n- 再读取 intended_users、capabilities 和 quick_start_candidates，判断用户是否匹配。\n- 需要执行具体任务时，优先查 role_skill_index，再查 evidence_index。\n- 遇到真实安装、文件修改、网络访问、性能或兼容性问题时，转入 risk_card 和 boundaries.runtime_required。\n\n### 任务路由\n\n- **AI Skill / Agent 指令资产库**：先基于 role_skill_index / evidence_index 帮用户挑选可用角色、Skill 或工作流。 边界：可做安装前 Prompt 体验。 证据：`skill-data/agentcore/SKILL.md`, `skill-data/core/SKILL.md`, `skill-data/dogfood/SKILL.md`, `skill-data/electron/SKILL.md` 等 Claim：`clm_0001` supported 0.86\n- **多宿主安装与分发**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`.claude-plugin/marketplace.json` Claim：`clm_0002` supported 0.86\n- **命令行启动或安装流程**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`AGENTS.md`, `README.md` Claim：`clm_0003` supported 0.86\n\n### 上下文规模\n\n- 文件总数：315\n- 重要文件覆盖：40/315\n- 证据索引条目：70\n- 角色 / Skill 条目：7\n\n### 证据不足时的处理\n\n- **missing_evidence**：说明证据不足，要求用户提供目标文件、README 段落或安装后验证记录；不要补全事实。\n- **out_of_scope_request**：说明该任务超出当前 AI Context Pack 证据范围，并建议用户先查看 Human Manual 或真实安装后验证。\n- **runtime_request**：给出安装前检查清单和命令来源，但不要替用户执行命令或声称已执行。\n- **source_conflict**：同时展示冲突来源，标记为待核实，不要强行选择一个版本。\n\n## Prompt Recipes\n\n### 适配判断\n\n- 目标：判断这个项目是否适合用户当前任务。\n- 预期输出：适配结论、关键理由、证据引用、安装前可预览内容、必须安装后验证内容、下一步建议。\n\n```text\n请基于 agent-browser 的 AI Context Pack，先问我 3 个必要问题，然后判断它是否适合我的任务。回答必须包含：适合谁、能做什么、不能做什么、是否值得安装、证据来自哪里。所有项目事实必须引用 evidence_refs、source_paths 或 claim_id。\n```\n\n### 安装前体验\n\n- 目标：让用户在安装前感受核心工作流，同时避免把预览包装成真实能力或营销承诺。\n- 预期输出：一段带边界标签的体验剧本、安装后验证清单和谨慎建议；不含真实运行承诺或强营销表述。\n\n```text\n请把 agent-browser 当作安装前体验资产，而不是已安装工具或真实运行环境。\n\n请严格输出四段：\n1. 先问我 3 个必要问题。\n2. 给出一段“体验剧本”：用 [安装前可预览]、[必须安装后验证]、[证据不足] 三种标签展示它可能如何引导工作流。\n3. 给出安装后验证清单：列出哪些能力只有真实安装、真实宿主加载、真实项目运行后才能确认。\n4. 给出谨慎建议：只能说“值得继续研究/试装”“先补充信息后再判断”或“不建议继续”，不得替项目背书。\n\n硬性边界：\n- 不要声称已经安装、运行、执行测试、修改文件或产生真实结果。\n- 不要写“自动适配”“确保通过”“完美适配”“强烈建议安装”等承诺性表达。\n- 如果描述安装后的工作方式，必须使用“如果安装成功且宿主正确加载 Skill，它可能会……”这种条件句。\n- 体验剧本只能写成“示例台词/假设流程”：使用“可能会询问/可能会建议/可能会展示”，不要写“已写入、已生成、已通过、正在运行、正在生成”。\n- Prompt Preview 不负责给安装命令；如用户准备试装，只能提示先阅读 Quick Start 和 Risk Card，并在隔离环境验证。\n- 所有项目事实必须来自 supported claim、evidence_refs 或 source_paths；inferred/unverified 只能作风险或待确认项。\n\n```\n\n### 角色 / Skill 选择\n\n- 目标：从项目里的角色或 Skill 中挑选最匹配的资产。\n- 预期输出：候选角色或 Skill 列表，每项包含适用场景、证据路径、风险边界和是否需要安装后验证。\n\n```text\n请读取 role_skill_index，根据我的目标任务推荐 3-5 个最相关的角色或 Skill。每个推荐都要说明适用场景、可能输出、风险边界和 evidence_refs。\n```\n\n### 风险预检\n\n- 目标：安装或引入前识别环境、权限、规则冲突和质量风险。\n- 预期输出：环境、权限、依赖、许可、宿主冲突、质量风险和未知项的检查清单。\n\n```text\n请基于 risk_card、boundaries 和 quick_start_candidates，给我一份安装前风险预检清单。不要替我执行命令，只说明我应该检查什么、为什么检查、失败会有什么影响。\n```\n\n### 宿主 AI 开工指令\n\n- 目标：把项目上下文转成一次对话开始前的宿主 AI 指令。\n- 预期输出：一段边界明确、证据引用明确、适合复制给宿主 AI 的开工前指令。\n\n```text\n请基于 agent-browser 的 AI Context Pack，生成一段我可以粘贴给宿主 AI 的开工前指令。这段指令必须遵守 not_runtime=true，不能声称项目已经安装、运行或产生真实结果。\n```\n\n\n## 角色 / Skill 索引\n\n- 共索引 7 个角色 / Skill / 项目文档条目。\n\n- **agentcore**（skill）：Run agent-browser on AWS Bedrock AgentCore cloud browsers. Use when the user wants to use AgentCore, run browser automation on AWS, use a cloud browser with AWS credentials, or needs a managed browser session backed by AWS infrastructure. Triggers include \"use agentcore\", \"run on AWS\", \"cloud browser with AWS\", \"bedrock browser\", \"agentcore session\", or any task requiring AWS-hosted browser automation. 激活提示：当用户任务与“agentcore”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skill-data/agentcore/SKILL.md`\n- **core**（skill）：Core agent-browser usage guide. Read this before running any agent-browser commands. Covers the snapshot-and-ref workflow, navigating pages, interacting with elements click, fill, type, select , extracting text and data, taking screenshots, managing tabs, handling forms and auth, waiting for content, running multiple browser sessions in parallel, and troubleshooting common failures. Use when the user asks to interac… 激活提示：当用户任务与“core”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skill-data/core/SKILL.md`\n- **dogfood**（skill）：Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to \"dogfood\", \"QA\", \"exploratory test\", \"find issues\", \"bug hunt\", \"test this app/site/platform\", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be… 激活提示：当用户任务与“dogfood”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skill-data/dogfood/SKILL.md`\n- **electron**（skill）：Automate Electron desktop apps VS Code, Slack, Discord, Figma, Notion, Spotify, etc. using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include \"automate Slack app\", \"control VS Code\", \"interact with Discord app\", \"test this Electron app\", \"connect… 激活提示：当用户任务与“electron”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skill-data/electron/SKILL.md`\n- **slack**（skill）：Interact with Slack workspaces using browser automation. Use when the user needs to check unread channels, navigate Slack, send messages, extract data, find information, search conversations, or automate any Slack task. Triggers include \"check my Slack\", \"what channels have unreads\", \"send a message to\", \"search Slack for\", \"extract from Slack\", \"find who said\", or any task requiring programmatic Slack interaction. 激活提示：当用户任务与“slack”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skill-data/slack/SKILL.md`\n- **vercel-sandbox**（skill）：Run agent-browser + Chrome inside Vercel Sandbox microVMs for browser automation from any Vercel-deployed app. Use when the user needs browser automation in a Vercel app Next.js, SvelteKit, Nuxt, Remix, Astro, etc. , wants to run headless Chrome without binary size limits, needs persistent browser sessions across commands, or wants ephemeral isolated browser environments. Triggers include \"Vercel Sandbox browser\", \"… 激活提示：当用户任务与“vercel-sandbox”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skill-data/vercel-sandbox/SKILL.md`\n- **agent-browser**（skill）：Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to \"open a website\", \"fill out a form\", \"click a button\", \"take a screenshot\", \"scrape data from a page\", \"test this web app\", \"login to a site\", \"automate… 激活提示：当用户任务与“agent-browser”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/agent-browser/SKILL.md`\n\n## 证据索引\n\n- 共索引 70 条证据。\n\n- **AGENTS.md**（documentation）：Instructions for AI coding agents working with this codebase. 证据：`AGENTS.md`\n- **agent-browser**（documentation）：Browser automation CLI for AI agents. Fast native Rust CLI. 证据：`README.md`\n- **agent-browser Daemon Benchmarks**（documentation）：Compares command latency and system metrics between the Node.js daemon published npm version and the Rust native daemon built from source , running inside a Vercel Sandbox https://vercel.com/docs/sandbox microVM. 证据：`benchmarks/README.md`\n- **Skills Evals**（documentation）：Tests whether the thin SKILL.md + CLI-served skills approach works: do agents load the right skill via agent-browser skills get , then produce correct agent-browser commands? 证据：`evals/README.md`\n- **agent-browser Environments**（documentation）：A demo of agent-browser running in a Vercel Sandbox. Pick a URL, take a screenshot or accessibility snapshot, and watch each command execute in real time. 证据：`examples/environments/README.md`\n- **Package**（package_manifest）：{ \"name\": \"agent-browser-benchmarks\", \"version\": \"1.0.0\", \"private\": true, \"type\": \"module\", \"scripts\": { \"bench\": \"tsx bench.ts\" }, \"dependencies\": { \"@vercel/sandbox\": \"^1.8.0\", \"tsx\": \"^4.19.0\" } } 证据：`benchmarks/package.json`\n- **Package**（package_manifest）：{ \"name\": \"docs\", \"version\": \"0.1.0\", \"private\": true, \"scripts\": { \"dev\": \"portless agent-browser next dev\", \"build\": \"next build\", \"start\": \"next start\", \"lint\": \"eslint\" }, \"dependencies\": { \"@ai-sdk/react\": \"^3.0.80\", \"@mdx-js/loader\": \"^3.1.1\", \"@mdx-js/mdx\": \"^3.1.1\", \"@mdx-js/react\": \"^3.1.1\", \"@next/mdx\": \"^16.1.6\", \"@streamdown/code\": \"^1.0.2\", \"@upstash/ratelimit\": \"^2.0.8\", \"@upstash/redis\": \"^1.36.2\", \"@vercel/analytics\": \"^1.6.1\", \"@vercel/speed-insights\": \"^1.3.1\", \"ai\": \"^6.0.78\", \"bash-tool\": \"^1.3.14\", \"clsx\": \"^2.1.1\", \"geist\": \"^1.7.0\", \"just-bash\": \"^2.9.6\", \"next\": \"16.1.1\", \"next-themes\": \"^0.4.6\", \"radix-ui\": \"^1.4.3\", \"react\": \"19.2.3\", \"react-dom\": \"19.2.3\", \"shiki\"… 证据：`docs/package.json`\n- **Package**（package_manifest）：{ \"name\": \"agent-browser-evals\", \"version\": \"1.0.0\", \"private\": true, \"type\": \"module\", \"scripts\": { \"eval\": \"bun run run.ts\", \"eval:claude\": \"bun run run.ts --provider claude\", \"eval:codex\": \"bun run run.ts --provider codex\", \"eval:judge\": \"bun run run.ts --judge\", \"eval:json\": \"bun run run.ts --json\" }, \"devDependencies\": { \"bun-types\": \"^1.3.12\" } } 证据：`evals/package.json`\n- **Package**（package_manifest）：{ \"name\": \"agent-browser\", \"version\": \"0.27.0\", \"description\": \"Browser automation CLI for AI agents\", \"type\": \"module\", \"files\": \"bin\", \"scripts\", \"skill-data\", \"skills\" , \"bin\": { \"agent-browser\": \"./bin/agent-browser.js\" }, \"scripts\": { \"version:sync\": \"node scripts/sync-version.js\", \"version\": \"npm run version:sync && git add cli/Cargo.toml\", \"build:native\": \"npm run version:sync && cargo build --release --manifest-path cli/Cargo.toml && node scripts/copy-native.js\", \"build:linux\": \"npm run version:sync && docker compose -f docker/docker-compose.yml run --rm build-linux\", \"build:macos\": \"npm run version:sync && cargo build --release --manifest-path cli/Cargo.toml --target aarch64-apple-… 证据：`package.json`\n- **Package**（package_manifest）：{ \"name\": \"agent-browser-environments\", \"version\": \"0.1.0\", \"private\": true, \"scripts\": { \"dev\": \"next dev\", \"build\": \"next build\", \"start\": \"next start\", \"lint\": \"next lint\" }, \"dependencies\": { \"@base-ui/react\": \"^1.2.0\", \"@tailwindcss/postcss\": \"^4.2.1\", \"@upstash/ratelimit\": \"^2.0.8\", \"@upstash/redis\": \"^1.36.4\", \"@vercel/sandbox\": \"^1.0.0\", \"class-variance-authority\": \"^0.7.1\", \"clsx\": \"^2.1.1\", \"dotenv\": \"^17.3.1\", \"geist\": \"^1.7.0\", \"lucide-react\": \"^0.577.0\", \"next\": \"^16.1.6\", \"postcss\": \"^8.5.8\", \"react\": \"^19.2.4\", \"react-dom\": \"^19.2.4\", \"react-resizable-panels\": \"^4.7.2\", \"shadcn\": \"^4.0.2\", \"tailwind-merge\": \"^3.5.0\", \"tailwindcss\": \"^4.2.1\", \"tw-animate-css\": \"^1.4.0\" }, \"dev… 证据：`examples/environments/package.json`\n- **Package**（package_manifest）：{ \"name\": \"dashboard\", \"version\": \"0.27.0\", \"private\": true, \"scripts\": { \"dev\": \"next dev\", \"build\": \"next build\", \"start\": \"next start\" }, \"dependencies\": { \"@ai-sdk/react\": \"^3.0.148\", \"@radix-ui/react-popover\": \"^1.1.15\", \"ai\": \"^6.0.146\", \"class-variance-authority\": \"^0.7.1\", \"clsx\": \"^2.1.1\", \"cmdk\": \"^1.1.1\", \"jotai\": \"^2.19.0\", \"lucide-react\": \"^1.7.0\", \"next\": \"16.1.1\", \"next-themes\": \"^0.4.6\", \"radix-ui\": \"^1.4.3\", \"react\": \"^19.1.0\", \"react-dom\": \"^19.1.0\", \"react-resizable-panels\": \"^4.7.6\", \"shadcn\": \"^4.1.0\", \"streamdown\": \"^2.5.0\", \"tailwind-merge\": \"^3.5.0\", \"tw-animate-css\": \"^1.4.0\" }, \"devDependencies\": { \"@tailwindcss/postcss\": \"^4.1.3\", \"@types/node\": \"^22.14.0\", \"@type… 证据：`packages/dashboard/package.json`\n- **AWS Bedrock AgentCore**（skill_instruction）：Run agent-browser on cloud browser sessions hosted by AWS Bedrock AgentCore. All standard agent-browser commands work identically; the only difference is where the browser runs. 证据：`skill-data/agentcore/SKILL.md`\n- **agent-browser core**（skill_instruction）：Fast browser automation CLI for AI agents. Chrome/Chromium via CDP, no Playwright or Puppeteer dependency. Accessibility-tree snapshots with compact @eN refs let agents interact with pages in ~200-400 tokens instead of parsing raw HTML. 证据：`skill-data/core/SKILL.md`\n- **Dogfood**（skill_instruction）：Systematically explore a web application, find issues, and produce a report with full reproduction evidence for every finding. 证据：`skill-data/dogfood/SKILL.md`\n- **Electron App Automation**（skill_instruction）：Automate any Electron desktop app using agent-browser. Electron apps are built on Chromium and expose a Chrome DevTools Protocol CDP port that agent-browser can connect to, enabling the same snapshot-interact workflow used for web pages. 证据：`skill-data/electron/SKILL.md`\n- **Slack Automation**（skill_instruction）：Interact with Slack workspaces to check messages, extract data, and automate common tasks. 证据：`skill-data/slack/SKILL.md`\n- **Browser Automation with Vercel Sandbox**（skill_instruction）：Browser Automation with Vercel Sandbox 证据：`skill-data/vercel-sandbox/SKILL.md`\n- **agent-browser**（skill_instruction）：Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with accessibility-tree snapshots and compact @eN element refs. 证据：`skills/agent-browser/SKILL.md`\n- **Marketplace**（structured_config）：{ \"$schema\": \"https://anthropic.com/claude-code/marketplace.schema.json\", \"name\": \"agent-browser\", \"description\": \"Browser automation for AI agents\", \"owner\": { \"name\": \"Vercel\", \"email\": \"support@vercel.com\" }, \"plugins\": { \"name\": \"agent-browser\", \"description\": \"Automates browser interactions for web testing, form filling, screenshots, and data extraction\", \"source\": \"./\", \"strict\": false, \"skills\": \"./skills/agent-browser\" , \"category\": \"development\" } } 证据：`.claude-plugin/marketplace.json`\n- **License**（source_file）：Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ 证据：`LICENSE`\n- **agent-browser**（documentation）：- React introspection - First-class React DevTools integration with new react tree , react inspect , react renders start stop , and react suspense commands for full component-tree visibility, per-fiber props/hooks/state inspection, render profiling with mount/re-render counts and change details, and Suspense boundary classification with root-cause grouping and recommendations. React DevTools hook is vendored MIT and embedded in the binary with zero runtime dependencies 1257 - Web Vitals - New vitals url command that reports Core Web Vitals LCP, CLS, TTFB, FCP, INP plus React hydration phases for any page 1257 - SPA navigation - New pushstate command for client-side SPA navigations without a… 证据：`CHANGELOG.md`\n- **Authentication Patterns**（documentation）：Login flows, session persistence, OAuth, 2FA, and authenticated browsing. 证据：`skill-data/core/references/authentication.md`\n- **Command Reference**（documentation）：Complete reference for all agent-browser commands. For quick start and common patterns, see SKILL.md. 证据：`skill-data/core/references/commands.md`\n- **Profiling**（documentation）：Capture Chrome DevTools performance profiles during browser automation for performance analysis. 证据：`skill-data/core/references/profiling.md`\n- **Session Management**（documentation）：Multiple isolated browser sessions with state persistence and concurrent browsing. 证据：`skill-data/core/references/session-management.md`\n- **Snapshot and Refs**（documentation）：Compact element references that reduce context usage dramatically for AI agents. 证据：`skill-data/core/references/snapshot-refs.md`\n- **Trust boundaries**（documentation）：Safety rules that apply to every agent-browser task, across all sites and frameworks. Read before driving a real user's browser session. 证据：`skill-data/core/references/trust-boundaries.md`\n- **Video Recording**（documentation）：Capture browser automation as video for debugging, documentation, or verification. 证据：`skill-data/core/references/video-recording.md`\n- **Issue Taxonomy**（documentation）：Reference for categorizing issues found during dogfooding. Read this at the start of a dogfood session to calibrate what to look for. 证据：`skill-data/dogfood/references/issue-taxonomy.md`\n- **Dogfood Report: {APP NAME}**（documentation）：Field Value ------- ------- Date {DATE} App URL {URL} Session {SESSION NAME} Scope {SCOPE} 证据：`skill-data/dogfood/templates/dogfood-report-template.md`\n- **Common Slack Tasks & Patterns**（documentation）：Reference guide for common automations and data extraction patterns when interacting with Slack. 证据：`skill-data/slack/references/slack-tasks.md`\n- **Slack Analysis Report**（documentation）：Date : DATE Workspace : WORKSPACE NAME Analyst : YOUR NAME Scope : WHAT YOU ANALYZED 证据：`skill-data/slack/templates/slack-report-template.md`\n- **Agent Browser.Schema**（structured_config）：{ \"$schema\": \"http://json-schema.org/draft-07/schema \", \"title\": \"Agent Browser Configuration\", \"description\": \"Configuration file for agent-browser e.g., agent-browser.json or ~/.agent-browser/config.json \", \"type\": \"object\", \"properties\": { \"headed\": { \"type\": \"boolean\", \"description\": \"Show browser window instead of running headless.\" }, \"json\": { \"type\": \"boolean\", \"description\": \"Output in JSON format.\" }, \"debug\": { \"type\": \"boolean\", \"description\": \"Enable debug output.\" }, \"session\": { \"type\": \"string\", \"description\": \"Session identifier.\" }, \"sessionName\": { \"type\": \"string\", \"description\": \"Auto-save/load state persistence name.\" }, \"executablePath\": { \"type\": \"string\", \"descripti… 证据：`agent-browser.schema.json`\n- **Tsconfig**（structured_config）：{ \"compilerOptions\": { \"target\": \"ES2022\", \"module\": \"ESNext\", \"moduleResolution\": \"bundler\", \"esModuleInterop\": true, \"strict\": true, \"skipLibCheck\": true, \"outDir\": \"dist\", \"declaration\": true }, \"include\": \" .ts\" } 证据：`benchmarks/tsconfig.json`\n- **Components**（structured_config）：{ \"$schema\": \"https://ui.shadcn.com/schema.json\", \"style\": \"new-york\", \"rsc\": true, \"tsx\": true, \"tailwind\": { \"config\": \"\", \"css\": \"src/app/globals.css\", \"baseColor\": \"neutral\", \"cssVariables\": true, \"prefix\": \"\" }, \"iconLibrary\": \"lucide\", \"aliases\": { \"components\": \"@/components\", \"utils\": \"@/lib/utils\", \"ui\": \"@/components/ui\", \"lib\": \"@/lib\", \"hooks\": \"@/hooks\" }, \"registries\": {} } 证据：`docs/components.json`\n- **Tsconfig**（structured_config）：{ \"compilerOptions\": { \"target\": \"ES2017\", \"lib\": \"dom\", \"dom.iterable\", \"esnext\" , \"allowJs\": true, \"skipLibCheck\": true, \"strict\": true, \"noEmit\": true, \"esModuleInterop\": true, \"module\": \"esnext\", \"moduleResolution\": \"bundler\", \"resolveJsonModule\": true, \"isolatedModules\": true, \"jsx\": \"react-jsx\", \"incremental\": true, \"plugins\": { \"name\": \"next\" } , \"paths\": { \"@/ \": \"./src/ \" } }, \"include\": \"next-env.d.ts\", \" / .ts\", \" / .tsx\", \".next/types/ / .ts\", \".next/dev/types/ / .ts\", \" / .mts\" , \"exclude\": \"node modules\" } 证据：`docs/tsconfig.json`\n- **Tsconfig**（structured_config）：{ \"compilerOptions\": { \"target\": \"ESNext\", \"module\": \"ESNext\", \"moduleResolution\": \"bundler\", \"esModuleInterop\": true, \"strict\": true, \"skipLibCheck\": true, \"outDir\": \"dist\", \"declaration\": true, \"types\": \"bun-types\" }, \"include\": \" .ts\", \"lib/ / .ts\", \"cases/ / .ts\" } 证据：`evals/tsconfig.json`\n- **Browser Protocol**（structured_config）：{ \"version\": { \"major\": \"1\", \"minor\": \"3\" }, \"domains\": { \"domain\": \"Accessibility\", \"experimental\": true, \"dependencies\": \"DOM\" , \"types\": { \"id\": \"AXNodeId\", \"description\": \"Unique accessibility node identifier.\", \"type\": \"string\" }, { \"id\": \"AXValueType\", \"description\": \"Enum of possible property types.\", \"type\": \"string\", \"enum\": \"boolean\", \"tristate\", \"booleanOrUndefined\", \"idref\", \"idrefList\", \"integer\", \"node\", \"nodeList\", \"number\", \"string\", \"computedString\", \"token\", \"tokenList\", \"domRelation\", \"role\", \"internalRole\", \"valueUndefined\" }, { \"id\": \"AXValueSourceType\", \"description\": \"Enum of possible property sources.\", \"type\": \"string\", \"enum\": \"attribute\", \"implicit\", \"style\", \"con… 证据：`cli/cdp-protocol/browser_protocol.json`\n- **Js Protocol**（structured_config）：{ \"version\": { \"major\": \"1\", \"minor\": \"3\" }, \"domains\": { \"domain\": \"Console\", \"description\": \"This domain is deprecated - use Runtime or Log instead.\", \"deprecated\": true, \"dependencies\": \"Runtime\" , \"types\": { \"id\": \"ConsoleMessage\", \"description\": \"Console message.\", \"type\": \"object\", \"properties\": { \"name\": \"source\", \"description\": \"Message source.\", \"type\": \"string\", \"enum\": \"xml\", \"javascript\", \"network\", \"console-api\", \"storage\", \"appcache\", \"rendering\", \"security\", \"other\", \"deprecation\", \"worker\" }, { \"name\": \"level\", \"description\": \"Message severity.\", \"type\": \"string\", \"enum\": \"log\", \"warning\", \"error\", \"debug\", \"info\" }, { \"name\": \"text\", \"description\": \"Message text.\", \"type\":… 证据：`cli/cdp-protocol/js_protocol.json`\n- **Schema**（structured_config）：{ \"$schema\": \"http://json-schema.org/draft-07/schema \", \"title\": \"Agent Browser Configuration\", \"description\": \"Configuration file for agent-browser e.g., agent-browser.json or ~/.agent-browser/config.json \", \"type\": \"object\", \"properties\": { \"headed\": { \"type\": \"boolean\", \"description\": \"Show browser window instead of running headless.\" }, \"json\": { \"type\": \"boolean\", \"description\": \"Output in JSON format.\" }, \"debug\": { \"type\": \"boolean\", \"description\": \"Enable debug output.\" }, \"session\": { \"type\": \"string\", \"description\": \"Session identifier.\" }, \"sessionName\": { \"type\": \"string\", \"description\": \"Auto-save/load state persistence name.\" }, \"executablePath\": { \"type\": \"string\", \"descripti… 证据：`docs/public/schema.json`\n- **Components**（structured_config）：{ \"$schema\": \"https://ui.shadcn.com/schema.json\", \"style\": \"base-nova\", \"rsc\": true, \"tsx\": true, \"tailwind\": { \"config\": \"\", \"css\": \"app/globals.css\", \"baseColor\": \"neutral\", \"cssVariables\": true, \"prefix\": \"\" }, \"iconLibrary\": \"lucide\", \"rtl\": false, \"aliases\": { \"components\": \"@/components\", \"utils\": \"@/lib/utils\", \"ui\": \"@/components/ui\", \"lib\": \"@/lib\", \"hooks\": \"@/hooks\" }, \"menuColor\": \"default\", \"menuAccent\": \"subtle\", \"registries\": {} } 证据：`examples/environments/components.json`\n- **Tsconfig**（structured_config）：{ \"compilerOptions\": { \"target\": \"ES2017\", \"lib\": \"dom\", \"dom.iterable\", \"esnext\" , \"allowJs\": true, \"skipLibCheck\": true, \"strict\": true, \"noEmit\": true, \"esModuleInterop\": true, \"module\": \"esnext\", \"moduleResolution\": \"bundler\", \"resolveJsonModule\": true, \"isolatedModules\": true, \"jsx\": \"react-jsx\", \"incremental\": true, \"plugins\": { \"name\": \"next\" } , \"paths\": { \"@/ \": \"./ \" } }, \"include\": \"next-env.d.ts\", \" / .ts\", \" / .tsx\", \".next/types/ / .ts\", \".next/dev/types/ / .ts\" , \"exclude\": \"node modules\", \"server\" } 证据：`examples/environments/tsconfig.json`\n- **Components**（structured_config）：{ \"$schema\": \"https://ui.shadcn.com/schema.json\", \"style\": \"radix-nova\", \"rsc\": true, \"tsx\": true, \"tailwind\": { \"config\": \"\", \"css\": \"src/app/globals.css\", \"baseColor\": \"neutral\", \"cssVariables\": true, \"prefix\": \"\" }, \"iconLibrary\": \"lucide\", \"rtl\": false, \"aliases\": { \"components\": \"@/components\", \"utils\": \"@/lib/utils\", \"ui\": \"@/components/ui\", \"lib\": \"@/lib\", \"hooks\": \"@/hooks\" }, \"menuColor\": \"default\", \"menuAccent\": \"subtle\", \"registries\": {} } 证据：`packages/dashboard/components.json`\n- **Tsconfig**（structured_config）：{ \"compilerOptions\": { \"target\": \"ES2017\", \"lib\": \"dom\", \"dom.iterable\", \"esnext\" , \"allowJs\": true, \"skipLibCheck\": true, \"strict\": true, \"noEmit\": true, \"esModuleInterop\": true, \"module\": \"esnext\", \"moduleResolution\": \"bundler\", \"resolveJsonModule\": true, \"isolatedModules\": true, \"jsx\": \"react-jsx\", \"incremental\": true, \"plugins\": { \"name\": \"next\" } , \"paths\": { \"@/ \": \"./src/ \" } }, \"include\": \"next-env.d.ts\", \" / .ts\", \" / .tsx\", \".next/types/ / .ts\", \".next/dev/types/ / .ts\" , \"exclude\": \"node modules\" } 证据：`packages/dashboard/tsconfig.json`\n- **Dependencies**（source_file）：Native binaries keep the launcher scripts bin/agent-browser- bin/.install-method !bin/agent-browser !bin/agent-browser.cmd 证据：`.gitignore`\n- **Pre Commit**（source_file）：node scripts/sync-version.js git add cli/Cargo.toml cli/Cargo.lock 证据：`.husky/pre-commit`\n- **.prettierrc**（source_file）：{ \"semi\": true, \"singleQuote\": true, \"trailingComma\": \"es5\", \"printWidth\": 100, \"tabWidth\": 2 } 证据：`.prettierrc`\n- **Vercel Sandbox credentials**（source_file）：Vercel Sandbox credentials SANDBOX VERCEL TOKEN= SANDBOX VERCEL TEAM ID= SANDBOX VERCEL PROJECT ID= 证据：`benchmarks/.env.example`\n- **benchmarks/.gitignore**（source_file）：node modules/ results.json 证据：`benchmarks/.gitignore`\n- **Bench**（source_file）：/ Node.js Daemon vs Rust Native Daemon benchmark. Compares the last published npm version Node.js daemon against the Rust-only build from a given branch, running real agent-browser commands inside a Vercel Sandbox. Captures: - Command latency per-scenario, with warmup + measured iterations + stddev - Cold start time first launch to daemon ready - Daemon memory RSS, peak RSS separated from browser memory - Daemon CPU time - Process tree daemon + browser children - Binary and distribution size on disk Usage: pnpm bench default: 10 iterations, 1 warmup pnpm bench -- --iterations 20 override iterations pnpm bench -- --warmup 2 override warmup count pnpm bench -- --json write results.json pnpm b… 证据：`benchmarks/bench.ts`\n- **Scenarios**（source_file）：/ Benchmark scenarios for comparing Node.js daemon vs Rust native daemon. Each scenario defines CLI commands run via sandbox.runCommand \"agent-browser\", args . Setup/teardown commands run once and are not timed. The commands array is timed over N iterations. / 证据：`benchmarks/scenarios.ts`\n- **!/usr/bin/env node**（source_file）：/ Cross-platform CLI wrapper for agent-browser This wrapper enables npx support on Windows where shell scripts don't work. For global installs, postinstall.js patches the shims to invoke the native binary directly zero overhead . / 证据：`bin/agent-browser.js`\n- **Cargo**（source_file）：package name = \"agent-browser\" version = \"0.27.0\" edition = \"2021\" description = \"Fast browser automation CLI for AI agents\" license = \"Apache-2.0\" repository = \"https://github.com/vercel-labs/agent-browser\" homepage = \"https://agent-browser.dev\" readme = \"../README.md\" keywords = \"browser\", \"automation\", \"ai\", \"cdp\", \"chrome\" categories = \"command-line-utilities\", \"web-programming\" 证据：`cli/Cargo.toml`\n- **allow dead code**（source_file）：use std::collections::HashSet; use std::env; use std::fs; use std::path::Path; 证据：`cli/build.rs`\n- **Multi-platform Rust cross-compilation image**（source_file）：Multi-platform Rust cross-compilation image FROM rust:1.85-bookworm 证据：`docker/Dockerfile.build`\n- **Docker Compose for building agent-browser**（source_file）：Docker Compose for building agent-browser Usage: docker compose -f docker/docker-compose.yml run build-linux docker compose -f docker/docker-compose.yml run build-windows Note: macOS builds should be done natively on macOS for compatibility. 证据：`docker/docker-compose.yml`\n- **See https://help.github.com/articles/ignoring-files/ for more about ignoring files.**（source_file）：See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 证据：`docs/.gitignore`\n- **Eslint.Config**（source_file）：import { defineConfig, globalIgnores } from \"eslint/config\"; import nextVitals from \"eslint-config-next/core-web-vitals\"; import nextTs from \"eslint-config-next/typescript\"; 证据：`docs/eslint.config.mjs`\n- **Mdx Components**（source_file）：import type { MDXComponents } from \"mdx/types\"; import Link from \"next/link\"; import { CodeBlock } from \"@/components/code-block\"; 证据：`docs/mdx-components.tsx`\n- **Next.Config**（source_file）：/ @type {import 'next' .NextConfig} / const nextConfig = { pageExtensions: \"js\", \"jsx\", \"ts\", \"tsx\", \"md\", \"mdx\" , serverExternalPackages: \"just-bash\", \"bash-tool\" , }; 证据：`docs/next.config.mjs`\n- 其余 10 条证据见 `AI_CONTEXT_PACK.json` 或 `EVIDENCE_INDEX.json`。\n\n## 宿主 AI 必须遵守的规则\n\n- **把本资产当作开工前上下文，而不是运行环境。**：AI Context Pack 只包含证据化项目理解，不包含目标项目的可执行状态。 证据：`AGENTS.md`, `README.md`, `benchmarks/README.md`\n- **回答用户时区分可预览内容与必须安装后才能验证的内容。**：安装前体验的消费者价值来自降低误装和误判，而不是伪装成真实运行。 证据：`AGENTS.md`, `README.md`, `benchmarks/README.md`\n\n## 用户开工前应该回答的问题\n\n- 你准备在哪个宿主 AI 或本地环境中使用它？\n- 你只是想先体验工作流，还是准备真实安装？\n- 你最在意的是安装成本、输出质量、还是和现有规则的冲突？\n\n## 验收标准\n\n- 所有能力声明都能回指到 evidence_refs 中的文件路径。\n- AI_CONTEXT_PACK.md 没有把预览包装成真实运行。\n- 用户能在 3 分钟内看懂适合谁、能做什么、如何开始和风险边界。\n\n---\n\n## Doramagic Context Augmentation\n\n下面内容用于强化 Repomix/AI Context Pack 主体。Human Manual 只提供阅读骨架；踩坑日志会被转成宿主 AI 必须遵守的工作约束。\n\n## Human Manual 骨架\n\n使用规则：这里只是项目阅读路线和显著性信号，不是事实权威。具体事实仍必须回到 repo evidence / Claim Graph。\n\n宿主 AI 硬性规则：\n- 不得把页标题、章节顺序、摘要或 importance 当作项目事实证据。\n- 解释 Human Manual 骨架时，必须明确说它只是阅读路线/显著性信号。\n- 能力、安装、兼容性、运行状态和风险判断必须引用 repo evidence、source path 或 Claim Graph。\n\n- **项目介绍**：importance `high`\n  - source_paths: README.md, package.json, pnpm-workspace.yaml\n- **系统架构**：importance `high`\n  - source_paths: cli/Cargo.toml, cli/src/main.rs, cli/src/native/mod.rs, packages/dashboard/next.config.ts, docs/next.config.mjs\n- **CLI 命令参考**：importance `high`\n  - source_paths: cli/src/commands.rs, cli/src/flags.rs, cli/src/native/actions.rs, cli/src/native/interaction.rs\n- **浏览器自动化核心**：importance `high`\n  - source_paths: cli/src/native/cdp/client.rs, cli/src/native/cdp/chrome.rs, cli/src/native/element.rs, cli/src/native/screenshot.rs, cli/src/native/snapshot.rs\n- **React 组件审查**：importance `medium`\n  - source_paths: cli/src/native/react/mod.rs, cli/src/native/react/tree.rs, cli/src/native/react/renders.rs, cli/src/native/react/suspense.rs, cli/src/native/react/vitals.rs\n- **会话与认证管理**：importance `high`\n  - source_paths: cli/src/native/state.rs, cli/src/native/storage.rs, cli/src/native/auth.rs, cli/src/native/cookies.rs, cli/src/native/policy.rs\n- **网络监控与拦截**：importance `medium`\n  - source_paths: cli/src/native/network.rs, cli/src/native/stream/http.rs, cli/src/native/stream/websocket.rs\n- **仪表板组件**：importance `medium`\n  - source_paths: packages/dashboard/src/app/page.tsx, packages/dashboard/src/components/activity-feed.tsx, packages/dashboard/src/components/chat-panel.tsx, packages/dashboard/src/components/network-panel.tsx, packages/dashboard/src/store/chat.ts\n\n## Repo Inspection Evidence / 源码检查证据\n\n- repo_clone_verified: true\n- repo_inspection_verified: true\n- repo_commit: `82eadcee41240b1c8477870f846bc8528e77a8a6`\n- inspected_files: `pnpm-lock.yaml`, `package.json`, `README.md`, `docs/pnpm-lock.yaml`, `docs/package.json`, `docs/tsconfig.json`, `docs/components.json`, `docs/public/schema.json`, `docs/src/lib/utils.ts`, `docs/src/lib/search-index.ts`, `docs/src/lib/mdx-to-markdown.ts`, `docs/src/lib/github.ts`, `docs/src/lib/page-titles.ts`, `docs/src/lib/rate-limit.ts`, `docs/src/lib/docs-navigation.ts`, `docs/src/lib/page-metadata.ts`, `docs/src/app/page.mdx`, `docs/src/app/configuration/page.mdx`, `docs/src/app/skills/page.mdx`, `docs/src/app/dashboard/page.mdx`\n\n宿主 AI 硬性规则：\n- 没有 repo_clone_verified=true 时，不得声称已经读过源码。\n- 没有 repo_inspection_verified=true 时，不得把 README/docs/package 文件判断写成事实。\n- 没有 quick_start_verified=true 时，不得声称 Quick Start 已跑通。\n\n## Doramagic Pitfall Constraints / 踩坑约束\n\n这些规则来自 Doramagic 发现、验证或编译过程中的项目专属坑点。宿主 AI 必须把它们当作工作约束，而不是普通说明文字。\n\n### Constraint 1: 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker\n\n- Trigger: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Chrome 147.0 crashes with \"trap int3\" when running in docker\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能阻塞安装或首次运行。\n- Evidence: community_evidence:github | cevd_9045278ef5e043dcadccf9288477813c | https://github.com/vercel-labs/agent-browser/issues/1339 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 2: 来源证据：Detected: Trojan:Win32/Posilod.EB!cl\n\n- Trigger: GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Detected: Trojan:Win32/Posilod.EB!cl\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_edbde732c7a7410e96ad0fa301e4222d | https://github.com/vercel-labs/agent-browser/issues/1281 | 来源讨论提到 windows 相关条件，需在安装/试用前复核。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 3: 来源证据：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n\n- Trigger: GitHub 社区证据显示该项目存在一个运行相关的待验证问题：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_0896b0b429c641f0b93ca9dcbbee6db8 | https://github.com/vercel-labs/agent-browser/issues/1319 | 来源讨论提到 macos 相关条件，需在安装/试用前复核。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 4: 来源证据：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n\n- Trigger: GitHub 社区证据显示该项目存在一个配置相关的待验证问题：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n- Host AI rule: 来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_32ddde976ec0445da607d0adffc5df4c | https://github.com/vercel-labs/agent-browser/issues/1349 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 5: 来源证据：v0.25.5\n\n- Trigger: GitHub 社区证据显示该项目存在一个配置相关的待验证问题：v0.25.5\n- Host AI rule: 来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_d5d23fc6d09149fbb21ee500e7a328ec | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.5 | 来源类型 github_release 暴露的待验证使用条件。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 6: 能力判断依赖假设\n\n- Trigger: README/documentation is current enough for a first validation pass.\n- Host AI rule: 将假设转成下游验证清单。\n- Why it matters: 假设不成立时，用户拿不到承诺的能力。\n- Evidence: capability.assumptions | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | README/documentation is current enough for a first validation pass.\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 7: 来源证据：v0.25.2\n\n- Trigger: GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.2\n- Host AI rule: 来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_777821422c534a2881b58523db3ac2f3 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.2 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 8: 来源证据：v0.25.3\n\n- Trigger: GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.3\n- Host AI rule: 来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- Why it matters: 可能增加新用户试用和生产接入成本。\n- Evidence: community_evidence:github | cevd_5c7d80190d7548b6ad87152255949f2b | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.3 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 9: 维护活跃度未知\n\n- Trigger: 未记录 last_activity_observed。\n- Host AI rule: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Why it matters: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Evidence: evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | last_activity_observed missing\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 10: 下游验证发现风险项\n\n- Trigger: no_demo\n- Host AI rule: 进入安全/权限治理复核队列。\n- Why it matters: 下游已经要求复核，不能在页面中弱化。\n- Evidence: downstream_validation.risk_items | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n",
      "summary": "给宿主 AI 的上下文和工作边界。",
      "title": "AI Context Pack / 带给我的 AI"
    },
    "boundary_risk_card": {
      "asset_id": "boundary_risk_card",
      "filename": "BOUNDARY_RISK_CARD.md",
      "markdown": "# Boundary & Risk Card / 安装前决策卡\n\n项目：vercel-labs/agent-browser\n\n## Doramagic 试用结论\n\n当前结论：可以进入发布前推荐检查；首次使用仍应从最小权限、临时目录和可回滚配置开始。\n\n## 用户现在可以做\n\n- 可以先阅读 Human Manual，理解项目目的和主要工作流。\n- 可以复制 Prompt Preview 做安装前体验；这只验证交互感，不代表真实运行。\n- 可以把官方 Quick Start 命令放到隔离环境中验证，不要直接进主力环境。\n\n## 现在不要做\n\n- 不要把 Prompt Preview 当成项目实际运行结果。\n- 不要把 metadata-only validation 当成沙箱安装验证。\n- 不要把未验证能力写成“已支持、已跑通、可放心安装”。\n- 不要在首次试用时交出生产数据、私人文件、真实密钥或主力配置目录。\n\n## 安装前检查\n\n- 宿主 AI 是否匹配：local_cli\n- 官方安装入口状态：已发现官方入口\n- 是否在临时目录、临时宿主或容器中验证：必须是\n- 是否能回滚配置改动：必须能\n- 是否需要 API Key、网络访问、读写文件或修改宿主配置：未确认前按高风险处理\n- 是否记录了安装命令、实际输出和失败日志：必须记录\n\n## 当前阻塞项\n\n- 无阻塞项。\n\n## 项目专属踩坑\n\n- 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker（high）：可能阻塞安装或首次运行。 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 来源证据：Detected: Trojan:Win32/Posilod.EB!cl（high）：可能增加新用户试用和生产接入成本。 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 来源证据：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse（high）：可能增加新用户试用和生产接入成本。 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 来源证据：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash（medium）：可能增加新用户试用和生产接入成本。 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 来源证据：v0.25.5（medium）：可能增加新用户试用和生产接入成本。 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n\n## 风险与权限提示\n\n- no_demo: medium\n\n## 证据缺口\n\n- 暂未发现结构化证据缺口。\n",
      "summary": "安装、权限、验证和推荐前风险。",
      "title": "Boundary & Risk Card / 边界与风险卡"
    },
    "human_manual": {
      "asset_id": "human_manual",
      "filename": "HUMAN_MANUAL.md",
      "markdown": "# https://github.com/vercel-labs/agent-browser 项目说明书\n\n生成时间：2026-05-13 13:40:16 UTC\n\n## 目录\n\n- [项目介绍](#introduction)\n- [系统架构](#architecture-overview)\n- [CLI 命令参考](#cli-commands)\n- [浏览器自动化核心](#browser-automation)\n- [React 组件审查](#react-introspection)\n- [会话与认证管理](#sessions-authentication)\n- [网络监控与拦截](#network-monitoring)\n- [仪表板组件](#dashboard-components)\n- [文档站点](#documentation-site)\n- [安装与构建](#installation-build)\n\n<a id='introduction'></a>\n\n## 项目介绍\n\n### 相关页面\n\n相关主题：[系统架构](#architecture-overview), [CLI 命令参考](#cli-commands)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n- [skill-data/core/references/commands.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/commands.md)\n- [skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n- [skills/agent-browser/SKILL.md](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md)\n- [skill-data/dogfood/SKILL.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/dogfood/SKILL.md)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n- [cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n</details>\n\n# 项目介绍\n\n## 概述\n\nagent-browser 是由 Vercel Labs 开发的高性能浏览器自动化工具，采用 Rust 原生实现，不依赖 Node.js 包装层。它通过 Chrome DevTools Protocol (CDP) 直接控制 Chrome/Chromium 浏览器，提供无障碍树快照（Accessibility Tree Snapshot）技术和元素引用系统，实现可靠的浏览器交互能力。资料来源：[skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n\n## 核心特性\n\n### 技术架构\n\n| 特性 | 说明 |\n|------|------|\n| 实现语言 | Rust 原生代码 |\n| 浏览器引擎 | Chrome/Chromium via CDP |\n| 无依赖 | 无需 Playwright 或 Puppeteer |\n| 会话管理 | 支持多会话、状态持久化 |\n| 认证存储 | 内置认证库（Authentication Vault） |\n| 视频录制 | 支持操作过程录制 |\n| 引擎选择 | 支持 `--engine` 切换 Chrome 与 Lightpanda |\n\n资料来源：[AGENTS.md:43-46](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n### 跨平台兼容性\n\nagent-browser 可与任意 AI Agent 配合使用，包括 Cursor、Claude Code、Codex、Continue、Windsurf 等主流工具。它提供了标准化的 CLI 接口，使 AI Agent 能够通过自然语言指令控制浏览器完成复杂任务。资料来源：[skills/agent-browser/SKILL.md:15-19](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md)\n\n## 系统架构\n\n### 架构组件\n\n```mermaid\ngraph TD\n    A[AI Agent] --> B[agent-browser CLI]\n    B --> C[Browser Automation Daemon]\n    C --> D[CDP Client]\n    D --> E[Chrome/Chromium]\n    \n    C --> F[Snapshot Engine]\n    C --> G[State Manager]\n    C --> H[React DevTools Hook]\n    \n    F --> I[Accessibility Tree]\n    G --> J[Session Storage]\n    G --> K[Auth Vault]\n    \n    L[Dashboard] --> C\n    L --> M[Extensions Panel]\n    L --> N[Network Panel]\n```\n\n### 核心模块\n\n项目的核心代码位于 `cli/src/native/` 目录下，包含以下关键模块：\n\n| 模块 | 路径 | 功能 |\n|------|------|------|\n| daemon | `cli/src/native/` | 守护进程，处理命令调度 |\n| actions | `cli/src/native/actions.rs` | 浏览器操作动作处理 |\n| browser | `cli/src/native/` | 浏览器实例管理 |\n| CDP client | `cli/src/native/` | Chrome DevTools Protocol 通信 |\n| snapshot | `cli/src/native/` | 无障碍树快照生成 |\n| state | `cli/src/native/` | 会话状态管理 |\n| react | `cli/src/native/react/` | React 开发者工具集成 |\n\n资料来源：[AGENTS.md:43](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 命令体系\n\n### 核心命令分类\n\nagent-browser 提供模块化的命令体系，涵盖浏览器操作的各个方面：\n\n```mermaid\ngraph TD\n    A[agent-browser] --> B[导航命令]\n    A --> C[元素交互]\n    A --> D[浏览器设置]\n    A --> E[网络控制]\n    A --> F[存储管理]\n    A --> G[React工具]\n    \n    B --> B1[open/goto]\n    B --> B2[back/forward]\n    B --> B3[reload/pushstate]\n    \n    C --> C1[click/tap]\n    C --> C2[fill/setvalue]\n    C --> C3[snapshot/innertext]\n    C --> C4[find/highlight]\n    \n    D --> D1[viewport/device]\n    D --> D2[timezone/locale]\n    D --> D3[geolocation/permissions]\n```\n\n### 常用命令速查\n\n| 命令 | 说明 | 示例 |\n|------|------|------|\n| `open <url>` | 启动并导航 | `agent-browser open https://example.com` |\n| `snapshot` | 获取无障碍树快照 | `agent-browser snapshot -i` |\n| `click @e1` | 通过引用点击元素 | `agent-browser click @e1` |\n| `screenshot` | 截图 | `agent-browser screenshot --annotate output.png` |\n| `find` | 查找元素 | `agent-browser find role button Submit` |\n| `network route` | 拦截网络请求 | `agent-browser network route * --abort --resource-type script` |\n| `cookies` | 管理 Cookie | `agent-browser cookies set --curl file.curl` |\n\n资料来源：[cli/src/output.rs:1-30](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n## 元素引用系统\n\n### 快照与引用机制\n\nagent-browser 的核心创新在于其无障碍树快照和元素引用系统。用户必须先获取快照才能进行元素交互，确保引用始终有效：\n\n```bash\n# 正确流程\nagent-browser open https://example.com\nagent-browser snapshot -i          # 先获取引用\nagent-browser click @e1            # 使用引用\n\n# 错误流程\nagent-browser open https://example.com\nagent-browser click @e1            # 引用尚未存在！\n```\n\n资料来源：[skill-data/core/references/snapshot-refs.md:1-15](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n\n### 引用格式\n\n引用格式清晰展示元素的关键属性：\n\n```\n@e1 [button] \"Submit\"                    # 按钮元素\n@e2 [input type=\"email\"]                 # 邮箱输入框\n@e3 [div role=\"article\"] \"标题文本\"       # 文章容器\n```\n\n## 专精技能\n\n### 技能体系架构\n\n```mermaid\ngraph LR\n    A[agent-browser skills] --> B[core]\n    A --> C[electron]\n    A --> D[slack]\n    A --> E[dogfood]\n    A --> F[vercel-sandbox]\n    A --> G[agentcore]\n```\n\n### 技能说明\n\n| 技能 | 用途 | 使用命令 |\n|------|------|----------|\n| core | 核心工作流和通用模式 | `agent-browser skills get core` |\n| electron | Electron 桌面应用自动化 | `agent-browser skills get electron` |\n| slack | Slack 工作区自动化 | `agent-browser skills get slack` |\n| dogfood | 探索性测试 / QA / Bug 追踪 | `agent-browser skills get dogfood` |\n| vercel-sandbox | Vercel Sandbox 微虚拟机环境 | `agent-browser skills get vercel-sandbox` |\n| agentcore | AWS Bedrock AgentCore 云浏览器 | `agent-browser skills get agentcore` |\n\n资料来源：[skills/agent-browser/SKILL.md:5-25](https://github.com/vercel-labs/agent-browser/blob/main/skills/agent-browser/SKILL.md)\n\n## React 开发者工具\n\n### React 渲染分析\n\nagent-browser 集成了 React 开发者工具，能够分析 React 应用的渲染状态和性能瓶颈：\n\n```rust\n// React 挂起状态类型权重\npub enum SuspendType {\n    ClientHook => 7,      // 最高优先级\n    RequestApi => 6,\n    ServerFetch => 5,\n    Cache => 4,\n    Stream => 3,\n    Unknown => 2,\n    Framework => 1,       // 最低优先级\n}\n```\n\n### 阻塞组件识别\n\n系统通过 `BoundaryKind` 分类识别阻塞渲染的组件类型：\n\n| 类型 | 说明 | 权重 |\n|------|------|------|\n| RouteSegment | 路由段边界 | 3 |\n| ExplicitSuspense | 显式 Suspense 边界 | 2 |\n| Component | 普通组件 | 1 |\n\n资料来源：[cli/src/native/react/suspense.rs:1-50](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n\n## 可观测性仪表板\n\n### Dashboard 功能\n\nDashboard 提供了完整的浏览器状态可视化界面：\n\n```mermaid\ngraph TD\n    A[Dashboard] --> B[Extensions Panel]\n    A --> C[Network Panel]\n    A --> D[Snapshot Display]\n    A --> E[Step Indicators]\n    \n    B --> B1[Extension List]\n    B --> B2[Extension Details]\n    \n    C --> C1[Request List]\n    C --> C2[HAR Export]\n    C --> C3[Request Details]\n```\n\n### 面板功能\n\n| 面板 | 功能 |\n|------|------|\n| Extensions Panel | 列出已加载的 Chrome 扩展，显示描述和路径 |\n| Network Panel | 监控网络请求，支持 HAR 导出和请求详情查看 |\n| Snapshot Display | 展示无障碍树快照，支持步骤折叠展示 |\n| Step Indicators | 显示执行步骤的详细信息 |\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx)\n\n## 安装与配置\n\n### 安装命令\n\n```bash\n# 安装 agent-browser\nagent-browser install\n\n# Chrome 自动下载\n# 从 Chrome for Testing 直接获取\n```\n\n### 预导航设置\n\n支持在首次导航前进行环境配置：\n\n```bash\nagent-browser batch \\\n  '[\"open\"]' \\\n  '[\"network\",\"route\",\"*\",\"--abort\",\"--resource-type\",\"script\"]' \\\n  '[\"cookies\",\"set\",\"--curl\",\"cookies.curl\",\"--domain\",\"localhost\"]' \\\n  '[\"navigate\",\"http://localhost:3000/target\"]'\n```\n\n资料来源：[skill-data/core/references/commands.md:20-35](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/commands.md)\n\n## 测试体系\n\n### 测试类型\n\n| 测试类型 | 命令 | 说明 |\n|----------|------|------|\n| 单元测试 | `cd cli && cargo test` | 快速测试，约 320 个测试用例，无需 Chrome |\n| 端到端测试 | `cd cli && cargo test e2e -- --ignored --test-threads=1` | 18 个 e2e 测试，启动真实 Chrome 实例 |\n\n### 测试要求\n\n- Chrome 必须已安装\n- e2e 测试必须串行运行 (`--test-threads=1`) 以避免 Chrome 实例冲突\n\n资料来源：[AGENTS.md:52-62](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 发布流程\n\n### 发布自动化\n\nCI 系统在 PR 合并后自动执行以下操作：\n\n1. 比较 `package.json` 版本与 npm 版本\n2. 构建全部 7 个平台的二进制文件\n3. 发布到 npm\n4. 自动创建 GitHub Release\n\n### 版本同步\n\n```bash\npnpm version:sync\n```\n\n此命令会同步更新 `cli/Cargo.toml`、`cli/Cargo.lock` 和 `packages/dashboard/package.json` 中的版本号。\n\n资料来源：[AGENTS.md:15-35](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 使用场景\n\n### 探索性测试与 QA\n\n支持完整的操作录制和问题追踪：\n\n```bash\nagent-browser --session {SESSION} record start\n# 执行测试步骤\nagent-browser --session {SESSION} screenshot --annotate issue-{NNN}.png\nagent-browser --session {SESSION} record stop\n```\n\n### Slack 工作区自动化\n\n针对 Slack 的专业技能支持消息监控、反应追踪和搜索功能：\n\n```bash\nagent-browser snapshot --json > conversation.json\nagent-browser click @e_reaction_button\nagent-browser screenshot reactions.png\n```\n\n资料来源：[skill-data/dogfood/SKILL.md:50-70](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/dogfood/SKILL.md)\n\n## 技术栈总结\n\n```mermaid\ngraph TD\n    A[agent-browser] --> B[Rust Core]\n    A --> C[TypeScript Dashboard]\n    A --> D[React Components]\n    A --> E[Node.js CLI Wrapper]\n    \n    B --> F[CDP Protocol]\n    B --> G[Browser Automation]\n    B --> H[React DevTools]\n    \n    C --> I[shadcn/ui]\n    C --> J[Tailwind CSS]\n    \n    D --> K[Next.js]\n```\n\n| 层级 | 技术 | 位置 |\n|------|------|------|\n| 核心引擎 | Rust | `cli/src/native/` |\n| CLI 接口 | TypeScript | `cli/src/` |\n| 仪表板 | React + Next.js | `packages/dashboard/` |\n| UI 组件 | shadcn/ui | `packages/dashboard/src/components/` |\n| 样式 | Tailwind CSS | 项目全局 |\n\n---\n\n<a id='architecture-overview'></a>\n\n## 系统架构\n\n### 相关页面\n\n相关主题：[项目介绍](#introduction), [浏览器自动化核心](#browser-automation), [仪表板组件](#dashboard-components)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/Cargo.toml](https://github.com/vercel-labs/agent-browser/blob/main/cli/Cargo.toml)\n- [cli/src/main.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/main.rs)\n- [cli/src/native/mod.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/mod.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/native/interaction.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/interaction.rs)\n- [cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n- [packages/dashboard/src/components/chat-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/chat-panel.tsx)\n- [packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx)\n- [packages/dashboard/src/components/network-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/network-panel.tsx)\n- [packages/dashboard/src/components/console-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/console-panel.tsx)\n- [AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n</details>\n\n# 系统架构\n\n## 概述\n\nagent-browser 是一个基于 Rust 的浏览器自动化工具，通过命令行界面和可视化仪表盘提供对浏览器的远程控制能力。该项目采用客户端-守护进程架构，支持 Chrome 和 Lightpanda 两种渲染引擎，并提供丰富的交互 API 用于网页自动化任务。\n\n架构的核心设计理念是将浏览器控制逻辑封装在 Rust 原生守护进程中，通过 CLI 命令或 Web 仪表盘与之通信，实现高效、可扩展的浏览器自动化解决方案。\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 整体架构\n\nagent-browser 采用分层架构设计，主要分为以下几个层次：\n\n| 层次 | 技术栈 | 职责 |\n|------|--------|------|\n| CLI 层 | Rust | 命令行入口，解析用户命令并转发至守护进程 |\n| 守护进程层 | Rust | 浏览器实例管理、CDP 通信、状态维护 |\n| 渲染引擎层 | Chrome/Lightpanda | 实际页面渲染和执行 |\n| 仪表盘层 | React/Next.js | 可视化控制界面和结果展示 |\n| 技能数据层 | Markdown | 领域特定的操作指南和参考文档 |\n\n资料来源：[cli/src/main.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/main.rs)\n\n### 核心模块划分\n\n```mermaid\ngraph TD\n    A[CLI 命令行] --> B[命令分发器]\n    B --> C[Native 守护进程]\n    C --> D[浏览器引擎]\n    C --> E[CDP 客户端]\n    C --> F[状态管理]\n    \n    G[Web 仪表盘] --> H[WebSocket/HTTP]\n    H --> C\n    \n    D --> I[快照系统]\n    D --> J[交互系统]\n    D --> K[React 检查]\n    \n    style A fill:#e1f5fe\n    style G fill:#fff3e0\n    style D fill:#f3e5f5\n```\n\n---\n\n## 守护进程架构\n\n守护进程（Daemon）是系统的核心组件，负责管理浏览器生命周期和执行各种自动化操作。\n\n### 核心子模块\n\n| 模块 | 文件路径 | 功能描述 |\n|------|----------|----------|\n| daemon | cli/src/native/mod.rs | 主进程管理和命令路由 |\n| actions | cli/src/native/actions.rs | 具体操作实现（点击、滚动、截图等）|\n| interaction | cli/src/native/interaction.rs | 键盘和鼠标交互处理 |\n| browser | cli/src/native/ | 浏览器实例管理 |\n| CDP client | cli/src/native/ | Chrome DevTools Protocol 通信 |\n| snapshot | cli/src/native/ | 页面快照生成 |\n| state | cli/src/native/ | 会话状态维护 |\n\n资料来源：[cli/src/native/mod.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/mod.rs)\n\n### 命令处理流程\n\n守护进程接收命令后，通过分发器（Dispatcher）将请求路由到对应的处理函数：\n\n```mermaid\ngraph LR\n    A[输入命令] --> B[命令解析]\n    B --> C{命令类型判断}\n    C -->|点击| D[handle_tap]\n    C -->|滚动| E[handle_scroll]\n    C -->|截图| F[handle_screenshot]\n    C -->|快照| G[handle_snapshot]\n    C -->|输入| H[handle_setvalue]\n    C -->|键盘| I[handle_key]\n    D --> J[执行结果]\n    E --> J\n    F --> J\n    G --> J\n    H --> J\n    I --> J\n```\n\n支持的命令类型包括：\n\n- **导航命令**: open, close, goto, back, forward, reload\n- **交互命令**: click, tap, scroll, hover, drag, mouse, press, type\n- **查询命令**: snapshot, screenshot, get, find, count, styles, innertext, innerhtml\n- **设置命令**: set, viewport, device, timezone, locale, geolocation, permissions\n- **网络命令**: network, cookies, storage, har\n- **扩展命令**: addscript, addinitscript, removeinitscript, addstyle\n- **React 检查**: react_tree, react_inspect, react_renders_start\n\n资料来源：[cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n---\n\n## 交互系统\n\n交互模块负责处理用户与浏览器页面的所有交互操作，包括鼠标、键盘和各种输入设备。\n\n### 键盘映射\n\n交互系统维护了完整的键盘映射表，支持标准键位和虚拟键码：\n\n```mermaid\ngraph TD\n    A[按键输入] --> B{按键类型}\n    B -->|功能键| C[特殊处理]\n    B -->|方向键| D[Arrow映射]\n    B -->|普通键| E[字符转换]\n    \n    C --> F[返回 key, code, keyCode]\n    D --> F\n    E --> G[char_to_key_info]\n    G --> F\n```\n\n支持的键位映射：\n\n| 输入 | 键名 | 键码 |\n|------|------|------|\n| arrowup, up | ArrowUp | 38 |\n| arrowdown, down | ArrowDown | 40 |\n| arrowleft, left | ArrowLeft | 37 |\n| arrowright, right | ArrowRight | 39 |\n| home | Home | 36 |\n| end | End | 35 |\n| pageup | PageUp | 33 |\n| pagedown | PageDown | 34 |\n| space, 空格 | Space | 32 |\n\n资料来源：[cli/src/native/interaction.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/interaction.rs)\n\n### 鼠标操作\n\n鼠标操作支持以下子命令：\n\n| 操作 | 说明 |\n|------|------|\n| move \\<x\\> \\<y\\> | 移动鼠标到指定坐标 |\n| down [btn] | 按下鼠标按钮 |\n| up [btn] | 释放鼠标按钮 |\n| wheel \\<dy\\> [dx] | 滚动鼠标滚轮 |\n\n---\n\n## 快照与元素引用系统\n\n快照系统是 agent-browser 的核心功能之一，用于获取页面当前状态并生成可引用元素标识符。\n\n### 快照格式\n\n快照输出包含元素引用（ref）和关键属性：\n\n```\n@e1 [button] \"Submit\"                    # 按钮元素\n@e2 [input type=\"email\"]                 # 输入框\n@e3 [div class=\"container\"] \"内容文本\"    # 容器元素\n```\n\n引用格式说明：\n\n```\n@e1 [tag type=\"value\"] \"text content\" placeholder=\"hint\"\n│    │   │             │               │\n│    │   │             │               └── 额外属性\n│    │   │             └── 可见文本内容\n│    │   └── 关键属性\n│    └── HTML 标签名\n└── 唯一引用 ID\n```\n\n### 元素定位方式\n\n| 定位器 | 说明 | 示例 |\n|--------|------|------|\n| role | ARIA 角色 | role=button |\n| text | 文本内容 | text=\"Submit\" |\n| label | 表单标签 | label=\"用户名\" |\n| placeholder | 占位符 | placeholder=\"输入...\" |\n| alt | 图片替代文本 | alt=\"描述\" |\n| title | 标题属性 | title=\"提示\" |\n| testid | 测试 ID | testid=\"btn-submit\" |\n| first/last/nth | 位置选择 | first, last, nth=2 |\n\n最佳实践：\n\n```bash\n# 正确流程\nagent-browser open https://example.com\nagent-browser snapshot -i          # 获取引用\nagent-browser click @e1            # 使用引用\n\n# 错误流程\nagent-browser open https://example.com\nagent-browser click @e1            # 引用不存在！\n```\n\n资料来源：[skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n\n---\n\n## React 检查系统\n\nagent-browser 提供了专门的 React 应用分析功能，包括 Suspense 边界检测和组件树分析。\n\n### 阻塞器类型与权重\n\n| 阻塞器类型 | 权重 | 可操作性 |\n|------------|------|----------|\n| ClientHook | 7 | 90% |\n| RequestApi | 6 | 88% |\n| ServerFetch | 5 | 82% |\n| Cache | 4 | 74% |\n| Stream | 3 | 60% |\n| Unknown | 2 | 35% |\n| Framework | 1 | 18% |\n\n权重值越高表示该阻塞器对用户体验的影响越大，可操作性分数表示该类型阻塞被用户交互绕过的可能性。\n\n### 边界类型\n\n| 边界类型 | 权重 | 说明 |\n|----------|------|------|\n| RouteSegment | 3 | 路由段级别的 Suspense |\n| ExplicitSuspense | 2 | 显式声明的 Suspense 边界 |\n| Component | 1 | 组件级别的 Suspense |\n\n资料来源：[cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n\n---\n\n## Web 仪表盘架构\n\n仪表盘是可视化控制界面，使用 Next.js 构建，提供图形化的浏览器控制能力。\n\n### 组件结构\n\n```mermaid\ngraph TD\n    A[Dashboard Root] --> B[控制面板]\n    A --> C[结果展示区]\n    A --> D[侧边栏]\n    \n    B --> E[ExtensionsPanel]\n    B --> F[ControlsForm]\n    \n    C --> G[ChatPanel]\n    C --> H[ConsolePanel]\n    C --> I[NetworkPanel]\n    \n    D --> J[ResizablePanels]\n    D --> K[Header]\n```\n\n### 核心组件\n\n| 组件 | 功能 | 文件 |\n|------|------|------|\n| ChatPanel | 消息和工具调用展示 | chat-panel.tsx |\n| ConsolePanel | JavaScript 控制台输出 | console-panel.tsx |\n| NetworkPanel | 网络请求监控和 HAR 导出 | network-panel.tsx |\n| ExtensionsPanel | Chrome 扩展管理 | extensions-panel.tsx |\n| ConsolePanel | 控制台消息格式化 | console-panel.tsx |\n\n#### 控制台面板功能\n\n控制台面板支持表达式求值和结果展示：\n\n- 语法高亮显示（紫色表示输入，绿色表示输出）\n- 错误消息红色高亮\n- 时间戳记录\n- 加载状态动画\n\n#### 网络面板功能\n\n| 功能 | 说明 |\n|------|------|\n| 请求列表 | 显示所有捕获的网络请求 |\n| 请求详情 | 展开查看请求头、响应体等 |\n| HAR 导出 | 保存网络会话为 HAR 文件 |\n| 过滤功能 | 按 URL 模式过滤请求 |\n\n资料来源：[packages/dashboard/src/components/console-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/console-panel.tsx)\n\n---\n\n## 引擎系统\n\nagent-browser 支持多种浏览器引擎，通过 `--engine` 参数选择。\n\n### 支持的引擎\n\n| 引擎 | 说明 |\n|------|------|\n| chrome | Chrome 浏览器的完整实现 |\n| lightpanda | 轻量级替代方案 |\n\n引擎安装通过 `install` 命令自动下载 Chrome from Chrome for Testing。\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 标志与配置系统\n\nCLI 工具支持丰富的命令行参数配置。\n\n### 常用标志\n\n| 标志 | 说明 |\n|------|------|\n| --annotate | 启用截图注释功能 |\n| --color-scheme | 设置颜色方案（dark/light）|\n| --download-path | 设置下载文件保存路径 |\n| --content-boundaries | 显示内容边界 |\n| --max-output | 最大输出大小限制 |\n| --allowed-domains | 允许访问的域名列表 |\n| --action-policy | 操作策略配置 |\n\n配置解析采用手动参数解析方式，按顺序处理 args 数组：\n\n```rust\n\"--annotate\" => {\n    let (val, consumed) = parse_bool_arg(args, i);\n    flags.annotate = val;\n    flags.cli_annotate = true;\n    if consumed {\n        i += 1;\n    }\n}\n```\n\n资料来源：[cli/src/flags.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/flags.rs)\n\n---\n\n## 会话管理\n\nagent-browser 支持会话管理，允许用户在不同会话间切换和恢复状态。\n\n### 会话相关命令\n\n```bash\n# 连接到指定会话\nagent-browser --session {SESSION} connect 9222\n\n# 关闭会话\nagent-browser --session {SESSION} close\n\n# 录制操作\nagent-browser --session {SESSION} record start\nagent-browser --session {SESSION} record stop\n```\n\n会话持久化机制允许：\n\n- 保存和恢复浏览器状态\n- 跨会话追踪问题\n- 批量复现和调试\n\n---\n\n## 网络与存储管理\n\n### 网络监控\n\n支持完整的网络请求监控和操作：\n\n| 操作 | 说明 |\n|------|------|\n| route | 路由匹配和拦截 |\n| unroute | 取消路由规则 |\n| requests | 查看请求列表 |\n| har | 导出 HAR 文件 |\n\n### Cookie 管理\n\n```bash\n# 获取 Cookie\nagent-browser cookies get\n\n# 设置 Cookie\nagent-browser cookies set --url https://example.com --name key --value val\n\n# 清除 Cookie\nagent-browser cookies clear\n\n# 从文件导入\nagent-browser cookies set --curl cookie.txt --domain example.com\n```\n\n### 存储管理\n\n支持 Web Storage API：\n\n| 存储类型 | 说明 |\n|----------|------|\n| local | localStorage |\n| session | sessionStorage |\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## 技能数据系统\n\nagent-browser 使用 Markdown 格式的技能数据（Skill Data）来定义特定领域的工作流程和参考文档。\n\n### 技能数据组织\n\n```\nskill-data/\n├── core/              # 核心通用技能\n│   └── references/    # 参考文档\n├── slack/             # Slack 特定技能\n│   ├── references/\n│   └── SKILL.md\n└── dogfood/           # 测试用技能\n```\n\n### 技能文档结构\n\n每个技能文档通常包含：\n\n1. **目标描述** - 明确要完成的任务\n2. **操作步骤** - 具体的命令序列\n3. **参考文档** - 元素定位和属性说明\n4. **最佳实践** - 推荐的工作流程\n\n---\n\n## 测试架构\n\n### 单元测试\n\n```bash\ncd cli && cargo test\n```\n\n- 运行所有单元测试（约 320 个）\n- 测试速度快，无需启动 Chrome\n- 覆盖核心业务逻辑\n\n### 端到端测试\n\n```bash\ncd cli && cargo test e2e -- --ignored --test-threads=1\n```\n\n- 18 个 E2E 测试用例\n- 启动真实 headless Chrome 实例\n- 测试完整命令管道\n- 要求串行执行避免实例冲突\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 发布流程架构\n\n项目使用手动发布模式，流程如下：\n\n```mermaid\ngraph TD\n    A[创建发布分支] --> B[更新版本号]\n    B --> C[运行版本同步]\n    C --> D[编写更新日志]\n    D --> E[创建 PR]\n    E --> F{合并到 main}\n    F -->|是| G[CI 检测版本差异]\n    F -->|否| H[等待合并]\n    G -->|需要发布| I[构建 7 平台二进制]\n    G -->|无需发布| J[跳过构建]\n    I --> K[发布到 npm]\n    K --> L[创建 GitHub Release]\n```\n\n版本同步命令：`pnpm version:sync` 自动更新：\n\n- cli/Cargo.toml\n- cli/Cargo.lock\n- packages/dashboard/package.json\n\n---\n\n## 技术栈总结\n\n| 层级 | 技术选型 | 版本管理 |\n|------|----------|----------|\n| CLI 核心 | Rust | Cargo |\n| 浏览器自动化 | CDP (Chrome DevTools Protocol) | - |\n| 仪表盘前端 | Next.js + React + TypeScript | pnpm |\n| UI 组件 | shadcn/ui + Tailwind CSS | - |\n| 构建工具 | Vite (仪表盘) | - |\n| 包管理 | pnpm workspace | - |\n\n---\n\n<a id='cli-commands'></a>\n\n## CLI 命令参考\n\n### 相关页面\n\n相关主题：[浏览器自动化核心](#browser-automation), [安装与构建](#installation-build)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/commands.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/commands.rs)\n- [cli/src/flags.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/flags.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n- [skill-data/core/references/snapshot-refs.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/snapshot-refs.md)\n</details>\n\n# CLI 命令参考\n\n## 概述\n\n`agent-browser` 是一个基于 Rust 原生构建的浏览器自动化 CLI 工具，为 AI 代理（Cursor、Claude Code、Codex、Continue、Windsurf 等）提供浏览器控制能力。CLI 命令参考涵盖了所有可通过命令行执行的原子操作，包括元素交互、状态查询、浏览器设置、网络控制等功能模块。\n\n该工具通过 Chrome DevTools Protocol (CDP) 实现浏览器控制，不依赖 Playwright 或 Puppeteer，执行效率高且资源占用低。 资料来源：[skills/agent-browser/SKILL.md]()\n\n## 命令架构\n\nCLI 命令采用统一的解析-分发架构，将用户输入转换为对应的原生处理器执行。\n\n```mermaid\ngraph TD\n    A[CLI 输入] --> B[commands.rs 命令解析]\n    B --> C{命令类型}\n    C -->|定位命令| D[find 命令解析]\n    C -->|动作命令| E[actions.rs 动作分发]\n    C -->|设置命令| F[flags.rs 标志处理]\n    \n    D --> G[role/text/label/placeholder/alt/title/testid/first/last]\n    E --> H[click/tap/fill/type/highlight 等]\n    F --> I[--annotate/--color-scheme/--download-path 等]\n    \n    G --> J[原生 CDP 调用]\n    H --> J\n    I --> J\n```\n\n## 核心命令分类\n\n### 元素定位命令\n\n元素定位命令用于通过多种策略查找 DOM 元素，并可指定后续操作。\n\n| 定位器 | 命令格式 | 说明 |\n|--------|----------|------|\n| role | `find role <role> [action] [--name <name>] [--exact]` | 通过 ARIA 角色定位 |\n| text | `find text <text> [action] [--exact]` | 通过可见文本定位 |\n| label | `find label <label> [action] [text] [--exact]` | 通过标签文本定位 |\n| placeholder | `find placeholder <text> [action] [text] [--exact]` | 通过占位符文本定位 |\n| alt | `find alt <text> [action] [--exact]` | 通过 alt 属性定位 |\n| title | `find title <text> [action] [--exact]` | 通过 title 属性定位 |\n| testid | `find testid <id> [action] [text]` | 通过测试 ID 定位 |\n| first | `find first <selector> [action] [text]` | 定位第一个匹配元素 |\n| last | `find last <selector> [action] [text]` | 定位最后一个匹配元素 |\n\n**默认操作**：若未指定操作，默认为 `click`。 资料来源：[cli/src/commands.rs:位置 1]()\n\n### 元素交互命令\n\n交互命令通过 `actions.rs` 中的处理器执行具体浏览器操作。\n\n| 命令 | 功能 | 处理器函数 |\n|------|------|------------|\n| `click` | 点击元素 | handle_dispatch |\n| `highlight` | 高亮显示元素 | handle_highlight |\n| `tap` | 移动端点击 | handle_tap |\n| `fill` | 填充输入框 | handle_setvalue |\n| `type` | 模拟键盘输入 | handle_setvalue |\n| `boundingbox` | 获取元素边界框 | handle_boundingbox |\n| `innertext` | 获取元素文本 | handle_innertext |\n| `innerhtml` | 获取元素 HTML | handle_innerhtml |\n| `inputvalue` | 获取输入值 | handle_inputvalue |\n| `setvalue` | 设置输入值 | handle_setvalue |\n| `count` | 统计匹配元素数量 | handle_count |\n| `styles` | 获取元素样式 | handle_styles |\n| `select` | 选择下拉选项 | handle_select |\n| `check` | 勾选复选框 | handle_check |\n| `uncheck` | 取消勾选 | handle_uncheck |\n\n资料来源：[cli/src/native/actions.rs:1-20]()\n\n### 状态查询命令\n\n用于检查元素的各种状态属性。\n\n| 命令 | 返回值 | 说明 |\n|------|--------|------|\n| `visible` | true/false | 元素是否可见 |\n| `enabled` | true/false | 元素是否启用 |\n| `checked` | true/false | 复选框/单选框是否选中 |\n| `isvisible` | true/false | 显式可见性检查 |\n| `isenabled` | true/false | 显式启用状态检查 |\n| `ischecked` | true/false | 显式选中状态检查 |\n| `gettext` | 文本内容 | 获取元素文本 |\n| `getattribute` | 属性值 | 获取元素属性 |\n\n使用格式：`agent-browser is <what> <selector>` 资料来源：[cli/src/output.rs]()\n\n### 浏览器导航命令\n\n| 命令 | 功能 |\n|------|------|\n| `back` | 后退一页 |\n| `forward` | 前进一页 |\n| `reload` | 刷新当前页面 |\n| `open <url>` | 打开指定 URL |\n\n### 快照与引用系统\n\n快照命令生成可访问性树，包含元素引用（ref）用于后续交互。\n\n```bash\nagent-browser snapshot -i          # 生成带引用的快照\nagent-browser snapshot @e5         # 快照特定区域\nagent-browser snapshot --json      # 输出 JSON 格式\n```\n\n**引用格式说明**：\n\n```\n@e1 [tag type=\"value\"] \"text content\" placeholder=\"hint\"\n│    │   │             │               │\n│    │   │             │               └─ 额外属性\n│    │   │             └─ 可见文本\n│    │   └─ 关键属性\n│    └─ HTML 标签名\n└─ 唯一引用 ID\n```\n\n**常见模式示例**：\n\n| 引用 | 格式 | 说明 |\n|------|------|------|\n| @e1 | `[button] \"Submit\"` | 带文本的按钮 |\n| @e2 | `[input type=\"email\"]` | 邮箱输入框 |\n| @e3 | `[input type=\"password\"]` | 密码输入框 |\n| @e4 | `[a href=\"/page\"] \"Link Text\"` | 链接 |\n| @e5 | `[select]` | 下拉选择框 |\n\n资料来源：[skill-data/core/references/snapshot-refs.md]()\n\n### 元素查找命令\n\n查找命令用于定位元素并执行操作：\n\n```bash\nagent-browser find <locator> <value> <action> [text]\n```\n\n**参数说明**：\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| locator | string | 是 | 定位策略 (role/text/label/...) |\n| value | string | 是 | 定位值 |\n| action | string | 否 | 执行的操作，默认 click |\n| text | string | 否 | 额外文本匹配 |\n\n**可选参数**：\n\n| 参数 | 说明 |\n|------|------|\n| `--exact` | 精确匹配文本 |\n| `--name <name>` | 按名称过滤 (role 定位器) |\n\n资料来源：[cli/src/commands.rs:位置 1]()\n\n### 鼠标操作命令\n\n```bash\nagent-browser mouse <action> [args]\n```\n\n| 操作 | 参数 | 说明 |\n|------|------|------|\n| `move` | `<x> <y>` | 移动到坐标 |\n| `down` | `[btn]` | 鼠标按下 |\n| `up` | `[btn]` | 鼠标释放 |\n| `wheel` | `<dy> [dx]` | 滚动 |\n\n### 浏览器设置命令\n\n```bash\nagent-browser set <setting> [value]\n```\n\n| 设置项 | 值格式 | 说明 |\n|--------|--------|------|\n| `viewport` | `<w> <h>` | 设置视口大小 |\n| `device` | `<name>` | 设置设备模拟 |\n| `geo` | `<lat> <lng>` | 设置地理坐标 |\n| `offline` | `on\\|off` | 离线模式 |\n| `headers` | `<json>` | 设置请求头 |\n| `credentials` | `<user> <pass>` | 设置认证凭证 |\n| `media` | `[dark\\|light] [reduced-motion]` | 媒体偏好 |\n\n### 网络控制命令\n\n```bash\nagent-browser network <action>\n```\n\n| 操作 | 参数 | 说明 |\n|------|------|------|\n| `route` | `<url> [--abort\\|--body <json>] [--resource-type <csv>]` | 拦截请求 |\n| `unroute` | `[url]` | 取消拦截 |\n| `requests` | `[--clear] [--filter <pattern>]` | 查看请求 |\n| `har` | `<start\\|stop> [path]` | HAR 记录 |\n\n### Cookie 与存储命令\n\n| 命令 | 说明 |\n|------|------|\n| `cookies get` | 获取所有 cookie |\n| `cookies set` | 设置 cookie |\n| `cookies clear` | 清除所有 cookie |\n| `storage local` | 管理 localStorage |\n| `storage session` | 管理 sessionStorage |\n\n**cookies set 选项**：\n\n| 选项 | 说明 |\n|------|------|\n| `--url` | 指定 URL |\n| `--domain` | 指定域名 |\n| `--path` | 指定路径 |\n| `--httpOnly` | HTTP Only 标志 |\n| `--secure` | Secure 标志 |\n| `--sameSite` | SameSite 策略 |\n| `--expires` | 过期时间 |\n| `--curl <file>` | 从文件导入 (支持 JSON/cURL/Cookie 头) |\n\n### 标签页管理命令\n\n```bash\nagent-browser tab [new|list|close|<n>]\n```\n\n| 操作 | 说明 |\n|------|------|\n| `new` | 新建标签页 |\n| `list` | 列出所有标签页 |\n| `close` | 关闭当前标签页 |\n| `<n>` | 切换到指定编号标签页 |\n\n### 差异对比命令\n\n```bash\nagent-browser diff snapshot       # 比较当前与上次快照\nagent-browser diff screenshot     # 与基线截图对比\n```\n\n### 截图命令\n\n```bash\nagent-browser screenshot [path] [--annotate]\n```\n\n| 选项 | 说明 |\n|------|------|\n| path | 保存路径 |\n| `--annotate` | 添加元素标注 |\n\n## CLI 标志配置\n\n标志在程序启动时解析，影响全局行为。\n\n| 标志 | 说明 | 来源文件 |\n|------|------|----------|\n| `--annotate` | 启用截图标注 | cli/src/flags.rs |\n| `--color-scheme` | 颜色方案 (dark/light) | cli/src/flags.rs |\n| `--download-path` | 下载保存路径 | cli/src/flags.rs |\n| `--content-boundaries` | 内容边界检测 | cli/src/flags.rs |\n| `--max-output` | 最大输出大小 | cli/src/flags.rs |\n| `--allowed-domains` | 允许的域名列表 | cli/src/flags.rs |\n| `--action-policy` | 操作策略配置 | cli/src/flags.rs |\n\n**示例**：\n\n```bash\nagent-browser --annotate --download-path ./downloads open https://example.com\nagent-browser --color-scheme dark --allowed-domains \"example.com,api.example.com\"\n```\n\n## 特殊上下文命令\n\n以下命令用于特定上下文环境：\n\n| 命令 | 处理器 | 功能 |\n|------|--------|------|\n| `timezone` | handle_timezone | 设置时区 |\n| `locale` | handle_locale | 设置地区 |\n| `geolocation` | handle_geolocation | 设置地理位置 |\n| `permissions` | handle_permissions | 管理权限 |\n| `dialog` | handle_dialog | 处理对话框 |\n| `upload` | handle_upload | 文件上传 |\n| `addscript` | handle_addscript | 注入脚本 |\n| `addinitscript` | handle_addinitscript | 注入初始化脚本 |\n| `removeinitscript` | handle_removeinitscript | 移除初始化脚本 |\n| `addstyle` | handle_addstyle | 注入样式 |\n| `react_tree` | handle_react_tree | React 组件树 |\n| `react_inspect` | handle_react_inspect | React 检查器 |\n| `react_renders_start` | handle_react_renders_start | 渲染监控开始 |\n| `console` | handle_console | 控制台操作 |\n| `errors` | handle_errors | 页面错误 |\n| `state_save` | handle_state_save | 保存状态 |\n| `state_load` | handle_state_load | 加载状态 |\n| `state_list` | handle_state_list | 列出状态 |\n\n资料来源：[cli/src/native/actions.rs:20-45]()\n\n## 等待命令\n\n```bash\nagent-browser wait [options]\n```\n\n| 选项 | 说明 |\n|------|------|\n| `<ms>` | 等待毫秒数 |\n| `--load <strategy>` | 等待加载策略 (domcontentloaded/load/networkidle) |\n\n## 使用模式与最佳实践\n\n### 基本交互流程\n\n```mermaid\ngraph LR\n    A[open URL] --> B[snapshot 获取引用]\n    B --> C[find 定位元素]\n    C --> D[click/tap/fill 执行操作]\n    D --> E[验证结果]\n```\n\n### 推荐模式\n\n1. **先快照再交互**：始终在交互前获取元素引用\n2. **导航后重新快照**：页面跳转后需重新获取引用\n3. **动态内容重新快照**：DOM 变化后重新获取引用\n\n```bash\n# 正确顺序\nagent-browser open https://example.com\nagent-browser snapshot -i\nagent-browser click @e1\n\n# 错误顺序\nagent-browser open https://example.com\nagent-browser click @e1  # 引用不存在！\n```\n\n资料来源：[skill-data/core/references/snapshot-refs.md]()\n\n## 输出格式\n\nCLI 支持多种输出格式：\n\n| 格式 | 命令选项 | 适用场景 |\n|------|----------|----------|\n| 文本树 | 默认 | 快速查看页面结构 |\n| JSON | `--json` | 程序化解析 |\n| 截图 | `screenshot` | 可视化验证 |\n| 带标注截图 | `screenshot --annotate` | 元素定位调试 |\n\n## 错误处理\n\n错误响应格式：\n\n```json\n{\n  \"ok\": false,\n  \"error\": \"错误描述\"\n}\n```\n\n常用错误处理：\n\n```bash\n# 检查元素可见性后再操作\nagent-browser is visible @e1\n# 然后根据结果决定是否操作\n\n# 等待元素出现\nagent-browser wait 500\nagent-browser snapshot -i\n\n---\n\n<a id='browser-automation'></a>\n\n## 浏览器自动化核心\n\n### 相关页面\n\n相关主题：[CLI 命令参考](#cli-commands), [React 组件审查](#react-introspection), [网络监控与拦截](#network-monitoring)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/cdp/client.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/cdp/client.rs)\n- [cli/src/native/cdp/chrome.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/cdp/chrome.rs)\n- [cli/src/native/element.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/element.rs)\n- [cli/src/native/screenshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/screenshot.rs)\n- [cli/src/native/snapshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/snapshot.rs)\n- [cli/src/native/diff.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/diff.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n</details>\n\n# 浏览器自动化核心\n\n## 概述\n\n浏览器自动化核心是 `agent-browser` 项目的底层引擎，负责通过 Chrome DevTools Protocol (CDP) 实现对 Chromium 内核浏览器的远程控制。该模块完全使用 Rust 实现，提供高性能的原生浏览器自动化能力，无需依赖 Node.js、Playwright 或 Puppeteer 等外部工具。\n\n核心职责包括：\n\n- 建立与 Chrome/Chromium 实例的 CDP 连接\n- 执行 DOM 元素查询与操作\n- 捕获页面快照和屏幕截图\n- 管理浏览器状态和网络条件\n- 处理用户交互事件（鼠标、键盘、触摸）\n\n```mermaid\ngraph TD\n    A[CLI 命令] --> B[Command Dispatcher]\n    B --> C[State Manager]\n    C --> D[CDP Client]\n    D --> E[Chrome Instance]\n    E --> D\n    D --> C\n    C --> F[Response Formatter]\n    F --> A\n```\n\n## 架构分层\n\n| 层级 | 模块 | 职责 |\n|------|------|------|\n| 命令接口层 | `actions.rs` | 解析和分发用户命令 |\n| 状态管理层 | State | 维护浏览器会话状态、元素引用 |\n| 协议通信层 | `cdp/client.rs` | CDP WebSocket 通信 |\n| 浏览器连接层 | `cdp/chrome.rs` | Chrome 实例连接管理 |\n| 功能实现层 | `element.rs`, `snapshot.rs`, `screenshot.rs`, `diff.rs` | 具体功能实现 |\n\n## CDP 客户端架构\n\n### 连接管理\n\nCDP 客户端模块负责维护与 Chrome 实例的长连接。通过 Chrome 启动时获取的调试端口，建立 WebSocket 连接。\n\n主要连接流程：\n\n```mermaid\nsequenceDiagram\n    participant CLI\n    participant CDP as CDP Client\n    participant Chrome as Chrome Instance\n    \n    CLI->>Chrome: Launch with debug port\n    Chrome-->>CLI: Return WebSocket URL\n    CLI->>CDP: Connect(WebSocket URL)\n    CDP->>Chrome: WebSocket Handshake\n    Note over CDP,Chrome: CDP Session Established\n    CLI->>CDP: Send Command\n    CDP->>Chrome: CDP Request\n    Chrome-->>CDP: CDP Response\n    CDP-->>CLI: Parsed Result\n```\n\n### 消息协议\n\nCDP 通信采用 JSON-RPC 2.0 格式，每条消息包含：\n\n```json\n{\n  \"id\": 1,\n  \"method\": \"DOM.getDocument\",\n  \"params\": {}\n}\n```\n\n响应消息结构：\n\n```json\n{\n  \"id\": 1,\n  \"result\": { ... }\n}\n```\n\n## 元素系统\n\n### 元素引用机制\n\n元素系统通过可读的引用 ID（如 `@e1`, `@e2`）来标识 DOM 元素，相比于 XPath 或 CSS 选择器更加稳定和人类可读。\n\n资料来源：[cli/src/native/element.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/element.rs)\n\n### 元素操作命令\n\n| 命令 | 功能 | 参数示例 |\n|------|------|----------|\n| `click` | 点击元素 | `@e1`, `--new-tab` |\n| `fill` | 填充输入框 | `@e1 \"text\"` |\n| `type` | 模拟打字 | `@e1 \"text\"` |\n| `hover` | 鼠标悬停 | `@e1` |\n| `focus` | 聚焦元素 | `@e1` |\n| `blur` | 失焦元素 | `@e1` |\n| `scroll` | 滚动操作 | `down 500`, `up 200` |\n\n### 元素属性获取\n\n```bash\nagent-browser get text @e1           # 获取可见文本\nagent-browser get html @e1           # 获取 innerHTML\nagent-browser get attr @e1 href      # 获取属性值\nagent-browser get value @e1          # 获取输入值\nagent-browser get title              # 获取页面标题\nagent-browser get url                # 获取当前 URL\nagent-browser get count \".item\"      # 统计匹配元素\nagent-browser get box @e1            # 获取边界框\nagent-browser get styles @e1         # 获取计算样式\n```\n\n## 快照系统\n\n### 无障碍树快照\n\n快照系统生成页面的可访问性树视图，包含元素引用 ID、标签类型和关键属性。\n\n资料来源：[cli/src/native/snapshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/snapshot.rs)\n\n### 快照命令选项\n\n| 选项 | 描述 |\n|------|------|\n| `-i` | 仅交互元素（推荐默认选项） |\n| `-u` | 在链接上包含 href URL |\n| `-c` | 紧凑模式（无空结构节点） |\n| `-d <n>` | 限制深度为 n 层 |\n| `-s \"<selector>\"` | 限定作用域为 CSS 选择器 |\n| `--json` | 机器可读的 JSON 输出 |\n\n### 快照输出示例\n\n```\nPage: Example - Log in\nURL: https://example.com/login\n\n@e1 [heading] \"Log in\"\n@e2 [form]\n  @e3 [input type=\"email\"] placeholder=\"Email\"\n  @e4 [input type=\"password\"] placeholder=\"Password\"\n  @e5 [button type=\"submit\"] \"Continue\"\n  @e6 [link] \"Forgot password?\"\n```\n\n### Iframe 处理\n\n快照自动检测并内联 iframe 内容。当捕获主框架快照时，每个 Iframe 节点会被解析，其子可访问性树直接包含在输出中。iframe 内部元素的引用携带框架上下文，交互命令可以直接使用，无需手动切换框架。\n\n```bash\nagent-browser snapshot -i\n# @e1 [heading] \"Checkout\"\n# @e2 [Iframe] \"payment-frame\"\n#   @e3 [input] \"Card number\"\n#   @e4 [input] \"Expiry\"\n#   @e5 [button] \"Pay\"\n# @e6 [button] \"Cancel\"\n```\n\n## 截图系统\n\n### 截图命令\n\n资料来源：[cli/src/native/screenshot.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/screenshot.rs)\n\n```bash\nagent-browser screenshot                    # 保存到临时目录\nagent-browser screenshot path.png           # 保存到指定路径\nagent-browser screenshot --full             # 整页截图\nagent-browser screenshot --annotate         # 带元素标注的截图\nagent-browser pdf output.pdf                # 导出为 PDF\n```\n\n### 截图格式\n\n截图以 Base64 编码的 PNG 格式传输和存储，在 UI 组件中渲染时使用：\n\n```tsx\n<img\n  src={`data:image/png;base64,${result.screenshot}`}\n  alt={result.title}\n  className=\"w-full block\"\n/>\n```\n\n资料来源：[examples/environments/app/page.tsx](https://github.com/vercel-labs/agent-browser/blob/main/examples/environments/app/page.tsx)\n\n## 差异比较系统\n\n### Diff 功能\n\n资料来源：[cli/src/native/diff.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/diff.rs)\n\n差异系统支持快照和截图的对比：\n\n```bash\nagent-browser diff snapshot              # 对比当前与上次快照\nagent-browser diff screenshot --baseline  # 对比截图与基线\n```\n\n### 快照差异示例\n\n```\n- @e1 [button] \"Submit\"\n+ @e1 [button] \"Loading...\"\n- @e2 [div class=\"content\"]\n+ @e2 [div class=\"content expanded\"]\n```\n\n## 状态检查系统\n\n### 元素状态查询\n\n| 命令 | 功能 |\n|------|------|\n| `agent-browser is visible @e1` | 检查元素是否可见 |\n| `agent-browser is enabled @e1` | 检查元素是否启用 |\n| `agent-browser is checked @e1` | 检查复选框/单选框选中状态 |\n\n## 高级交互\n\n### React 调试集成\n\n系统提供 React 专用的调试命令，用于 React 应用的高级分析：\n\n| 命令 | 功能 |\n|------|------|\n| `react_tree` | 获取 React 组件树 |\n| `react_inspect` | 检查组件属性 |\n| `react_renders_start` | 启动渲染计数 |\n| `react_renders_stop` | 停止渲染计数 |\n\n资料来源：[cli/src/native/actions.rs:60-62](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n### 鼠标控制\n\n```bash\nagent-browser mouse move 100 200      # 移动鼠标\nagent-browser mouse down left         # 鼠标按下\nagent-browser mouse up left           # 鼠标释放\nagent-browser mouse wheel 100 50      # 滚轮滚动\n```\n\n### 键盘控制\n\n```bash\nagent-browser press Enter             # 按下指定键\nagent-browser press \"Control+a\"       # 组合键\n```\n\n## 浏览器环境配置\n\n### 视口与设备模拟\n\n```bash\nagent-browser set viewport 1920 1080   # 设置视口尺寸\nagent-browser set device \"iPhone 14\"  # 模拟设备\n```\n\n###地理位置模拟\n\n```bash\nagent-browser set geo 37.7749 -122.4194  # 模拟经纬度\n```\n\n### 网络条件控制\n\n```bash\nagent-browser set offline on           # 离线模式\nagent-browser network route \"**\" --abort  # 中断所有请求\nagent-browser network unroute \"**\"     # 恢复请求\n```\n\n### Cookie 和存储管理\n\n```bash\nagent-browser cookies get              # 获取所有 Cookie\nagent-browser cookies set --url https://example.com --name key --value val\nagent-browser cookies clear\nagent-browser storage local           # 操作 localStorage\nagent-browser storage session          # 操作 sessionStorage\n```\n\n## 工作流程\n\n### 典型自动化流程\n\n```mermaid\ngraph TD\n    A[打开页面] --> B[获取快照]\n    B --> C{定位目标元素}\n    C -->|新页面| D[重新获取快照]\n    D --> C\n    C -->|定位成功| E[执行操作]\n    E --> F[等待加载]\n    F --> G[验证结果]\n    G -->|需要更多信息| B\n    G -->|完成| H[输出结果]\n```\n\n### 推荐实践\n\n1. **始终先快照再交互**：元素引用需要在当前页面状态下获取\n\n   ```bash\n   agent-browser open https://example.com\n   agent-browser snapshot -i          # 先获取引用\n   agent-browser click @e1            # 再执行操作\n   ```\n\n2. **导航后重新快照**：页面导航后必须重新获取元素引用\n\n   ```bash\n   agent-browser click @e5            # 导航到新页面\n   agent-browser snapshot -i          # 必须重新获取引用\n   agent-browser click @e1            # 使用新的引用\n   ```\n\n3. **动态内容后重新快照**：页面内容变化后需要更新引用\n\n   ```bash\n   agent-browser click @e1            # 打开下拉菜单\n   agent-browser snapshot -i          # 看到新出现的选项\n   agent-browser click @e7            # 选择菜单项\n   ```\n\n## 命令参考\n\n### 完整命令列表\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n| 类别 | 命令 | 说明 |\n|------|------|------|\n| 页面 | `open`, `goto`, `back`, `forward`, `reload`, `stop` | 导航控制 |\n| 快照 | `snapshot` | 获取可访问性树 |\n| 截图 | `screenshot`, `pdf` | 视觉捕获 |\n| 元素 | `click`, `fill`, `type`, `hover`, `focus`, `scroll` | 交互操作 |\n| 获取 | `get` | 属性和状态查询 |\n| 检查 | `is` | 状态验证 |\n| 查找 | `find` | 元素搜索 |\n| 鼠标 | `mouse` | 底层鼠标控制 |\n| 设置 | `set` | 浏览器配置 |\n| 网络 | `network` | 网络控制 |\n| 存储 | `cookies`, `storage` | 存储管理 |\n| 标签页 | `tab` | 多标签页控制 |\n| 差异 | `diff` | 对比功能 |\n\n## 扩展机制\n\n### Chrome 扩展集成\n\n系统支持 Chrome 扩展的检测和管理：\n\n```bash\nagent-browser extensions list          # 列出已安装扩展\nagent-browser extensions enable <id>   # 启用扩展\nagent-browser extensions disable <id>  # 禁用扩展\n```\n\n扩展信息在 UI 中展示为可折叠列表：\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx)\n\n每个扩展条目显示：\n\n- 扩展名称和图标\n- 描述信息\n- 文件路径\n- 启用/禁用状态\n\n## 底层动作处理\n\n### 命令分发机制\n\n所有命令通过统一的分发器处理：\n\n```rust\nmatch subcommand.as_str() {\n    \"dispatch\" => handle_dispatch(cmd, state).await,\n    \"highlight\" => handle_highlight(cmd, state).await,\n    \"tap\" => handle_tap(cmd, state).await,\n    \"boundingbox\" => handle_boundingbox(cmd, state).await,\n    \"innertext\" => handle_innertext(cmd, state).await,\n    \"innerhtml\" => handle_innerhtml(cmd, state).await,\n    \"inputvalue\" => handle_inputvalue(cmd, state).await,\n    \"setvalue\" => handle_setvalue(cmd, state).await,\n    \"count\" => handle_count(cmd, state).await,\n    \"styles\" => handle_styles(cmd, state).await,\n    \"bringtofront\" => handle_bringtofront(state).await,\n    \"timezone\" => handle_timezone(cmd, state).await,\n    \"locale\" => handle_locale(cmd, state).await,\n    \"geolocation\" => handle_geolocation(cmd, state).await,\n    \"permissions\" => handle_permissions(cmd, state).await,\n    \"dialog\" => handle_dialog(cmd, state).await,\n    \"upload\" => handle_upload(cmd, state).await,\n    // ... 更多处理器\n}\n```\n\n资料来源：[cli/src/native/actions.rs:30-55](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n### 状态持久化\n\n会话状态包括：\n\n- 当前浏览器连接\n- 元素引用缓存\n- 历史快照\n- 网络请求记录\n- 用户凭据保险库\n\n使用 `agent-browser close` 关闭会话，或 `agent-browser close --all` 关闭所有会话。\n\n---\n\n<a id='react-introspection'></a>\n\n## React 组件审查\n\n### 相关页面\n\n相关主题：[浏览器自动化核心](#browser-automation), [CLI 命令参考](#cli-commands)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/react/mod.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/mod.rs)\n- [cli/src/native/react/tree.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/tree.rs)\n- [cli/src/native/react/renders.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/renders.rs)\n- [cli/src/native/react/suspense.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/suspense.rs)\n- [cli/src/native/react/vitals.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/vitals.rs)\n- [cli/src/native/react/installHook.js](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/react/installHook.js)\n- [skill-data/core/references/commands.md](https://github.com/vercel-labs/agent-browser/blob/main/skill-data/core/references/commands.md)\n</details>\n\n# React 组件审查\n\n## 概述\n\nReact 组件审查是 agent-browser 提供的一套完整的 React 运行时 introspection（运行时自检）功能。该功能基于 React DevTools 协议，允许开发者在浏览器自动化场景中深入检查 React 组件树的拓扑结构、组件属性与状态、渲染性能以及 Suspense 边界状态。\n\n这套审查机制的核心设计目标是**零侵入性**和**框架无关性**。通过在页面文档加载前注入 React DevTools Hook，agent-browser 能够在不修改目标应用源码的情况下，获取与 React DevTools 浏览器扩展完全一致的自检能力。\n\n## 架构设计\n\n### 整体架构\n\nReact 组件审查模块位于 `cli/src/native/react/` 目录下，采用模块化设计，将不同功能职责分离到独立子模块中：\n\n```mermaid\ngraph TD\n    A[用户启动 Browser] --> B[--enable react-devtools]\n    B --> C[installHook.js 注入]\n    C --> D[__REACT_DEVTOOLS_GLOBAL_HOOK__]\n    D --> E[React 检测并注册渲染器]\n    \n    E --> F[React 子系统]\n    F --> G[tree - 组件树]\n    F --> H[inspect - 组件详情]\n    F --> I[renders - 渲染追踪]\n    F --> J[suspense - 边界分析]\n    \n    K[vitals - 独立模块] -.-> L[Web 标准 API]\n    K -.-> M[pushstate - SPA 导航]\n    \n    G --> N[format_tree / TreeNode]\n    H --> O[inspectElementRaw]\n    I --> P[format_renders_report / RendersData]\n    J --> Q[format_suspense_report / Boundary]\n```\n\n### 核心模块职责\n\n| 模块 | 文件路径 | 导出内容 | 功能描述 |\n|------|----------|----------|----------|\n| **mod.rs** | `cli/src/native/react/mod.rs` | 主入口 | 定义 INSTALL_HOOK_JS 常量，统一导出子模块 |\n| **tree.rs** | `cli/src/native/react/tree.rs` | `TreeNode`, `format_tree` | 序列化组件树为可读格式 |\n| **renders.rs** | `cli/src/native/react/renders.rs` | `RendersData`, `format_renders_report` | 追踪组件重新渲染 |\n| **suspense.rs** | `cli/src/native/react/suspense.rs` | `Boundary`, `format_suspense_report` | 分析 Suspense 边界状态 |\n| **vitals.rs** | `cli/src/native/react/vitals.rs` | `VitalsData`, `format_vitals_report` | 采集 Web Vitals 指标 |\n| **installHook.js** | `cli/src/native/react/installHook.js` | Hook 脚本 | 注入 React DevTools 全局钩子 |\n\n### 启动机制\n\nReact 自检功能的启用需要用户在启动 agent-browser 时显式传递 `--enable react-devtools` 参数。启用后，agent-browser 会通过 CDP (Chrome DevTools Protocol) 的 `addScriptToEvaluateOnNewDocument` 方法在所有页面 JS 执行前注册 Hook 脚本。\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant CLI as agent-browser CLI\n    participant CDP as CDP Client\n    participant Browser as Chrome Browser\n    participant React as React Runtime\n    \n    U->>CLI: agent-browser open --enable react-devtools <url>\n    CLI->>CDP: 创建 BrowserContext\n    CDP->>Browser: 初始化 CDP 会话\n    CLI->>CDP: addScriptToEvaluateOnNewDocument(installHook.js)\n    Browser->>React: 页面加载完成\n    React->>React: 检测 __REACT_DEVTOOLS_GLOBAL_HOOK__\n    React->>React: 注册渲染器到 Hook\n    Note over React: React 自检功能就绪\n```\n\n## React DevTools Hook 机制\n\n### Hook 脚本工作原理\n\n`installHook.js` 是 React DevTools Chrome 扩展的官方 Hook 实现（MIT 协议，来源：facebook/react）。该脚本的核心功能是创建一个全局 Symbol 键 `__REACT_DEVTOOLS_GLOBAL_HOOK__`，供 React 运行时在启动时检测并注册自身的渲染器信息。\n\n脚本中定义了以下关键 Symbol 标识符：\n\n```javascript\nconst A = Symbol.for(\"react.element\");\nconst M = Symbol.for(\"react.transitional.element\");\nconst z = Symbol.for(\"react.portal\");\nconst $ = Symbol.for(\"react.fragment\");\n// ... 更多 React 内部 Symbol\n```\n\n### 渲染器注册流程\n\nReact 渲染器（如 react-dom、react-native）在初始化时会检测 `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` 是否存在。如果存在，渲染器会将自身的 Fiber 实现回调函数注册到这个 Hook 上，包括：\n\n- `findFiberByHostInstance` - 通过 DOM 节点查找 Fiber\n- `findHostInstanceByFiber` - 通过 Fiber 查找 DOM 节点\n- `inspectElement` - 检索组件元素详情\n- `flushInitialProperties` - 刷新初始属性\n- `patchIntervalDictionary` - 性能监控间隔配置\n\n资料来源：[cli/src/native/react/installHook.js:1-50]()\n\n## 组件树审查 (react tree)\n\n### 功能描述\n\n`react tree` 命令用于获取当前页面的完整 React 组件树结构。该命令会遍历所有已注册的 Fiber 节点，按照树形拓扑关系输出组件层级。\n\n### 使用方式\n\n```bash\nagent-browser open --enable react-devtools <url>\nagent-browser react tree\n```\n\n### 输出格式\n\n命令输出包含每个组件的以下信息：\n\n| 字段 | 说明 |\n|------|------|\n| Fiber ID | React 内部用于标识 Fiber 节点的唯一 ID |\n| 组件类型 | 如 `div`、`button`、`MyComponent` |\n| 显示名 | 经过处理的可读名称（如 DisplayName） |\n| 渲染次数 | 该组件被渲染的总次数 |\n\n### 数据结构\n\n```rust\n// cli/src/native/react/tree.rs\npub struct TreeNode {\n    pub id: String,           // Fiber ID\n    pub name: String,         // 组件类型名\n    pub display_name: String, // 可读显示名\n    pub render_count: u64,    // 渲染次数统计\n    pub children: Vec<TreeNode>, // 子节点\n}\n```\n\n## 组件详情审查 (react inspect)\n\n### 功能描述\n\n`react inspect` 命令用于深度检查指定 Fiber ID 对应的组件详情，包括组件类型、当前 props、hooks 状态以及渲染来源位置。\n\n### 使用方式\n\n```bash\nagent-browser react inspect <fiberId>\n```\n\n### 检查维度\n\n| 检查维度 | 说明 | 数据来源 |\n|----------|------|----------|\n| 类型信息 | 组件的元素类型（如 `div`、`forward_ref`） | `_currentElement` |\n| Props | 当前渲染使用的属性对象 | `node.props` |\n| Hooks | 组件挂载的 hooks 状态 | Hook 内部数据结构 |\n| 样式 | 内联样式信息 | `node._instance` |\n| 源码位置 | 组件定义的文件和行号 | 源码映射 |\n\n### 内部实现\n\n`inspectElement` 函数通过以下流程获取组件详情：\n\n1. 验证目标 Fiber ID 存在于已注册的 `v` Map 中\n2. 根据元素类型（HostComponent/ClassComponent/FunctionComponent）提取对应数据\n3. 递归遍历 parents 路径构建上下文链\n4. 返回序列化的元素描述对象\n\n资料来源：[cli/src/native/react/installHook.js:60-80]()\n\n## 渲染追踪 (react renders)\n\n### 功能描述\n\n`react renders` 命令用于记录和分析 React 组件的重新渲染行为。通过追踪渲染次数和渲染耗时，帮助开发者识别性能瓶颈。\n\n### 使用方式\n\n```bash\n# 开始记录渲染\nagent-browser react renders start\n\n# 执行页面交互操作...\n\n# 停止记录并输出报告\nagent-browser react renders stop\nagent-browser react renders stop --json  # JSON 格式输出\n```\n\n### 数据模型\n\n```rust\n// cli/src/native/react/renders.rs\npub struct RendersData {\n    pub total_renders: u64,           // 总渲染次数\n    pub components: Vec<RenderStats>, // 各组件统计\n    pub timestamp: DateTime<Utc>,    // 记录时间戳\n}\n\npub struct RenderStats {\n    pub fiber_id: String,\n    pub name: String,\n    pub render_count: u64,\n    pub avg_duration_ms: f64,\n}\n```\n\n### 输出报告格式\n\n```json\n{\n  \"total_renders\": 42,\n  \"components\": [\n    {\n      \"fiber_id\": \"e42\",\n      \"name\": \"ProductList\",\n      \"render_count\": 15,\n      \"avg_duration_ms\": 2.3\n    }\n  ]\n}\n```\n\n## Suspense 边界分析 (react suspense)\n\n### 功能描述\n\n`react suspense` 命令用于识别和分析 React Suspense 边界及其动态加载状态。该功能能够区分静态 Suspense 边界和动态加载中的 Suspense 边界。\n\n### 使用方式\n\n```bash\nagent-browser react suspense\nagent-browser react suspense --only-dynamic  # 仅显示动态边界\nagent-browser react suspense --json          # JSON 格式输出\n```\n\n### 边界分类\n\n| 边界类型 | 说明 | 标记 |\n|----------|------|------|\n| 静态边界 | 始终resolved，无动态加载行为 | `static` |\n| 动态边界 | 包含未完成的异步加载（pending） | `suspended` |\n\n### 数据结构\n\n```rust\n// cli/src/native/react/suspense.rs\npub struct Boundary {\n    pub id: String,                  // 边界唯一标识\n    pub name: String,                // Suspense 组件名\n    pub state: BoundaryState,        // 当前状态\n    pub children: Vec<String>,       // 边界内组件\n}\n\npub enum BoundaryState {\n    Resolved,   // 已完成加载\n    Suspended,  // 等待异步加载\n}\n```\n\n## Web Vitals 监测 (vitals)\n\n### 功能描述\n\n`vitals` 命令用于采集 Core Web Vitals 核心指标，这是 React 组件审查中与框架相关性最低但实用性最高的模块。该功能依赖标准的 Web APIs，而非 React 特有机制。\n\n### 采集指标\n\n| 指标 | 全称 | 说明 | 理想阈值 |\n|------|------|------|----------|\n| LCP | Largest Contentful Paint | 最大内容绘制时间 | < 2.5s |\n| CLS | Cumulative Layout Shift | 累积布局偏移 | < 0.1 |\n| TTFB | Time to First Byte | 首字节时间 | < 800ms |\n| FCP | First Contentful Paint | 首次内容绘制 | < 1.8s |\n| INP | Interaction to Next Paint | 交互到下次绘制 | < 200ms |\n\n### 使用方式\n\n```bash\n# 采集当前页面指标\nagent-browser vitals\n\n# 采集指定 URL 指标\nagent-browser vitals <url>\n\n# JSON 格式输出\nagent-browser vitals --json\n```\n\n### 数据模型\n\n```rust\n// cli/src/native/react/vitals.rs\npub struct VitalsData {\n    pub lcp: Option<f64>,     // Largest Contentful Paint (ms)\n    pub cls: Option<f64>,     // Cumulative Layout Shift\n    pub ttfb: Option<f64>,    // Time to First Byte (ms)\n    pub fcp: Option<f64>,     // First Contentful Paint (ms)\n    pub inp: Option<f64>,     // Interaction to Next Paint (ms)\n    pub hydration_time: Option<f64>, // React 水合时间 (ms)\n    pub url: String,\n    pub timestamp: DateTime<Utc>,\n}\n```\n\n## SPA 导航模拟 (pushstate)\n\n### 功能描述\n\n`pushstate` 命令用于模拟单页应用（SPA）中的客户端路由导航。该功能与 React 本身无直接关联，但与 React Router 等路由库协同工作。\n\n### 使用方式\n\n```bash\nagent-browser pushstate <url>\n```\n\n### 工作机制\n\n1. 在当前页面执行 `history.pushState()` 或 `history.replaceState()`\n2. 触发 `popstate` 事件监听器\n3. React Router 等框架监听该事件后执行组件切换\n4. agent-browser 自动检测 Next.js 路由并同步状态\n\n## 命令行接口集成\n\n### Action 路由表\n\nReact 相关命令通过 `cli/src/native/actions.rs` 中的路由表注册到 CLI 框架：\n\n```rust\n\"react_tree\" => handle_react_tree(cmd, state).await,\n\"react_inspect\" => handle_react_inspect(cmd, state).await,\n\"react_renders_start\" => handle_react_renders_start(cmd, state).await,\n\"react_renders_stop\" => handle_react_renders_stop(cmd, state).await,\n\"react_suspense\" => handle_react_suspense(cmd, state).await,\n\"vitals\" => handle_vitals(cmd, state).await,\n\"pushstate\" => handle_pushstate(cmd, state).await,\n```\n\n资料来源：[cli/src/native/actions.rs:1-30]()\n\n## 最佳实践\n\n### 1. 启动参数配置\n\n始终在需要 React 审查功能的会话中包含 `--enable react-devtools` 参数：\n\n```bash\nagent-browser open --enable react-devtools https://your-react-app.com\n```\n\n### 2. 性能分析工作流\n\n```mermaid\ngraph LR\n    A[启动 Browser] --> B[react renders start]\n    B --> C[执行用户交互]\n    C --> D[react renders stop]\n    D --> E[分析渲染热点]\n    E --> F{发现异常?}\n    F -->|是| G[react inspect 定位]\n    F -->|否| H[检查 Web Vitals]\n    G --> I[优化组件]\n    H --> J[vitals --json]\n```\n\n### 3. 渲染问题排查步骤\n\n1. 执行 `react tree` 获取组件树概览\n2. 定位可疑组件的 Fiber ID\n3. 使用 `react inspect <id>` 检查 props 和 hooks\n4. 执行 `react renders start` 记录重新渲染\n5. 触发可疑操作后 `react renders stop` 查看报告\n\n### 4. Suspense 问题排查\n\n```bash\n# 查看所有边界\nagent-browser react suspense\n\n# 仅关注动态加载\nagent-browser react suspense --only-dynamic\n\n# 导出 JSON 供自动化分析\nagent-browser react suspense --json > suspense-report.json\n```\n\n## 技术限制与注意事项\n\n### 1. Hook 时机依赖\n\nReact DevTools Hook 仅在 React 初始化时被检测。如果页面在 Hook 注入前已完成初始化，审查功能将不可用。当前架构通过 `addScriptToEvaluateOnNewDocument` 确保 Hook 在所有页面脚本前注册。\n\n### 2. 非 React 框架\n\n`vitals` 和 `pushstate` 为框架无关实现，可用于 Vue、Angular 等其他 SPA 框架的监测。\n\n### 3. 生产环境警告\n\nReact DevTools Hook 会影响 React 的内部状态管理，建议仅在开发和调试环境中使用。\n\n## 总结\n\nReact 组件审查模块为 agent-browser 提供了完整的 React 运行时自检能力。通过整合 React DevTools 协议，该模块实现了组件树可视化、属性状态检查、渲染性能追踪和 Suspense 边界分析等功能。这些能力使得 agent-browser 能够自动化测试 React 应用时提供精确的组件级别诊断信息，极大地提升了浏览器自动化测试的深度和准确性。\n\n---\n\n<a id='sessions-authentication'></a>\n\n## 会话与认证管理\n\n### 相关页面\n\n相关主题：[网络监控与拦截](#network-monitoring), [浏览器自动化核心](#browser-automation)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/state.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n- [cli/src/native/storage.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/storage.rs)\n- [cli/src/native/auth.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/auth.rs)\n- [cli/src/native/cookies.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/cookies.rs)\n- [cli/src/native/policy.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/policy.rs)\n- [cli/src/native/actions.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n</details>\n\n# 会话与认证管理\n\n## 概述\n\nagent-browser 的会话与认证管理系统负责管理浏览器自动化会话的生命周期、认证凭证、Cookie 存储以及 Web Storage（localStorage/sessionStorage）。该系统是 Rust 原生实现，运行在 `cli/src/native/` 目录下的浏览器自动化守护进程中，支持 Chrome 和 Lightpanda 两种浏览器引擎。\n\n会话管理器的核心职责包括：\n\n- 会话目录的创建与清理\n- Cookie 的增删改查\n- Web Storage 的持久化与恢复\n- 认证状态的保存与加载\n- 状态快照的序列化与反序列化\n\n资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n---\n\n## 核心架构\n\n### 目录结构\n\nagent-browser 使用统一的本地状态目录存储所有会话相关数据：\n\n```bash\n~/.agent-browser/\n├── sessions/          # 会话数据目录\n├── auth/              # 认证存储\n└── encryption.key     # 加密密钥\n```\n\n当无法解析用户主目录时，系统会回退到临时目录：\n\n```bash\n<tempdir>/agent-browser/\n```\n\n资料来源：[cli/src/native/state.rs:80-88](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n\n### 模块划分\n\n```mermaid\ngraph TD\n    A[CLI 命令层] --> B[动作分发层]\n    B --> C[认证模块 auth.rs]\n    B --> D[Cookie 模块 cookies.rs]\n    B --> E[Storage 模块 storage.rs]\n    B --> F[策略模块 policy.rs]\n    C --> G[状态管理 state.rs]\n    D --> G\n    E --> G\n    F --> G\n    G --> H[CDP 客户端]\n    H --> I[浏览器实例]\n```\n\n---\n\n## 状态管理\n\n### 状态根目录\n\n`state.rs` 提供了获取状态目录的核心函数：\n\n| 函数 | 返回值 | 说明 |\n|------|--------|------|\n| `get_state_dir()` | `PathBuf` | 返回 `~/.agent-browser` 或回退目录 |\n| `get_sessions_dir()` | `PathBuf` | 返回 `~/.agent-browser/sessions` |\n\n资料来源：[cli/src/native/state.rs:80-93](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n\n### 会话操作\n\n系统支持以下会话级别的状态操作：\n\n| 操作命令 | 功能描述 |\n|----------|----------|\n| `state_save` | 保存当前会话状态 |\n| `state_load` | 加载指定会话状态 |\n| `state_list` | 列出所有已保存的会话 |\n| `state_clean` | 清理旧会话（默认 30 天） |\n| `state_rename` | 重命名会话 |\n\n资料来源：[cli/src/native/actions.rs:180-185](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n### 存储状态模型\n\n`StorageState` 结构体定义了会话持久化的数据模型：\n\n```rust\nstruct StorageState {\n    cookies: Vec<Cookie>,\n    // ... 其他字段\n}\n\nstruct Cookie {\n    name: String,\n    value: String,\n    domain: String,\n    path: String,\n    expires: f64,\n}\n```\n\n资料来源：[cli/src/native/state.rs:95-105](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/state.rs)\n\n---\n\n## Cookie 管理\n\n### CLI 命令接口\n\n```bash\n# Cookie 操作\nagent-browser cookies get                    # 获取当前 Cookie\nagent-browser cookies set --url <url> ...    # 设置 Cookie\nagent-browser cookies clear                  # 清除所有 Cookie\n\n# 完整参数选项\n--url <domain>      # Cookie 关联的域名\n--domain <host>     # Cookie 域\n--path <path>       # Cookie 路径\n--httpOnly          # HttpOnly 标记\n--secure            # Secure 标记\n--sameSite <policy> # SameSite 策略\n--expires <timestamp>  # 过期时间戳\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n### 支持的 Cookie 属性\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| `name` | String | Cookie 名称 |\n| `value` | String | Cookie 值 |\n| `domain` | String | 所属域名 |\n| `path` | String | URL 路径 |\n| `expires` | f64 | Unix 时间戳格式的过期时间 |\n| `httpOnly` | bool | HttpOnly 标志 |\n| `secure` | bool | Secure 标志 |\n| `sameSite` | String | SameSite 策略 |\n\n### 自动导入功能\n\n系统支持从多种格式自动导入 Cookie：\n\n- **JSON 格式** - 标准 Cookie 对象数组\n- **cURL 格式** - 使用 `--curl` 参数指定文件\n- **Cookie Header 格式** - 直接解析 `Cookie:` 头部\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## Web Storage 管理\n\n### 存储类型\n\nagent-browser 支持两种 Web Storage API：\n\n| 存储类型 | CLI 命令 | 说明 |\n|----------|----------|------|\n| localStorage | `storage local` | 持久化存储，跨会话保留 |\n| sessionStorage | `storage session` | 会话级存储，标签页关闭后清除 |\n\n### CLI 命令\n\n```bash\n# Storage 操作\nagent-browser storage local get    # 获取 localStorage\nagent-browser storage local set   # 设置 localStorage\nagent-browser storage local clear # 清除 localStorage\n\nagent-browser storage session get # 获取 sessionStorage\nagent-browser storage session set # 设置 sessionStorage\nagent-browser storage session clear # 清除 sessionStorage\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n### 动作处理器映射\n\n| 操作 | 处理器函数 |\n|------|-----------|\n| 获取存储 | `handle_storage_get` |\n| 设置存储 | `handle_storage_set` |\n| 清除存储 | `handle_storage_clear` |\n\n资料来源：[cli/src/native/actions.rs:140-142](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/actions.rs)\n\n---\n\n## 认证系统\n\n### 认证存储架构\n\n认证模块负责管理敏感凭证数据，存储在 `~/.agent-browser/auth/` 目录下。该目录包含：\n\n- HTTP 认证凭证\n- 代理认证信息\n- 证书配置\n\n### 认证配置命令\n\n```bash\n# 设置认证凭证\nagent-browser set credentials <username> <password>\n\n# 设置代理认证\nagent-browser set proxy-auth <username> <password>\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## 策略管理\n\n### 动作策略\n\npolicy.rs 模块定义了浏览器动作的安全策略：\n\n| 策略类型 | 说明 |\n|----------|------|\n| 内容边界 | `--content-boundaries` 控制元素交互范围 |\n| 最大输出 | `--max-output` 限制输出数据量 |\n| 允许域名 | `--allowed-domains` 白名单限制 |\n| 动作策略 | `--action-policy` 动作执行策略 |\n\n### 策略参数\n\n```bash\n# 域名限制\nagent-browser --allowed-domains example.com,vercel.com\n\n# 输出限制\nagent-browser --max-output 10000\n\n# 内容边界\nagent-browser --content-boundaries true\n```\n\n资料来源：[cli/src/flags.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/flags.rs)\n\n---\n\n## 工作流程\n\n### 会话创建与保存流程\n\n```mermaid\nsequenceDiagram\n    participant CLI\n    participant Actions\n    participant State\n    participant CDP\n    participant Browser\n\n    CLI->>Actions: cookies_set / storage_set\n    Actions->>CDP: 执行 CDP 命令\n    CDP->>Browser: 设置 Cookie/Storage\n    Browser-->>CDP: 确认\n    CDP-->>Actions: 结果\n    Actions->>State: state_save\n    State->>State: 序列化到 ~/.agent-browser/sessions/\n```\n\n### 状态恢复流程\n\n```mermaid\nsequenceDiagram\n    participant CLI\n    participant Actions\n    participant State\n    participant CDP\n    participant Browser\n\n    CLI->>Actions: state_load\n    Actions->>State: 读取会话文件\n    State-->>Actions: StorageState 对象\n    Actions->>CDP: 创建/恢复 Cookie\n    CDP->>Browser: 注入 Cookie\n    Actions->>CDP: 恢复 Storage\n    CDP->>Browser: 注入 Storage\n```\n\n---\n\n## CLI 完整命令参考\n\n### 会话管理\n\n| 命令 | 参数 | 说明 |\n|------|------|------|\n| `tab new` | - | 创建新标签页 |\n| `tab list` | - | 列出所有标签页 |\n| `tab close` | `<n>` | 关闭指定标签页 |\n| `tab <n>` | - | 切换到指定标签页 |\n\n### 认证与存储\n\n```bash\n# Cookie 完整操作\nagent-browser cookies get\nagent-browser cookies set --url https://example.com --name session --value abc123\nagent-browser cookies clear\n\n# Storage 完整操作\nagent-browser storage local get\nagent-browser storage session get\nagent-browser storage local set --key theme --value dark\nagent-browser storage clear\n\n# 状态管理\nagent-browser state_save --name my-session\nagent-browser state_load --name my-session\nagent-browser state_list\nagent-browser state_clean --days 7\n```\n\n资料来源：[cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n\n---\n\n## 安全考虑\n\n### 敏感数据处理\n\n1. **加密存储** - 认证数据使用加密密钥保护\n2. **临时回退** - 无法访问主目录时使用临时目录\n3. **会话清理** - 支持自动清理过期会话（默认 30 天）\n\n### 最佳实践\n\n- 定期使用 `state_clean` 清理旧会话\n- 使用 `--allowed-domains` 限制 Cookie 作用域\n- 避免在命令行中直接传递敏感凭证\n- 使用 `state_save` 定期备份重要会话状态\n\n---\n\n## 相关文档\n\n- [技能文档](../skill-data/core/references/snapshot-refs.md) - 快照与元素引用\n- [Slack 技能](../skill-data/slack/references/slack-tasks.md) - 会话管理示例\n- [架构说明](../AGENTS.md) - 完整系统架构\n\n---\n\n<a id='network-monitoring'></a>\n\n## 网络监控与拦截\n\n### 相关页面\n\n相关主题：[会话与认证管理](#sessions-authentication), [浏览器自动化核心](#browser-automation)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [cli/src/native/network.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/network.rs)\n- [cli/src/native/stream/http.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/stream/http.rs)\n- [cli/src/native/stream/websocket.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/native/stream/websocket.rs)\n- [cli/src/output.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/src/output.rs)\n- [packages/dashboard/src/components/network-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/network-panel.tsx)\n</details>\n\n# 网络监控与拦截\n\n## 概述\n\n网络监控与拦截是 agent-browser 提供的核心功能之一，允许用户在浏览器会话中对网络请求和响应进行实时监控、拦截、修改和录制。该功能基于 Chrome DevTools Protocol (CDP) 实现，支持 HTTP 请求、WebSocket 连接等多种网络协议。\n\n通过这套系统，用户可以：\n\n- 实时观察页面发出的所有网络请求\n- 对特定请求进行拦截和响应修改\n- 模拟网络错误和异常场景\n- 录制完整的网络会话为 HAR 格式\n- 管理 Cookie 和 Web Storage\n\n## 核心功能模块\n\nagent-browser 的网络监控与拦截系统主要由以下几个模块组成：\n\n| 模块 | 功能描述 | 源码位置 |\n|------|----------|----------|\n| 网络路由 | 请求拦截、abort、响应修改 | `cli/src/native/network.rs` |\n| HTTP 流处理 | HTTP 请求/响应解析 | `cli/src/native/stream/http.rs` |\n| WebSocket 处理 | WebSocket 帧解析和转发 | `cli/src/native/stream/websocket.rs` |\n| Dashboard UI | 可视化网络监控面板 | `network-panel.tsx` |\n\n## 网络命令接口\n\nagent-browser 通过 CLI 提供完整的网络操作命令。以下是主要命令的详细说明：\n\n资料来源：[cli/src/output.rs:50-60]()\n\n### network 命令族\n\n```bash\nagent-browser network <action>\n  route <url> [--abort|--body <json>] [--resource-type <csv>]\n  unroute [url]\n  requests [--clear] [--filter <pattern>]\n  har <start|stop> [path]\n```\n\n## 请求拦截与路由\n\n### route - 请求路由与拦截\n\n`route` 命令用于设置 URL 路由规则，可以对匹配的请求进行拦截处理。\n\n```bash\nagent-browser network route <url> [--abort|--body <json>] [--resource-type <csv>]\n```\n\n#### 参数说明\n\n| 参数 | 类型 | 必需 | 说明 |\n|------|------|------|------|\n| `url` | string | 是 | 要拦截的目标 URL，支持模式匹配 |\n| `--abort` | flag | 否 | 中止匹配的请求，不返回任何响应 |\n| `--body <json>` | string | 否 | 返回自定义 JSON 响应体 |\n| `--resource-type <csv>` | string | 否 | 按资源类型过滤（如 document, script, stylesheet） |\n\n#### 使用示例\n\n```bash\n# 中止所有对特定 API 的请求\nagent-browser network route \"*/api/auth/*\" --abort\n\n# 模拟 API 返回自定义数据\nagent-browser network route \"*/api/user\" --body '{\"id\": 1, \"name\": \"test\"}'\n\n# 仅拦截特定资源类型\nagent-browser network route \"*/assets/*\" --resource-type \"stylesheet\"\n```\n\n### unroute - 移除路由规则\n\n```bash\nagent-browser network unroute [url]\n```\n\n移除已设置的路由规则。省略 `url` 参数时，移除所有规则。\n\n```bash\n# 移除特定规则\nagent-browser network unroute \"*/api/auth/*\"\n\n# 清除所有规则\nagent-browser network unroute\n```\n\n## 请求监控\n\n### requests - 实时请求列表\n\n`requests` 命令用于查看当前会话的网络请求列表。\n\n```bash\nagent-browser network requests [--clear] [--filter <pattern>]\n```\n\n| 参数 | 说明 |\n|------|------|\n| `--clear` | 清空请求历史记录 |\n| `--filter <pattern>` | 按 URL 模式过滤请求 |\n\n## HAR 录制\n\nHAR (HTTP Archive) 是一种标准的网络会话记录格式，用于保存和重放浏览器网络活动。\n\n### 开始录制\n\n```bash\nagent-browser network har start\n```\n\n开始捕获所有网络请求和响应。\n\n### 停止录制并保存\n\n```bash\nagent-browser network har stop [path]\n```\n\n停止录制并将结果保存为 HAR 文件。默认文件名为 `capture.har`。\n\n```bash\n# 保存到默认文件\nagent-browser network har stop\n\n# 保存到指定路径\nagent-browser network har stop /path/to/recording.har\n```\n\n### Dashboard 可视化\n\n在 agent-browser 的 Dashboard 界面中，网络面板提供了可视化的请求监控功能：\n\n- **RequestDetail 组件**：显示单个请求的详细信息，包括 URL、请求头、响应头等\n- **HAR 导出对话框**：支持将录制的网络会话导出为 HAR 文件\n\n资料来源：[packages/dashboard/src/components/network-panel.tsx:100-140]()\n\n## 存储管理\n\n### Cookie 管理\n\nagent-browser 提供完整的 Cookie 管理功能：\n\n```bash\nagent-browser cookies [get|set|clear]\n```\n\n| 操作 | 说明 |\n|------|------|\n| `get` | 获取当前 Cookie 列表 |\n| `set` | 设置 Cookie（支持 --url, --domain, --path, --httpOnly, --secure, --sameSite, --expires 参数） |\n| `clear` | 清除所有 Cookie |\n\n#### set 子命令参数\n\n| 参数 | 说明 |\n|------|------|\n| `--url <url>` | 设置 Cookie 的目标 URL |\n| `--domain <domain>` | Cookie 所属域名 |\n| `--path <path>` | Cookie 路径 |\n| `--httpOnly` | 标记为 HttpOnly |\n| `--secure` | 标记为 Secure |\n| `--sameSite <strict\\|lax\\|none>` | SameSite 属性 |\n| `--expires <timestamp>` | 过期时间戳 |\n| `--curl <file>` | 从 cURL 格式文件导入 |\n\n#### 从 cURL 导入\n\n```bash\nagent-browser cookies set --curl request.txt --domain \"example.com\"\n```\n\n支持自动检测 JSON、cURL 和 Cookie 头格式。\n\n### Web Storage 管理\n\n```bash\nagent-browser storage <local|session>\n```\n\n| 类型 | 说明 |\n|------|------|\n| `local` | 管理 localStorage |\n| `session` | 管理 sessionStorage |\n\n## 架构设计\n\n### 网络监控流程\n\n```mermaid\ngraph TD\n    A[用户发起请求] --> B[CDP Network Agent]\n    B --> C{匹配路由规则?}\n    C -->|是| D[应用路由处理]\n    C -->|否| E[转发到服务器]\n    D --> F{abort?}\n    F -->|是| G[返回中止响应]\n    F -->|否| H{自定义 body?}\n    H -->|是| I[返回自定义响应]\n    H -->|否| E\n    E --> J[接收服务器响应]\n    J --> K[记录到 HAR]\n    K --> L[返回给浏览器]\n    G --> L\n    I --> L\n```\n\n### 请求拦截状态机\n\n```mermaid\nstateDiagram-v2\n    [*] --> Idle: 初始化\n    Idle --> Monitoring: network route 设置\n    Monitoring --> Intercepted: 请求匹配\n    Intercepted --> Aborted: --abort\n    Intercepted --> Modified: --body\n    Modified --> Monitoring: 完成修改\n    Aborted --> Monitoring: 继续监控\n    Monitoring --> Stopped: 关闭会话\n    Stopped --> [*]\n```\n\n## 典型使用场景\n\n### 场景一：API  mocking\n\n当后端 API 尚未开发完成时，使用 `route` 命令模拟响应：\n\n```bash\n# 模拟用户列表 API\nagent-browser network route \"*/api/users\" --body '[\n  {\"id\": 1, \"name\": \"Alice\"},\n  {\"id\": 2, \"name\": \"Bob\"}\n]'\n\n# 模拟详情 API\nagent-browser network route \"*/api/users/*\" --body '{\"id\": 1, \"name\": \"Alice\", \"email\": \"alice@example.com\"}'\n```\n\n### 场景二：调试网络错误\n\n测试应用在网络异常情况下的表现：\n\n```bash\n# 中止特定域名的所有请求\nagent-browser network route \"https://analytics.example.com/*\" --abort\n\n# 测试静态资源加载失败\nagent-browser network route \"*assets*.js\" --abort\n```\n\n### 场景三：录制和重放网络会话\n\n```bash\n# 开始录制\nagent-browser network har start\n\n# 执行测试操作...\nagent-browser click @e1\nagent-browser fill @e2 \"test query\"\nagent-browser click @e3\n\n# 停止录制并保存\nagent-browser network har stop debug.har\n```\n\n### 场景四：导入已有 Cookie\n\n```bash\n# 从浏览器导出的 cURL 命令导入 Cookie\nagent-browser cookies set --curl logged-in.txt --domain \"app.example.com\"\n```\n\n## 最佳实践\n\n### 1. 清理路由规则\n\n完成调试后，记得清除所有路由规则避免影响其他测试：\n\n```bash\nagent-browser network unroute\n```\n\n### 2. 使用资源类型过滤\n\n对于大型应用，使用 `--resource-type` 减少规则数量：\n\n```bash\n# 仅拦截 XHR 和 Fetch 请求\nagent-browser network route \"*api*\" --resource-type \"xhr,fetch\"\n```\n\n### 3. HAR 文件管理\n\n录制大型会话时，注意磁盘空间：\n\n```bash\n# 使用有意义的文件名\nagent-browser network har stop $(date +%Y%m%d_%H%M%S)_api_test.har\n```\n\n## 命令速查表\n\n| 功能 | 命令 |\n|------|------|\n| 拦截请求 | `network route <url> --abort` |\n| 自定义响应 | `network route <url> --body <json>` |\n| 查看请求 | `network requests` |\n| 过滤请求 | `network requests --filter \"<pattern>\"` |\n| 清除请求列表 | `network requests --clear` |\n| 开始 HAR 录制 | `network har start` |\n| 停止 HAR 录制 | `network har stop [path]` |\n| 移除路由规则 | `network unroute [url]` |\n| 获取 Cookie | `cookies get` |\n| 设置 Cookie | `cookies set --url <url> --domain <domain>` |\n| 清除 Cookie | `cookies clear` |\n| 管理 localStorage | `storage local` |\n| 管理 sessionStorage | `storage session` |\n\n---\n\n<a id='dashboard-components'></a>\n\n## 仪表板组件\n\n### 相关页面\n\n相关主题：[文档站点](#documentation-site), [系统架构](#architecture-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [packages/dashboard/src/app/page.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/app/page.tsx)\n- [packages/dashboard/src/components/extensions-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/extensions-panel.tsx) *(已获取)*\n- [packages/dashboard/src/components/activity-feed.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/activity-feed.tsx)\n- [packages/dashboard/src/components/chat-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/chat-panel.tsx)\n- [packages/dashboard/src/components/network-panel.tsx](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/components/network-panel.tsx)\n- [packages/dashboard/src/store/chat.ts](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/store/chat.ts)\n- [packages/dashboard/src/store/activity.ts](https://github.com/vercel-labs/agent-browser/blob/main/packages/dashboard/src/store/activity.ts)\n\n> 注：本页主要基于已获取的 `extensions-panel.tsx` 源码及项目结构分析生成。其他组件文件内容需在实际检索后补充完善。\n</details>\n\n# 仪表板组件\n\n## 概述\n\n`agent-browser` 项目的仪表板（Dashboard）是一个基于 React + TypeScript 构建的 Web 界面，用于可视化展示浏览器自动化任务的状态、结果和执行历史。仪表板组件采用模块化架构，通过 Zustand 状态管理库实现跨组件的状态共享，支持截图展示、快照查看、活动记录等功能。\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:1-80]()\n\n## 架构设计\n\n### 技术栈\n\n| 层级 | 技术选型 | 说明 |\n|------|----------|------|\n| 前端框架 | React 18+ | 组件化 UI 开发 |\n| 语言 | TypeScript | 类型安全 |\n| 状态管理 | Zustand | 轻量级状态管理 |\n| 样式 | Tailwind CSS | 原子化 CSS 框架 |\n| 构建工具 | Vite | 快速开发构建 |\n\n### 组件目录结构\n\n```\npackages/dashboard/src/\n├── app/\n│   └── page.tsx              # 主仪表板页面\n├── components/\n│   ├── extensions-panel.tsx  # Chrome 扩展管理面板\n│   ├── activity-feed.tsx     # 活动流展示\n│   ├── chat-panel.tsx        # 聊天交互面板\n│   └── network-panel.tsx     # 网络请求监控面板\n└── store/\n    ├── chat.ts               # 聊天相关状态\n    └── activity.ts           # 活动记录状态\n```\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:1-10]()\n\n## 核心组件\n\n### ExtensionsPanel（扩展面板）\n\n`ExtensionsPanel` 组件负责展示和管理已安装的 Chrome 浏览器扩展。组件采用可折叠的卡片式布局，支持显示扩展名称、描述和安装路径。\n\n#### 组件结构\n\n```tsx\n// packages/dashboard/src/components/extensions-panel.tsx\nfunction ExtensionsPanel({ extensions }: { extensions: Extension[] }) {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  return (\n    <div className=\"border rounded-lg\">\n      <Header count={extensions.length} />\n      {isExpanded && (\n        <div className=\"space-y-1 bg-muted/30 px-3 py-2 text-[11px]\">\n          {ext.description && (\n            <div>\n              <span className=\"text-muted-foreground\">Description: </span>\n              <span className=\"text-foreground\">{ext.description}</span>\n            </div>\n          )}\n          <div>\n            <span className=\"text-muted-foreground\">Path: </span>\n            <span className={cn(\"break-all font-mono text-foreground\")}>\n              {ext.path}\n            </span>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:15-45]()\n\n#### 扩展数据模型\n\n```typescript\ninterface Extension {\n  id: string;\n  name: string;\n  description?: string;\n  path: string;\n  version?: string;\n}\n```\n\n#### Header 子组件\n\n```tsx\nfunction Header({ count }: { count: number }) {\n  return (\n    <div className=\"flex shrink-0 items-center gap-1.5 px-3 py-2\">\n      <span className=\"text-[10px] text-muted-foreground\">\n        Chrome Extensions\n      </span>\n      {count > 0 && (\n        <Badge\n          variant=\"secondary\"\n          className=\"ml-auto h-4 px-1.5 text-[10px] tabular-nums\"\n        >\n          {count}\n        </Badge>\n      )}\n    </div>\n  );\n}\n```\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:55-70]()\n\n### ActivityFeed（活动流）\n\n活动流组件用于实时展示 agent-browser 的执行活动，包括命令执行、状态变更和操作记录。该组件从 Zustand store 订阅活动数据，支持虚拟滚动以优化大数据量场景下的渲染性能。\n\n### ChatPanel（聊天面板）\n\n聊天面板提供人机交互界面，允许用户发送指令并接收 agent-browser 的响应。该组件与 `chat.ts` 状态存储紧密集成，支持消息历史、会话管理和流式响应展示。\n\n### NetworkPanel（网络面板）\n\n网络监控面板用于显示浏览器发出的 HTTP 请求和响应，支持以下功能：\n\n- 请求/响应头查看\n- 请求方法过滤（GET、POST、PUT、DELETE 等）\n- 状态码高亮\n- 请求耗时统计\n\n资料来源：[packages/dashboard/src/components/network-panel.tsx]()\n\n## 状态管理\n\n### Chat Store\n\n`chat.ts` 使用 Zustand 管理聊天会话状态：\n\n```typescript\n// packages/dashboard/src/store/chat.ts\ninterface ChatState {\n  messages: Message[];\n  sendMessage: (content: string) => void;\n  clearHistory: () => void;\n}\n```\n\n| 状态字段 | 类型 | 描述 |\n|----------|------|------|\n| `messages` | `Message[]` | 消息列表 |\n| `sendMessage` | `function` | 发送消息动作 |\n| `clearHistory` | `function` | 清空历史记录 |\n\n### Activity Store\n\n`activity.ts` 管理操作活动日志：\n\n```typescript\n// packages/dashboard/src/store/activity.ts\ninterface ActivityState {\n  activities: Activity[];\n  addActivity: (activity: Activity) => void;\n  clearActivities: () => void;\n}\n```\n\n## 主页面布局\n\n主仪表板页面 (`page.tsx`) 采用响应式布局，整合所有面板组件：\n\n```tsx\n// packages/dashboard/src/app/page.tsx 结构示意\nexport default function DashboardPage() {\n  return (\n    <div className=\"min-h-screen bg-background\">\n      <header> {/* 顶部导航 */} </header>\n      <main className=\"flex\">\n        <aside> {/* 侧边栏 */} </aside>\n        <section className=\"flex-1\">\n          {/* 主内容区域 */}\n          <ChatPanel />\n          <ActivityFeed />\n        </section>\n        <aside>\n          <NetworkPanel />\n          <ExtensionsPanel />\n        </aside>\n      </main>\n    </div>\n  );\n}\n```\n\n资料来源：[packages/dashboard/src/app/page.tsx]()\n\n## 数据流图\n\n```mermaid\ngraph TD\n    A[用户交互] --> B{操作类型}\n    B -->|发送指令| C[ChatPanel]\n    B -->|查看活动| D[ActivityFeed]\n    B -->|监控网络| E[NetworkPanel]\n    B -->|管理扩展| F[ExtensionsPanel]\n    \n    C --> G[chat.ts store]\n    D --> H[activity.ts store]\n    \n    G --> I[CLI 进程]\n    H --> I\n    \n    I --> J[浏览器实例]\n    J --> K[CDP 连接]\n    K --> G\n    K --> H\n    \n    E --> L[网络请求数据]\n    F --> M[扩展列表数据]\n```\n\n## 样式系统\n\n仪表板组件使用 Tailwind CSS 进行样式管理，遵循以下设计规范：\n\n| 样式类别 | 工具类前缀 | 示例 |\n|----------|------------|------|\n| 间距 | `p-`, `m-`, `gap-` | `px-3 py-2` |\n| 字体 | `text-` | `text-[10px]` |\n| 颜色 | `text-`, `bg-`, `border-` | `text-muted-foreground` |\n| 圆角 | `rounded-` | `rounded-lg` |\n| 布局 | `flex-`, `grid-` | `flex shrink-0` |\n\n资料来源：[packages/dashboard/src/components/extensions-panel.tsx:20-35]()\n\n## Badge 组件使用\n\nBadge 组件用于显示数量统计，采用 `variant=\"secondary\"` 变体：\n\n```tsx\n<Badge\n  variant=\"secondary\"\n  className=\"ml-auto h-4 px-1.5 text-[10px] tabular-nums\"\n>\n  {count}\n</Badge>\n```\n\n关键样式属性：\n- `tabular-nums`：使用等宽数字字体，确保数字对齐\n- `h-4 px-1.5`：紧凑的尺寸设计\n- `ml-auto`：右对齐布局\n\n## 与 CLI 的集成\n\n仪表板通过以下方式与 `agent-browser` CLI 集成：\n\n1. **WebSocket 连接**：通过 CDP（Chrome DevTools Protocol）建立通信\n2. **命令执行**：调用 CLI 子命令执行浏览器操作\n3. **结果展示**：将命令执行结果（截图、快照）渲染到对应面板\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant D as 仪表板\n    participant C as CLI\n    participant B as 浏览器\n    \n    U->>D: 输入指令\n    D->>C: 执行命令\n    C->>B: CDP 操作\n    B-->>C: 执行结果\n    C-->>D: 返回数据\n    D-->>U: 更新界面\n```\n\n## 开发指南\n\n### 添加新面板组件\n\n1. 在 `packages/dashboard/src/components/` 创建新组件\n2. 使用 Zustand 创建对应的 store（如需要）\n3. 在 `page.tsx` 中导入并放置组件\n4. 添加 Tailwind 样式类\n\n### 状态更新流程\n\n```typescript\n// 示例：更新活动记录\nconst activityStore = useActivityStore();\nactivityStore.addActivity({\n  id: crypto.randomUUID(),\n  type: 'command',\n  message: '执行截图命令',\n  timestamp: Date.now()\n});\n```\n\n## 已知限制\n\n- 部分组件源码（如 `activity-feed.tsx`、`chat-panel.tsx`）需在完整检索后补充说明\n- 网络面板的实时数据流功能依赖 CLI 的 HAR 捕获能力\n- 扩展管理功能仅支持 Chrome 浏览器\n\n## 相关资源\n\n- [CLI 输出模块参考](../cli/src/output.md)\n- [核心技能文档](../skill-data/core/SKILL.md)\n- [Electron 应用集成](../skill-data/electron/SKILL.md)\n\n---\n\n<a id='documentation-site'></a>\n\n## 文档站点\n\n### 相关页面\n\n相关主题：[仪表板组件](#dashboard-components), [安装与构建](#installation-build)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [docs/next.config.mjs](https://github.com/vercel-labs/agent-browser/blob/main/docs/next.config.mjs)\n- [docs/src/app/layout.tsx](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/app/layout.tsx)\n- [docs/src/lib/docs-navigation.ts](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/lib/docs-navigation.ts)\n- [docs/src/lib/mdx-to-markdown.ts](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/lib/mdx-to-markdown.ts)\n- [docs/src/components/docs-sidebar.tsx](https://github.com/vercel-labs/agent-browser/blob/main/docs/src/components/docs-sidebar.tsx)\n- [AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n</details>\n\n# 文档站点\n\n## 概述\n\nagent-browser 项目的文档站点是一个基于 Next.js 构建的现代化文档平台，为用户提供完整的产品使用指南、命令参考和工作流说明。该站点作为项目的主要知识库，集中管理所有技术文档内容。\n\n## 技术架构\n\n### 框架选型\n\n文档站点采用 Next.js 作为底层框架，利用其静态站点生成（SSG）能力提供快速的页面加载和良好的 SEO 表现。\n\n```mermaid\ngraph TD\n    A[用户访问] --> B[Next.js 静态生成]\n    B --> C[MDX 内容渲染]\n    C --> D[侧边栏导航组件]\n    D --> E[文档页面展示]\n    \n    F[内容源文件] --> G[MDX to Markdown 转换]\n    G --> C\n```\n\n### 核心配置文件\n\n#### next.config.mjs\n\nNext.js 配置文件位于 `docs/next.config.mjs`，负责站点的构建和运行时配置。该文件定义了站点的基本行为和构建优化选项。\n\n#### 布局组件 (layout.tsx)\n\n根布局文件 `docs/src/app/layout.tsx` 定义了文档站点的整体布局结构，包括全局样式注入、字体配置和基础 HTML 结构。\n\n## 核心模块\n\n### 文档导航系统\n\n#### docs-navigation.ts\n\n文档导航模块 (`docs/src/lib/docs-navigation.ts`) 是整个文档站点的核心模块，负责管理文档的层级结构和导航逻辑。\n\n| 属性 | 类型 | 描述 |\n|------|------|------|\n| 导航配置 | 结构化对象 | 定义文档分类和页面映射 |\n| 层级关系 | 嵌套结构 | 支持多级文档分类 |\n| 路径映射 | 哈希表 | 快速定位文档页面 |\n\n### MDX 转换模块\n\n#### mdx-to-markdown.ts\n\nMDX 到 Markdown 的转换模块 (`docs/src/lib/mdx-to-markdown.ts`) 负责处理文档内容的格式转换，支持 MDX 语法的解析和渲染。\n\n### 侧边栏组件\n\n#### docs-sidebar.tsx\n\n侧边栏组件 (`docs/src/components/docs-sidebar.tsx`) 负责渲染文档导航界面，提供以下功能：\n\n- 文档分类展示\n- 当前页面高亮\n- 可折叠的分类组\n- 响应式布局支持\n\n## 内容结构\n\n### 主要文档分类\n\n根据项目结构，文档站点包含以下主要分类：\n\n| 分类名称 | 内容范围 | 源文件位置 |\n|----------|----------|------------|\n| 核心指南 | 基本使用、工作流、最佳实践 | `skill-data/core/` |\n| Slack 集成 | Slack 工作空间自动化 | `skill-data/slack/` |\n| 探索测试 | QA 测试和缺陷追踪 | `skill-data/dogfood/` |\n| 更新日志 | 版本发布说明 | `docs/src/app/changelog/page.mdx` |\n\n### 文档模板结构\n\n每个技能文档遵循统一模板格式：\n\n```markdown\n# 技能标题\n\n## 使用前置条件\n- 环境要求\n- 依赖安装\n\n## 快速开始\n- 基础命令\n- 常见工作流\n\n## 参考资料\n- 详细命令列表\n- 参数说明\n```\n\n## 变更日志管理\n\n### CHANGELOG.md 结构\n\n项目使用 `CHANGELOG.md` 管理版本变更记录，包含以下标准章节：\n\n- **新功能 (New Features)** - 新增功能说明\n- **错误修复 (Bug Fixes)** - 问题修复记录\n- **改进 (Improvements)** - 优化和增强说明\n- **贡献者 (Contributors)** - 版本贡献者列表\n\n### 文档变更日志同步\n\n文档站点的变更日志 (`docs/src/app/changelog/page.mdx`) 与主 `CHANGELOG.md` 保持同步，但使用不同的格式约定：\n\n- 版本号添加 `v` 前缀（如 `v0.24.0`）\n- 包含完整的发布日期\n- 使用 `---` 分隔符区分版本条目\n\n```markdown\n## v0.24.0\n\n<p className=\"text-[#888] text-sm\">March 30, 2026</p>\n\n---\n```\n\n## 开发指南\n\n### 本地开发\n\n文档站点的开发和运行需要以下步骤：\n\n1. 进入文档目录：`cd docs`\n2. 安装依赖：`npm install`\n3. 启动开发服务器：`npm run dev`\n\n### 构建流程\n\n构建文档站点时，Next.js 会执行以下操作：\n\n1. 扫描 `docs/src/app/` 目录下的所有页面\n2. 处理 MDX/Markdown 内容文件\n3. 应用 `mdx-to-markdown.ts` 定义的转换规则\n4. 生成静态 HTML 文件用于部署\n\n## 相关资源\n\n| 资源类型 | 路径 | 描述 |\n|----------|------|------|\n| 配置文件 | `docs/next.config.mjs` | Next.js 构建配置 |\n| 布局组件 | `docs/src/app/layout.tsx` | 根布局定义 |\n| 导航逻辑 | `docs/src/lib/docs-navigation.ts` | 导航结构管理 |\n| 转换模块 | `docs/src/lib/mdx-to-markdown.ts` | 内容格式转换 |\n| 侧边栏 | `docs/src/components/docs-sidebar.tsx` | 导航界面组件 |\n\n## 技术要点\n\n### 内容同步机制\n\n文档站点内容与 `skill-data/` 目录下的源文件保持紧密关联。CLI 工具通过 `agent-browser skills get` 命令动态加载技能内容，确保文档与实际安装版本一致。\n\n### 响应式设计\n\n文档站点采用响应式设计策略：\n\n- 桌面端：侧边栏固定显示，主体内容居中\n- 移动端：侧边栏收起，通过汉堡菜单触发\n- 断点配置：使用 Tailwind CSS 标准的响应式断点\n\n### 无障碍支持\n\n站点实现基本的无障碍特性：\n\n- 语义化 HTML 标签\n- 键盘导航支持\n- 足够的颜色对比度\n- ARIA 标签配置\n\n---\n\n<a id='installation-build'></a>\n\n## 安装与构建\n\n### 相关页面\n\n相关主题：[项目介绍](#introduction), [CLI 命令参考](#cli-commands)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [scripts/build-all-platforms.sh](https://github.com/vercel-labs/agent-browser/blob/main/scripts/build-all-platforms.sh)\n- [scripts/copy-native.js](https://github.com/vercel-labs/agent-browser/blob/main/scripts/copy-native.js)\n- [cli/build.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/build.rs)\n- [docker/Dockerfile.build](https://github.com/vercel-labs/agent-browser/blob/main/docker/Dockerfile.build)\n- [docker/docker-compose.yml](https://github.com/vercel-labs/agent-browser/blob/main/docker/docker-compose.yml)\n- [pnpm-lock.yaml](https://github.com/vercel-labs/agent-browser/blob/main/pnpm-lock.yaml)\n</details>\n\n# 安装与构建\n\n本页面详细介绍 agent-browser 项目的安装依赖、环境配置、源码构建流程以及多平台部署方案。agent-browser 是一个基于 Rust 实现的核心浏览器自动化守护进程，配合 TypeScript/React 前端组件构成完整的浏览器控制工具链。\n\n## 系统要求\n\n### 硬件与操作系统\n\n| 组件 | 最低要求 | 推荐配置 |\n|------|---------|----------|\n| CPU | 2 核 | 4 核及以上 |\n| 内存 | 4 GB | 8 GB |\n| 磁盘空间 | 2 GB | 10 GB（包含 Chromium） |\n| 操作系统 | macOS 10.15+ / Linux (glibc 2.17+) / Windows 10+ | 最新稳定版 |\n\nagent-browser 支持 macOS (Intel/Apple Silicon)、Linux (x86_64/aarch64) 和 Windows (x86_64) 三大平台。项目使用 Rust 语言实现核心引擎，前端采用 TypeScript + React 技术栈，通过 pnpm 作为包管理器。资料来源：[AGENTS.md](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n### 必需依赖\n\n```bash\n# Rust 工具链 (使用 rustup 安装)\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Node.js (v18+)\n# 推荐使用 nvm 或 fnm 管理版本\n\n# pnpm (v8+)\nnpm install -g pnpm\n\n# Chrome/Chromium (用于运行时)\n# Linux: apt install chromium 或下载 Chrome for Testing\n# macOS: brew install chromium\n# Windows: 下载 Chrome for Testing\n```\n\n## 项目结构\n\n```\nagent-browser/\n├── cli/                    # Rust 核心守护进程\n│   ├── src/\n│   │   ├── native/         # 浏览器自动化核心模块\n│   │   │   ├── daemon.rs   # 守护进程主入口\n│   │   │   ├── actions.rs  # 浏览器操作指令处理\n│   │   │   ├── browser.rs  # 浏览器实例管理\n│   │   │   ├── cdp/        # Chrome DevTools Protocol 客户端\n│   │   │   ├── snapshot/   # 页面快照生成\n│   │   │   └── state/      # 会话状态管理\n│   │   ├── react/         # React 组件分析模块\n│   │   └── commands.rs     # CLI 命令解析\n│   ├── build.rs           # 构建脚本\n│   └── Cargo.toml\n├── packages/\n│   └── dashboard/          # React 前端界面\n│       ├── src/\n│       │   └── components/ # UI 组件\n│       └── package.json\n├── scripts/                # 构建辅助脚本\n│   ├── build-all-platforms.sh\n│   └── copy-native.js\n├── docker/                 # Docker 部署配置\n│   ├── Dockerfile.build\n│   └── docker-compose.yml\n└── pnpm-lock.yaml\n```\n\n资料来源：[AGENTS.md:49-53](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 环境配置\n\n### 克隆源码\n\n```bash\ngit clone https://github.com/vercel-labs/agent-browser.git\ncd agent-browser\n```\n\n### 安装 Node.js 依赖\n\n```bash\n# 安装所有 workspace 依赖\npnpm install\n\n# 仅安装前端依赖\npnpm install --filter @agent-browser/dashboard\n```\n\n项目采用 pnpm workspace 架构，所有子项目的依赖通过根目录的 `pnpm-lock.yaml` 统一锁定版本。\n\n### 配置 Rust 环境\n\n```bash\n# 验证 Rust 安装\nrustc --version\ncargo --version\n\n# 添加交叉编译工具链 (可选，用于多平台构建)\nrustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu\nrustup target add x86_64-apple-darwin aarch64-apple-darwin\nrustup target add x86_64-pc-windows-gnu\n```\n\n## 构建流程\n\n### 完整构建\n\n项目提供一键构建脚本，可同时编译所有平台的原生二进制文件和前端资源：\n\n```bash\n./scripts/build-all-platforms.sh\n```\n\n该脚本执行以下步骤：\n\n```mermaid\ngraph TD\n    A[开始构建] --> B[检查 Rust 工具链]\n    B --> C[清理旧构建产物]\n    C --> D[编译 CLI 原生二进制]\n    D --> E[复制二进制到 packages/dashboard/native]\n    E --> F[构建前端资源]\n    F --> G[生成平台特定包]\n    G --> H[完成]\n    \n    D --> D1[Linux x86_64]\n    D --> D2[Linux aarch64]\n    D --> D3[macOS Intel]\n    D --> D4[macOS Apple Silicon]\n    D --> D5[Windows x86_64]\n```\n\n资料来源：[scripts/build-all-platforms.sh](https://github.com/vercel-labs/agent-browser/blob/main/scripts/build-all-platforms.sh)\n\n### 分步构建\n\n#### 1. 编译 Rust 原生模块\n\n```bash\ncd cli\n\n# 开发构建 (快速)\ncargo build\n\n# 发布构建 (优化)\ncargo build --release\n\n# 指定目标平台\ncargo build --release --target x86_64-unknown-linux-gnu\n```\n\n构建产物位于 `cli/target/release/agent-browser` (或 `cli/target/debug/agent-browser` 用于开发)。\n\n#### 2. 复制原生二进制到前端\n\n```bash\nnode scripts/copy-native.js\n```\n\n该脚本将编译好的原生二进制文件复制到前端包的 `native/` 目录，供 Electron 或 WebAssembly 加载使用。资料来源：[scripts/copy-native.js](https://github.com/vercel-labs/agent-browser/blob/main/scripts/copy-native.js)\n\n#### 3. 构建前端界面\n\n```bash\n# 构建生产版本\npnpm build\n\n# 开发模式 (热重载)\npnpm dev\n```\n\n### 构建脚本详解\n\n`cli/build.rs` 是 Cargo 构建脚本，在编译前执行以下任务：\n\n```rust\n// 伪代码展示 build.rs 功能\nfn main() {\n    // 1. 打印版本信息\n    println!(\"cargo:rustc-env=VERSION={}\", version);\n    \n    // 2. 链接必要的系统库\n    println!(\"cargo:rustc-link-lib=ssl\");\n    println!(\"cargo:rustc-link-lib=crypto\");\n    \n    // 3. 设置编译条件\n    println!(\"cargo:rerun-if-changed=build.rs\");\n    println!(\"cargo:rerun-if-changed=Cargo.toml\");\n}\n```\n\n资料来源：[cli/build.rs](https://github.com/vercel-labs/agent-browser/blob/main/cli/build.rs)\n\n## Docker 构建\n\n### Dockerfile.build\n\n项目提供专用的 Docker 构建镜像，基于 Rust 官方镜像，包含所有交叉编译工具链：\n\n```dockerfile\nFROM rust:1.75-bookworm AS builder\n\n# 安装交叉编译目标依赖\nRUN apt-get update && apt-get install -y \\\n    gcc-arm-linux-gnueabihf \\\n    libc6-dev-armhf-cross \\\n    gcc-aarch64-linux-gnu \\\n    libc6-dev-arm64-cross \\\n    && rm -rf /var/lib/apt/lists/*\n\nWORKDIR /app\nCOPY . .\nRUN cargo build --release --target x86_64-unknown-linux-gnu\n```\n\n资料来源：[docker/Dockerfile.build](https://github.com/vercel-labs/agent-browser/blob/main/docker/Dockerfile.build)\n\n### docker-compose.yml\n\n```yaml\nversion: '3.8'\n\nservices:\n  build:\n    build:\n      context: ..\n      dockerfile: docker/Dockerfile.build\n    volumes:\n      - ../target:/app/target\n    environment:\n      - CARGO_HOME=/app/.cargo\n```\n\n资料来源：[docker/docker-compose.yml](https://github.com/vercel-labs/agent-browser/blob/main/docker/docker-compose.yml)\n\n### 使用 Docker 构建\n\n```bash\n# 构建镜像\ndocker-compose -f docker/docker-compose.yml build\n\n# 运行构建\ndocker-compose -f docker/docker-compose.yml run build\n```\n\n## 测试\n\n### 单元测试\n\n```bash\ncd cli\ncargo test\n```\n\n运行所有单元测试（约 320 个测试），这些测试执行速度快，无需启动 Chrome 实例。资料来源：[AGENTS.md:61-63](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n### 端到端测试\n\n```bash\ncd cli\ncargo test e2e -- --ignored --test-threads=1\n```\n\n端到端测试会启动真实的 headless Chrome 实例，完整测试原生守护进程命令管道。运行要求：\n\n| 要求 | 说明 |\n|------|------|\n| Chrome 必须已安装 | 用于启动 headless 浏览器实例 |\n| 串行执行 | 必须使用 `--test-threads=1` 避免 Chrome 实例冲突 |\n| 测试数量 | 共 18 个 e2e 测试 |\n\n资料来源：[AGENTS.md:68-73](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 发布流程\n\n项目使用自动化发布流程：\n\n```mermaid\ngraph LR\n    A[创建 Git Tag] --> B[CI 触发构建]\n    B --> C[编译 7 个平台二进制]\n    C --> D[发布到 npm]\n    D --> E[创建 GitHub Release]\n    \n    E --> F[从 CHANGELOG.md 提取说明]\n    F --> G[发布完成]\n```\n\n构建脚本会：\n\n1. 编译所有 7 个平台的二进制文件（macOS Intel/macOS ARM/Linux x64/Linux ARM/Windows x64 等）\n2. 发布到 npm 仓库\n3. 自动创建 GitHub Release，Release 内容从 `CHANGELOG.md` 的 `<!-- release:start -->` 和 `<!-- release:end -->` 标记之间提取\n\n资料来源：[AGENTS.md:17-21](https://github.com/vercel-labs/agent-browser/blob/main/AGENTS.md)\n\n## 常见问题\n\n### 编译错误：链接库缺失\n\n```bash\n# macOS\nbrew install openssl pkg-config\n\n# Linux (Debian/Ubuntu)\nsudo apt install libssl-dev pkg-config\n\n# Linux (Fedora/RHEL)\nsudo dnf install openssl-devel pkg-config\n```\n\n### 交叉编译失败\n\n确保已安装对应平台的交叉编译工具链：\n\n```bash\n# Linux ARM\nrustup target add aarch64-unknown-linux-gnu\nsudo apt install gcc-aarch64-linux-gnu libc6-dev-arm64-cross\n\n# macOS ARM on Linux\nrustup target add aarch64-apple-darwin\n```\n\n### Chrome/Chromium 未找到\n\nagent-browser 需要 Chrome for Testing 提供浏览器二进制。使用 `--engine` 参数指定浏览器引擎：\n\n```bash\nagent-browser --engine chrome open https://example.com\n```\n\n或通过安装命令自动下载：\n\n```bash\nagent-browser install chrome\n```\n\n## 环境变量参考\n\n| 变量名 | 作用 | 默认值 |\n|--------|------|--------|\n| `RUST_LOG` | 日志级别 | `info` |\n| `CARGO_HOME` | Cargo 缓存目录 | `~/.cargo` |\n| `TARGET_DIR` | 构建产物目录 | `cli/target` |\n| `AGENT_BROWSER_CHROMIUM_PATH` | 指定 Chromium 路径 | 自动检测 |\n\n## 构建产物\n\n成功构建后，项目生成以下产物：\n\n| 产物 | 位置 | 说明 |\n|------|------|------|\n| `agent-browser` (CLI) | `cli/target/release/` | 命令行工具主程序 |\n| Dashboard 资源 | `packages/dashboard/dist/` | 前端 Web 界面 |\n| 原生绑定 | `packages/dashboard/native/` | 跨平台二进制集合 |\n| Docker 镜像 | 本地镜像仓库 | 可部署的容器化版本 |\n\n---\n\n---\n\n## Doramagic 踩坑日志\n\n项目：vercel-labs/agent-browser\n\n摘要：发现 23 个潜在踩坑项，其中 3 个为 high/blocking；最高优先级：安装坑 - 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker。\n\n## 1. 安装坑 · 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Chrome 147.0 crashes with \"trap int3\" when running in docker\n- 对用户的影响：可能阻塞安装或首次运行。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_9045278ef5e043dcadccf9288477813c | https://github.com/vercel-labs/agent-browser/issues/1339 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 2. 安装坑 · 来源证据：Detected: Trojan:Win32/Posilod.EB!cl\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Detected: Trojan:Win32/Posilod.EB!cl\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_edbde732c7a7410e96ad0fa301e4222d | https://github.com/vercel-labs/agent-browser/issues/1281 | 来源讨论提到 windows 相关条件，需在安装/试用前复核。\n\n## 3. 运行坑 · 来源证据：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_0896b0b429c641f0b93ca9dcbbee6db8 | https://github.com/vercel-labs/agent-browser/issues/1319 | 来源讨论提到 macos 相关条件，需在安装/试用前复核。\n\n## 4. 配置坑 · 来源证据：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_32ddde976ec0445da607d0adffc5df4c | https://github.com/vercel-labs/agent-browser/issues/1349 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n\n## 5. 配置坑 · 来源证据：v0.25.5\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：v0.25.5\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_d5d23fc6d09149fbb21ee500e7a328ec | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.5 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 6. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | README/documentation is current enough for a first validation pass.\n\n## 7. 运行坑 · 来源证据：v0.25.2\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.2\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_777821422c534a2881b58523db3ac2f3 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.2 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n\n## 8. 运行坑 · 来源证据：v0.25.3\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.3\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_5c7d80190d7548b6ad87152255949f2b | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.3 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 9. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | last_activity_observed missing\n\n## 10. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n\n## 11. 安全/权限坑 · 存在安全注意事项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：No sandbox install has been executed yet; downstream must verify before user use.\n- 对用户的影响：用户安装前需要知道权限边界和敏感操作。\n- 建议检查：转成明确权限清单和安全审查提示。\n- 防护动作：安全注意事项必须面向用户前置展示。\n- 证据：risks.safety_notes | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | No sandbox install has been executed yet; downstream must verify before user use.\n\n## 12. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n\n## 13. 安全/权限坑 · 来源证据：Dashboard privileged POST routes should reject cross-origin requests\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Dashboard privileged POST routes should reject cross-origin requests\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_6acd97eb554140c28938a0eb08e44c34 | https://github.com/vercel-labs/agent-browser/issues/1345 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 14. 安全/权限坑 · 来源证据：Harden inspect-mode DevTools WebSocket handshakes\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Harden inspect-mode DevTools WebSocket handshakes\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_ab6c062eedaf466d8f40864ca24bf8ea | https://github.com/vercel-labs/agent-browser/issues/1347 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 15. 安全/权限坑 · 来源证据：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_648ff78f18f34d51a44b9176d011738f | https://github.com/vercel-labs/agent-browser/issues/1351 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 16. 安全/权限坑 · 来源证据：Per-session /api/command should require same-origin or token auth\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Per-session /api/command should require same-origin or token auth\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_d21bab57490142daba6d89ed22776087 | https://github.com/vercel-labs/agent-browser/issues/1344 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 17. 安全/权限坑 · 来源证据：Support enabling WebAuthn for passkey authentication with a virtual authenticator\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Support enabling WebAuthn for passkey authentication with a virtual authenticator\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_3a4a36591a7e45c1b85d35b020e63d5a | https://github.com/vercel-labs/agent-browser/issues/688 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 18. 安全/权限坑 · 来源证据：Windows 11: --headed not surfacing window when invoked from non-TTY context (PowerShell -File via bash 2>&1)\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Windows 11: --headed not surfacing window when invoked from non-TTY context (PowerShell -File via bash 2>&1)\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_fda08c46f8b5454e8e93b061d6d3c992 | https://github.com/vercel-labs/agent-browser/issues/1348 | 来源讨论提到 npm 相关条件，需在安装/试用前复核。\n\n## 19. 安全/权限坑 · 来源证据：v0.25.4\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.25.4\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_3b8dd03ae1104698b37da46bc0d08fb7 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.4 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 20. 安全/权限坑 · 来源证据：v0.26.0\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.26.0\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_9db59c2c8cb44b39916cf70c0c9eae22 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.26.0 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 21. 安全/权限坑 · 来源证据：v0.27.0\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.27.0\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_98f07270bf7b43658e439416c320183e | https://github.com/vercel-labs/agent-browser/releases/tag/v0.27.0 | 来源讨论提到 npm 相关条件，需在安装/试用前复核。\n\n## 22. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | issue_or_pr_quality=unknown\n\n## 23. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | release_recency=unknown\n\n<!-- canonical_name: vercel-labs/agent-browser; human_manual_source: deepwiki_human_wiki -->\n",
      "summary": "DeepWiki/Human Wiki 完整输出，末尾追加 Discovery Agent 踩坑日志。",
      "title": "Human Manual / 人类版说明书"
    },
    "pitfall_log": {
      "asset_id": "pitfall_log",
      "filename": "PITFALL_LOG.md",
      "markdown": "# Pitfall Log / 踩坑日志\n\n项目：vercel-labs/agent-browser\n\n摘要：发现 23 个潜在踩坑项，其中 3 个为 high/blocking；最高优先级：安装坑 - 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker。\n\n## 1. 安装坑 · 来源证据：Chrome 147.0 crashes with \"trap int3\" when running in docker\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Chrome 147.0 crashes with \"trap int3\" when running in docker\n- 对用户的影响：可能阻塞安装或首次运行。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_9045278ef5e043dcadccf9288477813c | https://github.com/vercel-labs/agent-browser/issues/1339 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 2. 安装坑 · 来源证据：Detected: Trojan:Win32/Posilod.EB!cl\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Detected: Trojan:Win32/Posilod.EB!cl\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_edbde732c7a7410e96ad0fa301e4222d | https://github.com/vercel-labs/agent-browser/issues/1281 | 来源讨论提到 windows 相关条件，需在安装/试用前复核。\n\n## 3. 运行坑 · 来源证据：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n\n- 严重度：high\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：Feature Request: Chrome Extension-based Connection for Seamless Login State Reuse\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_0896b0b429c641f0b93ca9dcbbee6db8 | https://github.com/vercel-labs/agent-browser/issues/1319 | 来源讨论提到 macos 相关条件，需在安装/试用前复核。\n\n## 4. 配置坑 · 来源证据：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：ERR_NO_SUPPORTED_PROXIES when proxy environment variables contain trailing slash\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_32ddde976ec0445da607d0adffc5df4c | https://github.com/vercel-labs/agent-browser/issues/1349 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n\n## 5. 配置坑 · 来源证据：v0.25.5\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：v0.25.5\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_d5d23fc6d09149fbb21ee500e7a328ec | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.5 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 6. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | README/documentation is current enough for a first validation pass.\n\n## 7. 运行坑 · 来源证据：v0.25.2\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.2\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_777821422c534a2881b58523db3ac2f3 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.2 | 来源讨论提到 linux 相关条件，需在安装/试用前复核。\n\n## 8. 运行坑 · 来源证据：v0.25.3\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.25.3\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_5c7d80190d7548b6ad87152255949f2b | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.3 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 9. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | last_activity_observed missing\n\n## 10. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n\n## 11. 安全/权限坑 · 存在安全注意事项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：No sandbox install has been executed yet; downstream must verify before user use.\n- 对用户的影响：用户安装前需要知道权限边界和敏感操作。\n- 建议检查：转成明确权限清单和安全审查提示。\n- 防护动作：安全注意事项必须面向用户前置展示。\n- 证据：risks.safety_notes | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | No sandbox install has been executed yet; downstream must verify before user use.\n\n## 12. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | no_demo; severity=medium\n\n## 13. 安全/权限坑 · 来源证据：Dashboard privileged POST routes should reject cross-origin requests\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Dashboard privileged POST routes should reject cross-origin requests\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_6acd97eb554140c28938a0eb08e44c34 | https://github.com/vercel-labs/agent-browser/issues/1345 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 14. 安全/权限坑 · 来源证据：Harden inspect-mode DevTools WebSocket handshakes\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Harden inspect-mode DevTools WebSocket handshakes\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_ab6c062eedaf466d8f40864ca24bf8ea | https://github.com/vercel-labs/agent-browser/issues/1347 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 15. 安全/权限坑 · 来源证据：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：High LLM turn count due to frequent `snapshot` calls when using `agent-browser` skills\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_648ff78f18f34d51a44b9176d011738f | https://github.com/vercel-labs/agent-browser/issues/1351 | 来源讨论提到 node 相关条件，需在安装/试用前复核。\n\n## 16. 安全/权限坑 · 来源证据：Per-session /api/command should require same-origin or token auth\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Per-session /api/command should require same-origin or token auth\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_d21bab57490142daba6d89ed22776087 | https://github.com/vercel-labs/agent-browser/issues/1344 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 17. 安全/权限坑 · 来源证据：Support enabling WebAuthn for passkey authentication with a virtual authenticator\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Support enabling WebAuthn for passkey authentication with a virtual authenticator\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_3a4a36591a7e45c1b85d35b020e63d5a | https://github.com/vercel-labs/agent-browser/issues/688 | 来源类型 github_issue 暴露的待验证使用条件。\n\n## 18. 安全/权限坑 · 来源证据：Windows 11: --headed not surfacing window when invoked from non-TTY context (PowerShell -File via bash 2>&1)\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Windows 11: --headed not surfacing window when invoked from non-TTY context (PowerShell -File via bash 2>&1)\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_fda08c46f8b5454e8e93b061d6d3c992 | https://github.com/vercel-labs/agent-browser/issues/1348 | 来源讨论提到 npm 相关条件，需在安装/试用前复核。\n\n## 19. 安全/权限坑 · 来源证据：v0.25.4\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.25.4\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_3b8dd03ae1104698b37da46bc0d08fb7 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.25.4 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 20. 安全/权限坑 · 来源证据：v0.26.0\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.26.0\n- 对用户的影响：可能增加新用户试用和生产接入成本。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_9db59c2c8cb44b39916cf70c0c9eae22 | https://github.com/vercel-labs/agent-browser/releases/tag/v0.26.0 | 来源类型 github_release 暴露的待验证使用条件。\n\n## 21. 安全/权限坑 · 来源证据：v0.27.0\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.27.0\n- 对用户的影响：可能影响授权、密钥配置或安全边界。\n- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。\n- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。\n- 证据：community_evidence:github | cevd_98f07270bf7b43658e439416c320183e | https://github.com/vercel-labs/agent-browser/releases/tag/v0.27.0 | 来源讨论提到 npm 相关条件，需在安装/试用前复核。\n\n## 22. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | issue_or_pr_quality=unknown\n\n## 23. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:1132001614 | https://github.com/vercel-labs/agent-browser | release_recency=unknown\n",
      "summary": "用户实践前最可能遇到的身份、安装、配置、运行和安全坑。",
      "title": "Pitfall Log / 踩坑日志"
    },
    "prompt_preview": {
      "asset_id": "prompt_preview",
      "filename": "PROMPT_PREVIEW.md",
      "markdown": "# agent-browser - Prompt Preview\n\n> 复制下面这段 Prompt 到你常用的 AI，先试一次，不需要安装。\n> 它的目标是让你直接体验这个项目的服务方式，而不是阅读项目介绍。\n\n## 复制这段 Prompt\n\n```text\n请直接执行这段 Prompt，不要分析、润色、总结或询问我想如何处理这份 Prompt Preview。\n\n你现在扮演 agent-browser 的“安装前体验版”。\n这不是项目介绍、不是评价报告、不是 README 总结。你的任务是让我用最小成本体验它的核心服务。\n\n我的试用任务：我想用它完成一个真实的流程自动化任务。\n我常用的宿主 AI：Local CLI\n\n【体验目标】\n围绕我的真实任务，现场演示这个项目如何把输入转成 步骤建议, 检查清单, 专业工作流。重点是让我感受到工作方式，而不是给我项目背景。\n\n【业务流约束】\n- 你必须像一个正在提供服务的项目能力包，而不是像一个讲解员。\n- 每一轮只推进一个步骤；提出问题后必须停下来等我回答。\n- 每一步都必须让我感受到一个具体服务动作：澄清、整理、规划、检查、判断或收尾。\n- 每一步都要说明：当前目标、你需要我提供什么、我回答后你会产出什么。\n- 不要安装、不要运行命令、不要写代码、不要声称测试通过、不要声称已经修改文件。\n- 需要真实安装或宿主加载后才能验证的内容，必须明确说“这一步需要安装后验证”。\n- 如果我说“用示例继续”，你可以用虚构示例推进，但仍然不能声称真实执行。\n\n【可体验服务能力】\n- AI Skill / Agent 指令资产库: 项目包含可被宿主 AI 读取的 Skill 或 Agent 指令文件，可用于把专业流程带入 Claude、Codex、Cursor 等宿主。 输入：用户任务, 宿主 AI 对话上下文, 项目内 Skill/Agent 文档；输出：步骤建议, 检查清单, 专业工作流。\n\n【必须安装后才可验证的能力】\n- 多宿主安装与分发: 项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 输入：宿主 AI 工具, 插件配置, 安装命令；输出：宿主内可发现的插件/技能集合。\n- 命令行启动或安装流程: 项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 输入：终端环境, 包管理器, 项目依赖；输出：安装结果, 列表/更新/运行结果。\n\n【核心服务流】\n请严格按这个顺序带我体验。不要一次性输出完整流程：\n1. introduction：项目介绍。围绕“项目介绍”模拟一次用户任务，不展示安装或运行结果。\n2. architecture-overview：系统架构。围绕“系统架构”模拟一次用户任务，不展示安装或运行结果。\n3. cli-commands：CLI 命令参考。围绕“CLI 命令参考”模拟一次用户任务，不展示安装或运行结果。\n4. browser-automation：浏览器自动化核心。围绕“浏览器自动化核心”模拟一次用户任务，不展示安装或运行结果。\n5. sessions-authentication：会话与认证管理。围绕“会话与认证管理”模拟一次用户任务，不展示安装或运行结果。\n\n【核心能力体验剧本】\n每一步都必须按“输入 -> 服务动作 -> 中间产物”执行。不要只说流程名：\n1. introduction\n输入：用户提供的“项目介绍”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n2. architecture-overview\n输入：用户提供的“系统架构”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n3. cli-commands\n输入：用户提供的“CLI 命令参考”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n4. browser-automation\n输入：用户提供的“浏览器自动化核心”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n5. sessions-authentication\n输入：用户提供的“会话与认证管理”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n【项目服务规则】\n这些规则决定你如何服务用户。不要解释规则本身，而要在每一步执行时遵守：\n- 先确认用户任务、输入材料和成功标准，再模拟项目能力。\n- 每一步都必须形成可检查的小产物，并等待用户确认后再继续。\n- 凡是需要安装、调用工具或访问外部服务的能力，都必须标记为安装后验证。\n\n【每一步的服务约束】\n- Step 1 / introduction：Step 1 必须围绕“项目介绍”形成一个小中间产物，并等待用户确认。\n- Step 2 / architecture-overview：Step 2 必须围绕“系统架构”形成一个小中间产物，并等待用户确认。\n- Step 3 / cli-commands：Step 3 必须围绕“CLI 命令参考”形成一个小中间产物，并等待用户确认。\n- Step 4 / browser-automation：Step 4 必须围绕“浏览器自动化核心”形成一个小中间产物，并等待用户确认。\n- Step 5 / sessions-authentication：Step 5 必须围绕“会话与认证管理”形成一个小中间产物，并等待用户确认。\n\n【边界与风险】\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 安装前预览只能展示工作方式，不能证明兼容性、性能或输出质量。\n- 涉及安装、插件加载、工具调用或外部服务的能力必须安装后验证。\n\n【可追溯依据】\n这些路径只用于你内部校验或在我追问“依据是什么”时简要引用。不要在首次回复主动展开：\n- https://github.com/vercel-labs/agent-browser\n- https://github.com/vercel-labs/agent-browser#readme\n- skill-data/agentcore/SKILL.md\n- skill-data/core/SKILL.md\n- skill-data/dogfood/SKILL.md\n- skill-data/electron/SKILL.md\n- skill-data/slack/SKILL.md\n- skill-data/vercel-sandbox/SKILL.md\n- skills/agent-browser/SKILL.md\n- README.md\n- package.json\n- pnpm-workspace.yaml\n\n【首次问题规则】\n- 首次三问必须先确认用户目标、成功标准和边界，不要提前进入工具、安装或实现细节。\n- 如果后续需要技术条件、文件路径或运行环境，必须等用户确认目标后再追问。\n\n首次回复必须只输出下面 4 个部分：\n1. 体验开始：用 1 句话说明你将带我体验 agent-browser 的核心服务。\n2. 当前步骤：明确进入 Step 1，并说明这一步要解决什么。\n3. 你会如何服务我：说明你会先改变我完成任务的哪个动作。\n4. 只问我 3 个问题，然后停下等待回答。\n\n首次回复禁止输出：后续完整流程、证据清单、安装命令、项目评价、营销文案、已经安装或运行的说法。\n\nStep 1 / brainstorming 的二轮协议：\n- 我回答首次三问后，你仍然停留在 Step 1 / brainstorming，不要进入 Step 2。\n- 第二次回复必须产出 6 个部分：澄清后的任务定义、成功标准、边界条件、\n  2-3 个可选方案、每个方案的权衡、推荐方案。\n- 第二次回复最后必须问我是否确认推荐方案；只有我明确确认后，才能进入下一步。\n- 第二次回复禁止输出 git worktree、代码计划、测试文件、命令或真实执行结果。\n\n后续对话规则：\n- 我回答后，你先完成当前步骤的中间产物并等待确认；只有我确认后，才能进入下一步。\n- 每一步都要生成一个小的中间产物，例如澄清后的目标、计划草案、测试意图、验证清单或继续/停止判断。\n- 所有演示都写成“我会建议/我会引导/这一步会形成”，不要写成已经真实执行。\n- 不要声称已经测试通过、文件已修改、命令已运行或结果已产生。\n- 如果某个能力必须安装后验证，请直接说“这一步需要安装后验证”。\n- 如果证据不足，请明确说“证据不足”，不要补事实。\n```\n",
      "summary": "不安装项目也能感受能力节奏的安全试用 Prompt。",
      "title": "Prompt Preview / 安装前试用 Prompt"
    },
    "quick_start": {
      "asset_id": "quick_start",
      "filename": "QUICK_START.md",
      "markdown": "# Quick Start / 官方入口\n\n项目：vercel-labs/agent-browser\n\n## 官方安装入口\n\n### Node.js / npm · 官方安装入口\n\n```bash\nnpm install -g agent-browser\n```\n\n来源：https://github.com/vercel-labs/agent-browser#readme\n\n## 来源\n\n- repo: https://github.com/vercel-labs/agent-browser\n- docs: https://github.com/vercel-labs/agent-browser#readme\n",
      "summary": "从项目官方 README 或安装文档提取的开工入口。",
      "title": "Quick Start / 官方入口"
    }
  },
  "validation_id": "dval_567cd1eb369b45518f7850b5520fb183"
}
