MasteryMade · Intelligence PRD
Autonomous daily brief generation on Forge. No human trigger. Gate 1 content flows in, gets filtered against current goals/rocks/sprints, produces execution directives — not summaries. Every item has a falsifiable win/loss condition. Knowledge graph updates silently.
| Aspect | Current (manual) | Target (autonomous) |
|---|---|---|
| Trigger | Jason opens Claude.ai | Forge cron 5:30 AM CT |
| Sources | Web search in session | Pre-ingested Gate 1 from universal ingest |
| Filtering | Manual relevance | Automated against 321 threads + sprint goals |
| Output | Published via NowPage MCP in Claude.ai | Auto-published, email/Telegram notification |
| Knowledge graph | Manual (sometimes skipped) | Auto-extracted SPO triplets, auto-published |
| Brief number | Manually tracked | Auto-incremented from registry |
| Session seeds | Copy/paste text | Structured JSON seeds Forge/Claude.ai can ingest |
Forge VPS (daily cron: 5:30 AM CT)
├── 1. GATHER — Query content table: gate=1, ingested_at > last_brief
├── 2. FILTER — Score each piece against current sprint context
│ ├── > 0.7 → Track A or B candidate
│ ├── 0.4-0.7 → Seed candidate
│ └── < 0.4 → Suppress
├── 3. GENERATE — Claude API: Track A/B/C with v3.0 rules
├── 4. EXTRACT — Track C: SPO triplets → knowledge-registry update
├── 5. PUBLISH — HTML brief → jasondmacdonald.com/brief-[N]
└── 6. SEED — Structured prompts per item → Supabase for retrieval
CREATE TABLE sprint_context (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
context_type TEXT NOT NULL CHECK (context_type IN (
'rock','sprint','goal','thread_active','thread_seed','thread_foundation','domino'
)),
title TEXT NOT NULL,
description TEXT,
status TEXT DEFAULT 'active',
priority INT,
keywords TEXT[],
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
Per content piece: keyword overlap (30%) + embedding similarity against context description (70%) × priority multiplier (domino: 2.0, active thread: 1.5, sprint: 1.3, rock: 1.2, seed: 0.8). Return highest-scoring context match.
Zero Fluff — every sentence actionable or cut. Max 3 items per track. Falsifiable win/loss conditions required ("Learn about X" invalid, "Ship X to Y by Z" valid). Track C entities extracted but NEVER shown in brief body.
{
"brief_number": N, "date": "YYYY-MM-DD",
"track_a": { "title":"Inbound Engine", "items":[
{ "headline":"", "source":"url", "why_it_matters":"",
"directive":"exact action", "win_condition":"falsifiable",
"seed":{ "type":"writing|code|strategy", "prompt":"..." } }
]},
"track_b": { "title":"Build Engine", "items":[same] },
"track_c_entities": [
{ "subject":"","predicate":"","object":"","source_brief":N,"stacks_on":"node_id|null" }
]
}
After every brief: fetch current registry JSON from jasondmacdonald.com/knowledge-registry → verify HC access token (JMD-FORGE-2026) → for each Track C entity: if stacks_on existing node → update node (increment mentions, add connection); else → add new node → publish updated registry via NowPage replace. Never skip this step.
{
"seed_id": "UUID", "brief_number": 52, "track": "A",
"seed_type": "writing", "title": "Write LinkedIn post about [topic]",
"context": "Source + expert positioning + thread alignment",
"directive": "Write 200-word post using jason-writer voice...",
"win_condition": "Published, engagement > 10 in 24h",
"pre_loaded_skills": ["jason-writer","linkedin-growth-engine"],
"estimated_time": "15 minutes"
}
Stored in Supabase. When Jason starts a session: "run seed from this morning's brief" → system loads full context.
Telegram on publish: brief number, Track A/B headlines with directives, link to full brief, seed count. Optional weekly email digest: all briefs, knowledge graph growth, completed vs missed win conditions.
MASTERYMADE — PRD 6 of 12
Dominia Facta. Build what compounds.