{
  "schemaVersion": "1.0",
  "item": {
    "slug": "linear-webhook",
    "name": "Linear Webhook",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Arnarsson/linear-webhook",
    "canonicalUrl": "https://clawhub.ai/Arnarsson/linear-webhook",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/linear-webhook",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linear-webhook",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "config-example.json",
      "example-payload.json",
      "linear-transform.js",
      "post-response.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "linear-webhook",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-04T23:24:38.795Z",
      "expiresAt": "2026-05-11T23:24:38.795Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linear-webhook",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linear-webhook",
        "contentDisposition": "attachment; filename=\"linear-webhook-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "linear-webhook"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/linear-webhook"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/linear-webhook",
    "agentPageUrl": "https://openagent3.xyz/skills/linear-webhook/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linear-webhook/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linear-webhook/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Linear Webhook Skill",
        "body": "Enables Linear issue comment @mentions to dispatch tasks to Clawdbot agents."
      },
      {
        "title": "How It Works",
        "body": "Comment in Linear: @mason implement user authentication or @eureka plan Q2 roadmap\nLinear webhook fires on comment creation\nClawdbot receives webhook via exposed endpoint\nTransform parses payload:\n\nExtracts @mason or @eureka mention\nGets issue context (title, description, labels)\nPrepares task prompt\n\n\nRoutes to agent session:\n\n@mason → mason agent (code/implementation)\n@eureka → eureka agent (planning/strategy)\n\n\nAgent processes task and returns result\nResult posted back as Linear comment"
      },
      {
        "title": "1. Configure Clawdbot Webhooks",
        "body": "Add to your config.json5:\n\n{\n  hooks: {\n    enabled: true,\n    token: \"your-secret-token-here\", // Generate with: openssl rand -base64 32\n    path: \"/hooks\",\n    transformsDir: \"/home/sven/clawd-mason/skills/linear-webhook\",\n    mappings: [\n      {\n        name: \"linear\",\n        match: {\n          path: \"/linear\",\n          method: \"POST\"\n        },\n        action: \"agent\",\n        transform: {\n          module: \"./linear-transform.js\",\n          export: \"transformLinearWebhook\"\n        },\n        deliver: false, // Don't auto-deliver to chat - Linear comments handle responses\n      }\n    ]\n  }\n}"
      },
      {
        "title": "2. Expose Webhook Endpoint",
        "body": "Use Cloudflare Tunnel or Tailscale Funnel to make webhook publicly accessible:\n\nOption A: Cloudflare Tunnel (Recommended)\n\n# Install if needed\nbrew install cloudflared\n\n# Start tunnel (replace with your domain)\ncloudflared tunnel --url http://localhost:18789\n\nOption B: Tailscale Funnel\n\n# Enable funnel\ntailscale funnel 18789\n\nNote the public URL (e.g., https://your-tunnel.trycloudflare.com)"
      },
      {
        "title": "3. Configure Linear Webhook",
        "body": "Go to Linear Settings → API → Webhooks\nClick \"Create new webhook\"\nSet URL: https://your-tunnel.trycloudflare.com/hooks/linear\nAdd custom header: x-clawdbot-token: your-secret-token-here\nSelect events: Comment → Created\nSave webhook"
      },
      {
        "title": "4. Test",
        "body": "Comment in a Linear issue:\n\n@mason add user authentication to the login page\n\nExpected flow:\n\nWebhook fires to Clawdbot\nMason agent receives task\nMason implements or responds\nResult posted back to Linear issue as comment"
      },
      {
        "title": "Agent Routing",
        "body": "@mason → Code implementation, debugging, technical tasks\n@eureka → Planning, strategy, research, communication\nOther mentions → Ignored (not handled)"
      },
      {
        "title": "Issue Context Provided",
        "body": "The agent receives:\n\nIssue title\nIssue description\nIssue labels\nComment text (the @mention)\nIssue URL\nCommenter name"
      },
      {
        "title": "Add More Agents",
        "body": "Edit linear-transform.js:\n\nconst AGENT_MENTIONS = {\n  '@mason': 'mason',\n  '@eureka': 'eureka',\n  '@designer': 'designer', // Add your own agents\n};"
      },
      {
        "title": "Change Response Behavior",
        "body": "Modify deliver and channel in config:\n\n{\n  deliver: true,\n  channel: \"telegram\",\n  to: \"1878354815\", // Your Telegram chat ID\n}\n\nThis will also send agent responses to Telegram."
      },
      {
        "title": "Security",
        "body": "Never commit hook token to version control\nUse environment variables: CLAWDBOT_HOOK_TOKEN\nVerify webhook source (Linear's IP ranges if needed)\nUse HTTPS only (Cloudflare Tunnel provides this)"
      },
      {
        "title": "Webhook not firing",
        "body": "Check Linear webhook logs (Settings → API → Webhooks → View logs)\nVerify tunnel is running: curl https://your-tunnel.trycloudflare.com/hooks/linear\nCheck Clawdbot logs: clawdbot gateway logs"
      },
      {
        "title": "Agent not responding",
        "body": "Check transform is loading: Look for errors in gateway logs\nVerify agent session exists: clawdbot sessions list\nTest transform manually: node linear-transform.js"
      },
      {
        "title": "Response not posting to Linear",
        "body": "Implement Linear API comment posting in transform\nAdd Linear API token to config\nSee linear-transform.js for example"
      },
      {
        "title": "Linear API Access",
        "body": "To post comments back to Linear, you need a Linear API token:\n\nGo to Linear Settings → API → Personal API keys\nCreate new token with write scope\nAdd to environment: CLAWDBOT_LINEAR_API_KEY=lin_api_...\nTransform will use this to post responses"
      },
      {
        "title": "Files",
        "body": "SKILL.md - This documentation\nlinear-transform.js - Webhook payload parser and agent router\nlinear-api.js - Linear GraphQL API client (for posting comments)\nexample-payload.json - Sample Linear webhook payload for testing"
      },
      {
        "title": "References",
        "body": "Clawdbot Webhook Docs\nLinear Webhooks API\nCloudflare Tunnel"
      }
    ],
    "body": "Linear Webhook Skill\n\nEnables Linear issue comment @mentions to dispatch tasks to Clawdbot agents.\n\nHow It Works\nComment in Linear: @mason implement user authentication or @eureka plan Q2 roadmap\nLinear webhook fires on comment creation\nClawdbot receives webhook via exposed endpoint\nTransform parses payload:\nExtracts @mason or @eureka mention\nGets issue context (title, description, labels)\nPrepares task prompt\nRoutes to agent session:\n@mason → mason agent (code/implementation)\n@eureka → eureka agent (planning/strategy)\nAgent processes task and returns result\nResult posted back as Linear comment\nSetup\n1. Configure Clawdbot Webhooks\n\nAdd to your config.json5:\n\n{\n  hooks: {\n    enabled: true,\n    token: \"your-secret-token-here\", // Generate with: openssl rand -base64 32\n    path: \"/hooks\",\n    transformsDir: \"/home/sven/clawd-mason/skills/linear-webhook\",\n    mappings: [\n      {\n        name: \"linear\",\n        match: {\n          path: \"/linear\",\n          method: \"POST\"\n        },\n        action: \"agent\",\n        transform: {\n          module: \"./linear-transform.js\",\n          export: \"transformLinearWebhook\"\n        },\n        deliver: false, // Don't auto-deliver to chat - Linear comments handle responses\n      }\n    ]\n  }\n}\n\n2. Expose Webhook Endpoint\n\nUse Cloudflare Tunnel or Tailscale Funnel to make webhook publicly accessible:\n\nOption A: Cloudflare Tunnel (Recommended)\n\n# Install if needed\nbrew install cloudflared\n\n# Start tunnel (replace with your domain)\ncloudflared tunnel --url http://localhost:18789\n\n\nOption B: Tailscale Funnel\n\n# Enable funnel\ntailscale funnel 18789\n\n\nNote the public URL (e.g., https://your-tunnel.trycloudflare.com)\n\n3. Configure Linear Webhook\nGo to Linear Settings → API → Webhooks\nClick \"Create new webhook\"\nSet URL: https://your-tunnel.trycloudflare.com/hooks/linear\nAdd custom header: x-clawdbot-token: your-secret-token-here\nSelect events: Comment → Created\nSave webhook\n4. Test\n\nComment in a Linear issue:\n\n@mason add user authentication to the login page\n\n\nExpected flow:\n\nWebhook fires to Clawdbot\nMason agent receives task\nMason implements or responds\nResult posted back to Linear issue as comment\nAgent Routing\n@mason → Code implementation, debugging, technical tasks\n@eureka → Planning, strategy, research, communication\nOther mentions → Ignored (not handled)\nIssue Context Provided\n\nThe agent receives:\n\nIssue title\nIssue description\nIssue labels\nComment text (the @mention)\nIssue URL\nCommenter name\nCustomization\nAdd More Agents\n\nEdit linear-transform.js:\n\nconst AGENT_MENTIONS = {\n  '@mason': 'mason',\n  '@eureka': 'eureka',\n  '@designer': 'designer', // Add your own agents\n};\n\nChange Response Behavior\n\nModify deliver and channel in config:\n\n{\n  deliver: true,\n  channel: \"telegram\",\n  to: \"1878354815\", // Your Telegram chat ID\n}\n\n\nThis will also send agent responses to Telegram.\n\nSecurity\nNever commit hook token to version control\nUse environment variables: CLAWDBOT_HOOK_TOKEN\nVerify webhook source (Linear's IP ranges if needed)\nUse HTTPS only (Cloudflare Tunnel provides this)\nTroubleshooting\nWebhook not firing\nCheck Linear webhook logs (Settings → API → Webhooks → View logs)\nVerify tunnel is running: curl https://your-tunnel.trycloudflare.com/hooks/linear\nCheck Clawdbot logs: clawdbot gateway logs\nAgent not responding\nCheck transform is loading: Look for errors in gateway logs\nVerify agent session exists: clawdbot sessions list\nTest transform manually: node linear-transform.js\nResponse not posting to Linear\nImplement Linear API comment posting in transform\nAdd Linear API token to config\nSee linear-transform.js for example\nLinear API Access\n\nTo post comments back to Linear, you need a Linear API token:\n\nGo to Linear Settings → API → Personal API keys\nCreate new token with write scope\nAdd to environment: CLAWDBOT_LINEAR_API_KEY=lin_api_...\nTransform will use this to post responses\nFiles\nSKILL.md - This documentation\nlinear-transform.js - Webhook payload parser and agent router\nlinear-api.js - Linear GraphQL API client (for posting comments)\nexample-payload.json - Sample Linear webhook payload for testing\nReferences\nClawdbot Webhook Docs\nLinear Webhooks API\nCloudflare Tunnel"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Arnarsson/linear-webhook",
    "publisherUrl": "https://clawhub.ai/Arnarsson/linear-webhook",
    "owner": "Arnarsson",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/linear-webhook",
    "downloadUrl": "https://openagent3.xyz/downloads/linear-webhook",
    "agentUrl": "https://openagent3.xyz/skills/linear-webhook/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linear-webhook/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linear-webhook/agent.md"
  }
}