diff --git a/CHANGELOG.md b/CHANGELOG.md
index 72ef7717420fbebedd1dcd91e9410d287e939364..7ca94ce820bd4d07ec333105a83e9146f957757a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,8 @@ with the `YY.0M.MICRO` scheme.
 
 - _Clusterwide SQL_ now availiable via `\set language sql` in interactive console.
 
+- Interactive console is disabled by default. Enable it implicitly with `picodata run -i`.
+
 - Allow specifying `picodata connect [user@][host][:port]` format. It
   overrides the `--user` option.
 
diff --git a/src/args.rs b/src/args.rs
index 9ce2d1dfe0be532d065dbbbf83c34d187da0c66b..2c1a33f4140fd3e05ee635dd3ff9454c326275f0 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -134,6 +134,10 @@ pub struct Run {
     /// in Lua as `_G.pico.httpd` variable. If not specified, it won't
     /// be initialized.
     pub http_listen: Option<Address>,
+
+    #[clap(short = 'i', long = "interactive", env = "PICODATA_INTERACTIVE_MODE")]
+    /// Enable interactive console
+    pub interactive_mode: bool,
 }
 
 // Copy enum because clap:ArgEnum can't be derived for the foreign SayLevel.
@@ -168,7 +172,17 @@ impl From<LogLevel> for SayLevel {
 impl Run {
     /// Get the arguments that will be passed to `tarantool_main`
     pub fn tt_args(&self) -> Result<Vec<CString>, String> {
-        Ok(vec![current_exe()?])
+        let mut args = vec![
+            current_exe()?,
+            CString::new(r"-e").unwrap(),
+            CString::new(r#" "#).unwrap(),
+        ];
+
+        if self.interactive_mode {
+            args.push(CString::new("-i").unwrap());
+        }
+
+        Ok(args)
     }
 
     pub fn advertise_address(&self) -> String {
@@ -729,6 +743,17 @@ mod tests {
             assert_eq!(parsed.init_replication_factor, 9);
         }
 
+        {
+            let parsed = parse![Run, "-i"];
+            assert_eq!(parsed.interactive_mode, true);
+
+            let parsed = parse![Run, "--interactive"];
+            assert_eq!(parsed.interactive_mode, true);
+
+            let parsed = parse![Run,];
+            assert_eq!(parsed.interactive_mode, false);
+        }
+
         {
             let parsed = parse![Connect, "somewhere:3301"];
             assert_eq!(parsed.user, "guest");