--- name: ego-search description: >- ego-search 是 argo 的浏览器态搜索增强子技能,基于真实 Chromium 浏览器运行时,提供 登录态继承、JS 渲染、反爬(尽力而为,未验证可穿透重度防护)、动态交互与同源接口数据直取(api 模式)能力。专业搜索 模式默认关闭,需用户明确要求并执行开启指令后启用。当 argo 的 API/HTML 引擎覆盖不到 时启用:登录墙后的内容(知乎/小红书/微博/X/公众号)、JS 渲染与 SPA 页面、反爬与 Cloudflare 保护页(尽力而为,重度防护可能失败)、需要交互(翻页/展开/滚动加载)的动态搜索、SPA/XHR 接口数据直取、 以及需要真实登录态才能搜到的私有内容。输出对齐 argo 统一 JSON schema,可直接进入 evidence 评分与 RRF 融合。Triggers include 浏览器搜索、登录后才能搜到、JS 渲染页面、 SERP 补充、动态内容抓取、登录态抓取、API 数据直取、接口数据。 metadata: version: "1.6.0" date: "2026-08-07" upstream: ego lite(ego-browser)+ WebBridge 扩展桥(双运行时) parent: argo pro_mode: 默认关闭,手动开启(enable/disable) cache: 登录态结果 cache_eligible=false,禁止写入 argo 公共缓存 architecture: dual_runtime_complete security: URL 守卫 + 任务空间收尾 + 专业模式闸门 + 登录墙质量信号 triggers: - 专业搜索模式 - 开启专业搜索模式 - 浏览器搜索 - 登录态 - 登录墙 - JS渲染 - SERP - 动态内容 - 反爬(尽力而为) - 浏览器抓取 - API数据直取 - 接口数据 --- # ego-search(argo 子技能) ego-search 是 argo 的**登录态专业搜索**子技能(v1.4 完全态): - **双运行时保留**:ego lite(`ego-browser`)与 WebBridge(用户浏览器扩展桥)**互补,不互相替代** - **任一可用即可**:`search` / `fetch` / `act` / `api` 在至少一条运行时在线时可用 - **与常规检索隔离**:登录态结果 `cache_eligible=false`,禁止进公共 SearchCache - **汇总可融合**:输出带 `merge_with_public_ok=true`,分析层可把 public + login 两路结果一起喂 evidence ## 专业搜索模式(默认关闭) 本子技能涉及真实浏览器**登录态继承**,出于安全与可靠性考虑**默认关闭**。开启后 `search`/`fetch`/`act`/`api` 与直接浏览器操作才可用;未开启时调用会被拒绝并提示开启命令。 ```bash # 开启(必须由用户明确要求「开启专业搜索模式」后执行) python3 sub-skills/ego-search/scripts/ego_search.py enable # 关闭 python3 sub-skills/ego-search/scripts/ego_search.py disable # 查看状态 python3 sub-skills/ego-search/scripts/ego_search.py status ``` - **纪律**:Agent 不得自行开启——只有用户明确表达开启意图时才运行 `enable`。 - 未开启时,同样不得用 heredoc 直连浏览器运行时绕开闸门。 - 状态持久化于 `~/.local/state/ego-search/pro-mode.json`,开启后长期生效,直到手动关闭。 ## 定位与升级决策 主系统 API/HTML 检索覆盖不足时,升级到 **ego-search**: | 场景 | 常规检索 | ego-search 补什么 | |------|----------|-------------------| | 登录墙内容(知乎/小红书/微博/X/公众号/会员站) | 拿不到正文 | 任务空间继承登录态,搜并抓取 | | JS 渲染 / SPA / 懒加载页面 | 可能空壳 | 真实浏览器执行 JS 后提取 | | 反爬 / Cloudflare 保护(尽力而为) | HTTP 失败 | 真实浏览器尝试,重度防护可能失败 | | 需要交互的动态搜索(翻页/「加载更多」/表单筛选) | 单次请求不够 | `act` 或 `ego-browser` heredoc 多步 | | 搜索引擎实时 SERP(Google/Bing/百度) | 可能被反爬 | 真实 SERP 结构化提取 | | 深嵌套 iframe 页面 | 常挂 | 快照专长 | | 已知同源 API URL | DOM 不全 | `api` + `browserFetch` | | 未知 XHR 尚未拿到 URL | — | 不在 CLI 内;heredoc 自探或先拿 URL 再 `api` | **决策顺序**: ```text 常规检索(快、省 token) → 结果不足 / 正文拿不到 / 需要登录态 → ego-search search|fetch|act|api(pro-mode 开启) → 更复杂多步 → ego-browser nodejs heredoc 高后果结论 → 证据核验 ``` ## 依赖与环境 - **官方项目**:ego lite → (官网);WebBridge → (Kimi WebBridge 官方帮助中心)。 - **浏览器运行时**(macOS 应用)与 **运行时命令 `ego-browser`**(`~/.local/bin`)。 - 首次使用前确认:`command -v ego-browser`。未安装时按 `references/install.md` 完成安装。 - 运行时依赖由安装包自管理,本子技能不重复携带安装脚本。 - 登录态来自运行时 onboarding(可导入 Chrome 数据);不同站点登录态由用户在运行时中维护。 ## 快速开始(ego_search.py CLI) ```bash # 首次使用:先开启专业搜索模式(需用户确认;开启后长期生效) python3 sub-skills/ego-search/scripts/ego_search.py enable # 探测运行时与专业模式(--fix 幂等启 WebBridge 桥) python3 sub-skills/ego-search/scripts/ego_search.py status [--fix] # 浏览器态搜索(真实 SERP,输出 argo JSON schema) # --runtime auto(默认: 有 ego 用 ego,否则 webbridge) | ego | webbridge python3 sub-skills/ego-search/scripts/ego_search.py search "AI agent 浏览器自动化" --engine bing --n 8 # 强制登录态站点搜索(如知乎/小红书,需登录态) python3 sub-skills/ego-search/scripts/ego_search.py search "site:zhihu.com AI 搜索" --engine bing # 浏览器态正文提取(JS 渲染/反爬/登录墙页面) python3 sub-skills/ego-search/scripts/ego_search.py fetch "https://example.com/article" --focus 关键词 # 同源 API 数据直取(登录态站点接口) python3 sub-skills/ego-search/scripts/ego_search.py api "https://www.zhihu.com/api/v4/search_v3?t=general&q=AI代理&limit=5" --origin "https://www.zhihu.com" # 指定任务空间名(同一目标的多轮操作复用同名空间) python3 sub-skills/ego-search/scripts/ego_search.py search "竞品分析" --task-space "竞品调研" ``` 输出约定:**JSON 到 stdout**(机器可读,可管道给 `evidence.py` / 解析喂 RRF),日志到 stderr。 ### 登录态 provenance(强制) 所有 `search` / `fetch` / `act` / `api` 输出均带: | 字段 | 值 | 含义 | |------|-----|------| | `login_state_used` | `true` | 使用了浏览器登录态 | | `auth_partition` | `login` | 认证分区标签(不写 cookie) | | `cache_eligible` | `false` | **禁止**写入 argo 公共 `SearchCache` / `set_fetch` | | `search_partition` | `login` | 与常规 `public` 检索分区隔离 | | `merge_with_public_ok` | `true` | **允许**在汇总分析时与 public 结果一并送入 evidence | | `runtime` | `ego` \| `webbridge` | 实际使用的运行时 | 公共库路径 `~/.cache/unified-search/cache.db` 在 `set` / `set_engine` / `set_fetch` 入口会硬拒绝 此类载荷。登录态结果默认不缓存 body。 ### 与常规搜索的隔离与融合 | 阶段 | 规则 | |------|------| | **检索** | public(argo)与 login(本技能)分开跑、分 cache、分 partition | | **缓存** | login 永不进 argo 公共缓存;两路互不 soft-hit | | **汇总** | Agent 可将两路 `results` / 正文一并交给 `evidence` 或报告生成;用 `source` / `runtime` / `search_partition` 区分权重与可信语境 | ### 安全与登录态长期可用 | 控制 | 默认 | 说明 | |------|------|------| | 专业模式闸门 | 关 | 需用户 `enable` 后才跑登录态检索 | | URL 守卫 | 拦 | `fetch`/`api`/`navigate` 仅 http(s),默认禁本机/字面私有 IP;`EGO_SEARCH_STRICT_SSRF=1` 全量 DNS;`ARGO_ALLOW_PRIVATE_URLS=1` 放行 | | 任务空间收尾 | 关空间 | ego 路径默认 `completeTaskSpace keep:false`,防标签堆积 | | `--keep-space` / `--site` | 见右 | 多轮保温;`--site zhihu.com` → `site:zhihu.com` 并默认 keep | | 登录墙质量信号 | 开 | fetch/act 输出 `quality.auth_wall_suspected` / `login_likely_ok` | | WebBridge session | 不自动 close_session | 避免误关用户标签 | | 公共缓存 | 拒写 | `cache_eligible=false` + SearchCache 硬守卫 | | 分析融合 | `merge` | 与 public 结果隔离缓存、汇总时用 `merge --public --login` | | 降级 | auto | 任一安装即可;ego 优先,失败降 WebBridge | **登录态稳定建议**: 1. 同站多轮:`--site zhihu.com`(或 `--task-space site:zhihu.com --keep-space`) 2. 单次取证:默认即可(跑完关空间) 3. `quality.login_likely_ok=false` → 在 ego App 或用户 Chrome 人工登录后重试 4. 不要把登录态 body 写入 public cache;汇总用 `merge` ### search 模式 打开指定搜索引擎的真实结果页,`js()` 提取结构化 SERP,输出: ```json { "query": "AI agent 浏览器自动化", "engine": "ego_browser_bing", "source": "ego-browser", "url": "https://cn.bing.com/search?q=...", "results": [ {"title": "...", "url": "https://...", "snippet": "..."} ], "count": 8, "fetch_method": "browser", "login_state_used": true, "auth_partition": "login", "cache_eligible": false } ``` - `--engine`:`bing`(默认,最稳)/ `baidu`(中文)/ `google`(需网络可达,可能弹验证)。 - `--n`:结果条数(默认 8)。 - 注意:SERP 本身是**检索入口**,不是正文证据——高后果结论必须 `fetch` 打开结果页取正文后再下判断(与 argo「SERP 链禁止当正文来源」纪律一致)。 ### fetch 模式 浏览器态正文提取。优先 `article`/`main`/`[role=main]` 等语义容器,回退 `document.body.innerText`, 输出 `{ url, title, content, word_count, fetch_method: "browser" }`,正文可管道给 argo 质量信号分析。 - `--focus 关键词`:若传,只返回包含该关键词附近的段落(减少 token)。 ### api 模式 浏览器上下文**同源 API 数据直取**(v1.1.0)。 先打开目标站点页面(继承登录态),再用 `browserFetch` 从该页面上下文请求同源接口, 拿回结构化 JSON/文本。覆盖 DOM 提取拿不到的场景: - **SPA/XHR 懒加载截断**:页面只渲染前几屏,全量数据在接口里 → 直取接口拿全量。 - **登录态私有数据**:已登录站点的个人/搜索接口 → 页面 cookies 随请求携带。 - **站点内 API 搜索**:直接调站点搜索 API(如知乎 `search_v3`),比解析 SERP 更干净。 ```json { "api_url": "https://www.zhihu.com/api/v4/search_v3?t=general&q=...", "page_url": "https://www.zhihu.com/", "page_title": "(1 条消息) 首页 - 知乎", "data": { "paging": {...}, "data": [...] }, "data_type": "json", "fetch_method": "browser_api" } ``` - `--origin`:登录态上下文页面 URL。**默认取 API URL 同源**(scheme://host); 跨子域场景(如 `cn.bing.com` 请求 `www.bing.com`)须显式指定,否则 browserFetch 受 同源约束失败。 - `data_type`:`json` / `text` / `error`(跨域、网络错误等归一化为 error,脚本不崩)。 - 大响应截断:`data` 超 100KB 时截断并标记 `truncated: true`、`data_type` 加 `_truncated` 后缀。 - **定位**:api 模式输出是「原始数据」,供 Agent 分析判断,**不是 SERP 证据**, 高后果结论仍须走 `argo_evidence` 核验。 ### act 模式 把「搜索 → 点开结果 → 抓正文」等常见链式动作一次跑完。 支持 `--engine bing|baidu|google`(与 search 同表,默认 bing)。 输出含 `query` / `results` / `detail` 与登录态 provenance。 更复杂的多步交互(登录、表单、翻页、对比多个页面)用 `ego-browser nodejs` heredoc; `ego_search.py` 只覆盖高频确定路径。 ## 与 argo 主系统配合 1. **证据流水线**:ego-search 的输出与 argo schema 对齐,`results` 可直接喂 `python3 scripts/evidence.py "查询词" --stdin --json` 做 Selection×Absorption 评分; 正文可复用 `content_signals` / `content_security` 检查。 2. **RRF 融合**:`source=ego-browser` / `engine=ego_browser_` 可参与多源去重; envelope 会标 `login_state_used=true`。**不得**把该路结果写入公共 SearchCache。 3. **分层查询纪律**:事实类问题保持 argo 的 2–3 条子查询纪律(来源要求 / 对比 / 主体), ego-search 用于其中「登录态/动态内容」这一路,不替代 argo 引擎的全量召回。 4. **防污染**:内容安全引擎照常;**缓存隔离**靠 `cache_eligible=false` + SearchCache 硬守卫。 5. **缓存策略**:默认不缓存登录态 body;若未来做短缓存,必须独立库 `~/.cache/ego-search/`,键含 `auth_partition`,禁止 soft-hit 公共 combo。 ## 按需读取 复杂交互、heredoc 全 helper 速查、任务空间归属权纪律 → `references/browser-runtime.md`;安装细节 → `references/install.md`;升级到原版运行时 → `references/original-ego-upgrade.md`。 ## 参考 - 浏览器运行时细节:`references/install.md`(依赖安装)