marketbot 是一个面向金融分析场景的 agent runtime。它保留了通用聊天 agent 的灵活性,但把金融工作拆成了清晰可维护的几层:
- 上层用
skill编排分析任务 - 中层用统一的市场领域服务处理
quote / news / macro - 输出层携带
skill routing、data reliability、source health、route trace - 运行时支持
skill scoring、fallback routing和同轮失败重试 - 结果可以发到 CLI、周期性任务和多种聊天渠道
- 针对一组标的生成市场简报
- 给持仓生成热点事件和催化监控清单
- 做 watchlist 的日常监控、筛选和周期性报告
- 按市场、资产类别、freshness、工具可用性自动选择 skill
- 在相近 skill 间按历史成功率和场景化动态分自动排序
- 当首选 skill 明显失败时,自动回退到兼容的 fallback skill 再执行一次
- 把结果推送到聊天渠道,并保留可靠性说明
- 在需要时快速修改数据路由、skill 和输出逻辑
skill-first金融分析不是一段大 prompt。每个 skill 都可以声明触发条件、输出形态、风险级别、时效要求、市场覆盖、资产类别和依赖工具。领域层独立quote、news、macro 走共享的 market domain services,而不是散落在每个 tool 里的抓取逻辑。输出可解释聊天回复、报告和通知都可以带上 skill routing、blocked reasons、source health、data reliability 和 fallback execution。runtime 很薄runtime 主要负责消息处理、并发、会话、tool 执行和渠道发送,不把金融逻辑塞进主循环。适合长期演化同一套能力可以服务 CLI、定时任务、报告存档和多渠道推送。
python3 -m venv .venv313
source .venv313/bin/activate
python -m pip install -e .
marketbot onboard
marketbot agent
marketbot agent -m "给我 NVDA、07709、513310 的最新价格"
marketbot agent -m "根据我的持仓生成未来两周的热点事件监控清单:NVDA,UNH,07709,07747,513310,518880"| 层 | 位置 | 负责什么 |
|---|---|---|
Skills |
marketbot/skills/*/SKILL.md |
高层任务编排,决定何时触发、适合什么市场、依赖哪些工具、输出长什么样 |
Market Domain |
marketbot/domain/market/ |
标准化的 quote / news / macro 访问,外加 cache、source health、route trace、runtime profile |
Tools |
marketbot/agent/tools/market.py 等 |
原子能力层,例如 market_snapshot、market_news、market_macro、market_brief |
Reporting / Delivery |
marketbot/market_reporting.py、marketbot/channels/* |
把结构化结果渲染成 CLI 回复、保存报告、通知摘要和渠道消息 |
当前 marketbot 不是单一的大 prompt 循环,而是一个分层的 agent runtime:
Channels / CLI / Cron / Heartbeat负责把外部输入送进统一消息总线;聊天渠道回包也走同一套 outbound bus。Session + Contextsession负责 JSONL 持久化,context负责拼装历史、memory、skills、runtime metadata。Router先把请求分类成direct_react、planned_task、market_fast_path、scheduled_task。Planner对复杂任务生成结构化 plan,把任务拆成若干 step,并为每一步限制allowed_tools。Executor保留 ReAct 式工具调用循环,但执行范围被限制在当前 step,避免工具无边界漫游。Verifier + Plan Runtime判断 step 是否完成、是否需要 retry / replan,并把计划状态推进和落盘。Reporting / Delivery把最终结果渲染成 CLI 回复、保存报告、通知摘要或聊天消息。
可以把主路径理解成:
Inbound -> MessageBus -> AgentLoop -> Router -> (Planner) -> Step Executor(ReAct) -> Verifier -> Outbound
对应代码位置:
marketbot/agent/loop.pymarketbot/agent/router.pymarketbot/agent/planner.pymarketbot/agent/executor.pymarketbot/agent/verifier.pymarketbot/agent/plan_runtime.pymarketbot/channels/*
- 简单问题继续直接走 ReAct,保证 CLI 和聊天场景的响应速度
- 复杂任务先做 planning,再做 step-scoped execution,降低长链路工具调用的漂移
- tool health 会在 prompt 暴露前先过滤掉不健康工具,避免模型频繁调用半坏工具
subagent也对齐了同一套 route / plan / verify 逻辑,减少主从执行路径漂移
- 不是所有请求都直接丢进一个大 loop
- 复杂任务不再完全依赖模型自己决定“下一步做什么”
- 工具不再默认全量暴露,而是按健康状态和 step 白名单收缩
- plan 会写到
workspace/plans/*.json,便于恢复、调试和审计
marketbot agent只负责本地 CLI 交互marketbot gateway才会启动channels.* + outbound dispatcher + agent loop- 飞书 / Telegram / Slack / Discord 等聊天渠道必须依赖
gateway常驻运行 - 对飞书来说,当前实现使用 WebSocket 长连接,不需要公网 webhook,但必须保持
gateway进程在线
常见内置 skill:
| Skill | 作用 |
|---|---|
market-report |
对标的或 watchlist 生成市场简报 |
market-monitor |
做持续监控和观察 |
market-discovery |
做机会扫描和主题发现 |
news-intelligence |
做新闻事件提取与冲击分析 |
sentiment-analysis |
做新闻和社交情绪整合 |
thesis-tracker |
跟踪一个观点在新证据下是 strengthened、weakened 还是 falsified |
logic-chain-visualizer |
把事件传导、产业链影响和逻辑链输出成 Markdown + Mermaid |
portfolio-analyzer |
做组合层面的风险与结构分析 |
daily-stock-screener |
对每日股票列表做估值、趋势、量能和情绪筛选排序 |
catalyst-tracker |
做催化剂跟踪 |
stock-watch |
对指定标的做监控和摘要 |
risk-checklist |
输出风险清单 |
ak-rss-digest |
从固定 RSS 源生成偏 AI 和技术主题的中文阅读摘要 |
tech-news-digest |
从分层信源目录生成 AI 与技术新闻日报 |
intel-collector |
管理 RSS/资讯源、执行采集并建立定时采集任务 |
intel-daily-digest |
从已采集的情报条目生成日报并建立定时摘要任务 |
git clone https://github.com/EthanAlgoX/MarketBot.git
cd MarketBot
python3 -m venv .venv313
source .venv313/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .如果需要 Matrix:
python -m pip install -e ".[matrix]"如果是开发环境:
python -m pip install -e ".[dev]"说明:
- 推荐始终在虚拟环境中执行
marketbot命令 - 如果你的机器上没有
pip命令,直接使用python -m pip ... - 项目要求 Python
>= 3.11
marketbot onboard这会创建默认工作区和 ~/.marketbot/config.json。
最小配置示例:
{
"providers": {
"openrouter": {
"apiKey": "sk-or-v1-xxx"
}
},
"agents": {
"defaults": {
"provider": "openrouter",
"model": "anthropic/claude-opus-4-1"
}
},
"tools": {
"market": {
"quoteSource": "tickflow",
"tickflowApiKey": "tk-xxx",
"newsSources": ["reuters", "bloomberg", "cls"],
"macroSource": "fred",
"cacheTtlS": 60
}
},
"channels": {
"explainabilityMode": "auto",
"explainabilityDelivery": "auto"
}
}说明:
quoteSource: tickflow适合以 A 股实时数据为主的工作流;混合市场再考虑autotickflowApiKey用于 TickFlow 实时行情和基础面接口newsSources决定新闻路由顺序macroSource: fred需要 FRED API key;没有 key 时会明确降级explainabilityMode控制是否在结果里带能力和可靠性说明
可选:如果你希望 agent 直接操作飞书/Lark 文档、消息、表格、任务,可以额外开启本地 lark-cli 工具层:
{
"tools": {
"larkCli": {
"enabled": true,
"command": "lark-cli",
"timeoutS": 45,
"configDir": "~/.lark-cli",
"allowWrite": false,
"allowAuth": false
}
}
}说明:
allowWrite: false时只允许查询类操作,默认阻止发消息、创建文档、写表格、改任务allowAuth: false时禁止 agent 触发lark-cli auth ...- 启用后,agent 会获得
lark_cli、lark_im、lark_doc、lark_sheets、lark_task、lark_base这些工具 - 这层集成补的是飞书办公能力,不替代现有
channels.feishu消息通道 - 下面有单独的
Lark CLI 集成章节,包含安装、授权、marketbot status校验和使用示例
可选:如果你希望 agent 原生分析 Twitter/X 讨论、线程和账号动态,可以额外开启本地 twitter-cli 工具层:
{
"tools": {
"twitterCli": {
"enabled": true,
"command": "twitter",
"timeoutS": 45,
"browser": "chrome",
"chromeProfile": "Profile 2",
"homeDir": "~/.marketbot",
"allowWrite": false
}
}
}说明:
browser/chromeProfile用于把 CLI cookie 读取绑定到指定浏览器和 ProfilehomeDir建议单独指定一个可写目录,用来隔离twitter-cli的本地状态allowWrite: false时只开放查询类 Twitter/X 操作;发帖、回复、引用、点赞、转推、关注等写操作默认关闭- 启用后,agent 会获得
twitter_cli工具,并让twitter-browser-researchskill 优先走 CLI 而不是browser_site - 下面有单独的
Twitter CLI 集成章节,包含安装、登录、marketbot status校验和使用示例
最常用的 4 条命令:
source .venv313/bin/activate
marketbot agent
marketbot agent -m "给我 NVDA、07709、513310 的最新价格"
marketbot agent -m "根据我的持仓生成未来两周的热点事件监控清单:NVDA,UNH,07709,07747,513310,518880"
marketbot market report --symbols NVDA,SPY --save补充:
marketbot market report --json:输出原始结构化结果marketbot market report --session premarket|intraday|closemarketbot market report --notify --notify-channel telegram --chat-id 10001marketbot market heartbeat-setup:生成周期性报告模板marketbot skills score show:查看 skill 动态评分 bucketsmarketbot skills score reset --skill xueqiu-research:重置某个 skill 的评分marketbot skills score reset --all:清空全部 skill 评分
如果你要接飞书、Telegram、Slack、Discord 等渠道,不是启动 marketbot agent,而是启动:
source .venv313/bin/activate
marketbot gatewayagent 只负责本地 CLI 对话;渠道消息接收和回包由 gateway 负责。
原因:系统里没有暴露 pip 命令,或当前 shell 没有激活虚拟环境。
处理方式:
python3 -m venv .venv313
source .venv313/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .原因:macOS / Homebrew Python 默认不允许直接往系统环境安装包(PEP 668)。
处理方式:不要使用系统 Python 直接 pip install -e .,改用虚拟环境:
python3 -m venv .venv313
source .venv313/bin/activate
python -m pip install -e .常见原因:只启动了 marketbot agent,没有启动 marketbot gateway。
正确方式:
source .venv313/bin/activate
marketbot gateway排查顺序:
- 先执行
marketbot status,确认channels.feishu.enabled = true - 确认配置文件
~/.marketbot/config.json里已经填写appId和appSecret - 保持
marketbot gateway进程持续运行,不要只开marketbot agent - 如果
allowFrom为空,飞书消息会被拒绝;调试时可先设为["*"]
原因:marketbot 默认会把会话、cron 和工作区文件写到 ~/.marketbot/workspace/。
处理方式:
- 确认当前用户对
~/.marketbot/有写权限 - 不要在只读沙箱环境里直接运行需要落盘的
marketbot进程 - 必要时先执行
marketbot onboard重新初始化默认目录
marketbot agent -m "根据我的持仓生成今天盘前监控清单:SPY,NVDA,GOOG,TSLA,UNH,07709,513310"
marketbot agent -m "列出 NVDA、UNH、07709 未来两周最重要的催化和风险"
marketbot agent -m "筛选今天值得重点看的股票:NVDA,TSLA,INTC,TTD,CRWV"
marketbot agent -m "为什么 07709 走这个价格源?给我看数据路由和可靠性"
marketbot agent -m "请生成一份 AI 日报,从固定 RSS 里整理阅读摘要"
marketbot agent -m "生成今天的技术新闻日报,重点看 AI 和开发者工具"marketbot 的 skill 选择不是纯 prompt 匹配,而是三层组合:
- 静态匹配:按
triggers、required_tools、markets、asset_classes、freshness - 动态评分:按
(skill, market, task_type, toolset_signature)分桶累计成功和失败 - fallback 执行:首选 skill 明显失败时,按 metadata 声明的
fallback_skills同轮重试一次
当前已接入的高价值 fallback 场景包括:
eastmoney-live -> news-intelligencexueqiu-research -> social-signal-browser, sentiment-analysisbrowser-news-verifier -> news-intelligence
评分结果持久化到 workspace:
~/.marketbot/workspace/data/skill_scores.json
你可以直接查看或重置它:
marketbot skills score show
marketbot skills score show --skill xueqiu-research --json
marketbot skills score reset --skill xueqiu-research
marketbot skills score reset --all当发生 fallback 时,输出 metadata 和 explainability 会显式带上:
skill_routing.fallbackExecutionskill_fallbackFallback: primary->selectedFallback
这意味着你可以直接排查:
- 哪个主 skill 经常失败
- 哪个 fallback skill 实际接管了结果
- 哪些 buckets 的动态分已经偏低,需要 reset 或继续观察
最近一轮从 Awesome-finance-skills 方向落地的能力主要有:
intel_search对 workspace 已采集情报做本地 BM25 检索,用于 prior-news recall 和 thesis 跟踪- 可插拔情绪后端
market_event_extract和market_social_sentiment支持tools.market.sentimentBackend thesis-tracker支持 thesis 的create / get / list / update,并自动判断观点被强化、削弱还是证伪logic-chain-visualizer输出事件传导链和逻辑链图market_brief闭环增强 可附带历史 intel、logic chain appendix,并直接创建或更新 thesis
除了市场分析链路,当前也内置了三类技术资讯能力:
ak-rss-digest使用固定 RSS/Atom 信源和脚本抓取,适合做偏 AI agent、前沿 AI、深度访谈的中文阅读摘要。tech-news-digest使用分层信源目录做技术和 AI 新闻汇总,优先抓取tier1,不足时再扩到tier2,浏览器型来源作为可选增强。intel-collector/intel-daily-digest提供可持久化的 RSS/资讯源管理、采集、digest 生成和 cron 调度,适合把资讯流接成可重复运行的情报管线。
典型调用:
marketbot agent -m "请生成一份 AI 日报,从固定 RSS 里整理阅读摘要"
marketbot agent -m "生成今天的技术新闻日报,重点看 AI、模型产品和开发者工具"如果你希望把 RSS/资讯源采集和日报生成接入定时任务,推荐使用 intel 命令链路:
marketbot intel source-add --type rss --name "OpenAI Blog" --url https://openai.com/blog/rss.xml
marketbot intel collect
marketbot intel digest-daily
marketbot intel digest-list
marketbot intel digest-show 1
marketbot intel schedule-latest-daily --collect-cron-expr "55 7 * * *" --digest-cron-expr "0 8 * * *" --tz Asia/Shanghai
marketbot intel schedule-list
marketbot intel schedule-remove <job-id>其中 schedule-latest-daily 会一次创建两个 cron job:
- 上游
intel_collect,先刷新 source - 下游
intel_digest_daily,再基于最新条目生成日报
这是 marketbot 和普通聊天 agent 最不一样的一层。
系统可以暴露的关键信息:
| 字段 | 说明 |
|---|---|
skill routing |
这轮选中了哪些 skill |
blocked reasons |
哪些 skill 没被选中,以及为什么 |
data reliability |
snapshot / news / macro 的总体可靠性 |
source health |
每个 provider 当前是 ok、cached、degraded、fallback 还是 error |
route trace |
数据访问链路是如何路由和降级的 |
这些信息会进入:
- chat 回复
- 保存的 market report
- 通知摘要
- outbound metadata
相关配置:
channels.explainabilityModechannels.explainabilityOverrideschannels.explainabilityDeliverychannels.explainabilityDeliveryOverrides
| 渠道 | 说明 |
|---|---|
| Telegram | 基于 python-telegram-bot |
| Slack | Socket mode |
| Discord | REST + gateway |
| 飞书 | 文本、post、card 风格 |
| 钉钉 | Stream mode |
| IMAP + SMTP | |
| 通过桥接服务集成 | |
| Bot 集成 | |
| Mochat | Socket.IO + HTTP |
| Matrix | 可选依赖 |
常用命令:
marketbot gateway
marketbot status
marketbot channels --help
marketbot provider --help
marketbot skills --help如果要启用 bb-browser,建议先从保守配置开始:
{
"tools": {
"browser": {
"enabled": true,
"command": "bb-browser",
"mode": "safe",
"adapterCatalog": ["xueqiu/hot-stock", "reddit/search", "youtube/search", "zhihu/hot", "yahoo-finance/quote", "wikipedia/summary"],
"allowSites": ["xueqiu", "reddit", "youtube", "zhihu", "yahoo-finance", "wikipedia"],
"allowDomains": ["xueqiu.com", "reddit.com", "youtube.com", "zhihu.com", "finance.yahoo.com", "wikipedia.org"],
"allowUrlPrefixes": ["https://www.youtube.com/watch?v=", "https://en.wikipedia.org/wiki/"],
"allowEval": false,
"allowRequestCapture": false,
"allowRequestBodies": false
}
}
}关键点:
safe只允许只读浏览动作adapterCatalog会作为browser_site的实际执行白名单;配置后只允许 catalog 中的<site>/<command>allowSites/allowAdapters仍可作为补充约束;未配置adapterCatalog时才是主要边界allowDomains/allowUrlPrefixes用来约束browser_page(open)和browser_network(fetch)allowEval默认建议关闭,只有明确需要页面脚本求值时再打开allowRequestCapture与allowRequestBodies默认建议关闭
如果你希望 agent 直接读取或操作飞书/Lark 的消息、文档、表格、任务、多维表格,可以把本地 lark-cli 接到 MarketBot。当前推荐方式是:
- 先在本机把
lark-cli配好并确认单独可用 - 再把它挂到
tools.larkCli - 最后用
marketbot status和一条真实 agent 请求验证
这条集成的定位是“飞书办公执行层”,不替代 channels.feishu 的消息收发通道。
先确认本机有可执行的 lark-cli 命令。你可以自行选择安装方式,但对 MarketBot 来说最重要的是两点:
marketbot运行时必须能找到这个命令- 最好把
command配成绝对路径,避免 PATH 差异
例如:
{
"tools": {
"larkCli": {
"enabled": true,
"command": "/absolute/path/to/lark-cli",
"timeoutS": 45,
"configDir": "~/.lark-cli",
"allowWrite": false,
"allowAuth": false
}
}
}建议:
command优先写绝对路径,不要依赖 shell PATHconfigDir推荐显式指定,例如~/.lark-cli- 初次接入时先保持
allowWrite=false - 初次接入时先保持
allowAuth=false
先单独完成 CLI 初始化和登录,不要一开始就让 agent 代替你走授权流程。
lark-cli config init --new
lark-cli auth login说明:
config init --new会创建~/.lark-cli/config.json一类的本地配置auth login通常会进入浏览器或 device-code 授权流程- macOS 上如果 CLI 使用系统钥匙串,终端里可能会弹出 Keychain 访问确认
完成后先做最小自检:
lark-cli auth status
lark-cli doctor
lark-cli contact +get-user如果这三条都正常,再接 MarketBot。
在 ~/.marketbot/config.json 中加入:
{
"tools": {
"larkCli": {
"enabled": true,
"command": "/absolute/path/to/lark-cli",
"timeoutS": 45,
"configDir": "~/.lark-cli",
"allowWrite": false,
"allowAuth": false
}
}
}字段说明:
enabled: 是否启用lark-cli工具层command:lark-cli可执行文件路径;推荐绝对路径timeoutS: 单次命令超时,默认45configDir:lark-cli配置目录;如果 CLI 已经在别处初始化,要和真实目录保持一致allowWrite: 是否允许写操作;关闭时会阻止发消息、建文档、写表格、改任务等allowAuth: 是否允许 agent 触发auth流程;通常建议关闭
配置后先不要直接问复杂问题,先看运行态:
marketbot status你应该能在输出里看到类似信息:
Lark CLI: ✓Lark CLI command: /absolute/path/to/lark-cliLark CLI configDir: ~/.lark-cliLark CLI writes: disabledLark CLI auth: disabled
如果看到 command not found,优先检查:
tools.larkCli.command是否写成了错误路径- 该路径下的
lark-cli是否有执行权限 - 你配置的
configDir是否真的是 CLI 在使用的目录
启用后,运行时会注册这些工具:
lark_cli: 通用兜底入口,适合少量结构化工具暂未覆盖的只读查询lark_im: 飞书消息、群聊搜索与读取lark_doc: 飞书文档搜索与读取lark_sheets: 普通电子表格读取lark_task: 任务读取与更新lark_base: 多维表格 / Base / Bitable 的表、字段、记录读取
建议:
- 优先让 agent 使用
lark_im、lark_doc、lark_sheets、lark_task、lark_base lark_cli只作为兜底- 如果资源本质上是多维表格,不要走
lark_sheets,而要走lark_base
当前比较稳定的只读链路包括:
- 搜索飞书文档
- 搜索群聊和消息
- 读取普通电子表格
- 读取我的任务
- 读取多维表格的表名、字段、记录
在 Base/Bitable 场景下,当前已支持:
table_listfield_listrecord_listrecord_getrecord_list指定fieldsrecord_list按field_filters做简单过滤或 DSL 过滤table_name -> table_id自动解析
先验证 CLI 自身:
lark-cli docs +search --query 市场 --format json
lark-cli im +chat-search --query 市场 --format json
lark-cli base +table-list --base-token YOUR_BASE_TOKEN --format json再验证 MarketBot:
marketbot agent -m "帮我搜索飞书里标题包含市场的文档,只返回前 3 条。"
marketbot agent -m "查一下飞书里和市场相关的群聊。"
marketbot agent -m "列出飞书 Base XdkhbJehDazQKtscNpLchLXSnac 的所有表名。"
marketbot agent -m "读取飞书 Base XdkhbJehDazQKtscNpLchLXSnac 中名为需求调研的表,返回前 2 条记录的 编号、AI 情感打标、您的年龄范围? 三列。"
marketbot agent -m "读取飞书 Base XdkhbJehDazQKtscNpLchLXSnac 中名为需求调研的表,只返回 AI 情感打标 为 负向 的记录。"飞书里“普通电子表格”和“多维表格”是两套资源,不要混用:
- 普通电子表格:走
lark_sheets - 多维表格 / Base / Bitable:走
lark_base
如果你已经知道 base_token,现在可以直接按表名读取,不一定要先手动查 table_id。如果表名有歧义,工具会返回结构化候选表名,方便 agent 继续澄清。
默认安全策略是偏保守的:
- 默认禁用写操作
- 默认禁用
auth - 阻止长时间运行的事件订阅类命令
- 阻止直接输出到本地文件的危险参数
- 对明确的飞书办公请求,运行时会优先使用结构化
lark_*工具,而不是回退到exec
如果你确实要让 agent 写飞书内容,再显式打开:
{
"tools": {
"larkCli": {
"allowWrite": true
}
}
}建议只在受控环境里打开,并先验证最小操作范围。
-
marketbot status里显示Lark CLI: disabled原因:tools.larkCli.enabled没开。 -
marketbot status里显示command not found原因:command路径错误,或者 CLI 不在 PATH。 -
lark-cli auth status在某些受限运行环境里报错 原因:CLI 可能依赖本机钥匙串或系统凭据;先在你自己的终端确认 CLI 单独可用。 -
文档或表格能在飞书里打开,但工具返回权限错误 原因:通常是缺 scope。先给
lark-cli补对应权限,再回来验证 MarketBot。 -
一个资源看起来像表格,但
lark_sheets读不出来 原因:它可能其实是 Bitable;改走lark_base。
如果本机已经安装 xiaohongshu-cli,可以把它作为只读工具接入给 agent 使用。当前推荐流程是:先在本机确认 xhs 可登录、可查询,再把它挂到 MarketBot。
先在你自己的 Python 环境里安装 xiaohongshu-cli,并确认 xhs 命令可执行。然后完成一次登录:
xhs login
# 或
xhs login --qrcode如果使用浏览器 cookie 登录,macOS 可能会弹出钥匙串访问确认;这里输入的是当前 macOS 账户的登录密码,不是小红书密码。
在 ~/.marketbot/config.json 中加入:
{
"tools": {
"xiaohongshuCli": {
"enabled": true,
"command": "xhs",
"timeoutS": 45,
"cookieSource": "auto",
"homeDir": "~/.marketbot",
"allowWrite": false
}
}
}建议:
command最好写成绝对路径,例如"/Users/you/project/.venv/bin/xhs",避免 PATH 差异导致运行时找不到命令homeDir建议单独指定一个可写目录,用来隔离xiaohongshu-cli的 cookie 和缓存allowWrite保持false
先验证 CLI 自身:
xhs status --json
xhs search "瑞幸咖啡" --sort popular --json如果上面正常,再验证 MarketBot:
marketbot agent -m "用小红书分析瑞幸咖啡最近的热度、用户讨论重点和整体情绪,只给我简明结论。"- 默认按只读模式设计,当前接入只开放
status / search / read / comments / feed / hot / topics / search-user / user / user-posts - 当
tools.xiaohongshuCli.allowWrite=true时,额外支持受控post,用于发布图片笔记 - 现有
xiaohongshu-browser-researchskill 会优先使用xiaohongshu_cli,缺失时再回退到browser_site - 在默认品牌分析请求下,运行时会优先走
search(popular),必要时再补一轮search(latest),不会再优先走exec、本地缓存文件或浏览器抓取旁路 xiaohongshu_cli会先把搜索结果压缩成适合模型消费的摘要,而不是把整块大 JSON 直接塞回上下文homeDir可选;配置后会把 CLI 的HOME指向该目录,适合把xiaohongshu-cli的 cookie/cache 隔离到专用位置
- 适合做品牌热度、消费叙事、笔记评论、用户内容等研究,不适合作为交易事实或销量事实的直接证明
allowWrite目前保留为显式安全开关,但当前 MarketBot 接入未开放点赞、评论、收藏、发帖等写操作- 当前写操作仅开放
post,而且只支持图片笔记;仍未开放点赞、评论、收藏、关注等交互动作 - 该 CLI 本质上依赖本机浏览器 cookie 或二维码登录;如果
xhs status不可用,先修复 CLI 登录态,不要先排查 MarketBot - 小红书数据更适合用来观察消费者讨论和品牌声量,不应替代成交、财报、渠道销售或官方披露数据
如果你想让 agent 原生读取 Twitter/X 搜索结果、线程、用户资料、用户发文,甚至在受控模式下发帖,可以接入本地 twitter-cli。
先在你自己的 Python 环境里安装 twitter-cli,并确认 twitter 命令可执行。然后确保本机浏览器里已经处于有效登录态,或者提前设置好:
export TWITTER_AUTH_TOKEN=...
export TWITTER_CT0=...如果你依赖浏览器 cookie,推荐先验证 CLI 自身可用:
twitter status --json
twitter search "NVDA guidance" --type Latest --max 10 --json在 ~/.marketbot/config.json 中加入:
{
"tools": {
"twitterCli": {
"enabled": true,
"command": "twitter",
"timeoutS": 45,
"browser": "chrome",
"chromeProfile": "Profile 2",
"homeDir": "~/.marketbot",
"allowWrite": false
}
}
}建议:
command最好写成绝对路径,例如"/Users/you/project/.venv/bin/twitter",避免 PATH 差异导致运行时找不到命令browser只在你有多个浏览器时需要显式指定;常见值是arc、chrome、edge、firefox、bravechromeProfile只在你想锁定某个 Chromium profile 时配置,例如"Profile 2"homeDir建议单独指定一个可写目录,用来隔离twitter-cli的本地状态allowWrite保持false
先验证 CLI 自身:
twitter status --json
twitter user elonmusk --json
twitter search "TSLA deliveries" --type Latest --max 10 --json如果上面正常,再验证 MarketBot:
marketbot status
marketbot agent -m "帮我总结一下 Twitter 上关于 NVDA 最新 guidance 的讨论重点和整体情绪,只给我简明结论。"- 默认按只读模式设计,当前接入开放
status / whoami / search / tweet / article / user / user_posts / likes / followers / following / feed / bookmarks / list - 当
tools.twitterCli.allowWrite=true时,额外支持受控post / reply / quote / like / unlike / retweet / unretweet / bookmark / unbookmark / follow / unfollow / delete - 现有
twitter-browser-researchskill 会优先使用twitter_cli,缺失时再回退到browser_site - 在默认 Twitter/X 分析请求下,运行时会优先走
twitter_cli,不会再优先走exec、本地缓存文件或 browser 旁路 homeDir可选;配置后会把 CLI 的HOME指向该目录,适合隔离 cookie 与运行时缓存
- 适合做市场叙事、线程解读、交易员/分析师评论和事件发酵观察,不适合作为事实来源的唯一依据
allowWrite是显式安全开关;默认关闭,建议只有在你明确需要 agent 发帖或互动时再打开- 该 CLI 本质上依赖本机浏览器 cookie 或环境变量认证;如果
twitter status不可用,先修复 CLI 登录态,不要先排查 MarketBot - Twitter/X 数据更适合做快信号和传播路径观察,不应替代公告、财报、交易所披露或正式新闻源
可以先搜本地 skill,不够再回退到外部 curated skill 目录:
marketbot skills search "kubernetes deployment"
marketbot skills install k8s-release安装后的外部 skill 会写入 workspace/skills/,下一次新会话会自动作为 workspace skill 加载。
| 路径 | 说明 |
|---|---|
marketbot/agent/ |
runtime loop、context、session 处理 |
marketbot/runtime/ |
tool bootstrap 和运行时 wiring |
marketbot/domain/market/ |
市场领域服务和运行时能力画像 |
marketbot/skills/ |
内置 skill 和 skill metadata |
marketbot/channels/ |
各渠道适配器 |
marketbot/cache/ |
market cache |
marketbot/market_reporting.py |
报告渲染与 explainability 输出 |
tests/ |
回归测试 |
常用命令:
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -p pytest_asyncio.plugin新增一个金融能力的常见路径:
- 在
marketbot/skills/<name>/SKILL.md新增或调整 skill - 给 skill 增加触发条件、输出、风险、freshness、市场、资产类别、required tools 等 metadata
- 如果需要新的标准化数据访问,就扩展
marketbot/domain/market/ - 如果需要新的原子能力,再暴露对应 tool
- 补 skill routing、tool contract、report renderer 相关测试
MIT
