diff --git a/doc/man/tarantool.pod b/doc/man/tarantool.pod
index 7633e425f9ee4307ae718fcf06cb8ce3329688c9..436c06d8f9d1ad050b10571cd917fa6817a9ce90 100644
--- a/doc/man/tarantool.pod
+++ b/doc/man/tarantool.pod
@@ -4,6 +4,7 @@ tarantool - a Lua application server and a database management system
 
 =head1 SYNOPSIS
 
+    tarantool [OPTIONS] --name NAME --config CONFIG
     tarantool [OPTIONS] [SCRIPT [ARGS]]
 
 =head1 DESCRIPTION
@@ -99,64 +100,96 @@ The database is a C extension of the application server and can be turned off.
 
 =head1 OPTIONS
 
-You can use these options before (or instead of) the interpreted 'SCRIPT'
-name:
+All the options are separated into two groups: action options and modifier
+options.
+
+At least one action option should be specified.
+
+All the modifier options are optional.
+
+=head2 ACTION OPTIONS
 
 =over
 
 =item -h, --help
 
-Display the help screen and exit.
+Print this help message.
 
-=item -V, -v, --version
+=item -v, -V, --version
 
-Print the program version and exit.
+Print version and build information.
 
-=item -c, --config
+=item --help-env-list
 
-Set a path to yaml config file as 'PATH'.
+Print environment variables list.
 
-=item -n, --name
+=item -n <...> [-c <...>], --name <...> [--config <...>]
 
-Set an instance name as 'INSTANCE'.
+Start an instance.
 
-=item -e EXRP
+The path to the configuration file can be omitted if a configuration is stored
+in etcd and C<TT_CONFIG_ETCD_*> environment variables are set.
 
-Execute the string 'EXPR'.
+=item <first positional argument> [<..more args..>]
 
-=item -l NAME
+Run a Lua script file. All the arguments after the script name are stored in
+the `arg` global value.
 
-Require the library 'NAME'.
+The file may be pointed as `-` to read the script from stdin.
 
-=item -j CMD
+=item -e <..code..>
 
-Perform LuaJIT control command.
+Run a Lua code.
 
-=item -b ...
+It can be used on its own (as an action option) or together with another action
+option (as a modifier).
 
-Save or list bytecode.
+=item -i
 
-=item -d
+Run the interactive REPL.
 
-Activate debugging session for a script.
+=item --failover
 
-=item -i
+Run a failover coordinator service.
 
-Enter the interactive mode after executing 'SCRIPT'.
+It is available in Tarantool Enterprise Edition.
 
-=item --
+=back
+
+=head2 MODIFIER OPTIONS
+
+=over
 
-Stop handling options.
+=item --force-recovery
 
-=item -
+Enable force-recovery mode at database loading.
+
+=item -l <module>
+
+C<require> Lua module <module> and set it the same named global variable.
+
+=item -j <cmd>
+
+Perform LuaJIT control command <cmd>.
+
+=item -b <...>
+
+Save or list bytecode.
+
+=item -d
+
+Activate debugging session for a given script.
+
+=item --
 
-Execute stdin and stop handling options.
+End-of-options marker. All the arguments after the marker are interpreted as
+non-option ones.
 
 =back
 
 =head1 SEE ALSO
 
-tarantoolctl(1), Tarantool documentation at http://tarantool.org
+Tarantool documentation at https://tarantool.io
 
 =head1 COPYRIGHT
 
diff --git a/src/main.cc b/src/main.cc
index 933fef626eadca4b82ec5b8f7a65020e1a78abfd..a186d28d351b06ac2570c993ef9e3e84933195b4 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -620,41 +620,117 @@ print_version(void)
  * Yield Tarantool help message to the given stream.
  */
 static void
