跳转到内容

浏览器扩展

Agent 只能帮助它知道的事情。对话和记忆能覆盖很多,但有一个巨大的盲区:你现在正在阅读的内容。

Context Bro 是一个独立的 Chrome 扩展,用于弥补这个鸿沟。它从网页中提取内容,通过 webhook 端点 发送到 Agent 的事件流。

功能工作方式
手动 Clip点击扩展图标或按 Ctrl+Shift+K 分享当前页面
选区分享选中文本 → 浮动按钮或右键 → 仅分享选中部分
定时分享配置域名白名单 + 间隔 → 自动分享你正在浏览的页面
直播适配器Twitch 和 YouTube 适配器实时捕获聊天、打赏和直播信息
模板引擎精确控制提取哪些数据以及 JSON payload 的结构

Context Bro 不是 AnySoul 浏览器扩展。它是一个独立的、低权限的扩展,仅读取你显式允许的页面:

AnySoul 扩展Context Bro
核心行为Agent 驱动浏览器(打开标签页、执行搜索)你分享正在阅读的内容
权限广泛(<all_urls>保守(仅白名单)
信任等级高 — Agent 可查看任意页面低 — 你控制分享什么
安装门槛需要信任 Agent 自动化Web Clipper 心智模型

Context Bro 通过标准 webhook 向 Agent 发送数据。先在 AnySoul 中创建一个:

  1. 打开 Agent 设置 → Webhooks
  2. 点击 创建 Webhook,输入名称(如 context-bro
  3. 选择 api_key 鉴权模式
  4. 复制 端点 URLAPI key

Chrome 网上应用店安装 Context Bro,然后打开其选项页面。

在 Context Bro 选项 → Endpoints 中:

  1. 点击 Add Endpoint
  2. 输入名称(如 My Soul
  3. 粘贴 webhook URL:
    https://api.anysoul.ai/api/ingest/webhook/<webhookId>
  4. 添加自定义 header:X-API-Key → 你的 API key
  5. 点击 Save

打开任意网页,点击 Context Bro 图标,然后点击 Share。页面内容被提取,通过活跃模板编译,POST 到你的 webhook 端点。Agent 会看到一个新事件:

- [02-22 14:30] [evt_cb001] context-bro/stackoverflow.com (page_context): How to fix lifetime errors in Rust

Context Bro 使用与其他集成相同的 webhook ingest 端点,不需要特殊 API:

Context Bro 扩展
│ 提取页面 → 模板编译 → JSON payload
POST /api/ingest/webhook/<webhookId>
│ Webhook 映射引擎 → 标准 Event
Agent 事件流

webhook 映射编辑器 将收到的 JSON 转换为事件字段。Context Bro 的默认模板生成的 payload 可以直接与默认 webhook 映射配合使用。

最常见的配置:分享你一天中阅读的文章、文档和代码。

示例场景——学习 Rust:

  1. 你浏览 Rust Book、Stack Overflow 和 GitHub Issues
  2. Context Bro 每 15 分钟自动分享页面(白名单:doc.rust-lang.orgstackoverflow.comgithub.com
  3. 你选中一段令人困惑的代码 → Ctrl+Shift+K → 即时分享
  4. Agent 注意到你已经阅读了一小时关于 lifetime 的内容 → 发送消息在你的上下文中解释 elision 规则
  5. Agent 保存「Rust 学习进度」记忆节点,链接今天的主题

为什么有效: Agent 已经知道你想学 Rust(来自对话)。Context Bro 告诉它 你现在正在读什么 ——弥合了意图与行动之间的鸿沟。

使用 Social Stream Ninja 的直播场景

Section titled “使用 Social Stream Ninja 的直播场景”

Social Stream Ninja(SSN)是 Steve Seguin 开发的浏览器扩展,聚合来自 120+ 平台(YouTube、Twitch、TikTok、Facebook、Discord 等)的直播聊天。它是需要跨平台聊天集成的主播的首选工具。

SSN 可以直接将聊天事件转发到 AnySoul webhook——无需 Context Bro:

SSN 提供的能力:

功能描述
120+ 平台支持YouTube、Twitch、TikTok、Facebook、Kick、Discord 等
消息归一化不同平台统一为标准 JSON 格式
自定义触发器按内容、用户角色、打赏金额、正则表达式匹配消息
自定义动作HTTP POST、WebSocket 推送、OBS 叠加层、TTS、MIDI 信号
实时处理基于 MutationObserver 的捕获 + 去重和批处理

触发器 → 动作示例:

触发器动作Agent 用途
任意聊天消息POST 到 AnySoul webhookAgent 跟踪直播聊天
Super Chat ≥ $5POST 到 webhookAgent 追踪社区互动
消息匹配 !question *POST 到 webhookAgent 回答观众提问
新订阅者POST 到 webhookAgent 记录社区增长
Raid 事件POST 到 webhookAgent 记录频道间互动

与 AnySoul 的配置步骤:

  1. Agent 设置 → Webhooks 中创建 api_key 鉴权的 webhook 端点
  2. 在 Social Stream Ninja 中配置 webhook URL 并将 key 包含在 JSON body 中(SSN 可能不支持自定义 header —— 参见 Webhook:接入 Social Stream Ninja
  3. 配置映射以提取 platformusernamemessageevent_type

Agent 将看到实时消息流:

- [20:00] [evt_ssn01] youtube/alice (message): That explanation was so clear!
- [20:01] [evt_ssn02] twitch/bob (donation): $10 — "Love the content, keep it up!"
- [20:02] [evt_ssn03] youtube/carol (membership): New member joined

Context Bro vs. Social Stream Ninja:

Context BroSocial Stream Ninja
聚焦领域静态网页 + Twitch/YouTube120+ 直播/社交平台
核心优势页面内容提取(Defuddle + 模板引擎)跨平台聊天聚合 + 触发器
定时分享有(Chrome Alarm + 白名单)
模板引擎有(50+ 过滤器、CSS 选择器、Schema.org)
自定义触发器/动作无(Agent 自行决定如何响应)有(正则、打赏阈值、角色筛选)
最适用于知识工作、研究、学习直播、社区管理

两个工具共享同一个洞察:浏览器是数字生活的中心,其中的内容是 AI Agent 最有价值的上下文来源。 SSN 将这个上下文变成主播自动化,Context Bro 将它变成 Agent 的感知。

你可以同时使用两者——SSN 负责全平台的直播聊天聚合,Context Bro 负责其他一切(文章、文档、代码、选区)。

Context Bro 包含从 Obsidian Web Clipper(MIT)抽取的模板引擎。模板控制发送到端点的 JSON payload 结构。

默认模板:

{
"title": "{{title}}",
"url": "{{url}}",
"content": "{{content}}",
"author": "{{author}}",
"published": "{{published}}",
"domain": "{{domain}}",
"description": "{{description}}",
"wordCount": "{{wordCount}}",
"clippedAt": "{{date}} {{time}}"
}

你可以使用触发器模式(如 github.com/*/pull/* 用于 PR)创建站点专用模板,并使用 CSS 选择器变量({{selector:.classname}})或 Schema.org 变量({{schema:@Article:author}})。

完整的模板参考请查看 Context Bro 文档

为你经常访问的域名配置自动分享:

  1. 打开 Context Bro 选项 → 白名单
  2. 添加域名(如 github.com*.reddit.comdocs.python.org
  3. 打开 选项 → 定时
  4. 设置间隔(5 分钟 ~ 2 小时)和模式:
    • 聚焦标签页 — 仅分享你正在查看的活跃标签页
    • 白名单全部 — 分享所有匹配白名单的已打开标签页

页面通过内容哈希去重——如果页面自上次分享以来没有变化,则跳过。