I altered the code a bit:
var direction = Vector2(0, 0)
func _process(delta):
if(AI_STATE == AI_IDLE && can_Move ==true):
AI_IDLE()
if(AI_STATE == AI_CHASE && can_Move ==true):
AI_CHASE()
func _on_move_Timer_timeout():
if(can_Move == false):
can_Move = true
direction = Vector2(random(), random()).normalized() * 50
else:
can_Move = false
func random():
randomize()
return randi()%21 - 10 # range is -10 to 10
func AI_IDLE():
move_and_slide(direction)
The most important change is that you should have a "direction" variable that gets updated only when the Timer timeouts. The code you posted looks like it updates the direction every time _process(...) is called, which could cause the jitters you experienced.