-print_help(FILE *stream, const char *program)
+print_help(FILE *stream)
 {
-	static const char help_msg[] = "Tarantool %s\n\n"
-		"Run Tarantool instance:\n\n"
-		"  %s --name example-name --config ./config.yaml\n\n"
-		"Connect to an instance:\n\n"
-		"  tt connect <uri>\n\n"
-		"Execute Lua script with bundled LuaJIT:\n\n"
-		"  %s old-style-script.lua [OPTIONS] [ARGS]\n\n"
-		"Run interactive LuaJIT interpreter:\n\n"
-		"  %s -i\n\n"
-		"Usage:\n\n"
-		"  %s [OPTIONS] [SCRIPT [ARGS]]\n\n"
-		"Options:\n\n"
-		" -h, --help             display this help and exit\n"
-		" --help-env-list        display env variables taken into account\n"
-		" --force-recovery       enable force-recovery\n"
-		" -v, --version          print program version and exit\n"
-		" -c, --config PATH      set a path to yaml config file as 'PATH'\n"
-		" -n, --name INSTANCE    set an instance name as 'INSTANCE'\n"
-		" -i                     enter interactive mode\n"
-		" -e EXPR                execute string 'EXPR'\n"
-		" -l NAME                require library 'NAME'\n"
-		" -j cmd                 perform LuaJIT control command\n"
-		" -b ...                 save or list bytecode\n"
-		" -d                     activate debugging session for script\n"
-		" --failover             run a failover coordinator (Enterprise Edition)\n"
-		" --                     stop handling options\n"
-		" -                      execute stdin and stop handling options\n"
-		"\n"
-		"Please visit project home page at https://tarantool.org\n"
-		"to see online documentation, submit bugs or contribute a patch.\n"
-		;
-	fprintf(stream, help_msg, tarantool_version(),
-		program, program, program, program);
+	static const char help_msg[] = "Tarantool %s\n"
+		"\n"
+		"----------------------------------------------------------\n"
+		"\n"
+		"The recommended way to work with Tarantool is to use tt\n"
+		"tool.\n"
+		"\n"
+		"Run a Tarantool instance:\n"
+		"\n"
+		"$ tt start --name <instance name>\n"
+		"\n"
+		"Connect to an instance:\n"
+		"\n"
+		"$ tt connect <uri>\n"
+		"\n"
+		"Execute a Lua script:\n"
+		"\n"
+		"$ tt run [OPTIONS] script.lua [ARGS]\n"
+		"\n"
+		"Run an interactive Lua interpreter:\n"
+		"\n"
+		"$ tt run -i\n"
+		"\n"
+		"----------------------------------------------------------\n"
+		"\n"
+		"At the lower level there are the following action options.\n"
+		"\n"
+		"-h\n"
+		"--help\n"
+		"\n"
+		"    Print this help message.\n"
+		"\n"
+		"-v, -V\n"
+		"--version\n"
+		"\n"
+		"    Print version and build information.\n"
+		"\n"
+		"--help-env-list\n"
+		"\n"
+		"    Print environment variables list.\n"
+		"\n"
+		"-n <...> [-c <...>]\n"
+		"--name <...> [--config <...>]\n"
+		"\n"
+		"    Start an instance.\n"
+		"\n"
+		"    The path to the configuration file can be omitted if a\n"
+		"    configuration is stored in etcd and TT_CONFIG_ETCD_*\n"
+		"    environment variables are set.\n"
+		"\n"
+		"<first positional argument> [<..more args..>]\n"
+		"\n"
+		"    Run a Lua script file. All the arguments after the\n"
+		"    script name are stored in the `arg` global value.\n"
+		"\n"
+		"    The file may be pointed as `-` to read the script from\n"
+		"    stdin.\n"
+		"\n"
+		"-e <..code..>\n"
+		"\n"
+		"    Run a Lua code.\n"
+		"\n"
+		"    It can be used on its own (as an action option) or\n"
+		"    together with another action option (as a modifier).\n"
+		"\n"
+		"-i\n"
+		"\n"
+		"    Run the interactive REPL.\n"
+		"\n"
+		"--failover\n"
+		"\n"
+		"    Run a failover coordinator service.\n"
+		"\n"
+		"    It is available in Tarantool Enterprise Edition.\n"
+		"\n"
+		"The following modifier options are applicable to actions.\n"
+		"\n"
+		"--force-recovery\n"
+		"\n"
+		"    Enable force-recovery mode at database loading.\n"
+		"\n"
+		"-l <module>\n"
+		"\n"
+		"    `require` Lua module <module> and set it the same named\n"
+		"    global variable.\n"
+		"\n"
+		"-j <cmd>\n"
+		"\n"
+		"    Perform LuaJIT control command <cmd>.\n"
+		"\n"
+		"-b <...>\n"
+		"\n"
+		"    Save or list bytecode.\n"
+		"\n"
+		"-d\n"
+		"\n"
+		"    Activate debugging session for a given script.\n"
+		"\n"
+		"--\n"
+		"\n"
+		"    End-of-options marker. All the arguments after the\n"
+		"    marker are interpreted as non-option ones.\n"
+		"\n"
+		"Please visit project home page at https://tarantool.io\n"
+		"to see online documentation.\n"
+		"\n"
+		"Visit https://github.com/tarantool/tarantool to submit bugs\n"
+		"contribute a patch.\n";
+	fprintf(stream, help_msg, tarantool_version());
 }
 
 int
