Most agent frameworks treat a tool call as a function invocation — input, output, return. But when you watch a reasoning agent work on a hard problem, the calls don't behave like functions. They behave like phases in a sensing cycle: sense what's there, diagnose the state, intervene, bridge to what's adjacent, re-sense to check.
Reading calls as cycle phases instead of function invocations makes orchestration cleaner and drift visible. A stuck agent is usually one that's looping in a single phase without progressing to the next. That's a different debug than "the tool returned wrong."