feat: growth swarm v0 (Analyst + honesty rails) - #69
Open
sebbsssss wants to merge 5 commits into
Open
Conversation
Adds an autonomous growth swarm under apps/workers/src/growth/ that dogfoods Clude's memory system. Five roles coordinated via growth-namespaced memories: - Analyst (implemented): computes 7d KPIs from memories table, excludes benchmark sources + bot owner wallet, writes honest snapshots to growth_kpi_snapshots, posts weekly Telegram report. Every activation number is real and attributable. - CEO, Researcher, Drafter, Publisher: scaffolded as placeholders with clear v0.2 prompts. Researcher seeds known MCP / AI-agent directories (mcp.so, Smithery, Glama, PulseMCP, Agent.ai, etc.). Shared infra: - budget.ts: weekly USD ceiling with per-model cost estimation; guardBudget() gates every role tick. - memory.ts: role-namespaced storeRoleMemory / recallRoleMemories (source: mcp:growth-<role>, tags: growth + role:<name>). - gate.ts: queueForApproval writes to growth_gate_inbox, notifies Telegram, founder approves in /growth/inbox (server-side UI TBD). - role.ts: base Role class with safeTick + budget guard + interval scheduling (30s bootstrap delay). Wired into jobs/index.ts as a single worker guarded by GROWTH_SWARM_ENABLED=true. Disabled by default. Per approved office-hours design doc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds growth_gate_inbox (founder approval queue), growth_kpi_snapshots (real-activation KPIs), growth_spend (weekly token budget enforcement), and growth_channels (entity graph of distribution channels). Per approved office-hours design doc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds GET /api/growth/snapshots (rate-limited, no auth) and a public /growth page on the dashboard app. Surfaces the Analyst's weekly honest snapshots: unique wallets, store calls, week-over-week returning, attribution confidence, per-snapshot notes. The /growth route bypasses the app's auth gate in App.tsx so anyone (investors, judges, holders) can verify the real numbers without logging in. If a number looks bad here, it means the number is bad — that's the honesty rail. Per approved office-hours design doc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Applies the new design system (off-white paper, Funnel Sans + Inconsolata + Nothing You Could Do, brand blue accent) across the user-facing web pages. Scope: Wave 1 (primary): - index.html: WebGL particle field hero, frosted-paper overlay, editorial typography, 4 sections (install / architecture / science / final CTA) - install.html: 4-step walkthrough with terminal blocks - docs.html: sticky TOC, scroll-synced active state, memory tables Wave 2 (secondary): - register.html: three-mode picker with spacious grid, no vertical borders, hairline-underlined codecommands, animated link gaps - setup.html: simplified interactive wizard, IDE picker, live config generator with copy button, minimal JS state - pitch.html: brand palette swap (ink bg, off-white text, brand blue accent at #7f97ff for dark-bg readability) and brand fonts. Slide layout logic preserved Style enforcement: - Zero emdashes anywhere (persistent user preference). Title separators use middle dot `·`, in-sentence pauses use commas or periods - All CLI commands updated to `npx @clude/sdk <cmd>` (post-rename) - Nav + footer links consistent across all 6 pages - Real meta / OG tags on index.html Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Completes the brand design pass across the user-facing web pages. Full rewrites (off-white paper, Funnel Sans display, Inconsolata mono, Nothing You Could Do handwriting accent): - compare.html: live compaction demo now /01 section (paste/upload/sample, then watch 20-step compaction side-by-side). Removed the honest-competitor section per feedback. LoCoMo moved from dedicated bar chart to a single row in the feature matrix as a credibility anchor. - portability.html: platform-by-platform export/import guide (ChatGPT, Claude, Gemini, IDEs, universal markdown). Numbered step lists. - privacy.html: four-layer privacy stack with badges, live /api/venice-stats fetcher preserved, poly-model router table, comparison matrix. - journal.html: entry cards with memory-type tags, sticky nav, provenance overlay preserves all D3/fetch logic. Surface restyles (fonts + palette swap + emdash strip, structure preserved): - graph.html: D3 force-directed knowledge graph, header nav matches other pages, entity-type palette shifted toward brand while staying distinct. - infographic.html: 1200x675 social share card. Fonts/palette aligned. - benchmark-report.html: dark brand palette same as pitch.html (deep ink bg for a paper-document feel), brand blue lifted to #7f97ff for dark-bg contrast. - demo.html: MaaS console (store/recall with curl preview) keeps all interactivity, just reskinned. - brain.html: Three.js / D3 visualisation page, minimal surface pass. - explore.html: memory explorer, surface pass only. Export markdown + canvas text label also migrated off JetBrains Mono. - campaign.html: 10-day campaign page, surface pass. User-facing emdashes removed. Internal CSS/JS comments still reference emdashes; harmless. Redirect: - benchmark.html: meta-refresh + JS redirect to /compare.html#demo, since the compaction demo and internal 8-suite now live on compare.html. Style enforcement across all files: - Zero user-facing emdashes (persistent user preference). Only remaining instances are inside CSS comments, JS comments, and a regex parsing legacy data in journal.html. - Title separators use middle dot `·` everywhere. - All npm/CLI commands use `npx @clude/sdk <cmd>` post-rename. Content flagged for Sebastien: - infographic.html still shows `75% LoCoMo` but compare.html shows 100%. Numbers should reconcile; this is a content decision, not design. - campaign.html is a specific 10-day rewards campaign. If archived, consider redirecting like benchmark.html. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Autonomous growth swarm that dogfoods Clude memory. Per approved office-hours design doc.
growth_gate_inbox,growth_kpi_snapshots,growth_spend,growth_channels). Already applied to live Supabase.apps/workers/src/growth/with 5 roles coordinated via role-namespaced Clude memories (mcp:growth-<role>). Analyst is fully functional: readsmemoriestable, excludes bot owner wallet + benchmark sources, computes unique-wallet installs + store calls + week-over-week returning, persists snapshots, posts weekly Telegram. CEO / Researcher / Drafter / Publisher are scaffolded placeholders for v0.2 (LLM calls deferred; Researcher seeds 10 known AI-agent-native directories on first run).GROWTH_WEEKLY_USD_BUDGET(default $50) enforced viaguardBudget()on every role tick; per-model USD estimation baked in./growthpage (bypasses auth) reads fromGET /api/growth/snapshots. If a number looks bad, the number is bad. That's the point.GROWTH_SWARM_ENABLED=truerequired.Reviewer concerns (flagged in design doc)
attribution_confidencehardcoded"low"until this lands/growth/inboxfounder-auth'd approval UI (v0.2)recall_callsmetric (needs usage logs table or access_count deltas)Test plan
GROWTH_SWARM_ENABLED=trueon workers service post-merge-to-staginggrowth-analyst: Analyst ticklog fires ~30s after worker boot/growth— page loads, table empty (first snapshot lands within ~1 min of first tick)🤖 Generated with Claude Code