Template · Marketing

Social posts from a launch

Post a URL to a webhook (or label an issue social with the link in it). Claude Code reads the page and pulls out the claims and lines worth quoting, Claude drafts six posts across channels, and you tick the ones you like at the approval gate. The picks go to your scheduler.

Download .json

WebhookSOC-219https://acme.example/blog/netsuite-syncnew post
Pipeline
  1. Read the page Claude Code · Sonnet
  2. Draft posts Claude API · Sonnet 5
  3. Pick posts You
  4. Send to scheduler Shell
Scheduler3 posts queuedLinkedIn · X thread · newsletter blurbQueued
The pipeline

What each step does

  1. Read the page

    Claude Code · Sonnet

    Opens the page and pulls out the main claims, numbers and lines worth quoting.

  2. Draft posts

    Claude API · Sonnet 5

    Drafts six posts across LinkedIn, X and the newsletter, each as a numbered option.

  3. Pick posts

    You

    You tick the posts to schedule. Reject with a comment to get new drafts.

  4. Send to scheduler

    Shell

    Sends the picked posts to your scheduler through 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 title (the page name) and description (the URL, plus anything to emphasise).
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
companyWho is posting.Acme, a reporting tool for finance teams
voiceHow your social posts sound.Practical and specific. Lead with the problem it solves. One idea per post. No emoji wal…
schedulerWebhookUrlWhere picked posts go, e.g. a Zapier hook into Buffer, Hootsuite or a Slack channel.—
Show the pipeline JSON
{
  "jimothyPipeline": 1,
  "name": "Social posts from a launch",
  "description": "Reads a page and drafts posts for LinkedIn, X and your newsletter; you pick the ones to schedule.",
  "icon": "sparkles",
  "color": "#db2777",
  "repo": {
    "mode": "scratch"
  },
  "concurrency": 3,
  "variables": {
    "company": "Acme, a reporting tool for finance teams",
    "voice": "Practical and specific. Lead with the problem it solves. One idea per post. No emoji walls, no more than two hashtags.",
    "schedulerWebhookUrl": ""
  },
  "steps": [
    {
      "id": "read",
      "name": "Read the page",
      "type": "agent",
      "description": "Opens the page and pulls out the main claims, numbers and lines worth quoting.",
      "harnessId": "claude-code",
      "model": "sonnet",
      "timeoutMinutes": 10,
      "prompt": "Open the page in this request and read it fully:\n\n{{issue.title}}\n{{issue.description}}\n\nReport in Markdown: the URL, the one-sentence point of the page, who it's for, the three most concrete claims or numbers, two or three lines worth quoting word for word, and anything the request asked to emphasise. Only use what's on the page."
    },
    {
      "id": "posts",
      "name": "Draft posts",
      "type": "agent",
      "description": "Drafts six posts across LinkedIn, X and the newsletter, each as a numbered option.",
      "harnessId": "anthropic-api",
      "model": "claude-sonnet-5",
      "dependsOn": [
        "read"
      ],
      "timeoutMinutes": 5,
      "systemPrompt": "You write social posts for {{vars.company}}. Voice: {{vars.voice}}",
      "prompt": "Source notes:\n{{steps.read.output}}\n\nDraft six posts, each linking to the page, in exactly this shape:\n### Post 1: LinkedIn, <angle>\n<post>\n\nMake posts 1 and 2 LinkedIn (under 1,200 characters), 3 and 4 X (under 280 characters, or a thread of up to four posts separated by ---), 5 a newsletter blurb (under 80 words), and 6 an internal Slack announcement for the team to share. Use only claims from the notes.{{#if steps.pick.output}}\n\nYour previous drafts were rejected with this feedback:\n{{steps.pick.output}}{{/if}}"
    },
    {
      "id": "pick",
      "name": "Pick posts",
      "type": "approval",
      "description": "You tick the posts to schedule. Reject with a comment to get new drafts.",
      "dependsOn": [
        "posts"
      ],
      "loopBackTo": "posts",
      "maxLoops": 3,
      "choices": {
        "fromStep": "posts",
        "mode": "multiple"
      },
      "approvalMessage": "Pick the posts to schedule for {{issue.title}}."
    },
    {
      "id": "schedule",
      "name": "Send to scheduler",
      "type": "shell",
      "description": "Sends the picked posts to your scheduler through a webhook.",
      "dependsOn": [
        "pick"
      ],
      "timeoutMinutes": 2,
      "command": "printf '{\"source\":%s,\"posts\":%s,\"titles\":%s}' {{issue.title | json}} {{steps.pick.selected | json}} {{steps.pick.selectedTitles | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.schedulerWebhookUrl}}"
    }
  ]
}