{
  "jimothyPipeline": 1,
  "name": "Monthly website content audit",
  "description": "Checks key pages for broken links, outdated claims and weak titles, and posts a prioritised fix list.",
  "icon": "sparkles",
  "color": "#be185d",
  "repo": {
    "mode": "scratch"
  },
  "concurrency": 1,
  "variables": {
    "pages": "https://acme.example/\nhttps://acme.example/pricing\nhttps://acme.example/integrations",
    "facts": "Plans: Starter $39/user/month, Team $79/user/month, Enterprise custom. Integrations: NetSuite, QuickBooks, Xero, Sage Intacct. 1,400 customers. SOC 2 Type II.",
    "slackWebhookUrl": ""
  },
  "steps": [
    {
      "id": "status",
      "name": "Check pages respond",
      "type": "shell",
      "description": "Requests each page and records its HTTP status.",
      "timeoutMinutes": 5,
      "command": "printf '%s\\n' {{vars.pages}} | while read -r u; do [ -n \"$u\" ] && printf '%s %s\\n' \"$(curl -s -o /dev/null -L -m 20 -w '%{http_code}' \"$u\")\" \"$u\"; done"
    },
    {
      "id": "audit",
      "name": "Audit content",
      "type": "agent",
      "description": "Reads every page against your current facts and checks outbound links, titles and descriptions.",
      "harnessId": "claude-code",
      "model": "sonnet",
      "dependsOn": [
        "status"
      ],
      "timeoutMinutes": 40,
      "prompt": "Audit these pages (HTTP status first):\n{{steps.status.output}}\n\nWhat is true today:\n{{vars.facts}}\n\nFor each page that responded: read it, and check\n- claims, prices, plan names, numbers and integrations against the facts above;\n- dates and \"new\" or \"coming soon\" language that is now stale;\n- outbound links (request each one; list any that fail);\n- the title tag and meta description (missing, duplicated, over 60 or 160 characters, or vague).\n\nYour final answer is a Slack message (*bold*, - bullets): pages that didn't respond first, then fixes ordered by page importance (the list order) and severity. Each fix names the page, quotes the current text and says what it should say. Skip pages with nothing to fix. If nothing needs fixing anywhere, say so in one line."
    },
    {
      "id": "post",
      "name": "Post to Slack",
      "type": "shell",
      "description": "Posts the fix list to Slack.",
      "dependsOn": [
        "audit"
      ],
      "timeoutMinutes": 2,
      "command": "printf '{\"text\":%s}' {{steps.audit.output | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.slackWebhookUrl}}"
    }
  ]
}