diff --git a/ihm.py b/ihm.py
index 82ece822684ace85b10419a90063b6183b90ad82..9236072694c623cfbbe317c41faaf04907f1e898 100644
--- a/ihm.py
+++ b/ihm.py
@@ -1,5 +1,5 @@
-import subprocess
 import sys
+from subprocess import Popen
 from os import path
 from time import sleep
 
@@ -7,7 +7,6 @@ from mqtt_client import MqttClient
 from ssh_client import SSHClient, Cmd, RemoteClient
 from update import VersionManager
 
-
 class Ihm(MqttClient, SSHClient):
 
     def __init__(self):
@@ -24,10 +23,12 @@ class Ihm(MqttClient, SSHClient):
             print("\n")
             cmd = input(">")
 
+            # Envoie un signal a tout le monde pour exit
             if cmd.lower() == "exit":
                 self.client.publish("ihm/exit")
                 exit_bool = True
 
+            # cherche tout les potentiel agents sur les raspberry et les tuent
             if cmd.lower() == "kill":
 
                 commands = [
@@ -49,6 +50,7 @@ class Ihm(MqttClient, SSHClient):
                     print("Hostname :", self.clients[i_client].hostname, " User :", self.clients[i_client].user)
                     self.run_cmd(i_client, commands)
 
+            # affiche tout les agents en vie
             if cmd.lower() == "agent":
                 commands = [
                     Cmd(
@@ -59,11 +61,13 @@ class Ihm(MqttClient, SSHClient):
                     print("Hostname :", self.clients[i_client].hostname, " User :", self.clients[i_client].user)
                     self.run_cmd(i_client, commands)
 
+            # automatise la mise a jour de l'exerience sur les raspberry
             if cmd.lower() == "update":
                 r = RemoteClient("192.168.105.18", "pi", "raspberry")
                 updater = VersionManager(r)
                 updater.update()
 
+            # charge une experience et verifie le format
             if cmd.lower() == "load":
                 print("Give Path to experiment folder(relavive)")
                 cmd = input(">")
@@ -78,29 +82,36 @@ class Ihm(MqttClient, SSHClient):
                     experiment_folder = cmd
                     print("Experiment loaded")
 
+            # Crée les processus amas/env/scheduler de l'experience chargé
             if cmd.lower() == "start":
 
                 if experiment_folder != "":
 
                     # choose exec
+                    print("Choose execution mode for the scheduler")
+                    print("0 : step by step, 1 : auto")
+                    while cmd not in ["0", "1"]:
+                        cmd = input(">")
 
                     # start subprocess scheduler
-                    subprocess.Popen([sys.executable, 'scheduler.py'])
-                    # wait(1)
+                    p1 = Popen([sys.executable, 'scheduler.py', cmd])
+                    sleep(1)
                     # start subprocess amas
-                    subprocess.Popen([sys.executable, experiment_folder+'/amas.py'])
+                    p2 = Popen([sys.executable, experiment_folder+'/amas.py'])
                     # start subprocess env
-                    subprocess.Popen([sys.executable, experiment_folder+'/env.py'])
+                    p3 = Popen([sys.executable, experiment_folder+'/env.py'])
 
             if cmd.lower() == "pause":
-                pass
+                self.client.publish("ihm/pause")
 
-            if cmd.lower() == "unpause":
-                pass
+            if cmd.lower() in ["s", "step"]:
+                self.client.publish("ihm/step")
 
+        self.client.publish("ihm/step")
         sleep(2)
 
 
+
 if __name__ == '__main__':
     a = Ihm()
     a.run()
diff --git a/scheduler.py b/scheduler.py
index 0995b4322cc6ffb32f384117953b6ff166043fd7..652345fe909ef79c4d533a25fc0cb6743252222e 100644
--- a/scheduler.py
+++ b/scheduler.py
@@ -1,3 +1,4 @@
+import sys
 from time import sleep
 
 from schedulable import Schedulable
@@ -5,21 +6,35 @@ from schedulable import Schedulable
 
 class Scheduler(Schedulable):
 
-    def __init__(self):
+    def __init__(self, execution_policy: int):
 
         Schedulable.__init__(self, client_id="Scheduler")
-        self.sleep_between_cycle = 5
+        self.sleep_between_cycle = 0
+
+        # 0: pas a pas, 1: auto
+        self.execution_policy: int = execution_policy
+        self.ihm_token = 0
+        self.paused = True
 
         self.nbr_agent = 0
         self.subscribe("amas/agent/new", self.update_nbr_agent)
         self.subscribe("amas/action_done", self.update_schedulable)
         self.subscribe("env/action_done", self.update_schedulable)
+        self.subscribe("ihm/step", self.step)
+        self.subscribe("ihm/pause", self.pause)
 
         self.agent_waiting = 0
         self.schedulable_waiting = 0
 
         print("Init done")
 
+    def pause(self, client, userdata, message):
+        self.paused = not self.paused
+        self.ihm_token += 1
+
+    def step(self, client, userdata, message):
+        self.ihm_token += 1
+
     def update_schedulable(self, client, userdata, message):
         self.schedulable_waiting += 1
         print("__Schedulable is waiting")
@@ -43,6 +58,11 @@ class Scheduler(Schedulable):
             sleep(self.wait_delay)
         self.schedulable_waiting = 0
 
+    def wait_ihm(self):
+        while self.ihm_token == 0:
+            sleep(self.wait_delay)
+        self.ihm_token -= 1
+
     def first_part(self) -> None:
         """
         first part of a cycle
@@ -87,6 +107,11 @@ class Scheduler(Schedulable):
         while not self.exit_bool:
             print("Cycle : ", self.nbr_cycle)
 
+            if self.execution_policy == 0 or self.paused:
+                self.wait_ihm()
+            if self.exit_bool:
+                break
+
             print("-First part")
             self.first_part()
             print("-Main part")
@@ -94,15 +119,15 @@ class Scheduler(Schedulable):
             print("-Last part")
             self.last_part()
 
-            # sleep(self.sleep_between_cycle)
-            # input()
+            sleep(self.sleep_between_cycle)
             self.nbr_cycle += 1
 
+        # exit
         self.client.publish("scheduler/schedulable/wakeup", "")
         self.client.publish("scheduler/agent/wakeup", "")
         sleep(2)
 
 
 if __name__ == '__main__':
-    s = Scheduler()
+    s = Scheduler(int(sys.argv[1]))
     s.run()