{
  "jimothyPipeline": 1,
  "name": "Discovery call prep",
  "description": "Researches a booked prospect and posts a one-page call brief to Slack.",
  "icon": "rocket",
  "color": "#38bdf8",
  "repo": {
    "mode": "scratch"
  },
  "concurrency": 3,
  "variables": {
    "product": "Acme, a reporting tool for finance teams",
    "idealCustomer": "Finance teams of 50 to 500 people that close their books in spreadsheets on top of NetSuite or QuickBooks",
    "slackWebhookUrl": ""
  },
  "steps": [
    {
      "id": "research",
      "name": "Research company and attendee",
      "type": "agent",
      "description": "Researches the company and the attendee’s public professional background, with sources.",
      "harnessId": "claude-code",
      "model": "sonnet",
      "timeoutMinutes": 20,
      "prompt": "A prospect booked a call.\n\nCompany: {{issue.title}}\nWebsite: {{issue.raw.website | default:\"(not given)\"}}\nAttendee: {{issue.raw.name | default:\"(no name)\"}}, {{issue.raw.role | default:\"role not given\"}}, {{issue.raw.email | default:\"\"}}\nMeeting: {{issue.raw.meetingTime | default:\"(time not given)\"}}\nTheir answers to our booking questions:\n{{issue.description | default:\"(none)\"}}\n\nResearch on the web: what the company does, size, funding or ownership, recent news, hiring (especially finance and operations roles), and the tools they appear to use. For the attendee, look only for professional information: current role, tenure, previous companies, and anything they've published or said publicly about work. Nothing personal.\n\nWrite notes in Markdown with the URL for every fact. Label guesses as guesses."
    },
    {
      "id": "brief",
      "name": "Write call brief",
      "type": "agent",
      "description": "Turns the research into a one-page call brief with discovery questions and qualification gaps.",
      "harnessId": "anthropic-api",
      "model": "claude-sonnet-5",
      "dependsOn": [
        "research"
      ],
      "timeoutMinutes": 5,
      "prompt": "We sell {{vars.product}}. Ideal customer: {{vars.idealCustomer}}.\n\nResearch notes:\n{{steps.research.output | truncate:12000}}\n\nBooking answers:\n{{issue.description | default:\"(none)\"}}\n\nWrite a call brief for the rep, for Slack (*bold* headings, - bullets), under 300 words:\n*{{issue.title}} · {{issue.raw.meetingTime | default:\"time TBD\"}}*\n*Who*: the attendee and their likely priorities\n*Context*: three bullets on the company right now\n*Fit*: strong, possible or weak, with the reason\n*Ask*: five discovery questions specific to them\n*Unknowns*: what we still need for qualification (budget, authority, need, timing)\n*Links*: the three most useful URLs"
    },
    {
      "id": "post",
      "name": "Post to Slack",
      "type": "shell",
      "description": "Posts the brief to Slack.",
      "dependsOn": [
        "brief"
      ],
      "timeoutMinutes": 2,
      "command": "printf '{\"text\":%s}' {{steps.brief.output | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.slackWebhookUrl}}"
    }
  ]
}