code: def start(self, **kwargs):
          ts = {}
          ret = {}
          info_parts = {'info', 'get-value', 'get_value'}
          for cmd in self.commands:
              parser_cmd = self.parser_commands.get(cmd, cmd)
              if parser_cmd in kwargs or cmd in kwargs:
                  kws = kwargs.get(cmd, kwargs.get(parser_cmd))
                  if isinstance(kws, Namespace):
                      kws = vars(kws)
                  func = getattr(self, cmd or 'main')
                  ret[cmd] = func(**kws)
                  if cmd not in info_parts:
                      ts[cmd] = str(dt.datetime.now())
          exp = self._experiment
          project_parts = {'setup'}
          projectname = self._projectname
          if (projectname is not None and project_parts.intersection(ts) and
                  projectname in self.config.projects):
              self.config.projects[projectname]['timestamps'].update(
                  {key: ts[key] for key in project_parts.intersection(ts)})
          elif not ts:
              self.no_modification = True
          if exp is not None and exp in self.config.experiments:
              projectname = self.projectname
              try:
                  ts.update(self.config.projects[projectname]['timestamps'])
              except KeyError:
                  pass
              if not self.is_archived(exp):
                  self.config.experiments[exp]['timestamps'].update(ts)
          return Namespace(**ret)