Claude-code-plugins-plus lindy-deploy-integration
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/lindy-pack/skills/lindy-deploy-integration" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-lindy-deploy-integration && rm -rf "$T"
manifest:
plugins/saas-packs/lindy-pack/skills/lindy-deploy-integration/SKILL.mdsource content
Lindy Deploy Integration
Overview
Lindy agents run on Lindy's managed infrastructure. Deployment focuses on your integration layer: webhook receivers, callback handlers, and application code that Lindy agents interact with via HTTP Request actions and webhook triggers.
Prerequisites
- Lindy agents configured and tested
- Application with webhook receiver endpoints
- Deployment platform (Vercel, Railway, Docker, AWS, GCP)
- Lindy API key and webhook secrets
Instructions
Step 1: Prepare Application for Deployment
// src/server.ts — Production-ready Lindy webhook receiver import express from 'express'; import helmet from 'helmet'; const app = express(); app.use(helmet()); app.use(express.json({ limit: '1mb' })); // Health check for load balancer app.get('/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString(), version: process.env.APP_VERSION || 'unknown', }); }); // Lindy webhook receiver with auth verification app.post('/lindy/callback', (req, res) => { const auth = req.headers.authorization; if (auth !== `Bearer ${process.env.LINDY_WEBHOOK_SECRET}`) { return res.status(401).json({ error: 'Unauthorized' }); } // Respond immediately, process async res.json({ received: true }); // Async processing processWebhook(req.body).catch(err => { console.error('Webhook processing error:', err); }); }); async function processWebhook(payload: any) { const { taskId, status, result } = payload; // Your business logic here console.log(`Task ${taskId}: ${status}`, result); } const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Listening on :${PORT}`));
Step 2: Docker Deployment
# Dockerfile FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY dist/ ./dist/ EXPOSE 3000 ENV NODE_ENV=production HEALTHCHECK --interval=30s --timeout=3s \ CMD wget -qO- http://localhost:3000/health || exit 1 CMD ["node", "dist/server.js"]
# Build and run docker build -t lindy-integration . docker run -d \ -p 3000:3000 \ -e LINDY_API_KEY="$LINDY_API_KEY" \ -e LINDY_WEBHOOK_SECRET="$LINDY_WEBHOOK_SECRET" \ --name lindy-app \ lindy-integration
Step 3: Vercel Deployment
# Install Vercel CLI npm i -g vercel # Set secrets vercel secrets add lindy-api-key "$LINDY_API_KEY" vercel secrets add lindy-webhook-secret "$LINDY_WEBHOOK_SECRET" # Deploy vercel --prod
// vercel.json { "env": { "LINDY_API_KEY": "@lindy-api-key", "LINDY_WEBHOOK_SECRET": "@lindy-webhook-secret" } }
Step 4: Update Lindy Agent Webhook URLs
After deployment, update all Lindy agents with production URLs:
- In Lindy dashboard, open each agent with a webhook trigger
- Navigate to the HTTP Request action (if agent calls your API)
- Update URL from dev/staging to production:
OLD: https://abc123.ngrok.io/lindy/callback NEW: https://api.yourapp.com/lindy/callback - For webhook triggers, callers need the Lindy-generated URL (unchanged)
- Test with a sample webhook to verify end-to-end
Step 5: Post-Deploy Verification
#!/bin/bash echo "=== Post-Deploy Verification ===" PROD_URL="https://api.yourapp.com" # Health check echo "[1/3] Health check..." curl -sf "$PROD_URL/health" | jq . # Webhook endpoint reachable echo "[2/3] Webhook endpoint..." STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -X POST "$PROD_URL/lindy/callback" \ -H "Authorization: Bearer $LINDY_WEBHOOK_SECRET" \ -H "Content-Type: application/json" \ -d '{"test": true}') echo "Webhook endpoint: HTTP $STATUS (expect 200)" # Trigger a test agent run echo "[3/3] Agent trigger test..." curl -s -X POST "https://public.lindy.ai/api/v1/webhooks/YOUR_ID" \ -H "Authorization: Bearer $LINDY_WEBHOOK_SECRET" \ -H "Content-Type: application/json" \ -d '{"event": "deploy.verify", "env": "production"}' echo "Agent triggered — check Tasks tab in Lindy dashboard"
Step 6: Rollback Plan
# If deployment fails, rollback: # Vercel vercel rollback # Docker docker stop lindy-app docker run -d --name lindy-app-rollback \ -e LINDY_API_KEY="$LINDY_API_KEY" \ -e LINDY_WEBHOOK_SECRET="$LINDY_WEBHOOK_SECRET" \ lindy-integration:previous-tag # Update Lindy agents back to previous URLs if needed
Deployment Checklist
| Step | Verification |
|---|---|
| Build passes | exits 0 |
| Tests pass | all green |
| Secrets configured | API key + webhook secret in platform |
| Health check responds | returns 200 |
| Webhook auth works | POST with valid token returns 200 |
| Webhook auth rejects | POST without token returns 401 |
| Lindy agent URLs updated | HTTP Request actions point to prod |
| End-to-end test | Trigger agent, receive callback |
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Webhook 502 | App crashed/not running | Check container logs, restart |
| Webhook timeout | Slow processing | Respond 200 immediately, process async |
| Wrong URL in Lindy | Not updated post-deploy | Update HTTP Request action URLs |
| SSL error | Certificate issue | Verify HTTPS cert is valid |
| Secret mismatch | Dev secret in prod | Verify production secrets match Lindy config |
Resources
Next Steps
See
lindy-webhooks-events for advanced webhook patterns.