Get Started

Install in seconds. Scan immediately.

Lobstertail Basic ships 26 attack signatures with the package, no API key needed. Pro is launching soon with hundreds of signatures and real-time updates.

$npm install @lobstertail-ai/guard
Published on npm
agent.ts
import { scanSync } from "@lobstertail-ai/guard";

const result = scanSync(untrustedInput);

if (result.blocked) {
  throw new Error(`Blocked: ${result.explanation}`);
}

if (result.warned) {
  console.warn(`[SECURITY] ${result.explanation}`);
}

// Safe to proceed
agent.run(untrustedInput);
Prompt Injection
Obfuscated Commands
Shell Execution
Code Execution
Remote Code Execution
Authority Spoofing

26 signatures across 10+ categories — included with Lobstertail Basic

What you get back

{
  verdict:    "block" | "warn" | "pass"
  severity:   "critical" | "high" | "medium" | "low"
  risk_score: 0.01.0
  categories: ["prompt_injection", "obfuscated_command", ...]
  matched_signatures: ["SIG_B64_EXEC_001", ...]
  explanation: "Human-readable reason for the verdict"
}

Using an AI coding assistant?

Paste this prompt into Claude Code, Codex, or your AI coding tool to integrate Lobstertail automatically.

Install the @lobstertail-ai/guard npm package in this project. Then integrate it as follows:

If this is an OpenClaw project, set it up as a plugin:

Create openclaw.plugin.json in the project root with a before_tool_execution hook pointing to hooks/lobstertail-guard/handler.js
Create the handler file that imports scanSync from @lobstertail-ai/guard, scans the tool input, and returns { blocked: true, reason } or { blocked: false }


If this is NOT an OpenClaw project, find the main entry point where untrusted text is received (user input, API payloads, external messages, scraped content, etc.) and add a scanSync() call before the text is passed to the LLM or agent. Block on result.blocked, warn on result.warned.

Use scanSync() for the basic free scanner (26 bundled signatures, no API key needed). If the project has a LOBSTERTAIL_API_KEY environment variable, use the async scan() function instead for full Pro signature coverage.
Do not modify existing tests. Add a brief comment above each scan call explaining what it does.