The Interaction Loop
Every Claude Code session follows this pattern:
1. DESCRIBE → Explain what you want2. ANALYZE → Claude explores the codebase3. PROPOSE → Claude proposes a diff4. REVIEW → Read and evaluate5. DECIDE → Accept / Reject / Modify6. VERIFY → Run the tests7. COMMIT → Save (optional)The key: Claude proposes, you decide. Never skip the review step, even on changes that seem obvious.
Session Start
Before typing the first request:
- Verify CLAUDE.md is loaded (first line shown in context)
- Set a clear intention: one single objective per session
- Start with
/planif the task touches multiple files
cd your-projectclaude# Check: "✓ CLAUDE.md loaded"During the Session
Review the diff at each step — do not let Claude chain multiple changes without intermediate validation. On significant modifications, ask explicitly:
You: Show me what you changed before continuingContext management:
| Context | Action |
|---|---|
| 0-50% | Work freely |
| 50-75% | Be selective about open files |
| 75%+ | /compact now |
| 90%+ | /clear required |
Anti-Pattern: Vibe Coding
Letting Claude iterate unsupervised across multiple files, then discovering problems an hour later. The end-of-session diff becomes unreadable and rolling back is costly.
Concrete countermeasures:
- Validate after each modified file, not after an entire batch
- Run tests after each significant change
- Commit regularly to have clean rollback points
End of Session
Before closing:
# Check the repo stategit diff --stat
# Commit if everything is cleangit commit -m "feat: short description"If important decisions were made during the session (architecture choices, adopted conventions), note them in CLAUDE.md so the next session starts from the right context. Sessions do not transfer implicit decisions on their own.
Effective Prompt Format
WHAT: Fix the timeout bug on loginWHERE: src/auth/session.tsHOW: Increase expiry from 1h to 24hVERIFY: Login persists after browser refreshThis framework avoids ambiguities and reduces clarification back-and-forth.