Thanks Sean, I've just came up with this and wanted to update my post.
What I did is I specified a Stoppable stopme variable within agent. And assigned schedule.scheduleRepeating(agent) to it. This way it works. 



On Thu, Aug 15, 2013 at 2:24 PM, Sean Luke <[log in to unmask]> wrote:
On Aug 14, 2013, at 7:55 PM, Aуdar Aliev wrote:

> The problem is that I need to remove an agent from the schedule (I presume that after removing it from the schedule garbage collector will get to it) when his internal condition becomes true. For example, when agent stepped more than 50 times. How do I do that?

When you schedule an agent repeating, the scheduleRepeating() method returns a Stoppable object.  Store that Stoppable somewhere (perhaps in the agent itself), and call it when the condition has become true.  The agent will then not be rescheduled any more.  You don't need to implement the Stoppable interface.

You can also do this if you have scheduled an agent once but may wish to prevent his upcoming step() from ever occurring: this is done by using TentativeStep (see the manual).