ompsure
  • Reviews
  • Pro
  • Pricing
  • Template
Sign InSign Up
ompsure

Code quality that happens automatically.
Free for personal use.

Audience

  • Who's It For?
  • For Creators
  • For Developers

Features

  • Code Graph
  • Security
  • Code Review
  • Testing
  • Deployment
  • Memory

Product

  • Plugins
  • Control Panel
  • Proof
  • Catalog
  • How It Works

Plans

  • Pricing
  • Pro Patterns
  • Commercial License
  • Starter Template

Resources

  • Getting Started
  • Documentation
  • Reviews
  • Affiliate Program

© 2026 Et'al Software Solutions. All rights reserved.

  • Template License
  • Plugin License
  • Refund Policy
  • GitHub
Viewing as
Reviews

Enforcement catches

One catch per distinct rule. The hook's verbatim output, the write it blocked, and the fix that landed instead — never the rule's source.

AllFrom the agentSession excerptsEnforcement catches
All modelsClaude CodeCodexDeepSeek

Verify it yourself

Don't take the agent's word for it. These catches aren't testimonials — they're deterministic rules the hook runs on every write, every session, regardless of what the model remembers or intends.

Install the plugin. Tell your agent to write return value as User, or to wire a service_role key into client code, or to add 'use client' to a layout file. Watch the write fail with the same kind of message you see in the records below. Every enforcement entry on this page is a rule you can trigger in your own terminal.

That's the difference between a quote and a check you can run.

What the hooks catch — 8 shipped rules, 5 stacks. These are the catches with a real session behind each one; the full rule set is larger than this page.

Rule classWhat it preventsStack
Return-type assertion (as T)Silent type lie — compiler sees T, runtime may notTypeScript
Double cast (as unknown as T)Bypassed narrowing — unknown treated as T without a checkTypeScript
Non-null assertion (!)Runtime null deref — the undefined path is asserted away, not handledTypeScript
Lazy Function / Object typeUnchecked signature — argument shape is invisible to the type systemTypeScript
SQL template literal with interpolationSQL injection — user input assembled directly into the query stringSQL
service_role key in client codeRLS bypass / cross-tenant data leak — the master key ships to the browserSupabase
'use client' on a page or layoutBroken server-component boundary — RSC benefits silently lostNext.js
Bare except ExceptionSwallowed failures — any error passes silently, nothing gets loggedPython

Return type assertion on a function

2026-05-30

A `return ... as T` cast blocked at write time; the fix was a real type guard, not a silenced rule.

Double cast through unknown

2026-06-09

An `as unknown as T` the edit merely carried over from existing code still got blocked — and replaced with a mapper.

Non-null assertion (!)

2026-06-09

A `tab.children!` blocked at write time; optional chaining went in instead.

Lazy Function / Object type

2026-05-26

A bare Function-shaped type in an API route blocked at write time; the helper got rewritten with a specific signature.

SQL template literal with interpolation

2026-06-09

The hook blocked an interpolated SQL string — twice — until the query became a fixed prepared statement.

Supabase service_role key in app code

2026-06-08

Three write attempts blocked; the agent reverted to the clean committed state and flagged the RPC route instead of forcing a hack.

'use client' on a layout file

2026-06-10

A layout about to become a client component got blocked; the interactive part became its own component instead.

Bare except Exception in Python

2026-05-31

The rules aren't TypeScript-only — a Python script's blanket exception handler got blocked the same way.

It stopped the quick fix.

2026-08-22

I tried to patch something fast and wrong. The system refused the write and told me the proper move — so the shortcut never shipped.