Context is everything
Why the model "forgot" — and the four things to paste so it doesn't.
The model didn't get worse halfway through your project. It just stopped being able to see it.
The failure you keep hitting
Hour one is magic. By hour three it's re-inventing functions you already have, importing libraries you removed, and confidently editing a file that no longer looks like that. Every one of those is the same problem: the model is answering about the version of your project it can currently see, which is not the one on your disk.
The four things to paste
- The goal — one sentence, restated every session. Not "continue", which tells it nothing.
- The shape — the output of
ls, or a list of your files with one line each about what they do. - The current file — the whole thing, not the part you think is relevant. The bug is usually in the part you cut.
- The boundary — what it may change, and explicitly what it may not.
Write it down once
Keep a CONTEXT.md in your project folder. Paste it at the top of every new session. Update it whenever something changes.
# <Project name> **What it does:** <one sentence> **Stack:** <plain HTML/CSS/JS, no build step> (or whatever you chose) **Live at:** <url, or "not deployed yet"> ## Files - index.html — the page, all the markup - app.js — <what it handles> - style.css — styling only ## Working right now - <the last thing you confirmed works> ## Known broken / not built yet - <thing> ## Decisions — do not undo these - No frameworks. No build step. - <anything you've already argued the model out of>
Start fresh more often than feels right
A long chat isn't an asset — a chat full of dead ends, abandoned approaches and superseded file versions actively pulls the model toward things you already rejected. When a session gets confused, don't argue with it. Open a new one, paste CONTEXT.md and the current file, and ask again. It's almost always faster.
Give it a boundary, every time
Unbounded requests get unbounded edits. Compare:
- ❌ "Add a dark mode."
"Add a dark mode. Edit style.css only — do not touch the HTML or JS. Use prefers-color-scheme. Show me the complete new file."
The second one gets a reviewable change. The first one gets a rewrite, and you won't notice what it broke until three steps later.
The rule underneath all of this
You can't check what you can't see. Ask for changes small enough that you can read the diff and tell whether it's right — that habit is the whole difference between vibe coding that ships and vibe coding that stalls.