@@ -729,7 +805,7 @@ main(int argc, char **argv)
 			print_version();
 			return 0;
 		case 'h':
-			print_help(stdout, basename(argv[0]));
+			print_help(stdout);
 			return 0;
 		case 'E':
 			opt_mask |= O_HELP_ENV_LIST;
@@ -878,7 +954,7 @@ main(int argc, char **argv)
 			"failover coordinator using --failover CLI option.\n\n"
 			;
 		fputs(misuse_msg, stderr);
-		print_help(stderr, basename(argv[0]));
+		print_help(stderr);
 		return EXIT_FAILURE;
 	}
 
diff --git a/test/box-py/args.result b/test/box-py/args.result
index b50b992683438bf95665e25c2b56c3ece8b687de..0db5d78320826ab9c68e0854132baf156a5180e9 100644
--- a/test/box-py/args.result
+++ b/test/box-py/args.result
@@ -1,90 +1,222 @@
 tarantool --help
 Tarantool 3.<minor>.<patch>-<suffix>
 
-Run Tarantool instance:
+----------------------------------------------------------
 
-  tarantool --name example-name --config ./config.yaml
+The recommended way to work with Tarantool is to use tt
+tool.
+
+Run a Tarantool instance:
+
+$ tt start --name <instance name>
 
 Connect to an instance:
 
-  tt connect <uri>
+$ tt connect <uri>
+
+Execute a Lua script:
+
+$ tt run [OPTIONS] script.lua [ARGS]
+
+Run an interactive Lua interpreter:
+
+$ tt run -i
+
+----------------------------------------------------------
+
+At the lower level there are the following action options.
+
+-h
+--help
+
+    Print this help message.
+
+-v, -V
+--version
+
+    Print version and build information.
+
+--help-env-list
+
+    Print environment variables list.
+
+-n <...> [-c <...>]
+--name <...> [--config <...>]
+
+    Start an instance.
+
+    The path to the configuration file can be omitted if a
+    configuration is stored in etcd and TT_CONFIG_ETCD_*
+    environment variables are set.
+
+<first positional argument> [<..more args..>]
+
+    Run a Lua script file. All the arguments after the
+    script name are stored in the `arg` global value.
+
+    The file may be pointed as `-` to read the script from
+    stdin.
+
+-e <..code..>
+
+    Run a Lua code.
+
+    It can be used on its own (as an action option) or
+    together with another action option (as a modifier).
+
+-i
+
+    Run the interactive REPL.
+
+--failover
+
+    Run a failover coordinator service.
+
+    It is available in Tarantool Enterprise Edition.
+
+The following modifier options are applicable to actions.
+
+--force-recovery
+
+    Enable force-recovery mode at database loading.
+
+-l <module>
+
+    `require` Lua module <module> and set it the same named
+    global variable.
+
+-j <cmd>
 
-Execute Lua script with bundled LuaJIT:
+    Perform LuaJIT control command <cmd>.
 
-  tarantool old-style-script.lua [OPTIONS] [ARGS]
+-b <...>
 
-Run interactive LuaJIT interpreter:
+    Save or list bytecode.
 
-  tarantool -i
+-d
 
-Usage:
+    Activate debugging session for a given script.
 
-  tarantool [OPTIONS] [SCRIPT [ARGS]]
+--
 
-Options:
+    End-of-options marker. All the arguments after the
+    marker are interpreted as non-option ones.
 
