Llm Dark Patterns banner
waitdeadai waitdeadai

Llm Dark Patterns

AI community

Description

Umbrella for the LLM Dark Patterns Hooks suite — single-purpose Claude Code Stop hooks that suppress sycophancy, paternalism, false-success, permission-loops, training-cutoff confidence at the textual boundary.

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

LLM Dark Patterns Hooks

[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![tests](https://github.com/waitdeadai/llm-dark-patterns/actions/workflows/test.yml/badge.svg)](https://github.com/waitdeadai/llm-dark-patterns/actions/workflows/test.yml) [![stress fixtures](https://img.shields.io/badge/stress_fixtures-337%2F337_PASS-green)](tests/stress) [![unit tests](https://img.shields.io/badge/loader_tests-17%2F17_PASS-green)](tests/test-pack-loader.sh)

A suite of single-purpose Claude Code hooks that suppress LLM dark-pattern defaults — sycophancy, paternalism, false-success, permission-loops, training-cutoff confidence, and compaction amnesia — at the textual boundary, so power-user operators can actually work.

This repo is the **umbrella** for a series of small hook repos, umbrella-only legacy hooks that still live here, and the research-grade closeout physics engine in [waitdeadai/agent-closeout-bench](https://github.com/waitdeadai/agent-closeout-bench). Each public standalone hook remains separately installable. The physics-backed lane uses one reproducible engine with per-category rule packs, fixtures, and decision JSON.

That does not collapse every hook into one generic detector. Each hook maps to its own category engine; the shared Rust binary is packaging for reproducible hashing, safe regex compilation, fixture testing, telemetry discipline, and paper-grade evaluation.

The shared architecture is out-of-band textual enforcement at Claude Code hook boundaries. The judge is deterministic code, not another LLM call. That means the model cannot modify the hook's code path from inside its closeout text; it does not mean the system is impossible to bypass, misconfigure, or evade by paraphrase.

What's shipped (as of 2026-05-13)

Phase Surface Status
Phase 1 — Locale loader + English pack lib/packs.sh, packs/locale/en.txt ✓ ships
Phase 2 — Spanish + Polish locale packs `packs/l