Configuration is solved. Taste isn't.
Your AGENTS.md can say "always use pnpm." It can't say "make it feel like rain on a window and the hum of a neon sign."
One of those is configuration. The other is taste.
Every metaprompting tool optimizes configuration. Cursor's /Generate Cursor Rules, the self-amending CLAUDE.md loop, OpenCode's /init — they tune build commands, lint rules, test runners. The structural layer.
Nobody is metaprompting taste. The register. The mood. The difference between "dark theme with purple" and "obsidian backgrounds, electric violet accents, liquid-ghostly animations." That's the layer where vibe coding actually lives and no tool touches it.
Gemma 4 shipped this month. Runs on your laptop via Ollama. Apache 2.0. Native thinking mode. It knows what vibe coding is — not the term, the aesthetic. It distinguishes between commanding a model and curating one. It has opinions.
Build the loop nobody has built. A local model that watches your session, notices which aesthetic framings you keep and which you throw away, reflects on why, and writes the taste directive that makes the next session better. Not a rules snapshot that rots. A rules file that learns your visual language.
The model that writes your prompts should be the model you own.
Two paths to Gemma 4. Both converge at setup/verify.sh and the same challenge code.
# ☁️ Cloud — fast lane (2 min). Free API key, no GPU.
./setup/cloud.sh
# 💻 Local — own the model (15–30 min). Needs 16GB+ RAM.
./setup/local.shIf verify.sh passes, you're ready. Pick a challenge.
They compose into one pipeline.
- Surface — Feed Gemma 4 a vibe coding session. It extracts the taste you didn't know you had.
- Loop — The self-amending taste loop. The model watches your aesthetic choices and writes directives into your rules file.
- Vibe Check — Generate with the directive and without. Did the taste actually land?
The Sentinel — Gemma 4 tails your live Claude Code session (~/.claude/projects/<encoded-cwd>/<uuid>.jsonl), holds its own taste agenda, and claude -p --resume's course corrections on its own authority. Silence is valid; intervention is earned. No one has built this.
Drop your .cursorrules, CLAUDE.md, or AGENTS.md in bring-your-own/. Then run:
python challenges/01-surface/audit.py bring-your-own/your-file.mdThe audit reports what taste is implied by your phrasing but never stated. Use that as your onramp into any challenge.
- SESSION_FORMAT.md — How vibe coding sessions are logged. Prompt → output → decision → why. Also documents the live Claude Code JSONL parser — point Surface or Loop at your real history.
- TASTE_FORMAT.md — The taste directive schema.
dimension,keep,avoid,reference.
The system prompts in surface.py and loop.py are themselves in-register — invitation, not instruction. That's the craft: the prompt's own register is the induction signal.
"You are a taste extractor" → corporate output →
referencefields that read "make it clean and modern." "Read it like someone who's thrown work away for feeling wrong" →referencefields that read "a page that breathes — invitation, not persuasion."
Three other craft moves baked into the prompts, per the induction research:
- Divergent exemplars beat curated ones. 2–3 reference fields spanning web/CLI/data surfaces, not 5 examples on the same dimension.
- Name the failure mode explicitly.
"make it clean and modern" is what failure sounds likelets the model self-recognize collapse. - Validate refusal.
two real directives beats five generic ones— padding for schema's sake is a failure, not a win.
Read the prompts. They're short. Edit them as you need — if they don't fit your register, you own the words.
| You are… | Start here |
|---|---|
| New to rules files or local LLMs | Cloud setup → Challenge 1 |
| Claude Code user with some Python | Challenge 2: fill the loop stubs |
| Builds with LLMs, knows eval | Challenge 3: build the judge |
| Brought your messy rules files | audit.py on your files → any challenge |
| Want to loop on your own history | discover_current_session() + parse_jsonl_session() → Challenge 1 or 2 against your real Claude Code JSONL |
| Architecturally ambitious | The Sentinel — tail your live session, intervene on taste |
- Repo layout is flat —
challenges/,setup/,shared/,bring-your-own/ shared/has the Gemma client, session parser, Pydantic schemas, rules I/O. Import, don't modifysetup/requirements.txtinstalls:ollama,openai,dspy-ai,pydantic,rich
vibecodingnights.com