diff --git a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt
index 3267a10b8..0738f2789 100644
--- a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt
+++ b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt
@@ -256,6 +256,16 @@ internal class MiraiConsoleImplementationBridge(
                                 )
                             }
                         }
+                        account.configuration[ConfigurationKey.heartbeatStrategy]?.let { heartStrate ->
+                            this.heartbeatStrategy = runCatching {
+                                BotConfiguration.HeartbeatStrategy.valueOf(heartStrate.toString())
+                            }.getOrElse {
+                                throw IllegalArgumentException(
+                                    "Bad auto-login config value for `heartbeatStrategy` for account $id",
+                                    it
+                                )
+                            }
+                        }
                         account.configuration[ConfigurationKey.device]?.let { device ->
                             fileBasedDeviceInfo(device.toString())
                         }
diff --git a/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt b/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt
index 06c782f7d..c5328f854 100644
--- a/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt
+++ b/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt
@@ -39,6 +39,7 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") {
             "protocol": "ANDROID_PHONE" / "ANDROID_PAD" / "ANDROID_WATCH" /"MAC" / "IPAD"
             "device": "device.json" 
             "enable": true
+            "heartbeatStrategy": "STAT_HB" / "REGISTER" / "NONE"
         """
         )
         val configuration: Map<ConfigurationKey, @Serializable(with = YamlDynamicSerializer::class) Any> = mapOf(),
@@ -69,6 +70,7 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") {
             protocol,
             device,
             enable,
+            heartbeatStrategy,
 
             ;
 
@@ -106,7 +108,8 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") {
                 configuration = mapOf(
                     Account.ConfigurationKey.protocol to "ANDROID_PHONE",
                     Account.ConfigurationKey.device to "device.json",
-                    Account.ConfigurationKey.enable to true
+                    Account.ConfigurationKey.enable to true,
+                    Account.ConfigurationKey.heartbeatStrategy to "STAT_HB"
                 )
             )
         )
diff --git a/mirai-console/backend/mirai-console/test/configuration/AutoLoginTest.kt b/mirai-console/backend/mirai-console/test/configuration/AutoLoginTest.kt
new file mode 100644
index 000000000..3c408b5f6
--- /dev/null
+++ b/mirai-console/backend/mirai-console/test/configuration/AutoLoginTest.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
+ *
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
+ */
+
+package net.mamoe.mirai.console.configuration
+
+import net.mamoe.mirai.console.MiraiConsoleImplementation.Companion.start
+import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig
+import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest
+import net.mamoe.mirai.console.testFramework.MockConsoleImplementation
+import net.mamoe.mirai.event.events.BotOnlineEvent
+import net.mamoe.mirai.event.globalEventChannel
+import net.mamoe.mirai.utils.BotConfiguration
+import org.junit.jupiter.api.Disabled
+import org.junit.jupiter.api.Test
+import kotlin.test.assertEquals
+
+class AutoLoginTest : AbstractConsoleInstanceTest() {
+
+    @Disabled // no mock login
+    @Test
+    fun testHeartbeatStrategy() {
+        stopConsole() // stop previous console
+        val console = MockConsoleImplementation()
+        val config = AutoLoginConfig()
+        config.accounts.clear()
+        config.accounts.add(
+            AutoLoginConfig.Account(
+                "111",
+                AutoLoginConfig.Account.Password(AutoLoginConfig.Account.PasswordKind.PLAIN, "pwd"),
+                configuration = mapOf(AutoLoginConfig.Account.ConfigurationKey.heartbeatStrategy to "REGISTER")
+            )
+        )
+        console.consoleDataScope.addAndReloadConfig(config)
+        console.globalEventChannel().subscribeAlways<BotOnlineEvent> {
+            assertEquals(BotConfiguration.HeartbeatStrategy.REGISTER, this.bot.configuration.heartbeatStrategy)
+        }
+        console.start()
+    }
+}
\ No newline at end of file
diff --git a/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt b/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt
index 7b943e6ec..b14f85e87 100644
--- a/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt
+++ b/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt
@@ -10,7 +10,6 @@
 package net.mamoe.mirai.console.data
 
 import net.mamoe.mirai.console.MiraiConsole
-import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest
 import net.mamoe.mirai.console.internal.data.mkdir
 import net.mamoe.mirai.console.plugin.PluginManager
 import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.load
@@ -18,7 +17,7 @@ import net.mamoe.mirai.console.plugin.id
 import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
 import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
 import net.mamoe.mirai.console.plugin.name
-import org.junit.jupiter.api.Disabled
+import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest
 import org.junit.jupiter.api.Test
 
 class PluginMovingTests : AbstractConsoleInstanceTest() {
@@ -30,7 +29,7 @@ class PluginMovingTests : AbstractConsoleInstanceTest() {
 
     private fun mkdir(abstractPath: String) = PluginManager.pluginsDataPath.resolve(abstractPath).mkdir()
 
-    @Disabled // disabled since test framework fails
+    //@Disabled // disabled since test framework fails
     @Test
     fun movingPluginPath() {
         // Normal move