@llamaventures/cli 1.18.0 → 1.18.1
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 +5 -4
- package/CHANGELOG.md +10 -1
- package/README.md +7 -1
- package/README.zh-CN.md +6 -1
- package/bin/llama-mcp.mjs +12 -5
- package/bin/llama.mjs +11 -11
- package/package.json +1 -1
package/AGENT_BRIEFING.md
CHANGED
|
@@ -45,6 +45,7 @@ Any time the user mentions a company name or founder name:
|
|
|
45
45
|
- Use `--status Outreached` when we only contacted/logged the company and have no response or effective relationship yet.
|
|
46
46
|
- Use `--status Sourced` only once there is a response, intro, meeting, or another real relationship signal.
|
|
47
47
|
- Also set `--source-direction Inbound` if the deal came into the firm; set `--source-direction Outbound` if Llama found/listed/reached out first.
|
|
48
|
+
- If assigning an owner at create time, use `--deal-owner` with an exact `/api/field-options` value, email, or user id. Do not guess from a first name.
|
|
48
49
|
4. If user gives you new facts (status / valuation / founder note) → `llama deal update` immediately, tell the user **one line** afterward.
|
|
49
50
|
|
|
50
51
|
Don't:
|
|
@@ -62,7 +63,7 @@ A teammate says "I just met them and heard…" or pastes a chunk of notes. Your
|
|
|
62
63
|
|
|
63
64
|
1. **Find the deal** — `llama deal search "<name>"` (Pipeline First). New name → offer to create it.
|
|
64
65
|
2. **Split what they gave you into two kinds** — this is the whole data model:
|
|
65
|
-
- **Verifiable claims → facts.** `llama deal fact add <dealId> --category <cat> --claim "…" --source "<where it came from>"
|
|
66
|
+
- **Verifiable claims → facts.** `llama deal fact add <dealId> --category <cat> --claim "…" --source "<where it came from>" --source-url <url>`. A claim someone *relayed* ("their ARR is $3M", "raised from a16z") is a fact at **unverified** trust — it's hearsay until checked. Pass `--attested` ONLY if you actually verified it against a source yourself. In raw API terms, the fact text field is `claim` (`value` is only a compatibility alias), `source` is the human-readable provenance label, and `sourceUrl` is the canonical URL.
|
|
66
67
|
- **Their judgment / impression → a note.** `llama post <dealId> "…"`. "Founder seemed evasive", "I'd lean pass", "worth a second meeting" — opinion, not fact. Attributed, never "verified".
|
|
67
68
|
- A pasted blob → pull the verifiable claims out as facts, capture their take as a note.
|
|
68
69
|
3. **Read it back before you claim it's saved.** A tool call returning `{ok:true}` is NOT proof the content is where the user will look for it. After filing, run `llama deal feed <dealId>` and confirm your fact/note actually appears, THEN tell the user in plain language what you recorded and where. Never say "记好了 / saved" from the return value alone — the #1 failure is an agent writing to the wrong surface (e.g. the brief, which is the Memo and does NOT appear in the feed) and reporting success anyway. If it's not in the feed, you routed it wrong — fix it.
|
|
@@ -129,7 +130,7 @@ These three look similar but land in different surfaces. Don't infer from the co
|
|
|
129
130
|
|
|
130
131
|
| You want to… | Command | Lands in |
|
|
131
132
|
|---|---|---|
|
|
132
|
-
| Record a **sourced, verifiable fact** | `llama deal fact add <dealId> --category <cat> --claim "…" --source <url>` | Facts → deal **Feed** (FACT card) + citable in the **Memo** |
|
|
133
|
+
| Record a **sourced, verifiable fact** | `llama deal fact add <dealId> --category <cat> --claim "…" --source "deck p3" --source-url <url>` | Facts → deal **Feed** (FACT card) + citable in the **Memo** |
|
|
133
134
|
| Leave a **comment / opinion / question / reaction** for the team | `llama post <dealId> "…"` (`@name` to notify) | Posts → deal **Feed** (POST card); `@mention` fires email + UI badge |
|
|
134
135
|
| Write **narrative that belongs in the IC memo** | `llama brief add-text <dealId> --heading "…" --body "…"` | Brief blocks → **Memo tab only — NOT in the Feed** |
|
|
135
136
|
|
|
@@ -209,8 +210,8 @@ llama deal list [--owner ...] [--status ...]
|
|
|
209
210
|
|
|
210
211
|
# Pipeline — write
|
|
211
212
|
llama deal create "Company" --description "..." --source-direction Outbound --status Interested
|
|
212
|
-
llama deal create "Company" --description "..." --source-direction Outbound --status Outreached
|
|
213
|
-
llama deal create "Company" --description "..." --source-direction Inbound --status Sourced
|
|
213
|
+
llama deal create "Company" --description "..." --source-direction Outbound --status Outreached --deal-owner "owner@llamaventures.vc"
|
|
214
|
+
llama deal create "Company" --description "..." --source-direction Inbound --status Sourced --deal-owner "Exact Name"
|
|
214
215
|
llama deal update <dealId> <field> <value>
|
|
215
216
|
# writable: status theirStage stage notes dealOwner source sourceDirection description website
|
|
216
217
|
# location founders proposedAmount roundSize valuation sector subsector
|
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.1] - 2026-07-09
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Clarified the Command facts write contract across CLI, MCP, and agent docs:
|
|
13
|
+
`claim` is canonical, `value` remains a compatibility alias, `sourceUrl`
|
|
14
|
+
round-trips as provenance, and categories are free text. `deal create` now
|
|
15
|
+
forwards `--deal-owner` using name, email, or user id.
|
|
16
|
+
|
|
9
17
|
## [1.18.0] - 2026-07-06
|
|
10
18
|
|
|
11
19
|
### Added
|
|
@@ -500,7 +508,8 @@ assistant-drafted (🤖) and enforces the AI trust ceiling.
|
|
|
500
508
|
|
|
501
509
|
---
|
|
502
510
|
|
|
503
|
-
[Unreleased]: https://github.com/Llama-Ventures/llama-cli/compare/v1.18.
|
|
511
|
+
[Unreleased]: https://github.com/Llama-Ventures/llama-cli/compare/v1.18.1...HEAD
|
|
512
|
+
[1.18.1]: https://github.com/Llama-Ventures/llama-cli/compare/v1.18.0...v1.18.1
|
|
504
513
|
[1.18.0]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.3...v1.18.0
|
|
505
514
|
[1.17.3]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.2...v1.17.3
|
|
506
515
|
[1.17.2]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.1...v1.17.2
|
package/README.md
CHANGED
|
@@ -96,7 +96,8 @@ llama deal show <dealId>
|
|
|
96
96
|
llama deal feed <dealId> # every contribution, newest first
|
|
97
97
|
llama activity new-deals --since 24h # recent deal creations
|
|
98
98
|
llama activity updated-deals --since 7d # meaningful updates grouped by deal
|
|
99
|
-
llama deal create "Acme AI" --source alex --source-direction Outbound --status Interested
|
|
99
|
+
llama deal create "Acme AI" --source alex --deal-owner owner@llamaventures.vc --source-direction Outbound --status Interested
|
|
100
|
+
llama deal fact add <dealId> --category funding --claim "Raised a seed round" --source "deck p3" --source-url https://...
|
|
100
101
|
llama deal update <dealId> status Diligence
|
|
101
102
|
llama post <dealId> "note body"
|
|
102
103
|
llama brief add-text <dealId> --heading "..." --body "..."
|
|
@@ -111,6 +112,11 @@ Status vocabulary — `Interested`: tracked before any contact ·
|
|
|
111
112
|
signal exists. `sourceDirection` is separate: `Inbound` came to the firm,
|
|
112
113
|
`Outbound` we reached out first.
|
|
113
114
|
|
|
115
|
+
Facts use `claim` for the fact text. `source` is a readable provenance label
|
|
116
|
+
and `sourceUrl` is the canonical evidence URL; both round-trip from the API.
|
|
117
|
+
For deal owners, use an exact `/api/field-options` `dealOwner` value, a user
|
|
118
|
+
email, or a numeric user id.
|
|
119
|
+
|
|
114
120
|
Run `llama --help` for the group index, `llama help all` for the full
|
|
115
121
|
reference (100+ commands). Deletes are soft and audit-logged everywhere.
|
|
116
122
|
|
package/README.zh-CN.md
CHANGED
|
@@ -118,7 +118,8 @@ llama deal show <dealId>
|
|
|
118
118
|
llama deal feed <dealId> # 该 deal 的全部贡献,最新在前
|
|
119
119
|
llama activity new-deals --since 24h # 最近新建的 deal
|
|
120
120
|
llama activity updated-deals --since 7d # 按 deal 聚合的实质更新
|
|
121
|
-
llama deal create "Acme AI" --source alex --source-direction Outbound --status Interested
|
|
121
|
+
llama deal create "Acme AI" --source alex --deal-owner owner@llamaventures.vc --source-direction Outbound --status Interested
|
|
122
|
+
llama deal fact add <dealId> --category funding --claim "Raised a seed round" --source "deck p3" --source-url https://...
|
|
122
123
|
llama deal update <dealId> status Diligence
|
|
123
124
|
llama post <dealId> "备注内容"
|
|
124
125
|
llama brief add-text <dealId> --heading "..." --body "..."
|
|
@@ -132,6 +133,10 @@ Status 语义——`Interested`:接触前先记录关注 · `Outreached`:已
|
|
|
132
133
|
尚无回应 · `Sourced`:已有真实关系信号。`sourceDirection` 是独立维度:
|
|
133
134
|
`Inbound` 流入,`Outbound` 我们主动。
|
|
134
135
|
|
|
136
|
+
Facts 的正文用 `claim`。`source` 是人可读来源标签,`sourceUrl` 是 canonical
|
|
137
|
+
证据 URL;两者都会从 API 回显。`dealOwner` 请用 `/api/field-options`
|
|
138
|
+
里的精确 `dealOwner` 值、用户邮箱,或数字 user id。
|
|
139
|
+
|
|
135
140
|
`llama --help` 看分组索引,`llama help all` 看全部 100+ 命令。
|
|
136
141
|
所有删除默认软删除、有审计记录。
|
|
137
142
|
|
package/bin/llama-mcp.mjs
CHANGED
|
@@ -471,7 +471,11 @@ server.registerTool(
|
|
|
471
471
|
.describe(
|
|
472
472
|
"Our Stage workflow position. Use Interested when we want to record/track before contact; use Outreached when we contacted/logged them and have no response/effective relationship; use Sourced only once there is a response, intro, meeting, or other real relationship signal."
|
|
473
473
|
),
|
|
474
|
-
source: z.string().optional().describe("free-form sourced-by;
|
|
474
|
+
source: z.string().optional().describe("free-form sourced-by; exact team-member names also attach source_user_id"),
|
|
475
|
+
dealOwner: z
|
|
476
|
+
.string()
|
|
477
|
+
.optional()
|
|
478
|
+
.describe("owner override. Use an exact /api/field-options dealOwner value, a user email, or numeric user id."),
|
|
475
479
|
sourceDirection: z
|
|
476
480
|
.string()
|
|
477
481
|
.optional()
|
|
@@ -510,7 +514,7 @@ server.registerTool(
|
|
|
510
514
|
{
|
|
511
515
|
description:
|
|
512
516
|
"List a deal's recorded facts (the research substrate). Each fact carries a " +
|
|
513
|
-
"category, a claim, a source, a confidence, and a trust rung (unverified → " +
|
|
517
|
+
"category, a claim, a source/sourceUrl, a confidence, and a trust rung (unverified → " +
|
|
514
518
|
"agent-verified → human-vouched → endorsed) plus who/what recorded it.",
|
|
515
519
|
inputSchema: {
|
|
516
520
|
dealId: z.string(),
|
|
@@ -530,13 +534,15 @@ server.registerTool(
|
|
|
530
534
|
"something unconfirmed (stored 'unverified', which is the honest default). You CANNOT " +
|
|
531
535
|
"mark a fact as human-confirmed — only a person can raise it to 'human-vouched'. " +
|
|
532
536
|
"`confidence` is how certain the claim is; `attested` is whether YOU take responsibility " +
|
|
533
|
-
"for having checked it.
|
|
534
|
-
"
|
|
537
|
+
"for having checked it. `source` is a human-readable provenance label; `sourceUrl` is a " +
|
|
538
|
+
"canonical URL that round-trips as sourceUrl/source_url. Category is free text; common " +
|
|
539
|
+
"values include founders | financials | product | market | team | company_basics | risk | fundraise | milestone | meta.",
|
|
535
540
|
inputSchema: {
|
|
536
541
|
dealId: z.string(),
|
|
537
542
|
category: z.string(),
|
|
538
543
|
claim: z.string(),
|
|
539
544
|
source: z.string().optional().describe("where you found this (URL, 'deck p3', 'LinkedIn')"),
|
|
545
|
+
sourceUrl: z.string().optional().describe("canonical URL for the evidence, if separate from source"),
|
|
540
546
|
confidence: z.enum(["high", "medium", "low"]).optional(),
|
|
541
547
|
attested: z
|
|
542
548
|
.boolean()
|
|
@@ -544,11 +550,12 @@ server.registerTool(
|
|
|
544
550
|
.describe("true → stored 'agent-verified'; false/omitted → 'unverified'. Answer honestly."),
|
|
545
551
|
},
|
|
546
552
|
},
|
|
547
|
-
async ({ dealId, category, claim, source, confidence, attested }) =>
|
|
553
|
+
async ({ dealId, category, claim, source, sourceUrl, confidence, attested }) =>
|
|
548
554
|
callApi("POST", `/api/deals/${encodeURIComponent(dealId)}/facts`, {
|
|
549
555
|
category,
|
|
550
556
|
claim,
|
|
551
557
|
source: source ?? "",
|
|
558
|
+
...(sourceUrl ? { sourceUrl } : {}),
|
|
552
559
|
confidence: confidence ?? "medium",
|
|
553
560
|
attested: attested === true,
|
|
554
561
|
})
|
package/bin/llama.mjs
CHANGED
|
@@ -424,7 +424,7 @@ auto-detects \`gcloud auth print-identity-token\` and uses Bearer auth.
|
|
|
424
424
|
Manually-set \`llc_\` tokens are used as a fallback.
|
|
425
425
|
|
|
426
426
|
Deals:
|
|
427
|
-
llama deal create "Company" --source <name> --source-direction Inbound|Outbound --description "..." --status Interested|Outreached|Sourced --website https://...
|
|
427
|
+
llama deal create "Company" --source <name> --deal-owner <name|email|userId> --source-direction Inbound|Outbound --description "..." --status Interested|Outreached|Sourced --website https://...
|
|
428
428
|
llama deal show <dealId>
|
|
429
429
|
llama deal feed <dealId> # every contribution (facts + notes), human-typed or assistant-drafted, newest first
|
|
430
430
|
llama deal update <dealId> <field> <value>
|
|
@@ -534,8 +534,8 @@ Deal soft-delete / restore / trash list:
|
|
|
534
534
|
llama deal trash # list deleted deals
|
|
535
535
|
|
|
536
536
|
Deal facts (AI-extracted or human-asserted, with verification):
|
|
537
|
-
llama deal fact list <dealId>
|
|
538
|
-
llama deal fact add <dealId> --category <cat> --claim "<text>" [--source <url>] [--confidence high|medium|low] [--attested]
|
|
537
|
+
llama deal fact list <dealId>
|
|
538
|
+
llama deal fact add <dealId> --category <cat> --claim "<text>" [--source "..."] [--source-url <url>] [--confidence high|medium|low] [--attested]
|
|
539
539
|
llama deal fact verify <dealId> <factId> --status confirmed|disputed [--corrected-value "..."]
|
|
540
540
|
|
|
541
541
|
Skill corrections (persona-owner pushback — read by persona-watcher):
|
|
@@ -1440,10 +1440,11 @@ async function main() {
|
|
|
1440
1440
|
if (area === "deal" && action === "create") {
|
|
1441
1441
|
const { flags, positional } = parseFlags(rest);
|
|
1442
1442
|
const companyName = positional.join(" ").trim();
|
|
1443
|
-
if (!companyName) throw new Error("Usage: llama deal create \"Company\" [--source Name]");
|
|
1443
|
+
if (!companyName) throw new Error("Usage: llama deal create \"Company\" [--source Name] [--deal-owner name|email|userId]");
|
|
1444
1444
|
const body = {
|
|
1445
1445
|
companyName,
|
|
1446
1446
|
source: flags.source,
|
|
1447
|
+
dealOwner: flags.dealOwner || flags["deal-owner"],
|
|
1447
1448
|
sourceDirection: flags.sourceDirection || flags["source-direction"],
|
|
1448
1449
|
description: flags.description,
|
|
1449
1450
|
website: flags.website,
|
|
@@ -1735,10 +1736,6 @@ async function main() {
|
|
|
1735
1736
|
}
|
|
1736
1737
|
|
|
1737
1738
|
// ----- Deal facts (AI-extracted or human-asserted, with verification) -----
|
|
1738
|
-
// NOTE: server routes currently use session-only auth() — token-only
|
|
1739
|
-
// callers will get 401 until /api/deals/:id/facts and
|
|
1740
|
-
// /api/deals/:id/facts/:factId switch to authenticate(). CLI surface
|
|
1741
|
-
// is forward-compatible.
|
|
1742
1739
|
if (area === "deal" && action === "fact") {
|
|
1743
1740
|
const sub = rest[0];
|
|
1744
1741
|
const dealId = rest[1];
|
|
@@ -1754,10 +1751,12 @@ async function main() {
|
|
|
1754
1751
|
}
|
|
1755
1752
|
|
|
1756
1753
|
if (sub === "add") {
|
|
1757
|
-
|
|
1754
|
+
const claim = flags.claim ?? flags.value;
|
|
1755
|
+
const sourceUrl = flags["source-url"] ?? flags.sourceUrl;
|
|
1756
|
+
if (!flags.category || !claim) {
|
|
1758
1757
|
throw new Error(
|
|
1759
1758
|
`Usage: llama deal fact add <dealId> --category <cat> --claim "<text>" ` +
|
|
1760
|
-
`[--source <url>] [--confidence high|medium|low] [--attested]`
|
|
1759
|
+
`[--source "..."] [--source-url <url>] [--confidence high|medium|low] [--attested]`
|
|
1761
1760
|
);
|
|
1762
1761
|
}
|
|
1763
1762
|
// --attested: the caller takes responsibility that this is accurate
|
|
@@ -1765,8 +1764,9 @@ async function main() {
|
|
|
1765
1764
|
// vouched; without it, it stays unverified. Declare honestly.
|
|
1766
1765
|
print(await request("POST", `/api/deals/${encodeURIComponent(dealId)}/facts`, {
|
|
1767
1766
|
category: String(flags.category),
|
|
1768
|
-
claim: String(
|
|
1767
|
+
claim: String(claim),
|
|
1769
1768
|
source: flags.source ? String(flags.source) : "",
|
|
1769
|
+
...(sourceUrl ? { sourceUrl: String(sourceUrl) } : {}),
|
|
1770
1770
|
confidence: flags.confidence ? String(flags.confidence) : "medium",
|
|
1771
1771
|
attested: flags.attested === true,
|
|
1772
1772
|
}));
|