Linear Webhook Skill
Enables Linear issue comment @mentions to dispatch tasks to Clawdbot agents.
How It Works
Comment in Linear:
@mason implement user authenticationor@eureka plan Q2 roadmapLinear webhook fires on comment creation
Clawdbot receives webhook via exposed endpoint
Transform parses payload:
- Extracts @mason or @eureka mention
- Gets issue context (title, description, labels)
- Prepares task prompt
Routes to agent session:
- @mason →
masonagent (code/implementation) - @eureka →
eurekaagent (planning/strategy)
- @mason →
Agent processes task and returns result
Result posted back as Linear comment
Setup
1. Configure Clawdbot Webhooks
Add to your config.json5:
{
hooks: {
enabled: true,
token: "your-secret-token-here", // Generate with: openssl rand -base64 32
path: "/hooks",
transformsDir: "/home/sven/clawd-mason/skills/linear-webhook",
mappings: [
{
name: "linear",
match: {
path: "/linear",
method: "POST"
},
action: "agent",
transform: {
module: "./linear-transform.js",
export: "transformLinearWebhook"
},
deliver: false, // Don't auto-deliver to chat - Linear comments handle responses
}
]
}
}
2. Expose Webhook Endpoint
Use Cloudflare Tunnel or Tailscale Funnel to make webhook publicly accessible:
Option A: Cloudflare Tunnel (Recommended)
# Install if needed
brew install cloudflared
# Start tunnel (replace with your domain)
cloudflared tunnel --url http://localhost:18789
Option B: Tailscale Funnel
# Enable funnel
tailscale funnel 18789
Note the public URL (e.g., https://your-tunnel.trycloudflare.com)
3. Configure Linear Webhook
Go to Linear Settings → API → Webhooks
Click "Create new webhook"
Set URL:
https://your-tunnel.trycloudflare.com/hooks/linearAdd custom header:
x-clawdbot-token: your-secret-token-hereSelect events: Comment → Created
Save webhook
4. Test
Comment in a Linear issue:
@mason add user authentication to the login page
Expected flow:
Webhook fires to Clawdbot
Mason agent receives task
Mason implements or responds
Result posted back to Linear issue as comment
Agent Routing
@mason → Code implementation, debugging, technical tasks
@eureka → Planning, strategy, research, communication
Other mentions → Ignored (not handled)
Issue Context Provided
The agent receives:
Issue title
Issue description
Issue labels
Comment text (the @mention)
Issue URL
Commenter name
Customization
Add More Agents
Edit linear-transform.js:
const AGENT_MENTIONS = {
'@mason': 'mason',
'@eureka': 'eureka',
'@designer': 'designer', // Add your own agents
};
Change Response Behavior
Modify deliver and channel in config:
{
deliver: true,
channel: "telegram",
to: "1878354815", // Your Telegram chat ID
}
This will also send agent responses to Telegram.
Security
Never commit hook token to version control
Use environment variables:
CLAWDBOT_HOOK_TOKENVerify webhook source (Linear's IP ranges if needed)
Use HTTPS only (Cloudflare Tunnel provides this)
Troubleshooting
Webhook not firing
Check Linear webhook logs (Settings → API → Webhooks → View logs)
Verify tunnel is running:
curl https://your-tunnel.trycloudflare.com/hooks/linearCheck Clawdbot logs:
clawdbot gateway logs
Agent not responding
Check transform is loading: Look for errors in gateway logs
Verify agent session exists:
clawdbot sessions listTest transform manually:
node linear-transform.js
Response not posting to Linear
Implement Linear API comment posting in transform
Add Linear API token to config
See
linear-transform.jsfor example
Linear API Access
To post comments back to Linear, you need a Linear API token:
Go to Linear Settings → API → Personal API keys
Create new token with
writescopeAdd to environment:
CLAWDBOT_LINEAR_API_KEY=lin_api_...Transform will use this to post responses
Files
SKILL.md- This documentationlinear-transform.js- Webhook payload parser and agent routerlinear-api.js- Linear GraphQL API client (for posting comments)example-payload.json- Sample Linear webhook payload for testing