The single biggest upgrade to your results is giving Claude a way to check itself. When Claude can run something and read the output, it stops guessing and starts iterating. It writes code, runs the check, sees the failure, and fixes it, all before handing anything back to you.
The check can be anything concrete: a test suite, a linter, a type-check, a build, or even a script that hits an endpoint. The key is that it produces a clear pass or fail.
Say this instead of hoping:
Add input validation to the signup handler.
Run `npm run lint` and `npm test` and make them pass before you finish.
Now Claude has a target. It will loop on that command until it goes green, rather than declaring victory on the first draft.
You can make this the default so you never have to repeat it. Drop the commands into CLAUDE.md at the project root:
## Checks
- Lint: `npm run lint`
- Tests: `npm test`
- Build: `npm run build`
Always run the relevant checks before saying a task is done.
That file loads at launch, so every session starts knowing how to verify itself.
For visual work, the check can be a screenshot. Ask Claude to build the UI, then look at the rendered result and compare it against what you described.
The pattern scales down too. Even a one-off task benefits from a quick ! bash command to confirm the change worked. The rule of thumb is simple: if you cannot tell whether the work is correct without running something, make sure Claude can run that something too. A closed feedback loop turns a hopeful first draft into a verified result.
Comments
Be the first to comment.