@llamaventures/cli 1.17.3 → 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/AGENT_BRIEFING.md CHANGED
@@ -29,6 +29,7 @@ This npm package is public, but Llama OS skills are private. Do not assume the s
29
29
  - Use `llama agent-onboard` or MCP `agent_briefing` for the server-owned Agent Runtime Contract. The npm-bundled text is fallback only.
30
30
  - Use `llama skills search "<task>"` or MCP `skills_search` before choosing a Llama workflow.
31
31
  - Use `llama skills show <slug>` or MCP `skills_read` only for the relevant skill.
32
+ - Use `llama activity new-deals|updated-deals` or MCP `activity_query` before scanning raw deal timelines for recent portfolio movement.
32
33
  - Use `llama explain <command-url-or-object>` or MCP `object_inspect` for 404s, deleted wiki pages, notifier links, deal URLs, and unknown Command objects before telling the user "the system is broken."
33
34
 
34
35
  The boundary matters: public CLI/MCP discovers skills, but authenticated Command decides which skill content the token may read.
@@ -296,7 +297,7 @@ Run `llama --help` for the full surface (~40 commands).
296
297
 
297
298
  ## MCP-native agents
298
299
 
299
- If you support [MCP](https://modelcontextprotocol.io), **prefer the MCP server over parsing CLI output.** The same package ships `llama-mcp` (56 typed tools, identical auth chain).
300
+ If you support [MCP](https://modelcontextprotocol.io), **prefer the MCP server over parsing CLI output.** The same package ships `llama-mcp` (59 typed tools, identical auth chain).
300
301
 
301
302
  Add to your MCP client config (Claude Desktop / Claude Code / Cursor / OpenClaw / Codex / etc.):
302
303
 
@@ -309,6 +310,7 @@ Tools available:
309
310
  - `auth_status` — verify creds + identity (call first if anything 401s)
310
311
  - `agent_bootstrap` — fetch the live Command + Llama OS runtime manifest
311
312
  - `skills_search` / `skills_read` — discover and read authenticated runtime skills
313
+ - `activity_query` — query new deals and meaningful updates without scanning raw timelines
312
314
  - `object_inspect` — explain Command URLs, 404s, deleted objects, and lifecycle trail
313
315
  - `deal_search` / `deal_show` / `deal_create` / `deal_update`
314
316
  - `brief_blocks` / `brief_add_text` / `brief_add_link` / `brief_add_callout`
package/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ this project adheres to [Semantic Versioning](https://semver.org).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.18.0] - 2026-07-06
10
+
11
+ ### Added
12
+ - `llama activity new-deals|updated-deals|events` plus MCP `activity_query`
13
+ for agent-friendly reads over Command's curated activity projection. Agents
14
+ can ask for recent deal creations or meaningful deal updates without scanning
15
+ raw timelines or event-bus payloads.
16
+
9
17
  ## [1.17.3] - 2026-07-01
10
18
 
11
19
  ### Changed
@@ -492,7 +500,10 @@ assistant-drafted (🤖) and enforces the AI trust ceiling.
492
500
 
493
501
  ---
494
502
 
495
- [Unreleased]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.1...HEAD
503
+ [Unreleased]: https://github.com/Llama-Ventures/llama-cli/compare/v1.18.0...HEAD
504
+ [1.18.0]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.3...v1.18.0
505
+ [1.17.3]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.2...v1.17.3
506
+ [1.17.2]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.1...v1.17.2
496
507
  [1.17.1]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.0...v1.17.1
497
508
  [1.17.0]: https://github.com/Llama-Ventures/llama-cli/compare/v1.16.0...v1.17.0
498
509
  [1.16.0]: https://github.com/Llama-Ventures/llama-cli/compare/v1.15.1...v1.16.0
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  <p align="center">
8
8
  <strong>The Llama Ventures CLI &amp; MCP server.</strong><br/>
9
9
  One package, two binaries: <code>llama</code> — the CLI for humans and scripts —
10
- and <code>llama-mcp</code> — a stdio MCP server with 58 typed tools for any
10
+ and <code>llama-mcp</code> — a stdio MCP server with 59 typed tools for any
11
11
  MCP-native agent. Both share the same auth chain, HTTP client, and error
12
12
  format, and talk to <a href="https://command.llamaventures.vc">command.llamaventures.vc</a>.
13
13
  </p>
@@ -94,6 +94,8 @@ schema forward-compatibility. Prefer it even from scripts.
94
94
  llama deal search "acme ai" # find deals (deal list takes the same filters)
95
95
  llama deal show <dealId>
96
96
  llama deal feed <dealId> # every contribution, newest first
97
+ llama activity new-deals --since 24h # recent deal creations
98
+ llama activity updated-deals --since 7d # meaningful updates grouped by deal
97
99
  llama deal create "Acme AI" --source alex --source-direction Outbound --status Interested
98
100
  llama deal update <dealId> status Diligence
99
101
  llama post <dealId> "note body"
@@ -125,7 +127,7 @@ Authenticated calls send bounded, content-redacted telemetry to Command;
125
127
 
126
128
  ## MCP server
127
129
 
128
- `llama-mcp` is a stdio Model Context Protocol server exposing 58 typed tools
130
+ `llama-mcp` is a stdio Model Context Protocol server exposing 59 typed tools
129
131
  that mirror the most-used CLI surface. Every tool is named and scoped — there
130
132
  is deliberately no generic API passthrough. Auth is identical to the CLI's
131
133
  chain. For the exact live list, pipe `tools/list` through it:
package/README.zh-CN.md CHANGED
@@ -7,7 +7,7 @@
7
7
  <p align="center">
8
8
  <strong>Llama Ventures 的 CLI 与 MCP server。</strong><br/>
9
9
  一个包、两个可执行文件:<code>llama</code>——给人和脚本用的 CLI;
10
- <code>llama-mcp</code>——带 58 个类型化工具的 stdio MCP server,任何
10
+ <code>llama-mcp</code>——带 59 个类型化工具的 stdio MCP server,任何
11
11
  MCP 原生 agent 都能接。两者共享同一认证链、同一 HTTP 客户端、同一错误格式,
12
12
  连接 <a href="https://command.llamaventures.vc">command.llamaventures.vc</a>。
13
13
  </p>
@@ -116,6 +116,8 @@ CLI 是 canonical 接口——认证、错误格式、schema 前向兼容都由
116
116
  llama deal search "acme ai" # 找 deal(deal list 用同一套过滤参数)
117
117
  llama deal show <dealId>
118
118
  llama deal feed <dealId> # 该 deal 的全部贡献,最新在前
119
+ llama activity new-deals --since 24h # 最近新建的 deal
120
+ llama activity updated-deals --since 7d # 按 deal 聚合的实质更新
119
121
  llama deal create "Acme AI" --source alex --source-direction Outbound --status Interested
120
122
  llama deal update <dealId> status Diligence
121
123
  llama post <dealId> "备注内容"
@@ -145,7 +147,7 @@ MCP server 在 `isError: true` 内容里返回相同前缀。认证请求会向
145
147
 
146
148
  ## MCP server
147
149
 
148
- `llama-mcp` 是 stdio MCP server,58 个类型化工具镜像 CLI 最常用的命令面。
150
+ `llama-mcp` 是 stdio MCP server,59 个类型化工具镜像 CLI 最常用的命令面。
149
151
  每个工具具名、有边界——**故意不提供**通用 API passthrough。认证链与 CLI
150
152
  完全一致。精确工具清单以 `tools/list` 为准:
151
153
 
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
  // ============================================================
package/bin/llama.mjs CHANGED
@@ -291,6 +291,38 @@ async function searchDeals(q, flags) {
291
291
  return result;
292
292
  }
293
293
 
294
+ function buildActivityQuery(kind, flags) {
295
+ const params = new URLSearchParams({ kind });
296
+ const mappings = [
297
+ ["since", "since"],
298
+ ["limit", "limit"],
299
+ ["cursor", "cursor"],
300
+ ["before-id", "before_id"],
301
+ ["before_id", "before_id"],
302
+ ["deal", "deal"],
303
+ ["deal-id", "deal_id"],
304
+ ["deal_id", "deal_id"],
305
+ ["entity", "entity"],
306
+ ["min-sig", "min_sig"],
307
+ ["min_sig", "min_sig"],
308
+ ["min-significance", "min_sig"],
309
+ ];
310
+ for (const [flag, param] of mappings) {
311
+ if (flags[flag] !== undefined && flags[flag] !== true) {
312
+ params.set(param, String(flags[flag]));
313
+ }
314
+ }
315
+ for (const verb of splitCsvFlag(flags.verb) ?? []) {
316
+ params.append("verb", verb);
317
+ }
318
+ return params;
319
+ }
320
+
321
+ async function fetchActivity(kind, flags) {
322
+ const params = buildActivityQuery(kind, flags);
323
+ return request("GET", `/api/agent/activity?${params}`);
324
+ }
325
+
294
326
  function splitCsvFlag(value) {
295
327
  if (!value || value === true) return undefined;
296
328
  return String(value)
@@ -367,6 +399,8 @@ Agent onboarding (run once on first install):
367
399
  llama agent bootstrap # fetch live Command + Llama OS skill manifest
368
400
  llama skills search "pipeline update" # discover relevant runtime skills
369
401
  llama skills show llama-pipeline # read a skill from Command
402
+ llama activity new-deals --since 24h # recent deal creations for agents
403
+ llama activity updated-deals --since 7d # meaningful deal updates, grouped
370
404
  llama explain <url-or-object> # explain Command URL/object status + lifecycle
371
405
  llama eval good|bad --last # mark the latest CLI/MCP result for eval
372
406
  llama eval add "<query>" --expect wiki:<slug>|deal:<uuid>
@@ -418,6 +452,13 @@ Deals:
418
452
  [--limit 200] [--offset 0]
419
453
  llama deal list [--owner ...] [--status ...] [...same flags as search]
420
454
 
455
+ Agent activity (read-only, cheap read model over append-only activity):
456
+ llama activity new-deals [--since 24h|7d|<ISO>] [--limit 50]
457
+ llama activity updated-deals [--since 24h|7d|<ISO>] [--limit 50] [--deal <uuid>]
458
+ llama activity events [--since 24h] [--verb fact.added,brief.revised] [--entity deal|wiki|all]
459
+ Use this before scanning raw timelines or event-bus payloads. It returns
460
+ JSON from Command's curated activity_events projection: source ids included.
461
+
421
462
  Collaborators (besides owner — attribution candidates, no approval):
422
463
  llama deal collab list <dealId>
423
464
  llama deal collab add <dealId> --user <userId|email>
@@ -614,6 +655,8 @@ Common:
614
655
  llama deal show <dealId> full deal record
615
656
  llama deal feed <dealId> every contribution (facts + notes), newest first
616
657
  llama post <dealId> "..." add a note to a deal
658
+ llama activity new-deals --since 24h recent deal creations
659
+ llama activity updated-deals --since 7d meaningful deal updates
617
660
  llama agent-onboard print the AI-agent workflow contract
618
661
  llama agent bootstrap live Llama OS skill manifest from Command
619
662
  llama skills search "<query>" discover which skill to read
@@ -622,6 +665,7 @@ Common:
622
665
 
623
666
  Command groups — run \`llama help <group>\` for that group's commands:
624
667
  deal create · show · feed · update · enrich · search · collaborators · links · delete
668
+ activity new-deals · updated-deals · events for agent read models
625
669
  brief brief blocks: list · add · edit · history · refresh
626
670
  facts deal facts + skill corrections (the sourced, trust-rated layer)
627
671
  timeline timeline · posts · mentions
@@ -644,6 +688,7 @@ the CLI auto-detects it — no token needed (\`llc_\` tokens are a fallback).`;
644
688
  // Area → which top-level sections of HELP_FULL belong to it.
645
689
  const HELP_AREA_MATCH = {
646
690
  deal: [/^Deals/, /^Collaborators/, /^Soft-delete/, /^Deal links/, /^Deal soft-delete/],
691
+ activity: [/^Agent activity/],
647
692
  brief: [/^Brief blocks/, /^Brief \/ persona/],
648
693
  facts: [/^Deal facts/, /^Skill corrections/],
649
694
  timeline: [/^Timeline/, /^Mentions/],
@@ -1043,6 +1088,40 @@ async function main() {
1043
1088
  return;
1044
1089
  }
1045
1090
 
1091
+ if (area === "activity") {
1092
+ const sub = action || "events";
1093
+ const normalized = sub.replace(/-/g, "_");
1094
+ const kind =
1095
+ normalized === "new" || normalized === "new_deal" || normalized === "new_deals"
1096
+ ? "new_deals"
1097
+ : normalized === "updated" || normalized === "updates" || normalized === "updated_deal" || normalized === "updated_deals"
1098
+ ? "updated_deals"
1099
+ : normalized === "event" || normalized === "events" || normalized === "feed" || normalized === "all"
1100
+ ? "events"
1101
+ : null;
1102
+ if (!kind) {
1103
+ throw new Error("Usage: llama activity new-deals|updated-deals|events [--since 24h] [--limit 50]");
1104
+ }
1105
+ const { flags } = parseFlags(rest, [
1106
+ "json",
1107
+ "since",
1108
+ "limit",
1109
+ "cursor",
1110
+ "before-id",
1111
+ "before_id",
1112
+ "deal",
1113
+ "deal-id",
1114
+ "deal_id",
1115
+ "entity",
1116
+ "verb",
1117
+ "min-sig",
1118
+ "min_sig",
1119
+ "min-significance",
1120
+ ]);
1121
+ print(await fetchActivity(kind, flags));
1122
+ return;
1123
+ }
1124
+
1046
1125
  if (area === "skills" || (area === "agent" && action === "skills")) {
1047
1126
  const sub = area === "skills" ? action : rest[0];
1048
1127
  const args = area === "skills" ? rest : rest.slice(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llamaventures/cli",
3
- "version": "1.17.3",
3
+ "version": "1.18.0",
4
4
  "description": "CLI + MCP server for the Llama Ventures investment workbench (command.llamaventures.vc).",
5
5
  "type": "module",
6
6
  "scripts": {