Template · Executives

Leadership meeting decisions

Your recorder posts the transcript when the meeting ends. Claude separates what was decided from what was only discussed, lists every action item with an owner and a date, and calls out open questions. You correct anything it got wrong at the approval gate, then the summary goes to Slack and the action items to your task tool.

Download .json

WebhookMTG-1007Weekly leadership meeting (58 min)recording.done
Pipeline
  1. Extract decisions Claude API · Sonnet 5
  2. Check the record You
  3. Post to Slack Shell
  4. Send action items Shell
Slack#leadership3 decisions, 7 action items with owners, 2 open questionsPosted
The pipeline

What each step does

  1. Extract decisions

    Claude API · Sonnet 5

    Separates decisions from discussion and lists action items with owners and dates.

  2. Check the record

    You

    Shows you the record. Reject with corrections and it is redone.

  3. Post to Slack

    Shell

    Posts the record to the leadership channel.

  4. Send action items

    Shell

    Sends the record to your task tool, if you set a webhook.

Set it up

From copy to first run

  1. Copy the pipeline JSON with the button above.
  2. In Jimothy, open Pipelines → New pipeline, paste it under “Or import a pipeline JSON” and click Import.
  3. Fill in the variables below under Pipeline settings → Variables.
  4. Triggers → Add trigger → Webhook. Post the transcript from Zoom, Google Meet, Fathom or Plaud with title (meeting name) and description (transcript).
Variables

What to fill in

The prompts and commands read these as {{vars.<name>}}. The examples are placeholders: replace them with your own.

VariableWhat to put in itExample
attendeesWho usually attends and their roles, so owners are named correctly.Maya (CEO), Tom (CFO), Priya (VP Product), Luis (VP Engineering), Ana (VP Sales)
slackWebhookUrlA Slack incoming webhook for the leadership channel.—
tasksWebhookUrlOptional: where action items go, e.g. a Zapier hook into Asana, Linear or Notion. Leave empty to skip.—
Show the pipeline JSON
{
  "jimothyPipeline": 1,
  "name": "Leadership meeting decisions",
  "description": "Pulls decisions, action items and open questions out of a meeting transcript and posts them after you check them.",
  "icon": "workflow",
  "color": "#6d28d9",
  "repo": {
    "mode": "scratch"
  },
  "concurrency": 2,
  "variables": {
    "attendees": "Maya (CEO), Tom (CFO), Priya (VP Product), Luis (VP Engineering), Ana (VP Sales)",
    "slackWebhookUrl": "",
    "tasksWebhookUrl": ""
  },
  "steps": [
    {
      "id": "extract",
      "name": "Extract decisions",
      "type": "agent",
      "description": "Separates decisions from discussion and lists action items with owners and dates.",
      "harnessId": "anthropic-api",
      "model": "claude-sonnet-5",
      "timeoutMinutes": 10,
      "prompt": "Transcript of \"{{issue.title}}\". Attendees: {{vars.attendees}}.\n\n{{issue.description | truncate:80000}}\n\nWrite the meeting record for Slack (*bold* headings, - bullets):\n*Decisions*: only things explicitly agreed, each with who made the call\n*Action items*: \"<owner> — <action> — <due date or 'no date set'>\"\n*Open questions*: raised but not resolved, with who owns getting the answer\n*Parked*: topics deferred to a later meeting\n\nDon't record something as decided if people only discussed it. Use attendees' names.{{#if steps.approve.output}}\n\nYour previous record was rejected with these corrections. Apply them:\n{{steps.approve.output}}{{/if}}"
    },
    {
      "id": "approve",
      "name": "Check the record",
      "type": "approval",
      "description": "Shows you the record. Reject with corrections and it is redone.",
      "dependsOn": [
        "extract"
      ],
      "loopBackTo": "extract",
      "maxLoops": 3,
      "approvalMessage": "Post this record of {{issue.title}}? Reject with corrections if anything is wrong.\n\n---\n\n{{steps.extract.output}}"
    },
    {
      "id": "post",
      "name": "Post to Slack",
      "type": "shell",
      "description": "Posts the record to the leadership channel.",
      "dependsOn": [
        "approve"
      ],
      "timeoutMinutes": 2,
      "command": "printf '{\"text\":%s}' {{steps.extract.output | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.slackWebhookUrl}}"
    },
    {
      "id": "tasks",
      "name": "Send action items",
      "type": "shell",
      "description": "Sends the record to your task tool, if you set a webhook.",
      "dependsOn": [
        "approve"
      ],
      "runIf": "{{vars.tasksWebhookUrl}}",
      "timeoutMinutes": 2,
      "command": "printf '{\"meeting\":%s,\"record\":%s}' {{issue.title | json}} {{steps.extract.output | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.tasksWebhookUrl}}"
    }
  ]
}