Your agent wrote Apex at 2am. Who reviewed it?

16 deterministic rules · Apex / Flow JSON / n8n DSL · sub-50ms in-browser · no model call, by design

Real deterministic linting of the code you submit. Samples lint instantly in your browser; “Lint on server” runs the same 16-rule engine on the live Cloudflare backend (POST /demos/apexlint/lint). No LLM, no real org, no secrets. The determinism is the point.

Guided tour

60-second walkthrough

  1. Paste ops code

    Use Apex, Flow JSON, or n8n DSL. Samples are editable, so the lint surface behaves like a review gate, not a screenshot.

  2. Run deterministic rules

    Lint on server executes the same 16-rule engine on the live backend. No model call decides whether production code is safe.

  3. Trace every finding

    Each result cites a rule ID, line, severity, and fix direction, with public fixtures in the repo for passing and failing cases.

Open Apexlint proof repo
OpportunityEnrichmentTrigger.cls Agent-generated trigger: enrich each Opportunity on update
Loading…
Loading…

Why deterministic rules, not an LLM

Same input, byte-identical output

You don't put a non-deterministic black box on the production gate. Rules produce the same findings every run — CI-gateable, postmortem-citable.

Sub-50ms, zero network

No model call, no spinner. The rule engine runs in your tab. Source code never leaves the browser. Nothing to leak.

Every finding cites a rule ID

AP-001 — not "the model said so." Each rule has a fixture pair (passing + failing) in the public repo. The claim is checkable.

LLM for the fuzzy; rules for the gate

Reserve the LLM for explaining a finding, not deciding it. Knowing when not to use an AI is the architectural signal.

LLM reviewer vs. deterministic rules

concern LLM-as-reviewer Apexlint (deterministic)
determinism Same input, different findings run to run. Can't gate CI on it. Same input → byte-identical findings, every time. CI-gateable.
latency 1–5s per review, network round-trip. Sub-50ms, in-browser, no network.
data_egress Source code leaves the building to a third party. Code never leaves the tab. Nothing to leak.
auditability "The model said so" — no rule to cite in a postmortem. Every finding cites a rule ID + fixture; reviewable in a public repo.
cost Per-token, scales with codebase. Zero marginal cost.

Bounded rule pack, by design

  • PMD's Apex ruleset has hundreds of rules. Apexlint ships 16 — the most common agent-generated failure modes.
  • A tight, auditable pack you can reason about beats a sprawling one nobody trusts.
  • Heuristic, not full AST. Rules use comment-strip + brace-depth + regex. Demonstrates the architecture, not production-grade coverage.
  • No execution-time analysis. Real governor consumption needs to run the code.

Scope and honesty

  • n8n DSL version-pinned to the v1.x workflow schema. Newer versions may rename fields.
  • No production org integration. The Metadata-API / n8n-REST connection layer needs a server-side OAuth flow — out of scope. The /demos/apexlint/lint backend lints code you paste; it does not pull from your org.
  • Every rule and its fixture pair is in the public apexlint-demo repo, with a node --test suite — the claim is checkable, not asserted.