@llamaventures/cli 1.17.2 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.zh-CN.md CHANGED
@@ -5,18 +5,16 @@
5
5
  <h1 align="center">@llamaventures/cli</h1>
6
6
 
7
7
  <p align="center">
8
- <strong>Llama Ventures 官方 CLI 与 MCP server。</strong><br/>
9
- 一行 <code>npm install</code>,一套统一的认证链,两个接口——
10
- 团队成员和 AI agent 都通过同一份客户端访问
11
- <a href="https://command.llamaventures.vc">command.llamaventures.vc</a>。
8
+ <strong>Llama Ventures CLI 与 MCP server。</strong><br/>
9
+ 一个包、两个可执行文件:<code>llama</code>——给人和脚本用的 CLI;
10
+ <code>llama-mcp</code>——带 59 个类型化工具的 stdio MCP server,任何
11
+ MCP 原生 agent 都能接。两者共享同一认证链、同一 HTTP 客户端、同一错误格式,
12
+ 连接 <a href="https://command.llamaventures.vc">command.llamaventures.vc</a>。
12
13
  </p>
13
14
 
14
15
  <p align="center">
15
16
  <a href="https://www.npmjs.com/package/@llamaventures/cli"><img alt="npm" src="https://img.shields.io/npm/v/@llamaventures/cli?label=npm&color=cb3837&logo=npm&logoColor=white"></a>
16
17
  <a href="https://github.com/Llama-Ventures/llama-cli/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Llama-Ventures/llama-cli/actions/workflows/ci.yml/badge.svg"></a>
17
- <a href="https://docs.npmjs.com/trusted-publishers"><img alt="Provenance" src="https://img.shields.io/badge/provenance-signed-2e8b57?logo=npm"></a>
18
- <a href="https://nodejs.org/"><img alt="Node" src="https://img.shields.io/node/v/@llamaventures/cli?color=339933&logo=nodedotjs&logoColor=white"></a>
19
- <a href="https://modelcontextprotocol.io"><img alt="MCP 2024-11-05" src="https://img.shields.io/badge/MCP-2024--11--05-7d3aed"></a>
20
18
  <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
21
19
  </p>
22
20
 
@@ -25,306 +23,133 @@
25
23
  </p>
26
24
 
27
25
  <p align="center">
28
- <a href="#给华人创业者-向-llama-pitch">🚀 向 Llama pitch(无需账号)</a> ·
29
- <a href="#接入你的-ai-系统">接入你的 AI</a> ·
26
+ <a href="#给华人创业者向-llama-pitch">🚀 向 Llama pitch(无需账号)</a> ·
30
27
  <a href="#安装">安装</a> ·
31
28
  <a href="#认证">认证</a> ·
32
- <a href="#cli-速览">CLI</a> ·
29
+ <a href="#接入你的-ai-系统">接入你的 AI</a> ·
30
+ <a href="#cli">CLI</a> ·
33
31
  <a href="#mcp-server">MCP</a> ·
34
- <a href="AGENT_BRIEFING.md">Agent 协议</a> ·
35
- <a href="SECURITY.md">安全</a> ·
36
32
  <a href="CHANGELOG.md">更新日志</a>
37
33
  </p>
38
34
 
39
35
  > **公开源码、低摩擦安装;不是开源产品。** 大多数命令需要 Llama Ventures
