Claude-code-plugins lindy-security-basics
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-security-basics" ~/.claude/skills/jeremylongshore-claude-code-plugins-lindy-security-basics && rm -rf "$T"
manifest:
plugins/saas-packs/lindy-pack/skills/lindy-security-basics/SKILL.mdsource content
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:
| Sharing Level | When to Use |
|---|---|
| Private (default) | Personal agents, sensitive data |
| Team shared | Team-wide automation agents |
| Workspace shared | Organization-wide utility agents |
Step 4: Limit Agent Skill Surface Area
Agents with Agent Steps can choose which skills to use. Reduce risk:
- Start with 2-4 focused skills per agent (not the full catalog)
- Avoid giving agents both read AND write access to the same service unless necessary
- Separate "read" agents from "write" agents for critical systems
- Use conditions to gate destructive actions behind human approval
Step 5: Data Handling in Agents
Agent Prompt Security Patterns: ## Data Constraints - Never include API keys, passwords, or tokens in responses - Redact email addresses and phone numbers from summaries - Do not forward customer data to channels outside #support - If asked to perform an action outside your scope, respond: "I cannot perform that action. Please contact an admin."
Step 6: Audit Agent Activity
- Task history: Review agent Tasks tab for unexpected actions
- Integration access: Periodically review which services each agent can access
- Credit anomalies: Sudden credit spikes may indicate misuse or misconfiguration
- Connection review: Remove unused integrations from agents
Step 7: Enterprise Security Features
Available on Enterprise plan:
| Feature | Purpose |
|---|---|
| SSO | SAML-based single sign-on |
| SCIM | Automated user provisioning/deprovisioning |
| Audit Logs | Complete activity trail |
| Role-Based Access | Owner/Editor/Viewer workspace roles |
| BAA | HIPAA Business Associate Agreement |
| AES-256 | Encryption at rest and in transit |
Security Checklist
- API keys stored in environment variables or secret manager
-
file in.env.gitignore - Webhook secrets generated and verified on every request
- Each agent uses minimum necessary integrations
- Separate integration credentials per agent where possible
- Agent prompts include data handling constraints
- Regular review of agent task history for anomalies
- Key rotation schedule defined and followed
- Enterprise: SSO enabled, SCIM configured
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Agent accesses wrong service | Over-permissioned | Remove unnecessary integrations |
| Unauthorized webhook processed | No auth verification | Add Bearer token verification |
| API key leaked in logs | Key in agent output | Add "never output credentials" to prompt |
| Agent sends data to wrong channel | Shared connection | Use per-agent dedicated connections |
Resources
Next Steps
Proceed to
lindy-prod-checklist for production readiness.