What differs from waterfall methods is that agile organizations practice these activities just-in-time. I.e., they plan, but they try not to invest a great deal of time on details that are likely to change. Same with requirements and design. Consequently, they have to constantly revisit and flesh out the details as development progresses. With waterfall methods, you try to complete detailed planning, requirements, and design as if there is little or no risk of them changing.
When you employ agile methods, there are constant temptations to lengthen iterations, put off getting feedback from users, put off revisiting requirements, and blow off writing tests first. Agile is not about hacking; in many ways it requires more discipline than waterfall.