Skip to content

Commit ace8a46

Browse files
bloveclaude
andauthored
docs(gtm): Grade A trust announcement — blog, campaign, and assets (#733)
* docs(gtm): Grade A trust announcement — blog post + campaign + assets Add the "Graded A for Trust" launch: the HVTrust Grade A blog post, a full multi-channel distribution spec, ready-to-review channel drafts, and the rendered social cards. - blog: apps/website/content/blog/2026-06-24-threadplane-earns-grade-a-hvtrust.mdx (Brian voice; 82.8/100, #7 of 75, the only Angular framework; honest about adoption being the weakest signal; no unprovable "first" claims) - spec: campaign plan — KPIs (Δ stars + npm downloads), channel sequencing, UTM table, guardrails, risks - drafts: X thread, LinkedIn, Dev.to (canonical), manual-channel paste sheet (HN / r/Angular / Discord / newsletter) - assets: render-grade-a.ts + grade-a-{x,og}-card.png via marketing/assets Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(assets): correct card wordmark to threadplane.ai brand.wordmark was a stale 'cacheplane.ai' — it had drifted from its documented source of truth (apps/website/src/app/opengraph-image.tsx), which uses threadplane.ai, as does the rest of the site. Re-sync and re-render the Grade A campaign cards. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(readme): add HVTrust badge to the trust-signal row Links to the public HVTrust listing (Grade A, 82.8/100). Sits alongside the existing OpenSSF Scorecard + Best Practices badges. Repo homepage is already threadplane.ai, so no website-field change is needed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent fb0c49f commit ace8a46

11 files changed

Lines changed: 378 additions & 1 deletion

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
<a href="https://www.bestpractices.dev/projects/13316">
2727
<img alt="OpenSSF Best Practices" src="https://www.bestpractices.dev/projects/13316/badge" />
2828
</a>
29+
<a href="https://hvtracker.net/agents/threadplane">
30+
<img alt="HVTrust" src="https://hvtracker.net/badge/threadplane.svg" />
31+
</a>
2932
</p>
3033

3134
---
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
---
2+
title: "Threadplane Earns a Grade A for Trust"
3+
description: "An independent tracker scored Threadplane's supply-chain trust at 82.8/100 — a Grade A, #7 of 75 agent frameworks, and the only Angular agent framework on the board. Here's the work behind the grade, and why it matters for agent frameworks specifically."
4+
date: 2026-06-24
5+
tags: [announcement, security, supply-chain, open-source, trust]
6+
author: brian
7+
featured: true
8+
---
9+
10+
Every agent framework asks you to trust it. I'd rather you measure it.
11+
12+
[HVTracker](https://hvtracker.net/agents/threadplane/) is an independent trust tracker for AI agent software. It just scored Threadplane at **82.8/100 — a Grade A**.
13+
14+
In the Agent Frameworks category, that's #7 of 75. And it's the #1 — really the *only* — Angular agent framework on the list.
15+
16+
I didn't fill out a questionnaire or pay for a badge. HVTracker scores from public signals only: the GitHub API, the npm and PyPI registries, and the OpenSSF Scorecard CLI, refreshed daily. The grade is what their analysis says about us, not what we say about ourselves.
17+
18+
For me, that's the whole point. A trust claim you make about yourself isn't worth much.
19+
20+
## Who else is on the list?
21+
22+
This is the part I keep coming back to. Let's look at the company we're keeping.
23+
24+
| Rank | Framework | Trust | Stars |
25+
| --- | --- | --- | --- |
26+
| 1 | Haystack | 95.5 | 25.7k |
27+
| 2 | Vercel AI SDK | 95.1 | 25.1k |
28+
| 3 | LangGraph | 93.0 | 35.6k |
29+
| 6 | OpenAI Agents SDK | 85.8 | 27.4k |
30+
| **7** | **Threadplane** | **82.8** | **99** |
31+
| 8 | CrewAI | 80.6 | 54.3k |
32+
| 11 | LangChain | 76.6 | 140.1k |
33+
34+
Look at the stars column.
35+
36+
Threadplane ranks *above* CrewAI, AutoGen, and LangChain on trust — with 99 GitHub stars against their tens of thousands.
37+
38+
That isn't a glitch. HVTrust is weighted toward supply-chain integrity and provenance, not popularity. A package can be downloaded millions of times a week and still have thin security signals. A smaller one can have every signal in place. The grade rewards the second kind, which is the whole reason a tracker like this exists.
39+
40+
And I'll be just as honest about where we're weak. Our lowest signal is adoption. With 99 stars, that's the part of the profile we have the most room to grow, and it's the one place the big projects above us are genuinely ahead. I'm not going to dress that up.
41+
42+
## What does a Grade A actually mean?
43+
44+
HVTracker is careful about its own claims, and I want to be too. Right on the listing, they print this:
45+
46+
> Not a safety endorsement. HVTracker describes what public signals show, not whether a project is safe for your use case. Run your own security review before adopting in production.
47+
48+
That caveat is exactly why the grade is worth anything.
49+
50+
It's not a sticker that says "trust us." It's a measurement across five dimensions:
51+
52+
- **Safety / Integrity** — OSSF Scorecard, provenance, signatures.
53+
- **Identity / Provenance** — a verifiable link between the published package and the source that built it. This is our *strongest* signal.
54+
- **Transparency** — a declared, OSI-approved license and public checks.
55+
- **Maintenance** — commit freshness and cadence.
56+
- **Adoption** — stars and downloads.
57+
58+
Grade A just means the score lands in the top band (A is 80 and up). It doesn't mean anyone audited your threat model for you. It means the public evidence is strong, and you can go verify every piece of it yourself.
59+
60+
## Why this matters more for agent frameworks
61+
62+
Most software you install does one job in one place. An agent framework is different.
63+
64+
It runs models. It executes tool calls. It reaches for credentials and acts on behalf of your users, often with real authority over real systems.
65+
66+
So the blast radius of a compromised dependency underneath an agent is bigger than almost anything else in your stack. That's what makes "is this thing's supply chain in order" a real question and not a checkbox.
67+
68+
It's also the gap the tooling exists to close. The OpenSSF Scorecard — the engine behind a big part of HVTrust — checks the parts of the chain attackers actually go after: source, build, dependencies, signing, and maintenance. As [OpenSSF puts it](https://openssf.org/projects/scorecard/), a lot of open source is run by small teams with limited resources, which is exactly the soft target supply-chain attacks look for. And a [Sonatype analysis](https://github.com/ossf/scorecard) found a project's Scorecard score was one of the best available predictors of whether it carried known vulnerabilities.
69+
70+
From my experience, that's the question worth asking before you install anything an agent will run: how much of your app are you handing to code you didn't write, and can you prove where it came from?
71+
72+
## The work behind the grade
73+
74+
The grade is the output. Here's the input — the boring, unglamorous hygiene that earns it.
75+
76+
- **OSSF Scorecard 7.7/10** — branch protection, signed releases, dependency review, code review, run continuously.
77+
- **MIT licensed** — a declared, OSI-approved, permissive license. No ambiguity about what you can do with it.
78+
- **82% of recent commits cryptographically signed** — so you can confirm code came from who the commit claims.
79+
- **Verifiable provenance** — a traceable line from the npm package back to the build that produced it.
80+
- **Active maintenance** — the repo was pushed to within the last day when it was scored.
81+
82+
None of these are exotic. Doing all of them, and keeping them done, is what moves a project from "probably fine" to "you can check."
83+
84+
## Open by default
85+
86+
Threadplane is MIT-licensed open source. The framework — the LangGraph and AG-UI adapters, the generative-UI runtime, the protocol types — is free, and it stays free.
87+
88+
One library, `@threadplane/chat`, carries a commercial license. That's the single piece that funds keeping everything else open and maintained.
89+
90+
For me, that's the honest version of sustainable open source. The trust signals above aren't marketing paint on a closed product. They're what I hold the whole codebase to, and almost all of that codebase is MIT and sitting right there for you to read.
91+
92+
<Callout type="info" title="Don't take my word for it">
93+
The full breakdown — every dimension, the Scorecard checks, and the raw JSON — is public on the [Threadplane HVTracker listing](https://hvtracker.net/agents/threadplane/). Take their word, then go verify it.
94+
</Callout>
95+
96+
## Conclusion
97+
98+
A trust grade is a starting point, not a finish line. The real way to evaluate a framework is to build something with it.
99+
100+
So if you're curious: read the [listing](https://hvtracker.net/agents/threadplane/) and the [Agent Frameworks leaderboard](https://hvtracker.net/categories/agent-frameworks/), browse the [source on GitHub](https://github.com/cacheplane/angular-agent-framework) (all of it — it's almost all open), and ship your first streaming agent UI with the [quickstart](/docs/chat/getting-started/quickstart).
101+
102+
We'll keep the signals fresh, keep the framework open, and keep working on the one number I'm not proud of yet. The rest, you can verify. 💚
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Campaign Spec — "Graded A for Trust"
2+
3+
> GTM distribution plan for the HVTrust Grade A announcement. Source content: the blog post
4+
> `apps/website/content/blog/2026-06-24-threadplane-earns-grade-a-hvtrust.mdx`.
5+
> Voice/messaging source of truth: `docs/gtm/voice.md`, `docs/gtm/messaging.md`, `docs/gtm/icp.md`.
6+
> Tracking taxonomy: `docs/gtm/taxonomy.md`.
7+
8+
## 1. Objective & KPIs
9+
10+
Primary objective: **awareness that converts to adoption.** The blog post itself names adoption as
11+
our weakest trust signal, so the campaign turns that candor into the ask.
12+
13+
| KPI | Baseline (Day 0) | Window | Source |
14+
| --- | --- | --- | --- |
15+
| GitHub stars | 99 | 14 days | github.com/cacheplane/angular-agent-framework |
16+
| npm weekly downloads (`@threadplane/*`) | snapshot Day 0 | 14 days | npmjs + `ngaf:postinstall` (PostHog) |
17+
| Referral sessions → blog + listing | 0 | 14 days | PostHog `$pageview` UTMs, `marketing:external_link_click` |
18+
| Earned mentions | 0 | 14 days | manual (HN, Reddit, reposts, newsletters) |
19+
20+
**Measurement method:** snapshot stars + npm weekly downloads on Day 0 and Day 14. Every outbound
21+
link carries `utm_campaign=grade-a-trust`. Honest caveat: stars/downloads are noisy and attribution
22+
is fuzzy — read directionally.
23+
24+
## 2. Core narrative & guardrails
25+
26+
**The shareable paradox:** Threadplane ranks #7 of 75 agent frameworks on trust — above CrewAI,
27+
AutoGen, and LangChain — with 99 stars against their tens of thousands. Independently graded, and we
28+
name our own weak spot. This hook is credible (third-party) *and* earns the adoption ask.
29+
30+
**Guardrails:**
31+
- **Do not claim "first OSSF product" or "first MIT-licensed framework."** Unprovable superlative;
32+
violates messaging.md's Avoid list and voice.md's no-hype rule. Use "OSSF-first / security-first
33+
posture." Decision (2026-06-24): the "first" framing is dropped entirely.
34+
- Keep HVTracker's "not a safety endorsement" caveat visible on long-form channels — it is what makes
35+
the grade credible.
36+
- Brian's voice on every post (voice.md): one thought per line, contractions, opinions flagged, no
37+
"blazing/game-changing/revolutionary."
38+
- No logo walls, no progressive lead forms (messaging.md).
39+
40+
## 3. Assets (build once, reuse)
41+
42+
- [x] Blog post — `2026-06-24-threadplane-earns-grade-a-hvtrust.mdx`.
43+
- [ ] HVTrust badge in repo README — `[![HVTrust](https://hvtracker.net/badge/threadplane.svg)](https://hvtracker.net/agents/threadplane)`.
44+
- [ ] Repo "Website" field → `threadplane.ai` (backlink fix; HVTracker scrapes repo metadata).
45+
- [ ] One branded social/OG card — leaderboard + "Grade A · 82.8" — via `marketing/assets`. Reused on X, LinkedIn, blog OG.
46+
- [x] Canonical UTM link set (§6).
47+
48+
## 4. Channel plan & sequencing (~2-week drip)
49+
50+
| Day | Channel | Track | Angle | Mechanism |
51+
| --- | --- | --- | --- | --- |
52+
| 0 | Blog publish | both | Full story | Merge + deploy |
53+
| 0 | X thread (Brian) | developer | The 99-stars-vs-trust paradox + card | Adapter (DRY_RUN → post) |
54+
| 0 | LinkedIn (Brian) | enterprise | "Code you didn't write" supply-chain framing | Manual paste |
55+
| 2 | Dev.to | developer | Full post, `canonicalUrl` → blog | Adapter (DRY_RUN → post) |
56+
| 2 | Discord | developer | Casual honest breakdown | Manual |
57+
| 4 | Hacker News (Brian) | developer | Technical supply-chain framing, NOT "look at our grade" | Manual |
58+
| 4 | r/Angular + LangChain/AG-UI communities | developer | Value-first lesson, grade as evidence | Manual |
59+
| 6–7 | Newsletter pitches (Angular Weekly, etc.) | developer | Short pitch + link | Manual |
60+
| 7 | X follow-up (Brian) | developer | Amplify earned discussion / re-drive adoption ask | Adapter |
61+
| 8–14 | Monitor, reply, repost top performer ||||
62+
63+
## 5. Per-channel angle briefs
64+
65+
- **X thread:** hook = paradox + card; middle = what HVTrust measures / why agent frameworks are
66+
higher-stakes / the honest weak signal; close = links + "help us close the gap."
67+
- **LinkedIn:** architect voice; the verifiable credentials (MIT, signed commits, provenance); one CTA
68+
to the listing.
69+
- **HN:** neutral technical title; Brian posts and stays in comments; honest caveat up front.
70+
- **Reddit:** lead with the supply-chain lesson, grade as proof; respect r/angular self-promo norms.
71+
- **Discord/newsletter:** short, warm, linked.
72+
73+
## 6. Tracking — canonical UTM link set
74+
75+
Blog slug: `threadplane-earns-grade-a-hvtrust`. Base: `https://threadplane.ai/blog/threadplane-earns-grade-a-hvtrust`.
76+
77+
| Channel | utm_source | utm_medium | Link |
78+
| --- | --- | --- | --- |
79+
| X | `x` | `social` | `…?utm_source=x&utm_medium=social&utm_campaign=grade-a-trust` |
80+
| LinkedIn | `linkedin` | `social` | `…?utm_source=linkedin&utm_medium=social&utm_campaign=grade-a-trust` |
81+
| Dev.to | `devto` | `referral` | canonicalUrl = bare blog URL (no UTM on canonical) |
82+
| Hacker News | `hackernews` | `community` | `…?utm_source=hackernews&utm_medium=community&utm_campaign=grade-a-trust` |
83+
| Reddit | `reddit` | `community` | `…?utm_source=reddit&utm_medium=community&utm_campaign=grade-a-trust` |
84+
| Discord | `discord` | `community` | `…?utm_source=discord&utm_medium=community&utm_campaign=grade-a-trust` |
85+
| Newsletter | `newsletter` | `referral` | `…?utm_source=newsletter&utm_medium=referral&utm_campaign=grade-a-trust` |
86+
87+
External targets (no PostHog UTM benefit, link plainly): listing
88+
`https://hvtracker.net/agents/threadplane/`, leaderboard
89+
`https://hvtracker.net/categories/agent-frameworks/`.
90+
91+
## 7. Execution mechanics
92+
93+
- Each social draft → `marketing/cowork/inbox/2026-06-24-grade-a-<channel>.json`, matching the `Draft`
94+
interface (`marketing/channels/src/types.ts`). Human-readable `_meta` keys carry campaign context.
95+
- **X + Dev.to:** `DRY_RUN=1` smoke first → review → real post via adapter.
96+
- **LinkedIn / Reddit / HN / Discord / newsletter:** adapters not built → ready-to-paste copy, posted
97+
by hand.
98+
- Brian approves every draft before anything ships.
99+
100+
## 8. Risks
101+
102+
- HN promo backlash → technical framing, real human, honest caveat.
103+
- Reddit self-promo rules → value-first, not headline-first.
104+
- "First" overclaim → cut (see §2).
105+
- Vanity-metric trap → stars aren't revenue; chosen because the goal is adoption and the post owns it.
106+
Enterprise leads are a watched secondary, not the goal.
107+
108+
## 9. Out of scope / follow-ups
109+
110+
- Building the LinkedIn + Reddit channel adapters (manual is fine for one campaign).
111+
- Wiring the `/marketing` Cowork dispatch loop (still a stub).
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// SPDX-License-Identifier: MIT
2+
//
3+
// Renders the "Graded A for Trust" campaign cards (x-card + og-card) to PNG.
4+
// Usage: npx tsx marketing/assets/scripts/render-grade-a.ts
5+
// Output: marketing/cowork/inbox/assets/grade-a-{x,og}-card.png
6+
7+
import { mkdir, writeFile } from 'node:fs/promises';
8+
import { fileURLToPath } from 'node:url';
9+
import { dirname, join } from 'node:path';
10+
import { renderCard } from '../src/index';
11+
import type { CardInput } from '../src/types';
12+
13+
const here = dirname(fileURLToPath(import.meta.url));
14+
const outDir = join(here, '..', '..', 'cowork', 'inbox', 'assets');
15+
16+
const shared = {
17+
eyebrow: 'Independently graded',
18+
title: 'Grade A for trust.',
19+
subtitle: '82.8/100 · #7 of 75 agent frameworks · the only Angular one.',
20+
} as const;
21+
22+
const cards: { name: string; input: CardInput }[] = [
23+
{ name: 'grade-a-x-card.png', input: { template: 'x-card', ...shared } },
24+
{ name: 'grade-a-og-card.png', input: { template: 'og-card', ...shared } },
25+
];
26+
27+
async function main() {
28+
await mkdir(outDir, { recursive: true });
29+
for (const { name, input } of cards) {
30+
const { png, width, height } = await renderCard(input);
31+
const path = join(outDir, name);
32+
await writeFile(path, png);
33+
console.log(`rendered ${name} (${width}x${height}, ${png.length} bytes) -> ${path}`);
34+
}
35+
}
36+
37+
main().catch((err) => {
38+
console.error(err);
39+
process.exit(1);
40+
});

marketing/assets/src/brand.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export const brand = {
99
inkSoft: '#555770',
1010
accent: '#004090',
1111
angular: '#DD0031',
12-
wordmark: 'cacheplane.ai',
12+
wordmark: 'threadplane.ai',
1313
serif: 'EB Garamond, Georgia, serif',
1414
sans: 'Inter, sans-serif',
1515
defaultEyebrow: 'Agent UI for Angular · MIT',
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"_meta": {
3+
"campaign": "grade-a-trust",
4+
"channel_note": "Day 0. Brian's account. LinkedIn adapter is NOT built — post by hand. Enterprise/architect track. Attach the branded social card. No hashwall.",
5+
"card_alt": "HVTrust leaderboard card: Threadplane ranked #7 of 75 agent frameworks, trust score 82.8 out of 100, Grade A, shown above CrewAI and LangChain.",
6+
"review_status": "awaiting-brian"
7+
},
8+
"draft": {
9+
"channel": "linkedin",
10+
"text": "How much of your app are you willing to hand to code you didn't write?\n\nFor an agent framework, that isn't rhetorical. It runs models, calls tools, reaches for credentials, and acts on behalf of your users. The supply chain underneath it matters more than almost anything else you install.\n\nSo we had Threadplane independently evaluated. HVTracker graded it A — 82.8/100, #7 of 75 agent frameworks, and the only Angular one on the board. Ranked above CrewAI, AutoGen, and LangChain on trust.\n\nWhat earned it is unglamorous and, more to the point, verifiable: OSSF Scorecard 7.7/10, an MIT license, 82% of recent commits cryptographically signed, traceable npm provenance, active maintenance. Things you can check rather than take on faith.\n\nIt isn't a safety endorsement, and HVTracker says so plainly — it measures public signals, not whether a project fits your use case. That honesty is exactly why the grade is worth anything.\n\nIf you're evaluating an agent framework for an Angular app in a regulated or design-system-heavy environment, the full breakdown is public. Take their word, then verify it.\n\nListing → https://hvtracker.net/agents/threadplane/\nThe story → https://threadplane.ai/blog/threadplane-earns-grade-a-hvtrust?utm_source=linkedin&utm_medium=social&utm_campaign=grade-a-trust",
11+
"link": {
12+
"url": "https://threadplane.ai/blog/threadplane-earns-grade-a-hvtrust?utm_source=linkedin&utm_medium=social&utm_campaign=grade-a-trust",
13+
"previewTitle": "Threadplane Earns a Grade A for Trust"
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)