Your Promptfoo YAML imports in one command. You get 249 red-team plugins (5× Promptfoo), 106 scorers, and the same CLI ergonomics — plus firewall, gateway, observability, and FinOps in the same platform. One bill. Zero stitching.
OpenAI now owns Promptfoo. That's a conflict if you rely on it to test OpenAI models for jailbreaks, prompt injection, or policy violations. EvalGuard is independent — 87 providers, zero model-vendor ownership.
Every OWASP LLM Top 10 category plus indirect prompt injection, data exfiltration, multi-turn jailbreaks, PII leakage, policy violations, and many more. Kept up to date with threat-intel feed sync — not static. Plus 43 adversarial strategies and 103 DLP patterns.
Promptfoo does eval. Then you stitch Helicone for observability, Portkey for gateway, Langfuse for traces. EvalGuard replaces all of them with one auth, one bill, one SLA.
promptfoo.yaml maps 1:1Most fields need no rename. The ones that differ are listed below with the exact replacement.
| Promptfoo | EvalGuard | Notes |
|---|---|---|
| providers: [openai:gpt-4o] | model: gpt-4o | Provider auto-detected from model prefix. |
| prompts: [...] | prompt: "{{input}}" | Inline prompt template; {{input}} interpolation supported. |
| tests: [...] | cases: [...] | Same shape: { input, expectedOutput, metadata }. |
| assert: [{type: contains, value: 'X'}] | scorers: ["contains"] | Simple string array. 106 built-in scorers; contains/regex/similarity/etc. |
| assert config via type+value | scorerOptions: { contains: { value: 'X' } } | Per-scorer config is a separate object. |
| redteam: {plugins: [...]} | `evalguard scan` command | Red team lives in a separate config for scans; same platform, separate flow. |
| Promptfoo CLI | EvalGuard CLI |
|---|---|
| promptfoo eval | evalguard eval |
| promptfoo eval --no-cache | evalguard eval:local |
| promptfoo view | evalguard view |
| promptfoo redteam run | evalguard scan |
| promptfoo share | evalguard share |
| promptfoo init | evalguard init |
npm i -g @evalguardai/clievalguard login --key <your-eg_key>evalguard import:promptfoo promptfoo.yamlevalguard evalStuck on a Promptfoo feature that doesn't map cleanly? Tell us — we'll add the shim within a business day.
Move in an afternoon. Free forever tier, 10K traces/month, unlimited projects.
Start free — no credit card