def start(ctx, watson, confirm_new_project, confirm_new_tag, args, at_,
          gap_=True):
    """
    Start monitoring time for the given project.
    You can add tags indicating more specifically what you are working on with
    `+tag`.

    If there is already a running project and the configuration option
    `options.stop_on_start` is set to a true value (`1`, `on`, `true`, or
    `yes`), it is stopped before the new project is started.

    If `--at` option is given, the provided starting time is used. The
    specified time must be after the end of the previous frame and must not be
    in the future. If there is a current frame running, it will be stopped at
    the provided time.

    Example:

    \b
    $ watson start --at 13:37
    Starting project apollo11 at 13:37

    If the `--no-gap` flag is given, the start time of the new project is set
    to the stop time of the most recently stopped project.

    Example:

    \b
    $ watson start apollo11 +module +brakes --no-gap
    Starting project apollo11 [module, brakes] at 16:34
    """
    project = ' '.join(
        itertools.takewhile(lambda s: not s.startswith('+'), args)
    )
    if not project:
        raise click.ClickException("No project given.")

    # Confirm creation of new project if that option is set
    if (watson.config.getboolean('options', 'confirm_new_project') or
            confirm_new_project):
        confirm_project(project, watson.projects)

    # Parse all the tags
    tags = parse_tags(args)

    # Confirm creation of new tag(s) if that option is set
    if (watson.config.getboolean('options', 'confirm_new_tag') or
            confirm_new_tag):
        confirm_tags(tags, watson.tags)

    if project and watson.is_started and not gap_:
        current = watson.current
        errmsg = ("Project '{}' is already started and '--no-gap' is passed. "
                  "Please stop manually.")
        raise click.ClickException(
            style(
                'error', errmsg.format(current['project'])
            )
        )

    if (project and watson.is_started and
            watson.config.getboolean('options', 'stop_on_start')):
        ctx.invoke(stop, at_=at_)

    _start(watson, project, tags, start_at=at_, gap=gap_)

    Start monitoring time for the given project.
    You can add tags indicating more specifically what you are working on with
    `+tag`.

    If there is already a running project and the configuration option
    `options.stop_on_start` is set to a true value (`1`, `on`, `true`, or
    `yes`), it is stopped before the new project is started.

    If `--at` option is given, the provided starting time is used. The
    specified time must be after the end of the previous frame and must not be
    in the future. If there is a current frame running, it will be stopped at
    the provided time.

    Example:

    
    $ watson start --at 13:37
    Starting project apollo11 at 13:37

    If the `--no-gap` flag is given, the start time of the new project is set
    to the stop time of the most recently stopped project.

    Example:

    
    $ watson start apollo11 +module +brakes --no-gap
    Starting project apollo11 [module, brakes] at 16:34
    
watson/cli.py