5 Real Pitfalls to Ditch AI-Slop Output
I've been running Claude Code for three years to wire up AI workflows. The most frustrating thing in 2026 isn't the model being dumb — it's being *too* consistent. Every PR I touch has the same Tailwind class soup: bg-blue-500 text-white rounded-lg px-4 py-2, text-3xl font-bold text-gray-900, shadow-md. I'd append "use modern but not overused aesthetic" to every prompt. Claude Code would comply for one turn, then forget. Because taste isn't a rule the model can store — it's a constraint you have to spell out.
That's why Nutlope/hallmark dropping into GitHub Trending last week (+794 stars/day) caught my eye. It's a Markdown-driven design constraint skill. The README says it "kills AI-slop aesthetic by listing forbidden patterns and forcing the model to self-audit before output." The promise is exactly what I wanted. It works, but it took me 4 hours to wrestle 5 real pitfalls into submission. This post is that retrospective.
What I Was Shipping Before halllmark
Six months ago I rewrote yaohehe.github.io's archive page with Claude Code. Every PR had the same fingerprint:
- All buttons: `bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-lg`
- All section headings: `text-3xl font-bold text-gray-900`
- All cards: `shadow-md rounded-lg p-6 gap-4`
- Spacing rhythm: 4 / 8 / 16 / 24 only — no breathing
I assumed it was a prompt issue and added "avoid generic blue", "use modern aesthetic", "be creative with palette". Claude Code would comply, then revert. I finally realized: these are , not reproducible rules. The model has no persistent preferences.
hallmark solves this by encoding "forbidden patterns" as negative rules the skill reads before generating. Instead of hoping the model picks a non-blue palette, you blue-500 by name.
What is halllmark Skill? 5-Minute Explainer
Nutlope/hallmark is a Markdown-driven design constraint skill. Core structure:
hallmark/
├── SKILL.md # Skill description, read by Cursor/Codex/Claude Code
├── rules/
│ ├── colors.md # Forbidden palettes
│ ├── typography.md # Forbidden font scales
│ ├── components.md # Forbidden button/card templates
│ ├── spacing.md # Forbidden 4/8/16/24 rhythm
│ └── motion.md # Forbidden transitions
└── examples/
├── good-landing.html # Anti-example: AI-written
└── bad-landing.html # Example: human-written
When triggered, the skill:
1. Receives a UI generation prompt (Tailwind, shadcn, plain CSS)
2. Reads rules/*.md and extracts forbidden patterns
3. Cross-checks against examples/ good vs bad pairs
4. Pre-empts output by substituting alternatives (e.g. bg-amber-50 text-stone-900 instead of bg-blue-500)
🎯 TL;DR — First-Aid Checklist for 5 Pitfalls
🪤 Pit 1: Global user-level install — Cursor can't find it → **Use project-level .claude/skills/ or .cursor/rules/**
🪤 Pit 2: Mixing npx hallmark install with git clone → **Pick one path; dual installs cause partial rule load**
🪤 Pit 3: .hallmark/rules/ placed in a subdirectory → **Skill Loader doesn't recurse; must be repo root**
🪤 Pit 4: Installed but output is still blue-500 → **Claude Code 2.0+ changed autoload; use skill command to invoke**
🪤 Pit 5: Codex CLI completely ignores hallmark → **Must pass --skills-dir explicitly; Codex 1.x doesn't scan by default**
🛠️ Prerequisites
- Node.js ≥ 18 (`hallmark install` uses `npm`)
- Claude Code ≥ 2.0.0 (autoload behavior changed; older needs manual `/skill`)
- Cursor ≥ 0.42 (rules moved to `.cursor/rules/` directory)
- Codex CLI ≥ 1.5.0 (requires `--skills-dir`)
Verify versions:
claude --version # Should be ≥ 2.0.0
cursor --version # Should be ≥ 0.42.0
codex --version # Should be ≥ 1.5.0
🚀 Step 1: Choose Your Install Path
hallmark README recommends two paths:
Path A: npx one-shot (best for personal multi-project setup)
mkdir -p ~/.claude/skills/hallmark
npx @nutlope/hallmark init ~/.claude/skills/hallmark
claude skill list # Should print hallmark
Path B: Project-level git clone (best for team PR-review)
git clone https://github.com/Nutlope/hallmark.git .hallmark
ln -s ../../.hallmark .claude/skills/hallmark # Claude Code symlink
mkdir -p .cursor/rules && ln -s ../../.hallmark/rules .cursor/rules/hallmark
Rule of thumb:
- Personal blog → Path A
- Team / PR-tracked → Path B
Pitfall #1 hit me exactly here: I mixed A and B. SKILL.md loaded from npx version, but .cursor/rules/ pointed at git clone's master branch. After a Copilot PR rules drifted for half a day.
💣 Pitfall Log: 5 Real Failures + Fixes
Pit 1: Cursor Ignores halllmark Rules
**Symptom**: Open Cursor composer → prompt "build a login page" → button still ships as bg-blue-500 text-white rounded-lg.
Root cause:
Cursor 0.42 and earlier read ~/.cursor/rules or a single .cursorrules file. Cursor 0.42+ switched to a directory mode: .cursor/rules/{name}.mdc. The hallmark README didn't clarify this, so most users keep stuffing rules into .cursorrules. Newer Cursor silently ignores the old location.
Fix:
# 1. Split hallmark into multiple .mdc files
cp .hallmark/rules/colors.md .cursor/rules/hallmark-colors.mdc
cp .hallmark/rules/typography.md .cursor/rules/hallmark-typography.mdc
cp .hallmark/rules/components.md .cursor/rules/hallmark-components.mdc
# 2. Add frontmatter to each .mdc so Cursor knows when to trigger
# hallmark-colors.mdc:
# ---
# description: Avoid generic AI color palette (blue-500, slate-*)
# globs: **/*.{tsx,jsx,html,css}
# ---
.mdc is Cursor's rules extension (Markdown + Config). The globs field restricts when the rule fires. After applying this in my blog template, Cursor composer stopped reaching for slate-* immediately.
Pit 2: Skill Installed but Claude Code Doesn't Invoke It
**Symptom**: claude skill list shows hallmark; ask Claude Code to write a new page, output still bg-blue-500.
Root cause:
Claude Code 2.0 changed autoload behavior: skills installed under ~/.claude/skills/* no longer auto-inject into every session. They only fire on explicit /skill hallmark or when the prompt contains the keyword "hallmark". Part of a privacy-first refactor — prevent skills from silently reading every conversation.
Fix:
**Option A**: Add to your project's CLAUDE.md:
Use the `hallmark` skill for any UI work involving Tailwind, shadcn,
or plain CSS components. Run `skill hallmark` first.
Option B: Bake into system prompt greeting: "I have hallmark installed. Apply it to all UI tasks."
In practice Option A is more reliable — it travels with the project. Option B gets forgotten.
Pit 3: Codex CLI Completely Ignores halllmark
**Symptom**: codex "build a dashboard" → output is still the default AI palette.
Root cause:
Codex CLI 1.5 and earlier has no .codex/skills/ autoload. You MUST pass --skills-dir explicitly. This is the biggest divergence from Claude Code.
Fix:
codex --skills-dir ~/.claude/skills/hallmark "build a dashboard"
**Permanent alias** (add to ~/.bashrc / ~/.zshrc):
alias codex="codex --skills-dir ~/.claude/skills/hallmark"
Caveat: this forces hallmark injection. If you sometimes want "plain AI default style" for quick prototyping, bypass with:
\codex "build quick prototype" # Prefix \ skips alias
Or:
codex --no-skills "build quick prototype"
Pit 4: `.hallmark/rules/` in a Subdirectory → 0 Rules Loaded
Symptom:
project/
├── docs/
│ └── .hallmark/
│ └── rules/colors.md # ❌ Never loaded
└── src/
Claude Code and Cursor Skill Loaders **don't recurse**. They only scan .hallmark/, .claude/skills/, .cursor/rules/ at the repo root.
Fix:
# Verify what the loader scans
claude skill debug hallmark
# Output: Searching root for .hallmark/, .claude/skills/, ~/.claude/skills/
# Move .hallmark/ to repo root
mv docs/.hallmark .hallmark
**Lesson**: Make it a habit — first step in any new project: git init && mkdir .hallmark/rules.
Pit 5: halllmark Rules Are Outdated (Nutlope Updated 2026-02)
Symptom:
The forbidden-palette rule bans bg-blue-500, bg-gray-100, text-slate-*. But 2026-era shadcn defaults shifted to bg-zinc-50, text-zinc-900. AI found a new "AI taste" escape hatch.
Root cause:
Nutlope pushed commit a83f2e1 on 2026-02-14 updating rules to include zinc-*, neutral-*, Emerald-600 — the "new AI taste" colors. Docs haven't caught up, so many users still run stale rules.
Fix:
# Upgrade npx path
npx @nutlope/hallmark update
# Or Path B pull master
cd .hallmark && git pull origin master
Lesson: anti-AI-slop is an arms race. Each model update spawns new templates. Pull hallmark at least monthly.
✅ 5-Step Production Verification Checklist
After fixing the 5 pitfalls, run this checklist:
- [ ] In Cursor composer write any login page; verify button color is outside forbidden palette
- [ ] `claude skill list` outputs hallmark ✅
- [ ] Open new Claude Code session; prompt contains "hallmark"; verify SKILL.md is read (check dev log)
- [ ] `codex --skills-dir ~/.claude/skills/hallmark "test"` outputs non-default colors
- [ ] `.cursor/rules/hallmark-*.mdc` frontmatter contains `globs` constraint
❓ FAQ
**Q: Does hallmark overlap with vercel-labs/awesome-cursorrules?**
A: No. awesome-cursorrules is a collection repo; hallmark is a single deep skill. Use both: awesome-cursorrules for base rules, hallmark for design guardrails.
Q: Does hallmark slow down AI generation?
A: Negligibly. The rule loader reads 5 md files per turn, < 50ms.
Q: Can I bind a Stream Deck button to invoke hallmark?
A: Not necessary — autoload is enough. The button could trigger claude /skill hallmark if you want.
🎬 Conclusion
The 5 pitfalls taught me one thing: AI Coding skill installation is not a one-shot. It's runtime state. Claude Code 2.0 changed autoload, Codex CLI doesn't autoload at all, Cursor 0.42 moved the rules directory. Every tool has its own quirks. You have to walk each one through it manually at least once.
If you're tired of every blog/dashboard looking like a Vercel template, hallmark is the 5-minute install worth doing in 2026. If you're editing CSS on a 32" 4K monitor, check out my programmer monitor picks — I'll dive into U2725QE vs U3225QE pitfall comparison in the next post.
👉 Join MiniMax Token Plan: AI coding acceleration for businesses
👉 Join Zhipu Coding Plan: GLM-4.6/GLM-5 coding packages, China-stable, pay-per-token unlimited
👉 Join Aliyun AI: Top AI products with exclusive coupons for business innovation
📌 This article was AI-assisted generated and human-reviewed | TechPassive — An AI-driven content testing site focused on real tool reviews
🔗 Recommended Tools
These are carefully selected tools. Using our affiliate links supports us to keep producing quality content: