@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 +3 -1
- package/CHANGELOG.md +12 -1
- package/README.md +4 -2
- package/README.zh-CN.md +4 -2
- package/bin/llama-mcp.mjs +35 -0
- package/bin/llama.mjs +79 -0
- package/package.json +1 -1
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` (
|
|
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.
|
|
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 & 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
|
|
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
|
|
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>——带
|
|
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,
|
|
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);
|