- -h, --help             display this help and exit
- --help-env-list        display env variables taken into account
- --force-recovery       enable force-recovery
- -v, --version          print program version and exit
- -c, --config PATH      set a path to yaml config file as 'PATH'
- -n, --name INSTANCE    set an instance name as 'INSTANCE'
- -i                     enter interactive mode
- -e EXPR                execute string 'EXPR'
- -l NAME                require library 'NAME'
- -j cmd                 perform LuaJIT control command
- -b ...                 save or list bytecode
- -d                     activate debugging session for script
- --failover             run a failover coordinator (Enterprise Edition)
- --                     stop handling options
- -                      execute stdin and stop handling options
+Please visit project home page at https://tarantool.io
+to see online documentation.
 
-Please visit project home page at https://tarantool.org
-to see online documentation, submit bugs or contribute a patch.
+Visit https://github.com/tarantool/tarantool to submit bugs
+contribute a patch.
 
 tarantool -h
 Tarantool 3.<minor>.<patch>-<suffix>
 
-Run Tarantool instance:
+----------------------------------------------------------
 
-  tarantool --name example-name --config ./config.yaml
+The recommended way to work with Tarantool is to use tt
+tool.
+
+Run a Tarantool instance:
+
+$ tt start --name <instance name>
 
 Connect to an instance:
 
-  tt connect <uri>
+$ tt connect <uri>
+
+Execute a Lua script:
+
+$ tt run [OPTIONS] script.lua [ARGS]
+
+Run an interactive Lua interpreter:
+
+$ tt run -i
+
+----------------------------------------------------------
+
+At the lower level there are the following action options.
+
+-h
+--help
+
+    Print this help message.
+
+-v, -V
+--version
+
+    Print version and build information.
+
+--help-env-list
+
+    Print environment variables list.
+
+-n <...> [-c <...>]
+--name <...> [--config <...>]
+
+    Start an instance.
+
+    The path to the configuration file can be omitted if a
+    configuration is stored in etcd and TT_CONFIG_ETCD_*
+    environment variables are set.
+
+<first positional argument> [<..more args..>]
+
+    Run a Lua script file. All the arguments after the
+    script name are stored in the `arg` global value.
+
+    The file may be pointed as `-` to read the script from
+    stdin.
+
+-e <..code..>
+
+    Run a Lua code.
+
+    It can be used on its own (as an action option) or
+    together with another action option (as a modifier).
+
+-i
+
+    Run the interactive REPL.
+
+--failover
+
+    Run a failover coordinator service.
+
+    It is available in Tarantool Enterprise Edition.
+
+The following modifier options are applicable to actions.
+
+--force-recovery
+
+    Enable force-recovery mode at database loading.
+
+-l <module>
+
+    `require` Lua module <module> and set it the same named
+    global variable.
+
+-j <cmd>
 
-Execute Lua script with bundled LuaJIT:
+    Perform LuaJIT control command <cmd>.
 
-  tarantool old-style-script.lua [OPTIONS] [ARGS]
+-b <...>
 
-Run interactive LuaJIT interpreter:
+    Save or list bytecode.
 
-  tarantool -i
+-d
 
-Usage:
+    Activate debugging session for a given script.
 
-  tarantool [OPTIONS] [SCRIPT [ARGS]]
+--
 
-Options:
+    End-of-options marker. All the arguments after the
+    marker are interpreted as non-option ones.
 
- -h, --help             display this help and exit
- --help-env-list        display env variables taken into account
- --force-recovery       enable force-recovery
- -v, --version          print program version and exit
- -c, --config PATH      set a path to yaml config file as 'PATH'
- -n, --name INSTANCE    set an instance name as 'INSTANCE'
- -i                     enter interactive mode
- -e EXPR                execute string 'EXPR'
- -l NAME                require library 'NAME'
- -j cmd                 perform LuaJIT control command
- -b ...                 save or list bytecode
- -d                     activate debugging session for script
- --failover             run a failover coordinator (Enterprise Edition)
- --                     stop handling options
- -                      execute stdin and stop handling options
+Please visit project home page at https://tarantool.io
+to see online documentation.
 
-Please visit project home page at https://tarantool.org
-to see online documentation, submit bugs or contribute a patch.
+Visit https://github.com/tarantool/tarantool to submit bugs
+contribute a patch.
 
 tarantool -Z
 tarantool: invalid option