40
- > 团队账号(联系 [gavin@llamaventures.vc](mailto:gavin@llamaventures.vc)
41
- > token)。**唯一例外是公开的 `pitch` 命令族**——任何创业者、EA、
42
- > 行政助理都能用,不需要 token,详见下方
43
- > [给华人创业者:向 Llama pitch](#给华人创业者-向-llama-pitch)。
44
-
45
- ---
46
-
47
- ## 包里有什么
48
-
49
- ```
50
- @llamaventures/cli
51
- ├── bin/llama 给人 + bash 用的交互式 CLI
52
- └── bin/llama-mcp 给 MCP 原生 agent 用的 stdio MCP server,58 个类型化工具
53
- ```
54
-
55
- 两个 binary 共享 `lib/client.mjs`——**同一**认证链、**同一** HTTP 客户端、
56
- **同一**错误格式。CLI 与 MCP 不可能在身份或传输上漂移。CLI 自身零依赖;
57
- MCP server 仅依赖 `@modelcontextprotocol/sdk`(Anthropic 维护,pin 死版本)。
58
-
59
- ```mermaid
60
- flowchart LR
61
- Human([🧑‍💻 团队成员]) --> CLI[bin/llama<br/>argv 解析]
62
- Agent([🤖 MCP 原生 agent]) --> MCP[bin/llama-mcp<br/>stdio JSON-RPC]
63
- CLI --> Client[lib/client.mjs<br/>认证 · fetch · 错误]
64
- MCP --> Client
65
- Client -- HTTPS --> API[(command.llamaventures.vc)]
66
- classDef src fill:#dcfce7,stroke:#166534,color:#14532d
67
- classDef edge fill:#dbeafe,stroke:#1e40af,color:#1e3a8a
68
- class Human,Agent edge
69
- class CLI,MCP,Client src
70
- ```
71
-
72
- ---
36
+ > 团队账号(token 由团队管理员在 `/settings/tokens` 签发)。
37
+ > **唯一例外是公开的 `pitch` 命令族**——见下一节。
73
38
 
74
39
  ## 给华人创业者:向 Llama pitch
75
40
 
76
- 如果你是创业者、EA、或者帮老板探索的助理,**不需要 token、不需要找认识的人介绍**——
77
- 我们专门为外部 pitch 留了一条公开通道。它跟你在
41
+ 如果你是创业者、EA、或者帮老板探索的助理,**不需要 token、不需要找人介绍**——
42
+ 我们专门为外部 pitch 留了一条公开通道。它跟
78
43
  [command.llamaventures.vc/external-agent](https://command.llamaventures.vc/external-agent)
79
- 上看到的网页版聊的是同一个 intake agent,结构化提取、12 维投资判断都是同一套,
80
- 只是入口换成了你的终端,或者你自己的 AI 助手。
44
+ 网页版聊的是同一个 intake agent,结构化提取、12 维投资判断都是同一套,
45
+ 只是入口换成了你的终端,或者你自己的 AI 助手。
81
46
 
82
47
  ```bash
83
- # 1. CLI(不需要 Llama 账号)
84
- npm i -g @llamaventures/cli
85
-
86
- # 2. 起一个 session
48
+ npm i -g @llamaventures/cli # 不需要 Llama 账号
87
49
  llama pitch start --name "张三" --email "you@yourstartup.com"
88
-
89
- # 3. 跟 agent 聊——单条消息
90
50
  llama pitch say "我们做 X,目标 Y,团队背景 Z..."
91
-
92
- # 4. 把 deck / 一页纸传上来
93
51
  llama pitch upload ./deck.pdf
94
-
95
- # 5. 或者直接进交互式 REPL
96
- llama pitch
52
+ llama pitch # 或直接进交互式 REPL
97
53
  ```
98
54
 
99
- **也可以让你自己的 AI agent 帮你 pitch(A2A)。** 把这个仓库的 MCP server
100
- 挂到 Claude / Cursor / Codex / OpenClaw 上(任何能跑 MCP 的 agent 都行),
101
- 然后告诉它"帮我 pitch Llama Ventures"。它会用 `pitch_start`、
102
- `pitch_send_message`、`pitch_upload_file`、`pitch_finalize` 这五个工具
103
- 跟我们的 intake agent 对话。配置见 [MCP server](#mcp-server)。
104
-
105
- **会被服务端约束的上限**(跟网页版一样):
106
- - 单 IP 每天 5 个 session
107
- - 单邮箱每天 3 个 session
108
- - 30 分钟无活动自动结束
109
- - 单 session 100 条消息 / 1M token
110
-
111
- **Pitch 完成后**:agent 会调 `finalize_intake` 写入结构化档案,自动给我们团队
112
- 排进 inbox。我们看到后会主动联系你——不需要你再追。
55
+ **也可以让你自己的 AI agent 帮你 pitch(A2A)**:把本包的 MCP server 挂到
56
+ Claude / Cursor / 任何 MCP 客户端上(配置见 [MCP server](#mcp-server)),
57
+ 告诉它"帮我 pitch Llama Ventures",它会用 `pitch_*` 工具跟我们的 intake
58
+ agent 对话。服务端有速率限制(单 IP / 单邮箱 / 单 session)。
59
+ Pitch 完成后档案自动进我们团队的 inbox,我们会主动联系你。
113
60
 
114
- > 想了解 Llama Ventures 在投什么?看 [llamaventures.vc](https://llamaventures.vc)
115
- > AI、Pre-seed 到 Series A、$3-5M 票,跨美中。**懂得用 AI 写代码、懂得让 AI
116
- > 帮你 pitch 的 founder——我们爱看。**
117
-
118
- ---
61
+ > Llama Ventures 投什么?看 [llamaventures.vc](https://llamaventures.vc)——
62
+ > AI、Pre-seed 到 Series A、$3-5M 票,跨美中。**懂得让 AI 帮你干活的
63
+ > founder,我们爱看。**
119
64
 
120
65
  ## 安装
121
66
 
122
67
  ```bash
123
- npm i -g @llamaventures/cli
124
- ```
125
-
126
- 需要 **Node 18+**(用了原生 `fetch` 与 ESM)。CI 矩阵覆盖 18 / 20 / 22。
127
-
128
- 验证:
129
-
130
- ```bash
68
+ npm i -g @llamaventures/cli # Node 18+;llama-mcp 也会一起装上 PATH
131
69
  llama --version
132
- llama auth status # 会跑一次 /api/me 验证
70
+ llama auth status # 会跑一次 /api/me 验证
133
71
  ```
134
72
 
135
- 同一次安装会把 `llama-mcp` 也放到 `PATH` 上——MCP server 不用单独装包。
136
-
137
- ---
138
-
139
73
  ## 认证
140
74
 
141
- 客户端**按下面这个顺序**寻找凭证,每次调用都查一遍:
142
-
143
- | # | 来源 | 发送的 header | 适合谁 |
144
- |---|------|--------------|--------|
145
- | 1 | `llama auth login`(OAuth 2.1,存 OS Keychain) | `Authorization: Bearer …` | **所有人的推荐方式。** 浏览器一次登录,token 自动刷新、重启不丢 |
146
- | 2 | `gcloud auth print-identity-token` | `Authorization: Bearer …` | 已经配好 gcloud 的工作机(零配置) |
147
- | 3 | `$LLAMA_TOKEN` 环境变量 | `X-Llama-Token` | CI runner、云上 sandbox agent |
148
- | 4 | `~/.llama/token`(mode `0600`) | `X-Llama-Token` | 本地常驻安装(长期 PAT) |
149
- | 5 | `~/.llama-command/config.json` | `X-Llama-Token` | CLI v0.1 老路径——首次读取自动迁移到 `~/.llama/token` |
150
-
151
- 如果 Bearer 和 X-Llama-Token 同时存在,两个一起发。服务器先验 Bearer,
152
- 失败后回退到 X-Llama-Token。任何时候都可以用 `llama auth status`
153
- 看当前认证身份。
154
-
155
- ### 浏览器登录 —— 推荐
156
-
157
- ```bash
158
- llama auth login # 打开浏览器 → Google 登录 → 授权 → 完成
159
- llama auth status # → activeMethod=oauth,显示身份与 scope
160
- llama deal search acme-ai # 直接用
161
- ```
162
-
163
- OAuth 2.1 PKCE 流程,token 存 OS Keychain(macOS Keychain / Windows
164
- Credential Manager / Linux Secret Service),自动刷新。
165
- `llama auth logout` 会在服务端吊销并清空本地存储。
75
+ 客户端按下面的顺序找凭证,每次调用都查一遍:
166
76
 
167
- ### gcloud —— 已配好 gcloud 的机器
77
+ | # | 来源 | 适合谁 |
78
+ |---|------|--------|
79
+ | 1 | `llama auth login`(OAuth,存 OS Keychain,自动刷新) | **所有人的推荐方式** |
80
+ | 2 | `gcloud auth print-identity-token` | 已配好 gcloud 的机器 |
81
+ | 3 | `$LLAMA_TOKEN` 环境变量 | CI、云上 sandbox agent |
82
+ | 4 | `~/.llama/token`(mode `0600`) | 长期 PAT |
83
+ | 5 | `~/.llama-command/config.json` | v0.1 老路径,自动迁移 |
168
84
 
169
85
  ```bash
170
- gcloud auth login # 一次性,选你的 @llamaventures.vc 账号
171
- llama auth status # 显示 role + email
172
- llama deal search acme-ai # 直接用
86
+ llama auth login # 浏览器登录;token 自动刷新、重启不丢
87
+ llama auth logout # 服务端吊销 + 清空本地
88
+ llama token set llc_… # /settings/tokens 签发的 PAT——落盘前先验证
89
+ llama auth status # 看当前身份和生效的认证方式
173
90
  ```
174
91
 
175
- ### 手动 token —— 适合无 gcloud / 稳定 CI
92
+ > **没账号?** 找你在 Llama Ventures 的对接人——任何邮箱都可以被签发 token。
176
93
 
177
- 1. 登录 https://command.llamaventures.vc。
178
- 2. 打开 `/settings/tokens` → **Mint Token**。
179
- 3. 保存 `llc_…` 值:
180
-
181
- ```bash
182
- llama token set llc_paste_token_here
183
- # → 写入 ~/.llama/token (mode 0600)
184
- # → 落盘前会先打一次 /api/me,无效的 token 不会落到磁盘上
185
- ```
186
-
187
- 或在 CI / 一次性环境里:
188
-
189
- ```bash
190
- export LLAMA_TOKEN=llc_paste_token_here
191
- ```
94
+ ## 接入你的 AI 系统
192
95
 
193
- > **没账号?** 邮件 [gavin@llamaventures.vc](mailto:gavin@llamaventures.vc)。
194
- > 任何邮箱(包括非 `@llamaventures.vc`)都能拿 token;system admin
195
- > `/settings/tokens` mint,token 第一次使用时自动建 user 行。
96
+ 这个包是 Llama Command 的**官方集成面**。自研 agent、LLM 应用都从这里接——
97
+ **不要直接调 HTTP API**:CLI/MCP 层负责认证链、稳定的 `Error[…]` 错误契约、
98
+ 以及 schema 变化时的前向兼容([SemVer](#稳定性));裸 API 没有这些承诺。
196
99
 
197
- ---
100
+ 1. **拿凭证**——`llama auth login`;无人值守系统用 PAT(`llama token set`
101
+ 或 `$LLAMA_TOKEN`)。
102
+ 2. **安装**——`npm i -g @llamaventures/cli`。
103
+ 3. **接线**——MCP 原生 agent 指向 `llama-mcp`([各客户端配置](#mcp-server));
104
+ 其它形态子进程调用 `llama …`。
105
+ 4. **让 agent 自我入职**——会话开始跑一次 `llama agent-onboard`(或 MCP 的
106
+ `agent_briefing` prompt),拿到服务端下发的 Agent Runtime Contract,
107
+ 与线上永远同步。
108
+ 5. **验证**——`llama auth status`,然后 `llama deal search "<随便什么>"`。
198
109
 
199
- ## 接入你的 AI 系统
110
+ ## CLI
200
111
 
201
- 这个包是 Llama Command 的**官方集成面**。要把自研 agent、编程助手或任何
202
- LLM 应用接进工作台,请从这里走——**不要直接调 HTTP API**。CLI/MCP 层
203
- 负责认证链、稳定的 `Error[…]` 错误契约、以及服务端 schema 变化时的
204
- 前向兼容([SemVer](#稳定性));裸 API 路由没有这些承诺,随时可能变。
205
-
206
- 五分钟接入路径:
207
-
208
- 1. **拿凭证** —— 团队账号直接 `llama auth login`;无人值守系统请管理员在
209
- [`/settings/tokens`](https://command.llamaventures.vc/settings/tokens)
210
- mint 一个 PAT,再用 `llama token set` 或 `$LLAMA_TOKEN` 配置。
211
- 2. **安装** —— `npm i -g @llamaventures/cli`(Node 18+)。
212
- 3. **接线:**
213
- - **MCP 原生 agent**(Claude、Cursor、任何 stdio 客户端)→ 指向
214
- `llama-mcp`:58 个类型化工具,无通用 passthrough。
215
- 各客户端配置见 [MCP server](#mcp-server)。
216
- - **其它形态** → 子进程调用 `llama …`。输出是 agent 友好的纯文本;
217
- 失败带稳定的 `Error[…]` 前缀。
218
- 4. **让 agent 自我入职** —— 会话开始时跑一次 `llama agent-onboard`
219
- (或取 MCP 的 `agent_briefing` prompt),拿到**服务端下发的 Agent
220
- Runtime Contract**——最新的工作流规则、署名规范、错误恢复——
221
- 与线上服务器永远同步,README 永远不会成为集成瓶颈。
222
- 5. **验证** —— `llama auth status` 回环确认身份;
223
- `llama deal search "<随便什么>"` 证明读权限通了。
224
-
225
- ---
226
-
227
- ## CLI 速览
228
-
229
- CLI 是 canonical 接口。底下的 HTTP API 也稳定,但 CLI 帮你处理了认证、错误格式、
230
- schema 前向兼容——**即使你写脚本,也优先用 CLI**。
112
+ CLI canonical 接口——认证、错误格式、schema 前向兼容都由它处理。
113
+ 写脚本也优先用 CLI
231
114
 
232
115
  ```bash
233
- # 认证 + token
234
- llama auth status
235
- llama token set <llc_...>
236
- llama token show
237
-
238
- # Pipeline——读
239
- llama deal search "acme ai"
240
- llama deal list --owner alex --status Diligence # 与 search 同一套过滤参数
116
+ llama deal search "acme ai" # deal(deal list 用同一套过滤参数)
241
117
  llama deal show <dealId>
242
- llama deal feed <dealId> # 该 deal 的全部贡献,最新在前
243
-
244
- # Pipeline——写
245
- llama deal create "Acme AI" --description "..." --source alex --source-direction Outbound --status Interested
118
+ llama deal feed <dealId> # 该 deal 的全部贡献,最新在前
119
+ llama activity new-deals --since 24h # 最近新建的 deal
120
+ llama activity updated-deals --since 7d # 按 deal 聚合的实质更新
121
+ llama deal create "Acme AI" --source alex --source-direction Outbound --status Interested
246
122
  llama deal update <dealId> status Diligence
247
- llama deal enrich <dealId> --dry-run
248
- llama deal enrich <dealId> --apply --executor server_agent
249
- llama deal enrich <dealId> --executor external_agent --prompt
250
- llama deal agent run <dealId> --message "collect founder evidence and update typed facts"
251
- llama deal delete <dealId> # 软删除(审计日志记录)
252
- llama deal restore <dealId>
253
-
254
- # Status 语义
255
- # Interested = 先记录/关注,还没有 outreach、intro、回复、deck submission 或 meeting。
256
- # Outreached = 只是联系/记录了,还没有回复或有效关系。
257
- # Sourced = 已有回复、intro、会议,或其它真实关系信号。
258
- # sourceDirection 是单独维度:
259
- # Inbound = 自然流入公司。
260
- # Outbound = 我们主动发现/建名单/触达。
261
-
262
- # Deal Brief——有序的、有类型的 block(text · link · embed · callout)
263
- llama brief blocks <dealId>
264
- llama brief add-text <dealId> --heading "..." --body "..."
265
- llama brief add-link <dealId> --url "..." --label "..."
266
- llama brief add-callout <dealId> --tone insight --heading "..." --body "..."
267
- llama brief edit <dealId> <blockId> [--heading ...] [--body ...]
268
- llama brief history <dealId> <blockId>
269
-
270
- # Ownership + 审批
271
- llama claim <dealId>
272
- llama nominate <dealId> --user <userId>
273
- llama approvals list
274
- llama approvals decide <approvalId> approved --note "..."
275
-
276
- # 时间线 + 帖子
277
- llama timeline <dealId>
278
- llama post <dealId> "消息内容" [--link url]
279
-
280
- # Agent runtime——Command 上的 Llama OS skill gateway
281
- llama agent bootstrap
282
- llama skills search "wiki delete tombstone"
283
- llama skills show llama-command
284
- llama explain https://command.llamaventures.vc/wiki/some-page
285
-
286
- # Wiki
287
- llama wiki search "<query>"
123
+ llama post <dealId> "备注内容"
124
+ llama brief add-text <dealId> --heading "..." --body "..."
125
+ llama wiki search "<查询词>"
288
126
  llama wiki save <slug> --title "..." --content "..."
289
-
290
- # Mentions 收件箱
291
127
  llama mentions
292
- llama mentions resolve <mentionId>
128
+ llama agent-onboard # 服务端下发的 agent 工作契约
293
129
  ```
294
130
 
295
- `llama --help` 看分组索引,`llama help all` 看完整命令参考——100+ 个命令,
296
- 覆盖 deals、briefs、facts、ownership、timeline、wiki、memo、deal HTML
297
- artifacts、mentions、skill corrections、evals、admin event feeds。
298
- 所有删除默认软删除——可恢复,且通过 `deal_events` 留下审计痕迹。
299
-
300
- ### 错误码(给 agent 用)
131
+ Status 语义——`Interested`:接触前先记录关注 · `Outreached`:已联系、
132
+ 尚无回应 · `Sourced`:已有真实关系信号。`sourceDirection` 是独立维度:
133
+ `Inbound` 流入,`Outbound` 我们主动。
301
134
 
302
- CLI stderr 里抛错时带稳定的、可解析的前缀:
135
+ `llama --help` 看分组索引,`llama help all` 看全部 100+ 命令。
136
+ 所有删除默认软删除、有审计记录。
303
137
 
304
- | 前缀 | 含义 | 怎么恢复 |
305
- |------|------|---------|
306
- | `Error[NO_AUTH]` | 一个凭证都没找到 | `gcloud auth login` **或** `llama token set` |
307
- | `Error[UNAUTHORIZED]` | 服务端拒绝了我们发出去的凭证 | token 可能被 revoke / 过期 / gcloud 选错账号 |
138
+ ### 错误码
308
139
 
309
- MCP server `isError: true` 内容里返回相同的前缀,agent 不用解析自然语言就能 pattern-match。
140
+ | 前缀 | 含义 | 恢复 |
141
+ |------|------|------|
142
+ | `Error[NO_AUTH]` | 没找到任何凭证 | `llama auth login` 或 `llama token set` |
143
+ | `Error[UNAUTHORIZED]` | 服务端拒绝了凭证 | token 被吊销 / 过期 / 账号不对 |
310
144
 
311
- ---
145
+ MCP server 在 `isError: true` 内容里返回相同前缀。认证请求会向 Command
146
+ 发送有界、脱敏的遥测;`llama eval good|bad --last` 把真实搜索变成评测反馈。
312
147
 
313
148
  ## MCP server
314
149
 
315
- 随包发布的 `llama-mcp` 是一个 **stdio Model Context Protocol** server,
316
- 暴露 **56 typed tools**——基本镜像 CLI 最常用的命令。每个 tool 都是
317
- 具名、scoped 的;**没有**通用的 API passthrough,这是有意设计的(公开
318
- package 里一个能被 prompt-injection 触达的逃生通道,正是我们要避开的形状)。
319
-
320
- 覆盖面按 agent 真正会用的工作流分组:auth 诊断;live agent bootstrap;
321
- 授权后的 Llama OS skill search/read;Command URL/object inspect;deal search/show/create/
322
- update/feed;服务端 deal agent run;deal enrichment harness;带 trust ladder 的事实;brief blocks
323
- 和版本历史;wiki 读写删恢复;timeline posts 和 mentions;skill corrections;
324
- refresh triggers;外部 pitch intake;memo show/regenerate/save/reset;
325
- 以及 deal-scoped HTML docs、versions、bundles、restore/reset。
326
-
327
- 精确的 live list 以 `tools/list` 为准:
150
+ `llama-mcp` stdio MCP server,59 个类型化工具镜像 CLI 最常用的命令面。
151
+ 每个工具具名、有边界——**故意不提供**通用 API passthrough。认证链与 CLI
152
+ 完全一致。精确工具清单以 `tools/list` 为准:
328
153
 
329
154
  ```bash
330
155
  printf '%s\n' \
@@ -334,32 +159,14 @@ printf '%s\n' \
334
159
  | llama-mcp
335
160
  ```
336
161
 
337
- 认证链跟 CLI 完全一样(gcloud → `$LLAMA_TOKEN` → `~/.llama/token`)。
338
- `agent_briefing` 这个 MCP **prompt** 会在认证后拉取 Command 服务端的
339
- Agent Runtime Contract——刚装上 server 的 agent 不用离开协议就能给自己
340
- onboard。包内 [`AGENT_BRIEFING.md`](AGENT_BRIEFING.md) 只是服务端 briefing
341
- 临时不可用时的 fallback。
342
-
343
- 要读当前 Llama OS skills,用 runtime tools:`agent_bootstrap`、
344
- `skills_search`、`skills_read`、`object_inspect`。公开 npm 包不打包私有
345
- skill 正文;Command 只按当前 token 的权限返回可见内容。
346
-
347
- ### 接到你的 agent 上
348
-
349
- <details open>
350
- <summary><strong>Claude Desktop</strong>(macOS 路径示例)</summary>
162
+ <details>
163
+ <summary><strong>Claude Desktop</strong></summary>
351
164
 
352
- `~/Library/Application Support/Claude/claude_desktop_config.json`:
165
+ `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS):
353
166
 
354
167
  ```json
355
- {
356
- "mcpServers": {
357
- "llama": { "command": "llama-mcp" }
358
- }
359
- }
168
+ { "mcpServers": { "llama": { "command": "llama-mcp" } } }
360
169
  ```
361
-
362
- 重启 Claude Desktop。工具会出现在 🛠️ 菜单里。
363
170
  </details>
364
171
 
365
172
  <details>
@@ -368,83 +175,44 @@ skill 正文;Command 只按当前 token 的权限返回可见内容。
368
175
  ```bash
369
176
  claude mcp add llama -- llama-mcp
370
177
  ```
371
-
372
- 或直接编辑 `~/.claude/claude.json`——JSON 结构和 Desktop 一样。
373
- </details>
374
-
375
- <details>
376
- <summary><strong>Cursor</strong></summary>
377
-
378
- `~/.cursor/mcp.json`:
379
-
380
- ```json
381
- {
382
- "mcpServers": {
383
- "llama": { "command": "llama-mcp" }
384
- }
385
- }
386
- ```
387
178
  </details>
388
179
 
389
180
  <details>
390
- <summary><strong>OpenCode / OpenClaw / Codex / 任何其它 stdio MCP 客户端</strong></summary>
181
+ <summary><strong>Cursor / 任何 stdio MCP 客户端</strong></summary>
391
182
 
392
- 大部分客户端都接受 `command` + `args`。先 `which llama-mcp` 找到可执行路径
393
- (一般是 `/usr/local/bin/llama-mcp` 或 `~/.npm-global/bin/llama-mcp`),
394
- 把客户端指过去就行。无需协议扩展、无需 transport flag。
183
+ 把客户端指向 `llama-mcp` 可执行文件(`which llama-mcp`),JSON 结构同上。
184
+ 无需协议扩展、无需 transport flag。
395
185
  </details>
396
186
 
397
- > 想让 agent 自己 onboard?跑 `llama agent-onboard`,或者从 MCP server
398
- > 拉 `agent_briefing` prompt——它会拿 Command 服务端的工作合约(CLI 状态、
399
- > attribution 语法、错误恢复、anti-pollution 规则)。
400
-
401
- ---
187
+ > agent?跑 `llama agent-onboard`(CLI)或拉 `agent_briefing` prompt
188
+ > (MCP),拿服务端的工作契约。包内
189
+ > [`AGENT_BRIEFING.md`](AGENT_BRIEFING.md) 只是离线兜底。
402
190
 
403
191
  ## 稳定性
404
192
 
405
- - **版本号:** 走 [SemVer](https://semver.org)。重命名或删除 CLI 命令 **major**。
406
- 新增 tool / command / flag → minor。修 bug → patch。CLI 自带 `--version`;
407
- MCP server `serverInfo` 里报告同一个值。
408
- - **向后兼容:** wire format(Bearer / X-Llama-Token)和 `Error[…]` 前缀
409
- 是公开契约,major 版本内不会变。
410
- - **服务端 schema 漂移:** 当 API 多了一个端点,下一个 minor 版本会带
411
- typed wrapper。这个包**故意不提供**裸 API passthrough——如果你需要的
412
- wrapper 还没落地,开 issue,不要直接调 HTTP API。
413
-
414
- 详见 [`CHANGELOG.md`](CHANGELOG.md)。
415
-
416
- ---
193
+ - **[SemVer](https://semver.org)**:改名/删命令 → major;新工具/命令/flag
194
+ → minor;修 bug → patch。
195
+ - **公开契约**:wire format(Bearer / X-Llama-Token)和 `Error[…]` 前缀
196
+ major 版本内不变。
197
+ - **故意没有裸 API passthrough**——需要的 wrapper 还没有就开 issue,
198
+ 不要直接调 HTTP API
417
199
 
418
200
  ## 安全
419
201
 
420
- - **`@llamaventures/cli` 通过 npm
421
- [Trusted Publishers](https://docs.npmjs.com/trusted-publishers) 发布**——
422
- 仓库里**没有** `NPM_TOKEN`,发不出来 token 也就泄漏不了。
423
- 每个版本带 `--provenance`(sigstore 签名),npm 会显示 **Provenance** 徽章,
424
- 可追溯到具体的 GitHub Action workflow commit
425
- - **依赖树最小化。** CLI 本身零依赖;MCP server 只依赖
426
- `@modelcontextprotocol/sdk`,pin 死版本。
427
- - **Branch protection** 锁 `main`;Dependabot、secret scanning、
428
- push protection 都开了。
429
- - **Token:** 本地存在 `~/.llama/token`,mode `0600`。服务端只存 sha256 hash——
430
- 明文只会在用户手里出现,永远不在数据库里。
431
-
432
- 报告漏洞:见 [`SECURITY.md`](SECURITY.md)。**不要**在公开 issue 里报安全 bug。
433
-
434
- ---
435
-
436
- ## 贡献
437
-
438
- 这是 Llama Ventures 内部维护的工具。团队成员的 PR 欢迎——
439
- 详见 [`CONTRIBUTING.md`](CONTRIBUTING.md)(本地开发环、发版流程、
440
- 项目约定:零依赖、CLI/MCP 同步、稳定的 `Error[…]` 前缀)。
202
+ - 通过 npm [Trusted Publishers](https://docs.npmjs.com/trusted-publishers)
203
+ (OIDC)+ `--provenance` 发布——不存在可泄漏的 npm token。
204
+ - CLI 零运行时依赖;MCP server 只依赖 `@modelcontextprotocol/sdk`,pin 死版本。
205
+ - main 分支保护、Dependabot、secret scanning、push protection 全开。
206
+ - Token:本地 `~/.llama/token` mode `0600`;服务端只存 sha256 hash
441
207
 
442
- 外部贡献:文档错漏、流程报告类的 issue 欢迎。如果你想做的事是
443
- "我想让 Llama Ventures 看到我的项目"——请走
444
- [向 Llama pitch](#给华人创业者-向-llama-pitch) 那条路。
208
+ 报告安全漏洞请走
209
+ [GitHub 私密通道](https://github.com/Llama-Ventures/llama-cli/security/advisories/new),
210
+ 不要发公开 issue。详见 [`SECURITY.md`](SECURITY.md)
445
211
 
446
- ---
212
+ ## 贡献与 License
447
213
 
448
- ## License
214
+ Llama Ventures 内部维护,团队 PR 欢迎(见 [`CONTRIBUTING.md`](CONTRIBUTING.md))。
215
+ 外部:文档错漏类 issue 欢迎;想让我们看到你的项目请走
216
+ [pitch 通道](#给华人创业者向-llama-pitch)。
449
217
 
450
218
  [MIT](LICENSE) — © 2026 Llama Ventures, Inc.
package/bin/llama-mcp.mjs CHANGED
@@ -349,6 +349,41 @@ server.registerTool(
349
349
  }
350
350
  );
351
351
 
352
+ server.registerTool(
353
+ "activity_query",
354
+ {
355
+ description:
356
+ "Read Command's curated agent activity projection. Use this before " +
357
+ "scanning raw timelines or event-bus payloads. Examples: new deals in " +
358
+ "the past 24h, deals with meaningful updates in the past 7d, or recent " +
359
+ "fact/memo/brief events. Returns source ids so callers can drill down.",
360
+ inputSchema: {
361
+ kind: z
362
+ .enum(["events", "new_deals", "updated_deals"])
363
+ .default("events")
364
+ .describe("events = raw curated rows; new_deals = deal.created; updated_deals = grouped meaningful deal updates"),
365
+ since: z.string().optional().describe("24h, 7d, 30d, or ISO timestamp; default 24h"),
366
+ limit: z.number().optional().describe("default 50, cap 100"),
367
+ dealId: z.string().optional().describe("optional single deal UUID"),
368
+ entity: z.enum(["deal", "wiki", "all"]).optional().describe("default deal"),
369
+ verb: z.string().optional().describe("comma-separated activity verbs, e.g. fact.added,brief.revised"),
370
+ cursor: z.number().optional().describe("pagination cursor from next_cursor"),
371
+ minSignificance: z.number().optional().describe("1..3; default 2, new_deals default 3"),
372
+ },
373
+ },
374
+ async ({ kind, since, limit, dealId, entity, verb, cursor, minSignificance } = {}) => {
375
+ const params = new URLSearchParams({ kind: kind || "events" });
376
+ if (since) params.set("since", since);
377
+ if (limit) params.set("limit", String(limit));
378
+ if (dealId) params.set("deal_id", dealId);
379
+ if (entity) params.set("entity", entity);
380
+ if (verb) params.set("verb", verb);
381
+ if (cursor) params.set("cursor", String(cursor));
382
+ if (minSignificance) params.set("min_sig", String(minSignificance));
383
+ return callApi("GET", `/api/agent/activity?${params}`);
384
+ }
385
+ );
386
+
352
387
  // ============================================================
353
388
  // Deals — read
354
389
  // ============================================================