New to Revelica? See how the product agent fits your team's workflow.
Read the introArticulate the value proposition, confirm competitors, and map competitive coverage.
Collect competitor names, approaches, URLs, or the explicit discovery fallback.
Reuse or articulate the value proposition from the exact solution and customer segment already in the workspace.
Surface 3-6 credible competitor candidates for the value proposition. Outputs evidence-finding rows and a structured outputs.candidates list that drives the per-candidate fetch fanout.
For each candidate from discover.outputs.candidates: scrape the homepage + standard subpages, save each as an evidence-source, and create a cites edge tying each evidence-source to a fresh solution entity. No LLM. Per-candidate manifest of solution_id + evidence ids drives enrich/assess.
For each candidate: build a picture from the pre-fetched evidence and update its solution with description/features/packages/pricing. One write per clone (reliable). Raw profile only — no coverage, no differentiation.
For each enriched competitor: read its solution + the segment, RETURN per-moment coverage judgments (keyed by moment label) + differentiation as outputs. Writes NOTHING — the write-coverage fetcher persists the cells. min_success=1.
Judge OUR OWN solution against every moment using the same rubric (richer internal data, no differentiation). RETURNS per-moment coverage judgments (by moment label) as outputs. Writes NOTHING — the write-coverage fetcher persists the YOU column alongside the competitors.
Deterministic fetcher: resolve each returned moment label to a real moment id and create one coverage entity per judgment — competitor (from assess.items) and own (from own-coverage.outputs) — attaching cited_source_id as a cites edge. Partial-tolerant: an unmatched label or a failed create is skipped and counted, never fails the step.
Pure-Python fan-in. Reads assess.items and produces differentiations_by_solution (keyed by solution_id) + solution_ids for the VP writer. Coverage is NOT consolidated here — it was written as entities by write-coverage.
Single LLM agent that takes the consolidated differentiation and writes it in ONE batched update to value_proposition.competing_solutions[] (the vp_competing_solutions junction). Does NOT write coverage or touch the segment.
With the VP's competing_solutions populated AND every coverage entity (competitor + own) written, build the coverage matrix showing how each solution covers (or doesn't) each moment.