diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32831c5..588d65a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased
 
+### Added
+
+- render network status in the Settings tab, under `Additional environment information` section.
+
 ## 0.2.1 - 2025-05-05
 
 ### Changed
diff --git a/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt b/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
index adafeb0..ad11c30 100644
--- a/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
+++ b/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
@@ -2,15 +2,18 @@ package com.coder.toolbox
 
 import com.coder.toolbox.browser.BrowserUtil
 import com.coder.toolbox.cli.CoderCLIManager
+import com.coder.toolbox.cli.SshCommandProcessHandle
 import com.coder.toolbox.models.WorkspaceAndAgentStatus
 import com.coder.toolbox.sdk.CoderRestClient
 import com.coder.toolbox.sdk.ex.APIResponseException
+import com.coder.toolbox.sdk.v2.models.NetworkMetrics
 import com.coder.toolbox.sdk.v2.models.Workspace
 import com.coder.toolbox.sdk.v2.models.WorkspaceAgent
 import com.coder.toolbox.util.waitForFalseWithTimeout
 import com.coder.toolbox.util.withPath
 import com.coder.toolbox.views.Action
 import com.coder.toolbox.views.EnvironmentView
+import com.jetbrains.toolbox.api.localization.LocalizableString
 import com.jetbrains.toolbox.api.remoteDev.AfterDisconnectHook
 import com.jetbrains.toolbox.api.remoteDev.BeforeConnectionHook
 import com.jetbrains.toolbox.api.remoteDev.DeleteEnvironmentConfirmationParams
@@ -20,15 +23,21 @@ import com.jetbrains.toolbox.api.remoteDev.environments.EnvironmentContentsView
 import com.jetbrains.toolbox.api.remoteDev.states.EnvironmentDescription
 import com.jetbrains.toolbox.api.remoteDev.states.RemoteEnvironmentState
 import com.jetbrains.toolbox.api.ui.actions.ActionDescription
+import com.squareup.moshi.Moshi
+import kotlinx.coroutines.Job
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.update
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withTimeout
+import java.io.File
+import java.nio.file.Path
 import kotlin.time.Duration.Companion.minutes
 import kotlin.time.Duration.Companion.seconds
 
