Simple routing
Data handling best practices for Lindy AI agents.
ReadWriteEdit
Lindy Data Handling
Overview
Lindy agents process data through triggers, LLM calls, actions, knowledge bases,
and memory. Data flows through Lindy's managed infrastructure with AES-256
encryption at rest and in transit. This skill covers data classification, PII
handling, prompt-level data controls, and regulatory compliance.
Prerequisites
- Understanding of data types processed by your agents
- Knowledge of applicable regulations (GDPR, CCPA, HIPAA)
- For HIPAA: Business Associate Agreement (BAA) with Lindy (Enterprise plan)
Lindy Data Architecture
| Component |
Data Storage |
Retention |
| Tasks |
Task inputs, outputs, step data |
Visible in dashboard |
| Memory |
Persistent snippets across tasks |
Until manually deleted |
| Context |
Per-task accumulated context |
Task lifetime only |
| Knowledge Base |
Uploaded files, crawled sites |
Until manually removed |
| Integrations |
OAuth tokens, connection data |
Until disconnected |
| Computer Use |
Browser session, screenshots |
30 days after last use |
Instructions
Step 1: Classify Data in Agent Workflows
Map what data each agent processes:
| Data Category |
Examples |
Handling |
| Public |
Product info, FAQs, pricing |
No restrictions |
| Internal |
Sales reports, meeting notes |
Limit to authorized agents |
| Confidential |
Customer emails, CRM data |
Access controls + audit |
| Restricted |
PII, PHI, payment data |
Minimize exposure + compliance |
Step 2: PII Controls in Agent Prompts
Add data handling instructions directly to agent prompts:
## Data Handling Rules
- Never include full email addresses in summaries — use "[name]@[domain]"
- Redact phone numbers in logs — show only last 4 digits
- Do not forward customer personal information to Slack channels
- When storing to spreadsheet, omit columns: email, phone, address
- If asked to share customer data externally, decline and escalate
Step 3: Knowledge Base Data Safety
Knowledge base files are searchable by the agent. Control what goes in:
DO upload:
- Product documentation
- FAQ articles
- Policy documents
- Public knowledge articles
DO NOT upload:
Comprehensive debugging toolkit for Lindy AI agents.
ReadWriteEditBash(curl:*)Grep
Lindy Debug Bundle
Current State
!node --version 2>/dev/null || echo 'Node.js not installed'
!python3 --version 2>/dev/null || echo 'Python not installed'
!curl --version 2>/dev/null | head -1 || echo 'curl not installed'
Overview
Systematic diagnostics for Lindy AI agent issues. Collects environment info,
tests API connectivity, reviews agent task history, and generates a support
bundle for Lindy's support team.
Prerequisites
- Access to Lindy dashboard (https://app.lindy.ai)
- curl installed for API testing
- Agent ID and webhook URLs available
Instructions
Step 1: Collect Environment Info
# Local environment diagnostics
echo "=== Local Environment ==="
echo "Node: $(node --version 2>/dev/null || echo 'N/A')"
echo "Python: $(python3 --version 2>/dev/null || echo 'N/A')"
echo "OS: $(uname -srm)"
echo "Date: $(date -u '+%Y-%m-%d %H:%M:%S UTC')"
echo "LINDY_API_KEY set: $([ -n "$LINDY_API_KEY" ] && echo 'yes' || echo 'NO')"
echo "LINDY_WEBHOOK_SECRET set: $([ -n "$LINDY_WEBHOOK_SECRET" ] && echo 'yes' || echo 'NO')"
Step 2: Test Webhook Connectivity
# Test webhook trigger endpoint
echo "=== Webhook Connectivity ==="
WEBHOOK_URL="${LINDY_WEBHOOK_URL:-https://public.lindy.ai/api/v1/webhooks/YOUR_ID}"
# Test without auth (expect 401)
echo "Without auth (expect 401):"
curl -s -o /dev/null -w "HTTP %{http_code} in %{time_total}s\n" \
-X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"test": true}'
# Test with auth (expect 200)
echo "With auth (expect 200):"
curl -s -o /dev/null -w "HTTP %{http_code} in %{time_total}s\n" \
-X POST "$WEBHOOK_URL" \
-H "Authorization: Bearer $LINDY_WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
-d '{"test": true, "debug": "bundle-test"}'
Step 3: Review Agent Task History
In the Lindy dashboard:
- Navigate to the failing agent
- Open the Tasks tab
- Filter by Failed status
- For each failed task:
- Note the timestamp
- Click to expand step-by-step execution
- Identify the failing step (marked red)
- Copy the error message and input/output data
- Look for patterns: same step failing? same time of day? same input type?
Step 4: Check Integration Health
# Test outbound connectivity to common Lindy integration targets
ec
Deploy applications that integrate with Lindy AI agents.
ReadWriteEditBash(gh:*)Bash(docker:*)Bash(npm:*)
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",
&qu
Configure enterprise role-based access control for Lindy AI workspaces.
ReadWriteEdit
Lindy Enterprise RBAC
Overview
Lindy organizes access around workspaces where agents live. Team members
are assigned roles that control who can create, modify, run, or observe agents
and their execution history. Enterprise features add SSO, SCIM, audit logs,
and granular permission controls.
Prerequisites
- Lindy Team ($49.99/mo + $19.99/seat) or Enterprise plan
- Workspace owner privileges
- Team members invited to the workspace
Lindy Role Model
| Role |
Create Agents |
Edit Agents |
Run Agents |
View Tasks |
Manage Team |
| Owner |
Yes |
Yes |
Yes |
Yes |
Yes |
| Editor |
Yes |
Yes |
Yes |
Yes |
No |
| Viewer |
No |
No |
No |
Yes |
No |
Instructions
Step 1: Map Organizational Roles to Lindy Roles
| Org Role |
Lindy Role |
Rationale |
| Engineering Lead |
Owner |
Full workspace control |
| Developer |
Editor |
Build and modify agents |
| Ops/Support |
Editor |
Run agents and configure workflows |
| Manager |
Viewer |
Monitor task execution and metrics |
| Stakeholder |
Viewer |
Read-only access to results |
Step 2: Invite Team Members
- Go to Settings > Team in the Lindy dashboard
- Click Invite Member
- Enter email address
- Select role: Owner, Editor, or Viewer
- Confirm invitation
Pro plan: Each additional seat costs $19.99/month
Enterprise plan: Custom pricing with bulk seat discounts
Step 3: Organize Agents with Folders
Use folders to organize agents by team, function, or environment:
Workspace: Acme Corp Production
├── Support/
│ ├── Email Triage Agent
│ ├── FAQ Chatbot
│ └── Escalation Agent
├── Sales/
│ ├── Lead Router
│ ├── Follow-up Agent
│ └── Meeting Scheduler
├── Operations/
│ ├── Daily Report Agent
│ ├── Monitoring Agent
│ └── Data Pipeline Agent
└── Shared/
├── Knowledge Base Agent
└── Notification Agent
Folder permissions: Share folders with specific team members to control
visibility. Agents in private folders are only visible to the folder owner.
Step 4: Agent Sharing Controls
Each agent can be shared independently:
| Sharing Level |
Who Gets It |
What They Can Do |
Create your first Lindy AI agent with a real trigger and action.
ReadWriteEditBash(curl:*)
Lindy Hello World
Overview
Build a minimal Lindy AI agent: Webhook Received trigger -> LLM processing ->
Slack notification. Demonstrates the three core building blocks every Lindy agent
uses: Trigger, Agent Step (prompt + model + skills), and Action.
Prerequisites
- Lindy account at https://app.lindy.ai
- Slack workspace connected (or Gmail for email variant)
- Completed
lindy-install-auth setup
Instructions
Step 1: Create Agent via Dashboard
- Click "New Agent" at https://app.lindy.ai
- In the prompt field ("How can I help you?"), type:
When I send a webhook, summarize the message and post it to Slack
- Agent Builder auto-generates the workflow with trigger + action nodes
Step 2: Configure the Webhook Trigger
- Click the trigger node at the top of the workflow canvas
- Select Webhook Received
- Copy the generated URL:
https://public.lindy.ai/api/v1/webhooks/<unique-id>
- Click Generate Secret — copy immediately (shown once)
Step 3: Add the Slack Action
- Click "+" to add a step
- Search for Slack Send Channel Message
- Authorize your Slack workspace when prompted
- Configure fields:
- Channel:
#general (or test channel)
- Message field mode: AI Prompt
- Instruction:
Summarize the webhook payload in one sentence.
Payload: {{webhook_received.request.body}}
Step 4: Set the Agent Prompt
Open Settings > Prompt:
You are a webhook summarizer. When you receive a webhook payload,
extract the key information and create a concise one-sentence summary.
Be factual and specific. Do not add opinions or speculation.
Step 5: Test It
curl -X POST "https://public.lindy.ai/api/v1/webhooks/YOUR_ID" \
-H "Authorization: Bearer YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{
"event": "order.created",
"customer": "Jane Doe",
"amount": 149.99,
"items": ["Widget Pro", "Adapter Cable"]
}'
Expected Slack message:
> Jane Doe placed a $149.99 order for Widget Pro and Adapter Cable.
Step 6: Verify in Dashboard
Navigate to the Tasks tab in your agent view. Confirm status shows Completed.
Click into the task to see each step's input/output for debugging.
Agent Anatomy
Incident response procedures for Lindy AI agent failures and outages.
ReadWriteEditBash(curl:*)
Lindy Incident Runbook
Overview
Incident response procedures for Lindy AI agent failures. Covers platform outages,
individual agent failures, integration breakdowns, credit exhaustion, and webhook
endpoint failures.
Incident Severity Levels
| Severity |
Description |
Response Time |
Examples |
| SEV1 |
All agents failing, customer impact |
15 minutes |
Lindy platform outage, all webhooks failing |
| SEV2 |
Critical agent down |
30 minutes |
Support bot offline, phone agent unreachable |
| SEV3 |
Degraded performance |
2 hours |
High latency, intermittent failures |
| SEV4 |
Minor issue |
24 hours |
Non-critical agent misconfigured |
Quick Diagnostics (First 5 Minutes)
Step 1: Check Lindy Platform Status
# Is Lindy up?
curl -s -o /dev/null -w "Lindy API: HTTP %{http_code}\n" \
"https://public.lindy.ai" --max-time 5
# Check status page
echo "Status page: https://status.lindy.ai"
Step 2: Check Your Integration
# Is your webhook receiver up?
curl -s -o /dev/null -w "Our endpoint: HTTP %{http_code}\n" \
"https://api.yourapp.com/health" --max-time 5
# Is the webhook auth working?
curl -s -o /dev/null -w "Webhook auth: HTTP %{http_code}\n" \
-X POST "https://api.yourapp.com/lindy/callback" \
-H "Authorization: Bearer $LINDY_WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
-d '{"test": true}' --max-time 5
Step 3: Check Credit Balance
Log in at https://app.lindy.ai > Settings > Billing
- Credits at 0? Agents stop processing
- Credits low? Non-essential agents may be paused
Incident Playbooks
Incident: Lindy Platform Outage (SEV1)
Symptoms: All agents failing, status.lindy.ai shows incident
Impact: All Lindy-dependent workflows halted
Runbook:
- Confirm outage at https://status.lindy.ai
- Notify team: "Lindy platform outage confirmed. All agents affected."
- Activate fallback procedures:
- Route support emails to human inbox
- Disable webhook triggers from your app
- Queue events for replay when Lindy recovers
- Monitor status page for recovery
- When recovered: re-enable triggers, replay queued events, verify agent health
Fallback code:
async function triggerLindyWithFallback(payload: any) {
try {
const response = await fetch(WEBHOOK_URL, {
method: 'POST&
Set up Lindy AI account, API access, and webhook authentication.
ReadWriteEditBash(npm:*)Bash(pip:*)Bash(curl:*)Grep
Lindy Install & Auth
Overview
Lindy AI is a no-code/low-code AI agent platform. Agents ("Lindies") are built in the
web dashboard at https://app.lindy.ai. External integration uses webhook endpoints,
the HTTP Request action, and optional Node.js/Python SDKs for programmatic access.
Prerequisites
- Lindy account at https://app.lindy.ai (Free tier: 400 credits/month)
- For SDK access: Node.js 18+ or Python 3.10+
- For webhook receivers: HTTPS endpoint in your application
Instructions
Step 1: Obtain API Key
- Log in at https://app.lindy.ai
- Navigate to Settings > API Keys
- Click Generate New Key — copy immediately (shown only once)
- Store securely:
# Environment variable
export LINDY_API_KEY="lnd_live_xxxxxxxxxxxxxxxxxxxx"
# Or .env file (add .env to .gitignore)
echo 'LINDY_API_KEY=lnd_live_xxxxxxxxxxxxxxxxxxxx' >> .env
Step 2: Install SDK (Optional)
# Node.js SDK
npm install lindy-ai
# Python SDK
pip install lindy-ai
Step 3: Initialize Client
// Node.js
import { Lindy } from 'lindy-ai';
const lindy = new Lindy({
apiKey: process.env.LINDY_API_KEY,
});
// Verify connection
const agents = await lindy.agents.list();
console.log(`Connected: ${agents.length} agents found`);
# Python
import os
from lindy import Lindy
client = Lindy(api_key=os.environ["LINDY_API_KEY"])
# Verify connection
agents = client.agents.list()
print(f"Connected: {len(agents)} agents found")
Step 4: Configure Webhook Authentication
When creating a webhook trigger in the Lindy dashboard, generate a secret key.
Callers must include this in every request:
Authorization: Bearer <your-webhook-secret>
Your webhook endpoint URL follows the pattern:
https://public.lindy.ai/api/v1/webhooks/<unique-id>
Step 5: Verify Webhook Connectivity
# Test your webhook trigger
curl -X POST "https://public.lindy.ai/api/v1/webhooks/YOUR_WEBHOOK_ID" \
-H "Authorization: Bearer YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"test": true, "message": "hello from setup"}'
Lindy Plans & Credits
| Plan |
Price |
Credits/mo |
Tasks |
Extras |
| Free |
$0 |
400 |
~40 |
Basic models |
| Pro |
$49.99/mo |
5,000 |
~1,500 |
+$19.99/seat, phone calls |
| Business |
$299.99/mo |
30,0
Set up local development workflow for testing Lindy AI agent integrations.
ReadWriteEditBash(npm:*)Bash(node:*)Bash(npx:*)
Lindy Local Dev Loop
Overview
Lindy agents run on Lindy's managed infrastructure — you do not run agents locally.
Local development focuses on building and testing the webhook receivers, **callback
handlers, and application code** that Lindy agents interact with. Use ngrok or
similar tunnels to expose local endpoints for Lindy webhook triggers.
Prerequisites
- Node.js 18+ or Python 3.10+
- ngrok or Cloudflare Tunnel for HTTPS tunneling
- Lindy account with at least one agent configured
- Completed
lindy-install-auth setup
Instructions
Step 1: Create Webhook Receiver
// server.ts — Express webhook receiver for Lindy callbacks
import express from 'express';
import dotenv from 'dotenv';
dotenv.config();
const app = express();
app.use(express.json());
const WEBHOOK_SECRET = process.env.LINDY_WEBHOOK_SECRET;
// Verify Lindy webhook authenticity
function verifyWebhook(req: express.Request): boolean {
const auth = req.headers.authorization;
return auth === `Bearer ${WEBHOOK_SECRET}`;
}
// Receive Lindy agent callbacks
app.post('/lindy/callback', (req, res) => {
if (!verifyWebhook(req)) {
console.error('Unauthorized webhook attempt');
return res.status(401).json({ error: 'Unauthorized' });
}
console.log('Lindy callback received:', JSON.stringify(req.body, null, 2));
// Process the agent's output
const { taskId, result, status } = req.body;
console.log(`Task ${taskId}: ${status}`);
res.json({ received: true });
});
// Health check for Lindy to verify endpoint
app.get('/health', (req, res) => res.json({ status: 'ok' }));
app.listen(3000, () => console.log('Webhook receiver running on :3000'));
Step 2: Expose Local Server via Tunnel
# Install and start ngrok
npm install -g ngrok
ngrok http 3000
# Output: https://abc123.ngrok.io -> http://localhost:3000
# Use this URL in Lindy webhook configuration
Step 3: Configure Lindy Agent to Call Your Endpoint
In the Lindy dashboard, add an HTTP Request action to your agent:
- Method: POST
- URL:
https://abc123.ngrok.io/lindy/callback
- Headers:
Content-Type: application/json
- Body (AI Prompt mode):
Send the task result as JSON with fields: taskId, result, status
Or configure a webhook trigger pointing to your tunnel URL:
https://abc123.ngrok.io/lindy/webhook
Step 4: Create Test Harness
// test-trigger.ts — Fire a test webhook to your Lindy agent
import fetch from 'node-f
Advanced migration strategies for moving to Lindy AI from other platforms.
ReadWriteEditBash(curl:*)
Lindy Migration Deep Dive
Overview
Migrate existing automation workflows from Zapier, Make (Integromat), n8n,
LangChain, or custom code to Lindy AI. Key insight: Lindy replaces rigid
rule-based automations with AI agents that can reason, adapt, and handle
ambiguity — so migration is a redesign opportunity, not a 1:1 translation.
Prerequisites
- Inventory of existing automations (source platform)
- Lindy workspace ready with required integrations authorized
- Migration timeline approved
- Rollback plan defined for customer-facing workflows
Migration Source Comparison
| Source Platform |
Lindy Equivalent |
Key Difference |
| Zapier Zap |
Lindy Agent |
AI reasoning replaces rigid if/then |
| Make Scenario |
Lindy Agent |
No-code builder instead of module chains |
| n8n Workflow |
Lindy Agent |
Managed infra, no self-hosting |
| LangChain Agent |
Lindy Agent Step |
No-code, managed, no Python needed |
| Custom code |
HTTP Request + Run Code |
Less code, AI fills gaps |
Instructions
Step 1: Inventory Source Automations
For each existing automation, document:
| Field |
Example |
| Name |
Support Email Triage |
| Trigger |
New email in support@co.com |
| Steps |
1. Parse email 2. Classify 3. Route to channel |
| Integrations |
Gmail, Slack, Sheets |
| Frequency |
~50 runs/day |
| Complexity |
Medium (3 steps, 1 condition) |
Step 2: Classify Migration Complexity
| Complexity |
Criteria |
Migration Approach |
Time |
| Simple |
1-3 steps, no conditions |
Build from scratch in Lindy |
30 min |
| Medium |
4-8 steps, conditions |
Natural language description to Agent Builder |
1-2 hours |
| Complex |
9+ steps, multi-branch, loops |
Redesign as multi-agent society |
1-2 days |
| Custom code |
Python/JS logic |
Run Code action + HTTP Request |
2-4 hours |
Step 3: Migration Strategy by Source
From Zapier:
Zapier Pattern → Lindy Pattern
────────────────────────────────
Trigger (New E
Configure Lindy AI across development, staging, and production environments.
ReadWriteEditBash(aws:*)Bash(gcloud:*)Bash(vault:*)
Lindy Multi-Environment Setup
Overview
Isolate Lindy AI agents across development, staging, and production using separate
workspaces, dedicated API keys, and environment-specific webhook configurations.
Lindy agents live in workspaces — each environment should use its own workspace
to prevent cross-environment data leakage.
Prerequisites
- Multiple Lindy workspaces (one per environment) or Enterprise plan
- Secret management solution (env vars, Vault, AWS/GCP secrets)
- CI/CD pipeline with environment-aware deployment
- Application with environment detection logic
Environment Strategy
| Environment |
Workspace |
API Key Source |
Agent Config |
| Development |
dev-workspace |
.env.local |
Debug prompts, test integrations |
| Staging |
staging-workspace |
CI/CD secrets |
Production-like, test data |
| Production |
prod-workspace |
Secret manager |
Hardened prompts, live integrations |
Instructions
Step 1: Create Separate Workspaces
- Log in at https://app.lindy.ai
- Create workspace for each environment:
[company]-dev, [company]-staging, [company]-prod
- Generate separate API keys in each workspace
- Store each key in the appropriate secret store
Step 2: Environment Configuration
// config/lindy.ts — Environment-aware Lindy configuration
interface LindyConfig {
apiKey: string;
webhookUrl: string;
webhookSecret: string;
workspace: string;
model: string;
}
function getLindyConfig(): LindyConfig {
const env = process.env.NODE_ENV || 'development';
const configs: Record<string, LindyConfig> = {
development: {
apiKey: process.env.LINDY_API_KEY_DEV!,
webhookUrl: process.env.LINDY_WEBHOOK_URL_DEV!,
webhookSecret: process.env.LINDY_WEBHOOK_SECRET_DEV!,
workspace: 'dev',
model: 'gemini-flash', // Cheap model for dev
},
staging: {
apiKey: process.env.LINDY_API_KEY_STAGING!,
webhookUrl: process.env.LINDY_WEBHOOK_URL_STAGING!,
webhookSecret: process.env.LINDY_WEBHOOK_SECRET_STAGING!,
workspace: 'staging',
model: 'claude-sonnet', // Match prod model
},
production: {
apiKey: process.env.LINDY_API_KEY_PROD!,
webhookUrl: process.env.LINDY_WEBHOOK_URL_PROD!,
webhookSecret: process.env.LINDY_WEBHOOK_SECRET_PROD!,
workspace: 'production',
model: 'claude-sonnet',
},
};
const config = configs[env];
if (!config) throw new Error(`Unknown environment: ${env}`);
return config;
}
export const lin
Monitor Lindy AI agent health, task success rates, and credit consumption.
ReadWriteEditBash(curl:*)
Lindy Observability
Overview
Monitor Lindy AI agent execution health, task completion rates, step-level failures,
trigger frequency, and credit consumption. Lindy provides built-in task history in
the dashboard. External observability requires webhook callbacks, the Task Completed
trigger, and application-side metrics collection.
Prerequisites
- Lindy workspace with active agents
- For external monitoring: webhook receiver + metrics stack (Prometheus/Grafana, Datadog)
- For alerts: Slack or email integration configured
Key Observability Signals
| Signal |
Source |
Why It Matters |
| Task completion rate |
Tasks tab / callback |
Measures agent reliability |
| Task duration |
Task detail view |
Tracks performance over time |
| Step failure rate |
Task detail (red steps) |
Identifies broken actions |
| Credit consumption |
Billing dashboard |
Budget tracking |
| Trigger frequency |
Task count over time |
Detects trigger storms |
| Agent error rate |
Failed tasks / total tasks |
Overall health indicator |
Instructions
Step 1: Dashboard Monitoring (Built-In)
Lindy's Tasks tab provides per-agent monitoring:
- Open agent > Tasks tab
- Filter by status: Completed, Failed, In Progress
- For failed tasks: click to see which step failed and why
- Track patterns: same step failing? same time of day? same trigger type?
Step 2: Task Completed Trigger (Agent-to-Agent Monitoring)
Use Lindy's built-in Task Completed trigger to build an observability agent:
Monitoring Agent:
Trigger: Task Completed (from Production Support Agent)
Condition: "Go down this path if the task failed"
→ Action: Slack Send Channel Message to #ops-alerts
Message: "Support Agent task failed: {{task.error}}"
Condition: "Go down this path if task duration > 30 seconds"
→ Action: Slack Send Channel Message to #ops-alerts
Message: "Support Agent slow: {{task.duration}}s"
Step 3: Webhook-Based Metrics Collection
Configure agents to call your metrics endpoint on task completion:
// metrics-collector.ts — Receive agent metrics via HTTP Request action
import express from 'express';
import { Counter, Histogram, Gauge } from 'prom-client';
const app = express();
app.use(express.json());
// Prometheus metrics
const taskCounter = new Counter({
name: 'lindy_tasks_total',
help: 'Total Lindy agent tasks',
labelName
Optimize Lindy AI agent execution speed, reliability, and cost efficiency.
ReadWriteEdit
Lindy Performance Tuning
Overview
Lindy agents execute as multi-step workflows where each step (LLM call, action
execution, API call, condition evaluation) adds latency and credit cost. Optimization
targets: fewer steps, smaller models, faster actions, tighter prompts.
Prerequisites
- Lindy workspace with active agents
- Access to agent Tasks tab (view step-by-step execution history)
- Understanding of agent workflow structure
Instructions
Step 1: Profile Agent Execution
In the Tasks tab, open a completed task and review:
- Total task duration: Baseline for improvement
- Per-step timing: Identify the slowest steps
- Credit consumption: Which steps cost the most
- Step count: Total actions executed per task
Common bottlenecks:
| Bottleneck |
Symptom |
Fix |
| Large model on simple task |
High credit cost, slow |
Switch to Gemini Flash |
| Too many LLM steps |
Long total duration |
Consolidate into fewer steps |
| Agent Step with many skills |
Unpredictable path |
Reduce to 2-4 focused skills |
| Knowledge Base over-querying |
Multiple KB searches |
Increase Max Results per query |
| Sequential when parallel possible |
Unnecessary waiting |
Use loop with Max Concurrent > 1 |
Step 2: Right-Size Model Selection
The single biggest performance lever. Match model to task complexity:
| Task |
Recommended Model |
Speed |
Credits |
| Route email to category |
Gemini Flash |
Fast |
~1 |
| Extract fields from text |
GPT-4o-mini |
Fast |
~2 |
| Draft short response |
Claude Sonnet |
Medium |
~3 |
| Complex multi-step analysis |
GPT-4 / Claude Opus |
Slow |
~10 |
| Simple phone call |
Gemini Flash |
Fast |
~20/min |
| Complex phone conversation |
Claude Sonnet |
Medium |
~20/min |
Rule of thumb: Start with the smallest model. Only upgrade if output quality
is insufficient. Most classification and routing tasks work fine with Gemini Flash.
Step 3: Consolidate LLM Steps
Before (3 LLM calls, ~9 credits):
Step 1: Classify email (LLM)
Step 2: Extract key entities (LLM)
Step 3: Generate response (LLM)
After (1 LLM call, ~3 credits):
Step 1: Classify, extract entities, and generate response (single LLM prompt)
<
Production readiness checklist for Lindy AI agent deployments.
ReadWriteEditBash(curl:*)
Lindy Production Checklist
Overview
Comprehensive go-live checklist for Lindy AI agents entering production. Covers
agent configuration, security, monitoring, error handling, and operational readiness.
Prerequisites
- Agents tested in development/staging environment
- Production Lindy workspace configured
- Team members assigned appropriate roles
- Credit budget approved for production usage
Production Checklist
Authentication & Security
- [ ] Production API keys generated (separate from dev/staging)
- [ ] API keys stored in secret manager (not environment files)
- [ ] Webhook secrets generated for all webhook triggers
- [ ] Webhook receivers verify Bearer token on every request
- [ ]
.env files excluded from version control
- [ ] Key rotation schedule documented (90-day max)
- [ ] Enterprise: SSO enabled, SCIM configured
Agent Configuration
- [ ] Agent prompt reviewed for production quality
- [ ] Clear identity and role definition
- [ ] Numbered step-by-step instructions
- [ ] Explicit constraints (no unauthorized promises, data limits)
- [ ] Error handling instructions in prompt
- [ ] Few-shot examples for consistent output format
- [ ] Model selection appropriate for each step:
- [ ] Gemini Flash for simple routing/classification
- [ ] Claude Sonnet/GPT-4o-mini for standard tasks
- [ ] GPT-4/Claude Opus only where complex reasoning required
- [ ] Exit conditions defined with primary + fallback criteria
- [ ] Trigger filters configured to prevent over-firing
- [ ] Knowledge base sources current and synced
Integration Health
- [ ] All integration OAuth tokens current (not expired)
- [ ] Gmail: correct account authorized, label filters set
- [ ] Slack: bot invited to required channels
- [ ] Webhooks: endpoint URLs use production domains (not ngrok/dev)
- [ ] HTTP Request actions: target URLs are production endpoints
- [ ] Phone numbers: provisioned and tested ($10/month each)
Error Handling
- [ ] Agents have fallback behavior for common failures:
- [ ] Integration auth expired -> notify admin
- [ ] KB returns no results -> graceful fallback response
- [ ] Condition matching fails -> default "other" branch
- [ ] Agent step loops -> reasonable exit conditions
- [ ] Webhook receivers return 200 quickly (process async)
- [ ] HTTP Request action targets have health checks
- [ ] Credit usage alerts configured (50%, 80%, 95% thresholds)
Monitoring & Observability
- [ ] Regular review of agent Tasks tab scheduled
- [ ] Failed task alerts configured (email or Slack)
- [ ] Credit consumption tracked per agent
Manage Lindy AI credits, rate limits, and usage optimization.
ReadWriteEditBash(curl:*)
Lindy Rate Limits & Credits
Overview
Lindy uses a credit-based consumption model, not traditional API rate limits.
Every task (everything an agent does after being triggered) costs credits. Cost
scales with model intelligence, task complexity, premium actions, and duration.
Credit Consumption Reference
| Factor |
Credit Impact |
| Basic model task |
1-3 credits |
| Large model task (GPT-4, Claude) |
~10 credits |
| Premium actions (webhooks, phone) |
Additional credits |
| Phone calls (US/Canada landline) |
~20 credits/minute |
| Phone calls (international mobile) |
21-53 credits/minute |
| Minimum per task |
1 credit |
Plan Credit Limits
| Plan |
Credits/Month |
Approx Tasks |
Price |
| Free |
400 |
~40-400 |
$0 |
| Pro |
5,000 |
~500-1,500 |
$49.99/mo |
| Business |
30,000 |
~3,000-30,000 |
$299.99/mo |
| Enterprise |
Custom |
Custom |
Custom |
Important: Credit limit enforcement is not instant. Lindy can only limit usage
after the limit has been breached, not precisely when it is reached. A task that
starts before the limit may complete and push usage slightly over.
Instructions
Step 1: Monitor Credit Usage
In the Lindy dashboard:
- Navigate to Settings > Billing
- Review current credit consumption
- Track per-agent credit usage
- Set up alerts for high-consumption agents
Step 2: Reduce Per-Task Credit Cost
Choose the right model for each step:
| Task Type |
Recommended Model |
Credits |
| Simple routing/classification |
Gemini Flash |
~1 |
| Standard text generation |
Claude Sonnet / GPT-4o-mini |
~3 |
| Complex reasoning/analysis |
GPT-4 / Claude Opus |
~10 |
| Phone calls (simple) |
Gemini Flash |
~20/min |
| Phone calls (complex) |
Claude Sonnet |
~20/min |
Reduce action count per task:
- Combine multiple LLM calls into one prompt with structured output
- Use deterministic actions (Set Manually) instead of AI-powered fields where possible
- Eliminate unnecessary condition branches
- Use Run Code for data transformation instead of LLM steps
Step 3: Optimize Trigger Frequency
Prevent cr
Reference architectures for Lindy AI agent integrations.
ReadWriteEdit
Lindy Reference Architecture
Overview
Production-ready architecture patterns for integrating Lindy AI agents into
applications. Covers webhook integration, multi-agent societies, event-driven
pipelines, and high-availability patterns.
Prerequisites
- Understanding of Lindy agent model (triggers, actions, skills)
- Familiarity with webhook-based architectures
- Production requirements defined (throughput, latency, reliability)
Architecture 1: Simple Webhook Integration
Single agent triggered by your application, results sent via callback.
┌─────────────┐ POST (webhook) ┌──────────────┐
│ Your App │ ─────────────────────────→ │ Lindy Agent │
│ │ │ │
│ /callback │ ←───────────────────────── │ HTTP Request │
│ │ POST (callback) │ Action │
└─────────────┘ └──────────────┘
Implementation:
- Your app sends webhook with
callbackUrl field
- Lindy agent processes and responds via Send POST Request to Callback
- Your app receives results asynchronously
Best for: Simple automations (email triage, lead scoring, content generation)
Architecture 2: Event-Driven Pipeline
Multiple event sources feed agents through a central webhook router.
┌──────────┐
│ Stripe │──webhook──┐
└──────────┘ │
▼
┌──────────┐ ┌───────────┐ ┌──────────────┐
│ Shopify │──→ │ Router │──→ │ Lindy Agents │
└──────────┘ │ Service │ │ │
└───────────┘ │ • Order Bot │
┌──────────┐ ▲ │ • Support Bot│
│ Your App │──webhook──┘ │ • Analytics │
└──────────┘ └──────────────┘
Implementation:
// Event router — maps events to specific Lindy agents
const agentWebhooks: Record<string, string> = {
'order.created': process.env.LINDY_ORDER_AGENT_WEBHOOK!,
'customer.support_request': process.env.LINDY_SUPPORT_AGENT_WEBHOOK!,
'analytics.daily_report': process.env.LINDY_ANALYTICS_AGENT_WEBHOOK!,
};
app.post('/events', async (req, res) => {
const { event, data } = req.body;
const webhookUrl = agentWebhooks[event];
if (!webhookUrl) {
return res.status(400).json({ error: `Unknown event: ${event}` });
}
await fetch(webhookUrl, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.LINDY_WEBHOOK_SECRET}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ event, data, callbackUrl: `${BASE_URL}/callback` }),
});
res.json({ routed: true, agent: event });
});
Best
Lindy AI integration patterns for webhook handling, HTTP actions, and Run Code.
ReadWriteEditBash(curl:*)
Lindy SDK & Integration Patterns
Overview
Lindy is primarily a no-code platform. External integration happens through three
channels: Webhook triggers (inbound), HTTP Request actions (outbound), and
Run Code actions (inline Python/JS execution via E2B sandbox). This skill covers
patterns for each.
Prerequisites
- Lindy account with active agents
- Node.js 18+ or Python 3.10+ for webhook receivers
- Completed
lindy-install-auth setup
Pattern 1: Webhook Trigger Integration
Your application fires webhooks to wake Lindy agents:
// lindy-client.ts — Reusable Lindy webhook trigger client
class LindyClient {
private webhookUrl: string;
private secret: string;
constructor(webhookUrl: string, secret: string) {
this.webhookUrl = webhookUrl;
this.secret = secret;
}
async trigger(payload: Record<string, unknown>): Promise<{ status: number }> {
const response = await fetch(this.webhookUrl, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.secret}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(`Lindy webhook failed: ${response.status} ${response.statusText}`);
}
return { status: response.status };
}
async triggerWithCallback(
payload: Record<string, unknown>,
callbackUrl: string
): Promise<{ status: number }> {
return this.trigger({ ...payload, callbackUrl });
}
}
// Usage
const lindy = new LindyClient(
'https://public.lindy.ai/api/v1/webhooks/YOUR_ID',
process.env.LINDY_WEBHOOK_SECRET!
);
await lindy.trigger({ event: 'lead.created', name: 'Jane Doe', email: 'jane@co.com' });
Pattern 2: HTTP Request Action (Agent Calling Your API)
Configure a Lindy agent to call your API as an action step:
In Lindy Dashboard — Add HTTP Request action:
- Method: POST
- URL:
https://api.yourapp.com/process
- Headers:
Authorization: Bearer {{yourapikey}}, Content-Type: application/json
- Body (AI Prompt mode):
Send the processed data as JSON with fields matching the API schema.
Include: name from {{trigger.data.name}}, analysis from previous step.
Your API endpoint receives the call:
// Your API receiving Lindy agent calls
app.post('/process', async (req, res) => {
const { name, analysis } = req.body;
const result = await processData(name, analysis);
res.json({ result, processedAt: new Date().toISOS
Implement security best practices for Lindy AI agents and integrations.
ReadWriteEditBash(curl:*)
Lindy Security Basics
Overview
Security practices for Lindy AI agents. Agents are autonomous — they connect to
external services, execute actions, and handle data. Security focuses on: API key
management, webhook authentication, agent permission scoping, integration account
isolation, and connection sharing controls.
Prerequisites
- Lindy account with API access
- Understanding of which integrations your agents use
- For Enterprise: SSO/SCIM configuration access
Instructions
Step 1: API Key Management
# Store API key in environment variable — never in source code
export LINDY_API_KEY="lnd_live_xxxxxxxxxxxxxxxxxxxx"
# Or use a secret manager
# AWS Secrets Manager
aws secretsmanager create-secret \
--name lindy/api-key \
--secret-string "$LINDY_API_KEY"
# Google Secret Manager
echo -n "$LINDY_API_KEY" | gcloud secrets create lindy-api-key \
--data-file=-
Key rotation schedule:
| Environment |
Rotation Period |
Method |
| Development |
30 days |
Manual regeneration |
| Staging |
90 days |
Automated via CI |
| Production |
90 days |
Secret manager + automated rotation |
| Post-incident |
Immediately |
Manual regeneration + revoke old key |
Step 2: Webhook Authentication
Every webhook trigger generates a unique secret key. Verify it on every inbound request:
// Webhook signature verification middleware
function verifyLindyWebhook(
req: express.Request,
res: express.Response,
next: express.NextFunction
) {
const authHeader = req.headers.authorization;
const expectedToken = process.env.LINDY_WEBHOOK_SECRET;
if (!authHeader || authHeader !== `Bearer ${expectedToken}`) {
console.warn('Rejected unauthorized webhook attempt', {
ip: req.ip,
path: req.path,
timestamp: new Date().toISOString(),
});
return res.status(401).json({ error: 'Unauthorized' });
}
next();
}
app.post('/lindy/callback', verifyLindyWebhook, (req, res) => {
// Process verified webhook
handleWebhook(req.body);
res.json({ received: true });
});
Step 3: Agent Permission Scoping
Lindy agents access external services through authorized connections. Minimize blast radius:
Per-agent integration isolation:
- Authorize a dedicated Gmail account per agent (not your personal inbox)
- Create Slack bot tokens scoped to specific channels
- Use read-only database credentials where possible
- Create separate API keys for each integration
Connection sharing controls:
Manage Lindy agent configuration changes, platform updates, and migrations.
ReadWriteEditBash(curl:*)
Lindy Upgrade & Migration
Overview
Lindy is a managed platform — agents run on Lindy's infrastructure. "Upgrades"
mean reconfiguring agents for new capabilities, migrating agents between workspaces,
or adapting to platform changes. Key concern: agents with webhooks, Lindymail,
and phone numbers require reconfiguration after migration.
Prerequisites
- Admin access to source and target Lindy workspaces
- Inventory of all agents, triggers, and integrations
- Migration window scheduled for customer-facing agents
Instructions
Step 1: Inventory Current Agents
Document every agent before making changes:
| Agent Name |
Trigger Type |
Actions |
Integrations |
Webhook URL |
Phone # |
| Support Bot |
Email Received |
Gmail Reply, Slack Notify |
Gmail, Slack |
N/A |
N/A |
| Lead Router |
Webhook |
Sheets Update, Slack DM |
Sheets, Slack |
https://public.lindy.ai/... |
N/A |
| Phone Screener |
Call Received |
Transfer, Agent Send |
Phone |
N/A |
+1-555-0100 |
Step 2: Export Agent Configurations
For each agent, document:
- Prompt: Copy full text from Settings > Prompt
- Model: Which AI model is selected
- Skills/Actions: List all action steps and their configurations
- Trigger filters: Copy filter conditions
- Knowledge Base: Note all sources (files, URLs, integrations)
- Memories: Export any persistent memories
- Exit conditions: Copy all condition text
Step 3: Plan Migration Order
Phase 1: Internal-only agents (no customer impact)
→ Migrate, test, verify for 24-48 hours
Phase 2: Low-risk customer-facing agents (email triage, notifications)
→ Migrate during low-traffic window
→ Monitor for 24 hours
Phase 3: Critical agents (phone, live chat, lead routing)
→ Migrate with rollback plan ready
→ Keep old agent active in parallel for 48 hours
Step 4: Migrate Agent to New Workspace
Option A — Template sharing:
- In source workspace: Share agent as Template
- In target workspace: Import template
- Reconfigure integrations (OAuth tokens are NOT transferred)
- Re-authorize all connected services
Option B — Manual recreation:
- Create new agent in target workspace
- Paste saved prompt
- Recreate trigger with same configuration
- Re-add all actions and configure fields
- Upload knowledge base files
- Re-create me
Configure Lindy AI webhook triggers, callback patterns, and event handling.
ReadWriteEditBash(curl:*)
Lindy Webhooks & Events
Overview
Lindy supports webhooks in two directions: Inbound (Webhook Received trigger
wakes an agent) and Outbound (HTTP Request action calls your API). This skill
covers both patterns, plus the callback pattern for async two-way communication.
Prerequisites
- Lindy account with active agents
- HTTPS endpoint for receiving callbacks (if using outbound/callback patterns)
- Completed
lindy-install-auth setup
Webhook Architecture
INBOUND (your system triggers Lindy):
[Your App] --POST--> https://public.lindy.ai/api/v1/webhooks/<id>
↓
[Lindy Agent Wakes Up]
↓
[Processes with LLM]
↓
[Executes Actions]
OUTBOUND (Lindy calls your system):
[Lindy Agent] --HTTP Request action--> https://your-api.com/endpoint
↓
[Your Handler]
CALLBACK (two-way async):
[Your App] --POST with callbackUrl--> [Lindy Agent]
↓
[Your App] <--POST to callbackUrl-- [Lindy: Send POST to Callback]
Instructions
Step 1: Create Webhook Received Trigger
- In your agent, click the trigger node
- Select Webhook Received
- Lindy generates a unique URL:
https://public.lindy.ai/api/v1/webhooks/<unique-id>
- Click Generate Secret — copy immediately (shown only once)
- Configure follow-up processing mode:
- Process in workflow: Handle in current workflow
- Spawn separate task: Each webhook creates a new task
- Discard follow-ups: Ignore subsequent requests while processing
Step 2: Access Webhook Data in Workflow
Reference incoming webhook data in any subsequent action field:
| Variable |
Description |
Example |
{{webhook_received.request.body}} |
Full JSON payload |
{"event": "order.created", ...} |
{{webhook_received.request.body.event}} |
Specific field |
"order.created" |
{{webhook_received.request.headers}} |
All HTTP headers |
{"content-type": "application/json"} |
{{webhook_received.request.query}} |
URL query params |
{"source": "stripe"} |
Step 3: Implement Webhook Sender
// webhook-sender.ts — Trigger Lindy agents from your application
interface
|
|
|