ZeroLeaks Package
Scan Engine
createScanEngine for advanced use. Configure maxTurns, maxTreeDepth, branchingFactor, callbacks.
Scan Engine
For advanced control over scan behavior, use createScanEngine. You can configure TAP parameters, enable or disable features, and register progress and finding callbacks.
Basic Usage
import { createScanEngine } from "zeroleaks";
const engine = createScanEngine({
scan: {
maxTurns: 20,
maxTreeDepth: 4,
branchingFactor: 3,
enableCrescendo: true,
enableManyShot: true,
enableBestOfN: true,
bestOfNCount: 3,
},
});
const result = await engine.runScan(systemPrompt, {
onProgress: async (progress) => {
console.log(`Turn ${progress.turn}/${progress.maxTurns}`);
},
onFinding: async (finding) => {
console.log("Finding:", finding.technique, finding.severity);
},
});Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
maxTurns | number | 25 | Maximum attack turns per scan |
maxTreeDepth | number | 4 | TAP tree depth |
branchingFactor | number | 3 | TAP branching factor |
pruningThreshold | number | 0.3 | Pruning threshold for attack tree |
enableCrescendo | boolean | true | Multi-turn gradual escalation |
enableManyShot | boolean | true | Many-shot context priming |
enableBestOfN | boolean | true | Best-of-N prompt mutations |
bestOfNCount | number | 3 | Number of variations per Best-of-N |
attackerModel | string | anthropic/claude-opus-4.6 | OpenRouter model for attacker |
evaluatorModel | string | anthropic/claude-sonnet-4.5 | OpenRouter model for evaluator |
targetModel | string | anthropic/claude-sonnet-4.5 | OpenRouter model for target |
enableInspector | boolean | true | TombRaider defense fingerprinting |
enableMultiTurnOrchestrator | boolean | true | Siren/Echo Chamber sequences |
enableAdaptiveTemperature | boolean | false | AutoAdv-inspired temperature scheduling |
enableDualMode | boolean | — | Run extraction + injection |
scanMode | "extraction" | "injection" | — | Single-mode scan |
Callbacks
onProgress — Called each turn with progress state:
interface ScanProgress {
turn: number;
maxTurns: number;
phase?: AttackPhase;
leakStatus?: LeakStatus;
}onFinding — Called when a vulnerability is detected:
interface Finding {
technique: string;
severity: "critical" | "high" | "medium" | "low";
extractedContent?: string;
evidence?: string;
category: string;
confidence: "high" | "medium" | "low";
}Dual-Mode Scan
For extraction and injection in parallel:
const engine = createScanEngine({ scan: { enableDualMode: true } });
const result = await engine.runDualScan(systemPrompt, {
maxDurationMs: 120000,
onProgress: async (p) => console.log(p.turn, p.maxTurns),
onFinding: async (f) => console.log(f.technique),
onInjectionResult: async (r) => console.log(r.technique, r.injectionSucceeded),
});Custom Engine Example
import { createScanEngine } from "zeroleaks";
const engine = createScanEngine({
scan: {
maxTurns: 10,
maxTreeDepth: 3,
branchingFactor: 2,
enableCrescendo: false,
enableManyShot: false,
enableBestOfN: true,
bestOfNCount: 5,
},
});
const result = await engine.runScan(systemPrompt, {
maxDurationMs: 60000,
onProgress: async (p) => {
process.stdout.write(`\rTurn ${p.turn}/${p.maxTurns} (${p.leakStatus || "—"})`);
},
onFinding: async (f) => {
console.log(`\n[!] ${f.severity}: ${f.technique}`);
},
});
console.log(`\nScore: ${result.overallScore}/100 (${result.overallVulnerability})`);