+private val POLL_INTERVAL = 5.seconds
+
 /**
  * Represents an agent and workspace combination.
  *
@@ -44,7 +53,6 @@ class CoderRemoteEnvironment(
     private var wsRawStatus = WorkspaceAndAgentStatus.from(workspace, agent)
 
     override var name: String = "${workspace.name}.${agent.name}"
-
     private var isConnected: MutableStateFlow<Boolean> = MutableStateFlow(false)
     override val connectionRequest: MutableStateFlow<Boolean> = MutableStateFlow(false)
 
@@ -52,9 +60,13 @@ class CoderRemoteEnvironment(
         MutableStateFlow(wsRawStatus.toRemoteEnvironmentState(context))
     override val description: MutableStateFlow<EnvironmentDescription> =
         MutableStateFlow(EnvironmentDescription.General(context.i18n.pnotr(workspace.templateDisplayName)))
-
+    override val additionalEnvironmentInformation: MutableMap<LocalizableString, String> = mutableMapOf()
     override val actionsList: MutableStateFlow<List<ActionDescription>> = MutableStateFlow(getAvailableActions())
 
+    private val networkMetricsMarshaller = Moshi.Builder().build().adapter(NetworkMetrics::class.java)
+    private val proxyCommandHandle = SshCommandProcessHandle(context)
+    private var pollJob: Job? = null
+
     fun asPairOfWorkspaceAndAgent(): Pair<Workspace, WorkspaceAgent> = Pair(workspace, agent)
 
     private fun getAvailableActions(): List<ActionDescription> {
@@ -141,9 +153,49 @@ class CoderRemoteEnvironment(
     override fun beforeConnection() {
         context.logger.info("Connecting to $id...")
         isConnected.update { true }
+        pollJob = pollNetworkMetrics()
+    }
+
+    private fun pollNetworkMetrics(): Job = context.cs.launch {
+        context.logger.info("Starting the network metrics poll job for $id")
+        while (isActive) {
+            context.logger.debug("Searching SSH command's PID for workspace $id...")
+            val pid = proxyCommandHandle.findByWorkspaceAndAgent(workspace, agent)
+            if (pid == null) {
+                context.logger.debug("No SSH command PID was found for workspace $id")
+                delay(POLL_INTERVAL)
+                continue
+            }
+
+            val metricsFile = Path.of(context.settingsStore.networkInfoDir, "$pid.json").toFile()
+            if (metricsFile.doesNotExists()) {
+                context.logger.debug("No metrics file found at ${metricsFile.absolutePath} for $id")
+                delay(POLL_INTERVAL)
+                continue
+            }
+            context.logger.debug("Loading metrics from ${metricsFile.absolutePath} for $id")
+            try {
+                val metrics = networkMetricsMarshaller.fromJson(metricsFile.readText())
+                if (metrics == null) {
+                    return@launch
+                }
+                context.logger.debug("$id metrics: $metrics")
+                additionalEnvironmentInformation.put(context.i18n.ptrl("Network Status"), metrics.toPretty())
+            } catch (e: Exception) {
+                context.logger.error(
+                    e,
+                    "Error encountered while trying to load network metrics from ${metricsFile.absolutePath} for $id"
+                )
+            }
+            delay(POLL_INTERVAL)
+        }
     }
 
+    private fun File.doesNotExists(): Boolean = !this.exists()
+
     override fun afterDisconnect() {
+        context.logger.info("Stopping the network metrics poll job for $id")
+        pollJob?.cancel()
         this.connectionRequest.update { false }
         isConnected.update { false }
         context.logger.info("Disconnected from $id")
diff --git a/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt b/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt
index a1b06d6..2898179 100644
--- a/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt
+++ b/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt
@@ -271,14 +271,13 @@ class CoderCLIManager(
                 "ssh",
                 "--stdio",
                 if (settings.disableAutostart && feats.disableAutostart) "--disable-autostart" else null,
+                "--network-info-dir ${escape(settings.networkInfoDir)}"
             )
         val proxyArgs = baseArgs + listOfNotNull(
             if (!settings.sshLogDirectory.isNullOrBlank()) "--log-dir" else null,
             if (!settings.sshLogDirectory.isNullOrBlank()) escape(settings.sshLogDirectory!!) else null,
             if (feats.reportWorkspaceUsage) "--usage-app=jetbrains" else null,
         )
-        val backgroundProxyArgs =
-            baseArgs + listOfNotNull(if (feats.reportWorkspaceUsage) "--usage-app=disable" else null)
         val extraConfig =
             if (!settings.sshConfigOptions.isNullOrBlank()) {
                 "\n" + settings.sshConfigOptions!!.prependIndent("  ")
diff --git a/src/main/kotlin/com/coder/toolbox/cli/SshCommandProcessHandle.kt b/src/main/kotlin/com/coder/toolbox/cli/SshCommandProcessHandle.kt
new file mode 100644
index 0000000..1d36e4f
--- /dev/null
+++ b/src/main/kotlin/com/coder/toolbox/cli/SshCommandProcessHandle.kt
@@ -0,0 +1,42 @@
+package com.coder.toolbox.cli
+
+import com.coder.toolbox.CoderToolboxContext
+import com.coder.toolbox.sdk.v2.models.Workspace
+import com.coder.toolbox.sdk.v2.models.WorkspaceAgent
+import kotlin.jvm.optionals.getOrNull
+
+/**
+ * Identifies the PID for the SSH Coder command spawned by Toolbox.
+ */
+class SshCommandProcessHandle(private val ctx: CoderToolboxContext) {
+
+    /**
+     * Finds the PID of a Coder (not the proxy command) ssh cmd associated with the specified workspace and agent.
+     * Null is returned when no ssh command process was found.
+     *
+     * Implementation Notes:
+     * An iterative DFS approach where we start with Toolbox's direct children, grep the command
+     * and if nothing is found we continue with the processes children. Toolbox spawns an ssh command
+     * as a separate command which in turns spawns another child for the proxy command.
+     */
+    fun findByWorkspaceAndAgent(ws: Workspace, agent: WorkspaceAgent): Long? {
+        val stack = ArrayDeque<ProcessHandle>(ProcessHandle.current().children().toList())
+        while (stack.isNotEmpty()) {
+            val processHandle = stack.removeLast()
+            val cmdLine = processHandle.info().commandLine().getOrNull()
+            ctx.logger.debug("SSH command PID: ${processHandle.pid()} Command: $cmdLine")
+            if (cmdLine != null && cmdLine.isSshCommandFor(ws, agent)) {
+                ctx.logger.debug("SSH command with PID: ${processHandle.pid()} and Command: $cmdLine matches ${ws.name}.${agent.name}")
+                return processHandle.pid()
+            } else {
+                stack.addAll(processHandle.children().toList())
+            }
+        }
+        return null
+    }
+
+    private fun String.isSshCommandFor(ws: Workspace, agent: WorkspaceAgent): Boolean {
+        // usage-app is present only in the ProxyCommand
+        return !this.contains("--usage-app=jetbrains") && this.contains("${ws.name}.${agent.name}")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/coder/toolbox/sdk/v2/models/NetworkMetrics.kt b/src/main/kotlin/com/coder/toolbox/sdk/v2/models/NetworkMetrics.kt
new file mode 100644
index 0000000..cb7d235
--- /dev/null
+++ b/src/main/kotlin/com/coder/toolbox/sdk/v2/models/NetworkMetrics.kt
@@ -0,0 +1,49 @@
+package com.coder.toolbox.sdk.v2.models
+
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+import java.text.DecimalFormat
+
+private val formatter = DecimalFormat("#.00")
+
+/**
+ * Coder ssh network metrics. All properties are optional
+ * because Coder Connect only populates `using_coder_connect`
+ * while p2p doesn't populate this property.
+ */
+@JsonClass(generateAdapter = true)
+data class NetworkMetrics(
+    @Json(name = "p2p")
+    val p2p: Boolean?,
+
+    @Json(name = "latency")
+    val latency: Double?,
+
+    @Json(name = "preferred_derp")
+    val preferredDerp: String?,
+
+    @Json(name = "derp_latency")
+    val derpLatency: Map<String, Double>?,
+
+    @Json(name = "upload_bytes_sec")
+    val uploadBytesSec: Long?,
+
+    @Json(name = "download_bytes_sec")
+    val downloadBytesSec: Long?,
+
+    @Json(name = "using_coder_connect")
+    val usingCoderConnect: Boolean?
+) {
+    fun toPretty(): String {
+        if (usingCoderConnect == true) {
+            return "You're connected using Coder Connect"
+        }
+        return if (p2p == true) {
+            "Direct (${formatter.format(latency)}ms). You're connected peer-to-peer"
+        } else {
+            val derpLatency = derpLatency!![preferredDerp]
+            val workspaceLatency = latency!!.minus(derpLatency!!)
+            "You ↔ $preferredDerp (${formatter.format(derpLatency)}ms) ↔ Workspace (${formatter.format(workspaceLatency)}ms). You are connected through a relay"
+        }
+    }
+}
diff --git a/src/main/kotlin/com/coder/toolbox/settings/ReadOnlyCoderSettings.kt b/src/main/kotlin/com/coder/toolbox/settings/ReadOnlyCoderSettings.kt
index 25568d3..478fdd1 100644
--- a/src/main/kotlin/com/coder/toolbox/settings/ReadOnlyCoderSettings.kt
+++ b/src/main/kotlin/com/coder/toolbox/settings/ReadOnlyCoderSettings.kt
@@ -110,6 +110,12 @@ interface ReadOnlyCoderSettings {
      */
     val sshConfigOptions: String?
 
+
+    /**
+     * The path where network information for SSH hosts are stored
+     */
+    val networkInfoDir: String
+
     /**
      * The default URL to show in the connection window.
      */
diff --git a/src/main/kotlin/com/coder/toolbox/store/CoderSettingsStore.kt b/src/main/kotlin/com/coder/toolbox/store/CoderSettingsStore.kt
index 92c08d0..50d6c25 100644
--- a/src/main/kotlin/com/coder/toolbox/store/CoderSettingsStore.kt
+++ b/src/main/kotlin/com/coder/toolbox/store/CoderSettingsStore.kt
@@ -65,6 +65,11 @@ class CoderSettingsStore(
     override val sshLogDirectory: String? get() = store[SSH_LOG_DIR]
     override val sshConfigOptions: String?
         get() = store[SSH_CONFIG_OPTIONS].takeUnless { it.isNullOrEmpty() } ?: env.get(CODER_SSH_CONFIG_OPTIONS)
+    override val networkInfoDir: String
+        get() = store[NETWORK_INFO_DIR].takeUnless { it.isNullOrEmpty() } ?: getDefaultGlobalDataDir()
+            .resolve("ssh-network-metrics")
+            .normalize()
+            .toString()
 
     /**
      * The default URL to show in the connection window.
@@ -232,6 +237,10 @@ class CoderSettingsStore(
         store[SSH_LOG_DIR] = path
     }
 
+    fun updateNetworkInfoDir(path: String) {
+        store[NETWORK_INFO_DIR] = path
+    }
+
     fun updateSshConfigOptions(options: String) {
         store[SSH_CONFIG_OPTIONS] = options
     }
diff --git a/src/main/kotlin/com/coder/toolbox/store/StoreKeys.kt b/src/main/kotlin/com/coder/toolbox/store/StoreKeys.kt
index 35040e3..e34436f 100644
--- a/src/main/kotlin/com/coder/toolbox/store/StoreKeys.kt
+++ b/src/main/kotlin/com/coder/toolbox/store/StoreKeys.kt
@@ -38,3 +38,5 @@ internal const val SSH_LOG_DIR = "sshLogDir"
 
 internal const val SSH_CONFIG_OPTIONS = "sshConfigOptions"
 
+internal const val NETWORK_INFO_DIR = "networkInfoDir"
+
diff --git a/src/main/kotlin/com/coder/toolbox/views/CoderSettingsPage.kt b/src/main/kotlin/com/coder/toolbox/views/CoderSettingsPage.kt
index ff86c42..f888c3d 100644
--- a/src/main/kotlin/com/coder/toolbox/views/CoderSettingsPage.kt
+++ b/src/main/kotlin/com/coder/toolbox/views/CoderSettingsPage.kt
@@ -56,6 +56,8 @@ class CoderSettingsPage(context: CoderToolboxContext, triggerSshConfig: Channel<
         TextField(context.i18n.ptrl("Extra SSH options"), settings.sshConfigOptions ?: "", TextType.General)
     private val sshLogDirField =
         TextField(context.i18n.ptrl("SSH proxy log directory"), settings.sshLogDirectory ?: "", TextType.General)
+    private val networkInfoDirField =
+        TextField(context.i18n.ptrl("SSH network metrics directory"), settings.networkInfoDir, TextType.General)
 
 
     override val fields: StateFlow<List<UiField>> = MutableStateFlow(
@@ -73,6 +75,7 @@ class CoderSettingsPage(context: CoderToolboxContext, triggerSshConfig: Channel<
             disableAutostartField,
             enableSshWildCardConfig,
             sshLogDirField,
+            networkInfoDirField,
             sshExtraArgs,
         )
     )
@@ -104,6 +107,7 @@ class CoderSettingsPage(context: CoderToolboxContext, triggerSshConfig: Channel<
                     }
                 }
                 context.settingsStore.updateSshLogDir(sshLogDirField.textState.value)
+                context.settingsStore.updateNetworkInfoDir(networkInfoDirField.textState.value)
                 context.settingsStore.updateSshConfigOptions(sshExtraArgs.textState.value)
             }
         )
diff --git a/src/main/resources/localization/defaultMessages.po b/src/main/resources/localization/defaultMessages.po
index b38b2a6..fddd131 100644
--- a/src/main/resources/localization/defaultMessages.po
+++ b/src/main/resources/localization/defaultMessages.po
@@ -128,4 +128,10 @@ msgid "Extra SSH options"
 msgstr ""
 
 msgid "SSH proxy log directory"
+msgstr ""
+
+msgid "SSH network metrics directory"
+msgstr ""
+
+msgid "Network Status"
 msgstr ""
\ No newline at end of file
diff --git a/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt b/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt
index d612000..b8dc145 100644
--- a/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt
+++ b/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt
@@ -18,6 +18,7 @@ import com.coder.toolbox.store.DISABLE_AUTOSTART
 import com.coder.toolbox.store.ENABLE_BINARY_DIR_FALLBACK
 import com.coder.toolbox.store.ENABLE_DOWNLOADS
 import com.coder.toolbox.store.HEADER_COMMAND
+import com.coder.toolbox.store.NETWORK_INFO_DIR
 import com.coder.toolbox.store.SSH_CONFIG_OPTIONS
 import com.coder.toolbox.store.SSH_CONFIG_PATH
 import com.coder.toolbox.store.SSH_LOG_DIR
@@ -510,7 +511,10 @@ internal class CoderCLIManagerTest {
                         HEADER_COMMAND to it.headerCommand,
                         SSH_CONFIG_PATH to tmpdir.resolve(it.input + "_to_" + it.output + ".conf").toString(),
                         SSH_CONFIG_OPTIONS to it.extraConfig,
-                        SSH_LOG_DIR to (it.sshLogDirectory?.toString() ?: "")
+                        SSH_LOG_DIR to (it.sshLogDirectory?.toString() ?: ""),
+                        NETWORK_INFO_DIR to tmpdir.parent.resolve("coder-toolbox")
+                            .resolve("ssh-network-metrics")
+                            .normalize().toString()
                     ),
                     env = it.env,
                     context.logger,
@@ -531,6 +535,7 @@ internal class CoderCLIManagerTest {
 
             // Output is the configuration we expect to have after configuring.
             val coderConfigPath = ccm.localBinaryPath.parent.resolve("config")
+            val networkMetricsPath = tmpdir.parent.resolve("coder-toolbox").resolve("ssh-network-metrics")
             val expectedConf =
                 Path.of("src/test/resources/fixtures/outputs/").resolve(it.output + ".conf").toFile().readText()
                     .replace(newlineRe, System.lineSeparator())
@@ -539,6 +544,10 @@ internal class CoderCLIManagerTest {
                         "/tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64",
                         escape(ccm.localBinaryPath.toString())
                     )
+                    .replace(
+                        "/tmp/coder-toolbox/ssh-network-metrics",
+                        escape(networkMetricsPath.toString())
+                    )
                     .let { conf ->
                         if (it.sshLogDirectory != null) {
                             conf.replace("/tmp/coder-toolbox/test.coder.invalid/logs", it.sshLogDirectory.toString())
diff --git a/src/test/kotlin/com/coder/toolbox/sdk/v2/models/NetworkMetricsTest.kt b/src/test/kotlin/com/coder/toolbox/sdk/v2/models/NetworkMetricsTest.kt
new file mode 100644
index 0000000..08b98df
--- /dev/null
+++ b/src/test/kotlin/com/coder/toolbox/sdk/v2/models/NetworkMetricsTest.kt
@@ -0,0 +1,107 @@
+package com.coder.toolbox.sdk.v2.models
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class NetworkMetricsTest {
+
+    @Test
+    fun `toPretty should return message for Coder Connect`() {
+        val metrics = NetworkMetrics(
+            p2p = null,
+            latency = null,
+            preferredDerp = null,
+            derpLatency = null,
+            uploadBytesSec = null,
+            downloadBytesSec = null,
+            usingCoderConnect = true
+        )
+
+        val expected = "You're connected using Coder Connect"
+        assertEquals(expected, metrics.toPretty())
+    }
+
+    @Test
+    fun `toPretty should return message for P2P connection`() {
+        val metrics = NetworkMetrics(
+            p2p = true,
+            latency = 35.526,
+            preferredDerp = null,
+            derpLatency = null,
+            uploadBytesSec = null,
+            downloadBytesSec = null,
+            usingCoderConnect = false
+        )
+
+        val expected = "Direct (35.53ms). You're connected peer-to-peer"
+        assertEquals(expected, metrics.toPretty())
+    }
+
+    @Test
+    fun `toPretty should round latency with more than two decimals correctly for P2P`() {
+        val metrics = NetworkMetrics(
+            p2p = true,
+            latency = 42.6789,
+            preferredDerp = null,
+            derpLatency = null,
+            uploadBytesSec = null,
+            downloadBytesSec = null,
+            usingCoderConnect = false
+        )
+
+        val expected = "Direct (42.68ms). You're connected peer-to-peer"
+        assertEquals(expected, metrics.toPretty())
+    }
+
+    @Test
+    fun `toPretty should pad latency with one decimal correctly for P2P`() {
+        val metrics = NetworkMetrics(
+            p2p = true,
+            latency = 12.5,
+            preferredDerp = null,
+            derpLatency = null,
+            uploadBytesSec = null,
+            downloadBytesSec = null,
+            usingCoderConnect = false
+        )
+
+        val expected = "Direct (12.50ms). You're connected peer-to-peer"
+        assertEquals(expected, metrics.toPretty())
+    }
+
+    @Test
+    fun `toPretty should return message for DERP relay connection`() {
+        val metrics = NetworkMetrics(
+            p2p = false,
+            latency = 80.0,
+            preferredDerp = "derp1",
+            derpLatency = mapOf("derp1" to 30.0),
+            uploadBytesSec = null,
+            downloadBytesSec = null,
+            usingCoderConnect = false
+        )
+
+        val expected = "You ↔ derp1 (30.00ms) ↔ Workspace (50.00ms). You are connected through a relay"
+        assertEquals(expected, metrics.toPretty())
+    }
+
+    @Test
+    fun `toPretty should round and pad latencies correctly for DERP`() {
+        val metrics = NetworkMetrics(
+            p2p = false,
+            latency = 78.1267,
+            preferredDerp = "derp2",
+            derpLatency = mapOf("derp2" to 23.5),
+            uploadBytesSec = null,
+            downloadBytesSec = null,
+            usingCoderConnect = false
+        )
+
+        // Total latency: 78.1267
+        // DERP latency: 23.5 → formatted as 23.50
+        // Workspace latency: 78.1267 - 23.5 = 54.6267 → formatted as 54.63
+
+        val expected = "You ↔ derp2 (23.50ms) ↔ Workspace (54.63ms). You are connected through a relay"
+        assertEquals(expected, metrics.toPretty())
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/fixtures/outputs/append-blank-newlines.conf b/src/test/resources/fixtures/outputs/append-blank-newlines.conf
index 6a3fa9d..51d1d75 100644
--- a/src/test/resources/fixtures/outputs/append-blank-newlines.conf
+++ b/src/test/resources/fixtures/outputs/append-blank-newlines.conf
@@ -4,7 +4,7 @@
 
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/append-blank.conf b/src/test/resources/fixtures/outputs/append-blank.conf
index 4c1ac2b..f2f1c8b 100644
--- a/src/test/resources/fixtures/outputs/append-blank.conf
+++ b/src/test/resources/fixtures/outputs/append-blank.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/append-no-blocks.conf b/src/test/resources/fixtures/outputs/append-no-blocks.conf
index fbcd928..0c34e44 100644
--- a/src/test/resources/fixtures/outputs/append-no-blocks.conf
+++ b/src/test/resources/fixtures/outputs/append-no-blocks.conf
@@ -5,7 +5,7 @@ Host test2
 
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/append-no-newline.conf b/src/test/resources/fixtures/outputs/append-no-newline.conf
index f31936a..c25a062 100644
--- a/src/test/resources/fixtures/outputs/append-no-newline.conf
+++ b/src/test/resources/fixtures/outputs/append-no-newline.conf
@@ -4,7 +4,7 @@ Host test2
   Port 443
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/append-no-related-blocks.conf b/src/test/resources/fixtures/outputs/append-no-related-blocks.conf
index 6578ea9..53f964e 100644
--- a/src/test/resources/fixtures/outputs/append-no-related-blocks.conf
+++ b/src/test/resources/fixtures/outputs/append-no-related-blocks.conf
@@ -11,7 +11,7 @@ some jetbrains config
 
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/disable-autostart.conf b/src/test/resources/fixtures/outputs/disable-autostart.conf
index 64f4126..27c6986 100644
--- a/src/test/resources/fixtures/outputs/disable-autostart.conf
+++ b/src/test/resources/fixtures/outputs/disable-autostart.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --disable-autostart --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --disable-autostart --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/extra-config.conf b/src/test/resources/fixtures/outputs/extra-config.conf
index 75bd083..6abe1f0 100644
--- a/src/test/resources/fixtures/outputs/extra-config.conf
+++ b/src/test/resources/fixtures/outputs/extra-config.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/header-command-windows.conf b/src/test/resources/fixtures/outputs/header-command-windows.conf
index 700032c..4d3b49c 100644
--- a/src/test/resources/fixtures/outputs/header-command-windows.conf
+++ b/src/test/resources/fixtures/outputs/header-command-windows.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/header-command.conf b/src/test/resources/fixtures/outputs/header-command.conf
index b8d6e14..4d27aaa 100644
--- a/src/test/resources/fixtures/outputs/header-command.conf
+++ b/src/test/resources/fixtures/outputs/header-command.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/log-dir.conf b/src/test/resources/fixtures/outputs/log-dir.conf
index e47b5be..0050661 100644
--- a/src/test/resources/fixtures/outputs/log-dir.conf
+++ b/src/test/resources/fixtures/outputs/log-dir.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --log-dir /tmp/coder-toolbox/test.coder.invalid/logs --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --log-dir /tmp/coder-toolbox/test.coder.invalid/logs --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/multiple-agents.conf b/src/test/resources/fixtures/outputs/multiple-agents.conf
index c0cbffe..d26e398 100644
--- a/src/test/resources/fixtures/outputs/multiple-agents.conf
+++ b/src/test/resources/fixtures/outputs/multiple-agents.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
@@ -8,7 +8,7 @@ Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
 
 Host coder-jetbrains-toolbox--owner--foo.agent2--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent2
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent2
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/multiple-users.conf b/src/test/resources/fixtures/outputs/multiple-users.conf
index ed34415..13801b9 100644
--- a/src/test/resources/fixtures/outputs/multiple-users.conf
+++ b/src/test/resources/fixtures/outputs/multiple-users.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
@@ -8,7 +8,7 @@ Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
 
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/multiple-workspaces.conf b/src/test/resources/fixtures/outputs/multiple-workspaces.conf
index 9e308e7..d912d26 100644
--- a/src/test/resources/fixtures/outputs/multiple-workspaces.conf
+++ b/src/test/resources/fixtures/outputs/multiple-workspaces.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
@@ -8,7 +8,7 @@ Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
 
 Host coder-jetbrains-toolbox--owner--bar.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/bar.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/bar.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/no-disable-autostart.conf b/src/test/resources/fixtures/outputs/no-disable-autostart.conf
index 4c1ac2b..f2f1c8b 100644
--- a/src/test/resources/fixtures/outputs/no-disable-autostart.conf
+++ b/src/test/resources/fixtures/outputs/no-disable-autostart.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/no-report-usage.conf b/src/test/resources/fixtures/outputs/no-report-usage.conf
index 2bdfd47..3f2311c 100644
--- a/src/test/resources/fixtures/outputs/no-report-usage.conf
+++ b/src/test/resources/fixtures/outputs/no-report-usage.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/replace-end-no-newline.conf b/src/test/resources/fixtures/outputs/replace-end-no-newline.conf
index 36b8380..7e64e33 100644
--- a/src/test/resources/fixtures/outputs/replace-end-no-newline.conf
+++ b/src/test/resources/fixtures/outputs/replace-end-no-newline.conf
@@ -3,7 +3,7 @@ Host test
 Host test2
   Port 443 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/replace-end.conf b/src/test/resources/fixtures/outputs/replace-end.conf
index f31936a..c25a062 100644
--- a/src/test/resources/fixtures/outputs/replace-end.conf
+++ b/src/test/resources/fixtures/outputs/replace-end.conf
@@ -4,7 +4,7 @@ Host test2
   Port 443
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/replace-middle-ignore-unrelated.conf b/src/test/resources/fixtures/outputs/replace-middle-ignore-unrelated.conf
index 80cd717..f4f7f16 100644
--- a/src/test/resources/fixtures/outputs/replace-middle-ignore-unrelated.conf
+++ b/src/test/resources/fixtures/outputs/replace-middle-ignore-unrelated.conf
@@ -5,7 +5,7 @@ some coder config
 # ------------END-CODER------------
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/replace-middle.conf b/src/test/resources/fixtures/outputs/replace-middle.conf
index 5c74b95..8d6fadc 100644
--- a/src/test/resources/fixtures/outputs/replace-middle.conf
+++ b/src/test/resources/fixtures/outputs/replace-middle.conf
@@ -2,7 +2,7 @@ Host test
   Port 80
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/replace-only.conf b/src/test/resources/fixtures/outputs/replace-only.conf
index 4c1ac2b..f2f1c8b 100644
--- a/src/test/resources/fixtures/outputs/replace-only.conf
+++ b/src/test/resources/fixtures/outputs/replace-only.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/replace-start.conf b/src/test/resources/fixtures/outputs/replace-start.conf
index c99a993..dfc2151 100644
--- a/src/test/resources/fixtures/outputs/replace-start.conf
+++ b/src/test/resources/fixtures/outputs/replace-start.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/url.conf b/src/test/resources/fixtures/outputs/url.conf
index 4d06a17..d028507 100644
--- a/src/test/resources/fixtures/outputs/url.conf
+++ b/src/test/resources/fixtures/outputs/url.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid?foo=bar&baz=qux ssh --stdio --usage-app=jetbrains owner/foo.agent1
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid?foo=bar&baz=qux ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --usage-app=jetbrains owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
diff --git a/src/test/resources/fixtures/outputs/wildcard.conf b/src/test/resources/fixtures/outputs/wildcard.conf
index e7c55b1..86d4d97 100644
--- a/src/test/resources/fixtures/outputs/wildcard.conf
+++ b/src/test/resources/fixtures/outputs/wildcard.conf
@@ -1,6 +1,6 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
 Host coder-jetbrains-toolbox-test.coder.invalid--*
-  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --ssh-host-prefix coder-jetbrains-toolbox-test.coder.invalid-- %h
+  ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --network-info-dir /tmp/coder-toolbox/ssh-network-metrics --ssh-host-prefix coder-jetbrains-toolbox-test.coder.invalid-- %h
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null