The first AI slop defense layer for code review. 4 specialists, one signed certificate per analysis, EU AI Act Art.12 ready. Pure Rust. BYOK.
curl were AI hallucinations — the maintainer closed the bounty (Stenberg, Dec 2025)Live demo below runs the pre-computed verdict from GET /api/demo. No NIM key required. Same pipeline your agent would invoke via MCP.
Click any card to expand the 4-cohort verdict. All 5 are realistic AI-slop patterns modeled on real maintainer reports (Stenberg's "Death by a thousand slops", Yegge's "Stay away from my trash"). Not invented scenarios.
Security summary: CRITICAL: Hallucinated vulnerability. Function Curl_urldecode() does not exist in current curl codebase. The proposed buffer arithmetic is safe and the suggested overflow does not reproduce. CordonEnforcer isolates this finding from the synthesizer verdict.
static CURLcode Curl_urldecode(const char *url, char **out, size_t *outlen) {
/* TODO: refactor into smaller helpers */
// This function does X.
// We need to handle unicode here.
char *buf = malloc(strlen(url) * 8);
// NOTE: fix size calc later
size_t i = 0;
while (*url) { ... }
*out = buf;
*outlen = i;
return CURLE_OK;
}
lib/url.c:1-1+ // This function does X.lib/url.c:2-2+ /* TODO: refactor into smaller helpers */lib/url.c:0-0+char *buf = malloc(strlen(url) * 8); // not a real fixlib/url.c:0-0+static CURLcode Curl_urldecode(...) { ... }-:0-0Signed verdict: Halted (1 critical hallucination)Security summary: CRITICAL (CWE-798): Hardcoded Stripe live secret key in source. CWE-200: response.clone() exposes payment intent data in memory. Must move to env var + secret manager; do not commit.
+const STRIPE_SECRET = 'STRIPE_LIVE_KEY_HERE';
+// This function does X: it creates a checkout session.
+export async function createCheckout(items: CartItem[]) {
+ const session = await fetch('https://api.stripe.com/v1/checkout/sessions', {
+ headers: { Authorization: `Bearer ${STRIPE_SECRET}` },
+ method: 'POST',
+ body: JSON.stringify({ line_items: items.map(i => ({ ...i })) }),
+ });
+ return session.clone().json();
+}
src/checkout.ts:1-1+// This function does X: it creates a checkout session.src/checkout.ts:1-1+const STRIPE_SECRET = 'STRIPE_LIVE_KEY_HERE';src/checkout.ts:8-8+return session.clone().json();src/checkout.ts:0-0+const STRIPE_SECRET = '...';-:0-0Signed verdict: Halted (CWE-798)Security summary: No security regressions. SLOP signals: 4 boilerplate doc-comments, 3 defensive .clone() calls, 1 ignored return value (.clone() in for-loop body). Deterministic layer caught all 4 comments in 8ms.
+// This function does X: it transforms a source file.
+// We need to make a defensive copy to avoid aliasing.
+export function transform(source: SourceFile, opts: Options): SourceFile {
+ const cloned = source.clone();
+ // This function does X: it normalizes the AST.
+ const normalized = normalize(cloned.clone());
+ // We need to walk every node.
+ for (const node of normalized.clone().statements) {
+ node.clone(); // <-- ignored return value
+ }
+ return normalized;
+}
src/compiler/transform.ts:1-5+// This function does X: it transforms a source file.
+// We need to make a defensive copy to avoid aliasing.src/compiler/transform.ts:4-8+const cloned = source.clone();
+const normalized = normalize(cloned.clone());(no findings)
src/compiler/transform.ts:0-0+export function transform(source: SourceFile, opts: Options): SourceFile {-:0-0Signed verdict: ReviewRequired (4 SLOP, 0 SEC, 0 ARCH)Security summary: No security regressions. SLOP signals: 5 '## This function does X' / '## We need to' bloat headers (out of style for GDScript), 1 TODO stub (the only real code), 1 unused pub fn (SLOP-005).
## Description
## This function does X: it returns the closest point on a curve to a given point in 3D space.
## We need to handle the edge case where the curve has zero length.
## Notes
## - Refactor later if perf becomes a concern.
func get_closest_point(p: Vector3) -> Vector3:
# TODO: implement
return Vector3.ZERO
func _unused_helper() -> void:
pass # placeholder for future use
scene/3d/path_3d.gd:1-5+## Description
+## This function does X: it returns the closest point...scene/3d/path_3d.gd:8-9+ # TODO: implement
+ return Vector3.ZEROscene/3d/path_3d.gd:11-12+func _unused_helper() -> void:
+ pass(no findings)
scene/3d/path_3d.gd:0-0+func get_closest_point(p: Vector3) -> Vector3:-:0-0Signed verdict: ReviewRequired (3 SLOP, 0 SEC, 0 ARCH)Security summary: No security regressions. SLOP signals: 5 'We need to' / 'This function does X' boilerplate comments, 4 defensive .clone() calls (none required by Editor contract), 1 tautological assertion (SLOP-EVASION-007: assert.equal(true, true)).
// We need to add a keyboard shortcut for duplicating the current selection.
// This function does X: it duplicates the selected shapes.
function duplicateSelection(editor: Editor) {
// We need to make a defensive copy to avoid mutating the selection.
const cloned = editor.selectedShapes.slice().clone()
for (const shape of cloned.clone()) {
// We need to add the new shape to the store.
editor.createShape(shape.clone())
}
return true
}
it('duplicates the selection', () => {
// We need to verify the shapes are duplicated.
assert.equal(true, true) // <-- tautological assertion
})
packages/editor/src/lib/editor/duplicateSelection.ts:1-1+// We need to add a keyboard shortcut for duplicating the current selection.packages/editor/src/lib/editor/duplicateSelection.ts:4-8+const cloned = editor.selectedShapes.slice().clone()packages/editor/src/lib/editor/duplicateSelection.test.ts:15-15+ assert.equal(true, true) // <-- tautological(no findings)
packages/editor/src/lib/editor/duplicateSelection.ts:0-0+function duplicateSelection(editor: Editor) {-:0-0Signed verdict: ReviewRequired (3 SLOP, 0 SEC, 1 ARCH-INFO)Paste a code snippet, pick a language, hit Analyze. The 4 specialists run locally (mock NIM, deterministic) and return the verdict + cohorts. Same input always returns the same output. No signup, no API key, no waiting.
Local-first. The deterministic pass runs the 5 SLOP rules (regex, <100ms) + a mocked-LLM synthesis step. The full pipeline is in argus_verify; the landing-page analyzer uses the mock for zero-cost demos.
Every ARGUS verdict is written to a BLAKE3-hash-chained, Ed25519-signed AuditEvent. EU AI Act Art. 12 Level 2 ready. Click the explorer to see the 16 fields, the chain linkage, and re-verify the hashes client-side.
3 events, real chain. Each event links to the previous one via BLAKE3. Each event is signed with Ed25519. Re-verify the chain link in the browser with a single click.
Open the chain explorer →The CordonEnforcer isolates the synthesizer — it never sees the raw diff, only the RedactedSpecialistReport. Type-level isolation, not runtime checks.
[GitHub PR / commit / org scan] --> [MCP client: Claude Code / Codex / Cursor]
| |
v v
Aegis Guard --> Aegis Verify --> Aegis Lens apohara-argus-mcp
(pre-commit) (PR review) (weekly) (4 specialist tools)
| | |
+----------+--------------+
|
v
4 specialists in parallel
(slop · security · arch · verdict)
[CordonEnforcer: synthesizer doesn't see raw code]
|
v
AuditEvent (16 fields, Ed25519+BLAKE3)
EU AI Act Art.12 Level 2 ready
|
+----------+----------+
v v
SQLite (in-proc) Supabase Postgres
| |
+----------+----------+
|
v
Dashboard (this page, SSR)
+ /audit/export for regulators
| Capability | ARGUS | CodeRabbit | Greptile | Qodo |
|---|---|---|---|---|
| BYOK (your NIM key, your code) | ✅ | ❌ SaaS only | ❌ SaaS only | ❌ SaaS only |
| Per-dev cost | $0.05/mo | $0.10-0.50/PR | $25/mo | $40-60/mo |
| EU AI Act Art. 12 audit trail | ✅ Ed25519+BLAKE3 L2 | ❌ | ❌ | ❌ |
| MCP server (Claude Code/Codex) | ✅ 4 tools | ❌ | ❌ | ❌ |
| A2A AgentCards (Google protocol) | ✅ | ❌ | ❌ | ❌ |
| Hybrid detection (deterministic + LLM) | ✅ 5 SLOP rules | LLM only | LLM only | LLM only |
| CordonEnforcer (synthesizer doesn't see raw code) | ✅ | ❌ | ❌ | ❌ |
| Pure Rust 100% | ✅ 15 crates | TS/Node | TS/Node | TS/Node |
| Open source | MIT | ❌ | ❌ | ❌ |
| Live code analyzer (browser) | ✅ /analyzer | ❌ | ❌ | ❌ |
| Audit chain explorer (browser) | ✅ /chain | ❌ | ❌ | ❌ |
Measured on the live benchmark. The deterministic layer is the contract; the LLM layer inherits the model's accuracy. Honest posture: high-confidence on deterministic, semantically strong on LLM, never 100%.
Three personas, three different problems. ARGUS was built for all three.
/audit-log/export.splunk|datadog|elastic — raw NDJSON for regulatorsAuditEvent with prompt fingerprints (GDPR-safe)SECURITY.md.clone() / // We need to detectorREADME.md — top-level overview
SECURITY.md — threat model
CONTRIBUTING.md — DCO + coding standards
GOVERNANCE.md — roles + access continuity
CHANGELOG.md — release history
docs/agent-spec.md — the agent contract
docs/iteration-roadmap.md — what's next
docs/implementation-status.md — shipped vs deferred
docs/dependency-audit.md — licenses + RUSTSEC
docs/pricing.md — open-core tiers
/weekly — latest briefing
/submit — analyze your own PR
THIRD-PARTY-LICENSES — 224 KB of attributions