research_plan_brief | Walk the D1-D8 planner with default answers → an assembled ResearchBrief (chat key). | prompt, store_path |
positioning_from_report | Derive grounded positioning from a stored report — one LLM call, synchronous (chat key). | report_id, store_path |
distribution_strategy | Route a stored report’s named entities + signals into test→focus channel experiments (D2) — one classify call + deterministic routing, synchronous; every routing_signal traces to a real corpus entity (chat key). | report_id, store_path |
distribution_geo | The GEO / LLM-citability stream (D6) — participation targets (real threads from the report’s permalinks), citability probes (queries to test you’re cited), and answer-first answer briefs (grounded; evidence resolves against report.evidence, ungrounded dropped). Drafting only (chat key). | report_id, store_path |
distribution_engage | Distribution’s participation/execution arm (D9) — the one channel metalworks can OPERATE, not just plan. Takes one D6 participation target (a real thread: its permalink + why + suggested_angle, e.g. from distribution_geo) and drafts a DISCLOSED, founder-voiced reply for that exact thread, reusing the Reddit reply machinery + the single voice system’s no-upvote / native-first / no-AI-tell invariants, then runs the deterministic honesty gate (heuristic_check) over it. Returns the draft + verdict; posting stays gated — a human posts via reddit_post_comment (chat key). | report_id, permalink, why, community, suggested_angle, voice, store_path |
distribution_data_report | Project a stored report into a corpus-derived data report (D5) — a deterministic ranking of its clusters carrying their REAL distinct-author / mention counts, real permalinks, and a verbatim quote per row; the LLM writes only the title + framing labels, and methodology discloses the honest base (chat key). | report_id, kind (complaint_index), store_path |
distribution_assets | Draft channel-SHAPED, drafting-only assets (D4) — one per selected channel, shaped to its surface (PH = tagline + maker comment + captions; Show HN = title + first comment; X = tweet thread; LinkedIn = carousel). Demand claims ground (no-cite-no-claim); hooks + the offer are free; no upvote ask, native-first, founder-voiced (chat key). | report_id, store_path |
distribution_requirements | The distribution → build requirements (D3) — for each selected embedded_loop channel a LoopRequirement (loop kind → concrete build requirements, e.g. watermark ⇒ public share-URLs + branded viewer + badge-gating, grounded in the channel’s routing_signal), and always a ConversionSurfaceRequirement for the conversion destination the channels point at. Deterministic; feed it to build_spec so the spec records it (chat key). | report_id, store_path |
distribution_plan | The distribution plan (D7) — the report’s channels sequenced into pushes (spike channels placed into concentrated launch moments at DETERMINISTIC playbook timings: Product Hunt 12:01am PT Tue/Wed, Show HN Tue-Thu 8-10am, …; never invented hours) + streams (compounding channels run continuously). Enforces one all-day-attention channel per day, never Product Hunt + a big HN push the same day; opens with pre-launch warming + closes with a 30-day post step; pairs each spark-requiring channel with its spark. Drafting + planning only — every push is human-executed (chat key). | report_id, store_path |
distribution_measure | Close the distribution loop (D8) — for each selected channel, the success metric (what “worked”: launch platform → top-N + attributed signups; marketplace → installs + WAU; community → qualified replies + click-through; answer-engine GEO → citation appearances) + the instrumentation to wire BEFORE the push (a UTM tag, an attributed-signup query, a citation check), read DETERMINISTICALLY by surface type. The human records ChannelResults and feeds them back so the next push re-ranks on evidence (chat key). | report_id, store_path |
landscape_from_report | The full “what exists today” — direct/adjacent/status-quo rivals (each gap cited, each tagged with the clusters it competes for) plus an empirical existing-solutions scan, synchronous (chat + embedding keys). | report_id, store_path |
ideate_from_idea | Idea-first: sharpen a raw idea into a testable hypothesis + a brief (chat key). | idea, store_path |
ideate_from_report | Evidence-first: surface a stored report’s forks as grounded idea sketches (chat key). | report_id, store_path |
assess_from_report | The GO / PIVOT / NO-GO verdict — runs the landscape, then the deterministic demand × landscape gap, synchronous (chat + embedding keys). | report_id, store_path |
validate_from_idea | Run the validation loop headlessly (--auto) from a raw idea — ideate → demand → landscape → assess, looping on PIVOT. Synchronous and slow (runs a demand pull); the interactive loop lives in the validate skill. | idea, max_iterations (3), store_path |
design_from_report | Author a grounded-but-directional design system (+ preview HTML) — SAFE/RISK choices read from a real competitor teardown where available; records the grounding_tier. taste picks the director preset (editorial default / brutalist / warm-minimal / technical) (chat key). | report_id, name, taste, store_path |
logo_generate | Generate diverse logo options (+ a self-contained picker) drawn under the design system; the model authors each SVG, an unsafe/empty one is dropped. taste picks the preset the mark draws under (chat key). | report_id, name, taste, store_path |
design_review | Deterministically audit a rendered page’s computed styles (fonts, heading scale, colors) against design hard-rules and (with a report) its design system. Needs a script-capable browser renderer. | url, report_id, store_path |
build_spec | Derive an evidence-grounded BuildSpec — each feature maps to a real demand cluster with quotes (un-grounded features dropped); surface="auto" also picks the surface + a rationale and sketches feature-grounded screens. Returns the spec; does not write files (that is the metalworks build init CLI) (chat + embedding keys). | report_id, surface (auto), stack (empty), store_path |
research_start | Start the pipeline as a background job and return a run_id immediately (chat + embedding keys). | brief, months, store_path |
research_status | Status of a background research job. | run_id, store_path |
research_result | The finished report for a completed job, or a status payload while running. | run_id, store_path |
generate_reply | Draft a Reddit reply for a thread + run the compliance gate; emits a confirm_token on pass (chat key). | thread_url, voice |
discovery_run | Run discovery over queries → gated draft opportunities. Never posts (chat key, [reddit]). | queries, subreddits, max_opportunities (10), voice |
reddit_post_comment | Security boundary — post a reply to a public thread (see below). | url, text, confirm_token, username |