feature

Forward insight agent

The Forward insight agent turns finished study results into Forward Insights: first mockups you accept, then a code edit that adds pin_cell / popover_layout.

Use this path (or Conductor’s Put on chart offer) instead of asking the study authoring agent to “add a pin.”

Pins active on the Terminal
Accepted pin layout — study evidence beside live or replay price

Two pin pipelines

Path

Mockup blocks

Study pin_cell

Bind

Put on chart (this agent)

label + optional block_type

kind: "popover_layout"

layout_cell.pin_cell — no column join

Pin Studio / batch (Pin Designer)

column_id + bind_ref_id

kind: "table" with columns[].id

scoped_value / catalog join

This page covers Put on chart. Pin Studio uses the legacy column-id contract.

Lifecycle

  1. Phase 1 — mockupspropose_mockups / revise_mockups (typically 2–4 options). scope_dimension_ids = declared scope-role dims only.

  2. You accept a mockup (scope dimensions, metrics, layout intent).

  3. Phase 2 — codepropose_chart_pin_edit (orchestrator or study_pin_rewrite_agent). Converts retained outcome axes to role: "report"; hoists scopeEvent above outcome reads.

  4. You approve the study Code edit.

  5. Re-run / Put on chart bind (layout_cell.pin_cell).

Skipping acceptance yields errors like missing_accepted_mockup.

What the rewrite must produce

results.declare({
  id: "pin_cell",
  kind: "popover_layout",
  indexedBy: [/* accepted mockup scope-role dimension ids */],
});

// onFinish — additive with research publishes
ctx.publish("pin_cell", cells.map((c) =>
  ctx.popoverLayout.cell({
    dims: c.dims,
    n: c.n,
    signal: c.signal,
    blocks: [/* metric / text / badge / note */],
  })
));

Report-role dimensions are layout blocks — never pin indexedBy keys. Report indexedBy may be wider than pin indexedBy.

Conductor

Conductor may offer Put on chart after a study run. That routes here — it should not dump pin DSL through the study authoring agent.

Prompting patterns

Good

  • “Mock up a London vs NY pin with win % and median R; keep research tables.”

  • “Revise mockup 2: drop the badge, add sample n as text.”

Bad

  • “Skip mockups and just write pin_cell” — mockup-first lifecycle.

  • “Inflate n so the pin looks denser” — forbidden.

  • “Replace my study results with only the pin” — pins are additive.

  • “Put ny_regime in scope_dimension_ids” — report-role axis; use layout blocks.

Next

  1. Chart pins

  2. Show studies on charts