Template · Support

Weekly support trends

Every Monday, Claude Code reads the newest ticket export in your folder, counts tickets by category with a script, then reads the subjects to find the themes behind the numbers. It compares with last week’s report, calls out anything rising fast, and recommends the help articles and bug fixes that would remove the most tickets.

Download .json

Schedule0 8 * * 1Weekly support trendsMon · 08:00
Pipeline
  1. Find export Shell
  2. Find themes Claude Code · Sonnet
  3. Post to Slack Shell
Slack#support412 tickets (+8%). NetSuite sync errors up 3×. 2 articles would cover 61 tickets.Posted
The pipeline

What each step does

  1. Find export

    Shell

    Picks the newest CSV and last week’s report.

  2. Find themes

    Claude Code · Sonnet

    Counts tickets with a script, clusters subjects into themes, compares with last week and saves the report.

  3. Post to Slack

    Shell

    Posts the report to the support channel.

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. Under Workspace, choose the folder where you save the weekly ticket export.
  4. Fill in the variables below under Pipeline settings → Variables.
  5. Triggers → Add trigger → Schedule, cron 0 8 * * 1 (Mondays at 08:00).

Export last week’s tickets as CSV with at least id, created date, subject, tags or category, and status. Reports are kept in reports/ inside the folder, so each week compares with the last.

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
slackWebhookUrlA Slack incoming webhook for the support channel.—
Show the pipeline JSON
{
  "jimothyPipeline": 1,
  "name": "Weekly support trends",
  "description": "Finds the themes in the week’s tickets, what’s rising, and which docs or bugs would cut volume most.",
  "icon": "sparkles",
  "color": "#b45309",
  "repo": {
    "mode": "inplace",
    "localPath": ""
  },
  "concurrency": 1,
  "variables": {
    "slackWebhookUrl": ""
  },
  "steps": [
    {
      "id": "find",
      "name": "Find export",
      "type": "shell",
      "description": "Picks the newest CSV and last week’s report.",
      "timeoutMinutes": 1,
      "command": "f=$(ls -t -- *.csv 2>/dev/null | head -1); [ -n \"$f\" ] || { echo \"Put the ticket export (.csv) in $(pwd)\"; exit 1; }; echo \"Export: $f\"; last=$(ls -t reports/support-*.md 2>/dev/null | head -1); echo \"Last report: $last\""
    },
    {
      "id": "analyze",
      "name": "Find themes",
      "type": "agent",
      "description": "Counts tickets with a script, clusters subjects into themes, compares with last week and saves the report.",
      "harnessId": "claude-code",
      "model": "sonnet",
      "dependsOn": [
        "find"
      ],
      "timeoutMinutes": 30,
      "prompt": "{{steps.find.output}}\n\n1. With a script, count tickets in the export by category or tag and by status.\n2. Read the subjects (and descriptions, if present) and group them into themes that explain the volume, with a count and two example ticket ids each.\n3. If there's a last report, compare and flag themes that grew by more than 50% or are new.\n4. Recommend up to three help articles and up to three bug fixes that would remove the most tickets, with the tickets they'd cover.\n\nSave the report to reports/support-<today as YYYY-MM-DD>.md (create the folder if needed) and don't modify any other file. Your final answer is the same report as a Slack message (*bold*, - bullets), under 350 words."
    },
    {
      "id": "post",
      "name": "Post to Slack",
      "type": "shell",
      "description": "Posts the report to the support channel.",
      "dependsOn": [
        "analyze"
      ],
      "timeoutMinutes": 2,
      "command": "printf '{\"text\":%s}' {{steps.analyze.output | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.slackWebhookUrl}}"
    }
  ]
}