diff --git a/CHANGELOG.md b/CHANGELOG.md
index 03b16ef..0cf1ae9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,10 @@
 
 - connections to the workspace are no longer established automatically after agent started with error.
 
+### Fixed
+
+- SSH connection will no longer fail with newer Coder deployments due to misconfiguration of hostname and proxy command.
+
 ## 0.1.5 - 2025-04-14
 
 ### Fixed
diff --git a/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt b/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
index fe5f039..69ee6cd 100644
--- a/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
+++ b/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
@@ -1,6 +1,7 @@
 package com.coder.toolbox
 
 import com.coder.toolbox.browser.BrowserUtil
+import com.coder.toolbox.cli.CoderCLIManager
 import com.coder.toolbox.models.WorkspaceAndAgentStatus
 import com.coder.toolbox.sdk.CoderRestClient
 import com.coder.toolbox.sdk.ex.APIResponseException
@@ -35,6 +36,7 @@ import kotlin.time.Duration.Companion.seconds
 class CoderRemoteEnvironment(
     private val context: CoderToolboxContext,
     private val client: CoderRestClient,
+    private val cli: CoderCLIManager,
     private var workspace: Workspace,
     private var agent: WorkspaceAgent,
 ) : RemoteProviderEnvironment("${workspace.name}.${agent.name}"), BeforeConnectionHook, AfterDisconnectHook {
@@ -48,6 +50,8 @@ class CoderRemoteEnvironment(
 
     override val actionsList: MutableStateFlow<List<ActionDescription>> = MutableStateFlow(getAvailableActions())
 
+    fun asPairOfWorkspaceAndAgent(): Pair<Workspace, WorkspaceAgent> = Pair(workspace, agent)
+
     private fun getAvailableActions(): List<ActionDescription> {
         val actions = mutableListOf(
             Action(context.i18n.ptrl("Open web terminal")) {
@@ -151,8 +155,8 @@ class CoderRemoteEnvironment(
      */
     override suspend
     fun getContentsView(): EnvironmentContentsView = EnvironmentView(
-        context.settingsStore.readOnly(),
         client.url,
+        cli,
         workspace,
         agent
     )
diff --git a/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt b/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt
index 186b023..4ccce7e 100644
--- a/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt
+++ b/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt
@@ -91,7 +91,7 @@ class CoderRemoteProvider(
                             it.name
                         }?.map { agent ->
                             // If we have an environment already, update that.
-                            val env = CoderRemoteEnvironment(context, client, ws, agent)
+                            val env = CoderRemoteEnvironment(context, client, cli, ws, agent)
                             lastEnvironments.firstOrNull { it == env }?.let {
                                 it.update(ws, agent)
                                 it
@@ -109,7 +109,7 @@ class CoderRemoteProvider(
                 // Reconfigure if environments changed.
                 if (lastEnvironments.size != resolvedEnvironments.size || lastEnvironments != resolvedEnvironments) {
                     context.logger.info("Workspaces have changed, reconfiguring CLI: $resolvedEnvironments")
-                    cli.configSsh(resolvedEnvironments.map { it.name }.toSet())
+                    cli.configSsh(resolvedEnvironments.map { it.asPairOfWorkspaceAndAgent() }.toSet())
                 }
 
                 environments.update {
@@ -149,7 +149,7 @@ class CoderRemoteProvider(
                 triggerSshConfig.onReceive { shouldTrigger ->
                     if (shouldTrigger) {
                         context.logger.trace("workspace poller waked up because it should reconfigure the ssh configurations")
-                        cli.configSsh(lastEnvironments.map { it.name }.toSet())
+                        cli.configSsh(lastEnvironments.map { it.asPairOfWorkspaceAndAgent() }.toSet())
                     }
                 }
             }
diff --git a/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt b/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt
index d97caf8..c7e4297 100644
--- a/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt
+++ b/src/main/kotlin/com/coder/toolbox/cli/CoderCLIManager.kt
@@ -223,11 +223,11 @@ class CoderCLIManager(
      * This can take supported features for testing purposes only.
      */
     fun configSsh(
-        workspaceNames: Set<String>,
+        wsWithAgents: Set<Pair<Workspace, WorkspaceAgent>>,
         feats: Features = features,
     ) {
         logger.info("Configuring SSH config at ${settings.sshConfigPath}")
-        writeSSHConfig(modifySSHConfig(readSSHConfig(), workspaceNames, feats))
+        writeSSHConfig(modifySSHConfig(readSSHConfig(), wsWithAgents, feats))
     }
 
     /**
@@ -249,13 +249,13 @@ class CoderCLIManager(
      */
     private fun modifySSHConfig(
         contents: String?,
-        workspaceNames: Set<String>,
+        wsWithAgents: Set<Pair<Workspace, WorkspaceAgent>>,
         feats: Features,
     ): String? {
         val host = deploymentURL.safeHost()
         val startBlock = "# --- START CODER JETBRAINS TOOLBOX $host"
         val endBlock = "# --- END CODER JETBRAINS TOOLBOX $host"
-        val isRemoving = workspaceNames.isEmpty()
+        val isRemoving = wsWithAgents.isEmpty()
         val baseArgs =
             listOfNotNull(
                 escape(localBinaryPath.toString()),
@@ -304,34 +304,39 @@ class CoderCLIManager(
                         .plus("\n\n")
                         .plus(
                             """
-                            Host ${getHostnamePrefix(deploymentURL)}-bg--*
+                            Host ${getBackgroundHostnamePrefix(deploymentURL)}--*
                               ProxyCommand ${backgroundProxyArgs.joinToString(" ")} --ssh-host-prefix ${
-                                getHostnamePrefix(
+                                getBackgroundHostnamePrefix(
                                     deploymentURL
                                 )
-                            }-bg-- %h
+                            }-- %h
                             """.trimIndent()
                                 .plus("\n" + options.prependIndent("  "))
                                 .plus(extraConfig),
                         ).replace("\n", System.lineSeparator()) +
                     System.lineSeparator() + endBlock
         } else {
-            workspaceNames.joinToString(
+            wsWithAgents.joinToString(
                 System.lineSeparator(),
                 startBlock + System.lineSeparator(),
                 System.lineSeparator() + endBlock,
                 transform = {
                     """
-                    Host ${getHostName(deploymentURL, it)}
-                      ProxyCommand ${proxyArgs.joinToString(" ")} $it
+                    Host ${getHostname(deploymentURL, it.workspace(), it.agent())}
+                      ProxyCommand ${proxyArgs.joinToString(" ")} ${getWsByOwner(it.workspace(), it.agent())}
                     """.trimIndent()
                         .plus("\n" + options.prependIndent("  "))
                         .plus(extraConfig)
                         .plus("\n")
                         .plus(
                             """
-                            Host ${getBackgroundHostName(deploymentURL, it)}
-                              ProxyCommand ${backgroundProxyArgs.joinToString(" ")} $it
+                            Host ${getBackgroundHostname(deploymentURL, it.workspace(), it.agent())}
+                              ProxyCommand ${backgroundProxyArgs.joinToString(" ")} ${
+                                getWsByOwner(
+                                    it.workspace(),
+                                    it.agent()
+                                )
+                            }
                             """.trimIndent()
                                 .plus("\n" + options.prependIndent("  "))
                                 .plus(extraConfig),
@@ -506,25 +511,30 @@ class CoderCLIManager(
             }
         }
 
+    fun getHostname(url: URL, ws: Workspace, agent: WorkspaceAgent): String {
+        return if (settings.isSshWildcardConfigEnabled && features.wildcardSsh) {
+            "${getHostnamePrefix(url)}--${ws.ownerName}--${ws.name}.${agent.name}"
+        } else {
+            "coder-jetbrains-toolbox--${ws.ownerName}--${ws.name}.${agent.name}--${url.safeHost()}"
+        }
+    }
+
+    fun getBackgroundHostname(url: URL, ws: Workspace, agent: WorkspaceAgent): String {
+        return "${getHostname(url, ws, agent)}--bg"
+    }
+
     companion object {
         private val tokenRegex = "--token [^ ]+".toRegex()
 
-        fun getHostnamePrefix(url: URL): String = "coder-jetbrains-toolbox-${url.safeHost()}"
+        private fun getHostnamePrefix(url: URL): String = "coder-jetbrains-toolbox-${url.safeHost()}"
 
-        fun getWildcardHostname(url: URL, workspace: Workspace, agent: WorkspaceAgent): String =
-            "${getHostnamePrefix(url)}-bg--${workspace.name}.${agent.name}"
+        private fun getBackgroundHostnamePrefix(url: URL): String = "coder-jetbrains-toolbox-${url.safeHost()}-bg"
 
-        fun getHostname(url: URL, workspace: Workspace, agent: WorkspaceAgent) =
-            getHostName(url, "${workspace.name}.${agent.name}")
+        private fun getWsByOwner(ws: Workspace, agent: WorkspaceAgent): String =
+            "${ws.ownerName}/${ws.name}.${agent.name}"
 
-        fun getHostName(
-            url: URL,
-            workspaceName: String,
-        ): String = "coder-jetbrains-toolbox-$workspaceName--${url.safeHost()}"
+        private fun Pair<Workspace, WorkspaceAgent>.workspace() = this.first
 
-        fun getBackgroundHostName(
-            url: URL,
-            workspaceName: String,
-        ): String = getHostName(url, workspaceName) + "--bg"
+        private fun Pair<Workspace, WorkspaceAgent>.agent() = this.second
     }
 }
diff --git a/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt b/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt
index b4eadaf..6785675 100644
--- a/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt
+++ b/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt
@@ -13,8 +13,10 @@ import com.coder.toolbox.sdk.v2.models.CreateWorkspaceBuildRequest
 import com.coder.toolbox.sdk.v2.models.Template
 import com.coder.toolbox.sdk.v2.models.User
 import com.coder.toolbox.sdk.v2.models.Workspace
+import com.coder.toolbox.sdk.v2.models.WorkspaceAgent
 import com.coder.toolbox.sdk.v2.models.WorkspaceBuild
 import com.coder.toolbox.sdk.v2.models.WorkspaceResource
+import com.coder.toolbox.sdk.v2.models.WorkspaceStatus
 import com.coder.toolbox.sdk.v2.models.WorkspaceTransition
 import com.coder.toolbox.util.CoderHostnameVerifier
 import com.coder.toolbox.util.coderSocketFactory
@@ -190,15 +192,17 @@ open class CoderRestClient(
     }
 
     /**
-     * Retrieves all the agent names for all workspaces, including those that
-     * are off.  Meant to be used when configuring SSH.
+     * Maps the list of workspaces to the associated agents.
      */
-    suspend fun agentNames(workspaces: List<Workspace>): Set<String> {
+    suspend fun groupByAgents(workspaces: List<Workspace>): Set<Pair<Workspace, WorkspaceAgent>> {
         // It is possible for there to be resources with duplicate names so we
         // need to use a set.
         return workspaces.flatMap { ws ->
-            resources(ws).filter { it.agents != null }.flatMap { it.agents!! }.map {
-                "${ws.name}.${it.name}"
+            when (ws.latestBuild.status) {
+                WorkspaceStatus.RUNNING -> ws.latestBuild.resources
+                else -> resources(ws)
+            }.filter { it.agents != null }.flatMap { it.agents!! }.map {
+                ws to it
             }
         }.toSet()
     }
diff --git a/src/main/kotlin/com/coder/toolbox/util/CoderProtocolHandler.kt b/src/main/kotlin/com/coder/toolbox/util/CoderProtocolHandler.kt
index 84b033a..aca2464 100644
--- a/src/main/kotlin/com/coder/toolbox/util/CoderProtocolHandler.kt
+++ b/src/main/kotlin/com/coder/toolbox/util/CoderProtocolHandler.kt
@@ -162,7 +162,7 @@ open class CoderProtocolHandler(
         }
 
         context.logger.info("Configuring Coder CLI...")
-        cli.configSsh(restClient.agentNames(workspaces))
+        cli.configSsh(restClient.groupByAgents(workspaces))
 
         if (shouldWaitForAutoLogin) {
             isInitialized.waitForTrue()
diff --git a/src/main/kotlin/com/coder/toolbox/views/EnvironmentView.kt b/src/main/kotlin/com/coder/toolbox/views/EnvironmentView.kt
index 89ef3dd..020ed8a 100644
--- a/src/main/kotlin/com/coder/toolbox/views/EnvironmentView.kt
+++ b/src/main/kotlin/com/coder/toolbox/views/EnvironmentView.kt
@@ -3,7 +3,6 @@ package com.coder.toolbox.views
 import com.coder.toolbox.cli.CoderCLIManager
 import com.coder.toolbox.sdk.v2.models.Workspace
 import com.coder.toolbox.sdk.v2.models.WorkspaceAgent
-import com.coder.toolbox.settings.ReadOnlyCoderSettings
 import com.jetbrains.toolbox.api.remoteDev.environments.SshEnvironmentContentsView
 import com.jetbrains.toolbox.api.remoteDev.ssh.SshConnectionInfo
 import java.net.URL
@@ -17,8 +16,8 @@ import java.net.URL
  * SSH must be configured before this will work.
  */
 class EnvironmentView(
-    private val settings: ReadOnlyCoderSettings,
     private val url: URL,
+    private val cli: CoderCLIManager,
     private val workspace: Workspace,
     private val agent: WorkspaceAgent,
 ) : SshEnvironmentContentsView {
@@ -26,7 +25,7 @@ class EnvironmentView(
         /**
          * The host name generated by the cli manager for this workspace.
          */
-        override val host: String = resolveHost()
+        override val host: String = cli.getHostname(url, workspace, agent)
 
         /**
          * The port is ignored by the Coder proxy command.
@@ -36,12 +35,6 @@ class EnvironmentView(
         /**
          * The username is ignored by the Coder proxy command.
          */
-        override val userName: String? = "coder"
-
+        override val userName: String? = null
     }
-
-    private fun resolveHost(): String =
-        if (settings.isSshWildcardConfigEnabled)
-            CoderCLIManager.getWildcardHostname(url, workspace, agent)
-        else CoderCLIManager.getHostname(url, workspace, agent)
-}
+}
\ 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 9a32ded..d612000 100644
--- a/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt
+++ b/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt
@@ -4,6 +4,8 @@ import com.coder.toolbox.CoderToolboxContext
 import com.coder.toolbox.cli.ex.MissingVersionException
 import com.coder.toolbox.cli.ex.ResponseException
 import com.coder.toolbox.cli.ex.SSHConfigFormatException
+import com.coder.toolbox.sdk.DataGen.Companion.workspace
+import com.coder.toolbox.sdk.v2.models.Workspace
 import com.coder.toolbox.settings.Environment
 import com.coder.toolbox.store.BINARY_DIRECTORY
 import com.coder.toolbox.store.BINARY_NAME
@@ -44,9 +46,11 @@ import org.zeroturnaround.exec.InvalidExitValueException
 import org.zeroturnaround.exec.ProcessInitException
 import java.net.HttpURLConnection
 import java.net.InetSocketAddress
+import java.net.URI
 import java.net.URL
 import java.nio.file.AccessDeniedException
 import java.nio.file.Path
+import java.util.UUID
 import kotlin.test.Test
 import kotlin.test.assertContains
 import kotlin.test.assertEquals
@@ -350,7 +354,7 @@ internal class CoderCLIManagerTest {
     }
 
     data class SSHTest(
-        val workspaces: List<String>,
+        val workspaces: List<Workspace>,
         val input: String?,
         val output: String,
         val remove: String,
@@ -364,10 +368,19 @@ internal class CoderCLIManagerTest {
         val extraConfig: String = "",
         val env: Environment = Environment(),
         val sshLogDirectory: Path? = null,
+        val url: URL? = null,
     )
 
     @Test
     fun testConfigureSSH() {
+        val workspace = workspace("foo", agents = mapOf("agent1" to UUID.randomUUID().toString()))
+        val workspace2 = workspace("bar", agents = mapOf("agent1" to UUID.randomUUID().toString()))
+        val betterWorkspace = workspace("foo", agents = mapOf("agent1" to UUID.randomUUID().toString()))
+        val workspaceWithMultipleAgents = workspace(
+            "foo",
+            agents = mapOf("agent1" to UUID.randomUUID().toString(), "agent2" to UUID.randomUUID().toString())
+        )
+
         val extraConfig =
             listOf(
                 "ServerAliveInterval 5",
@@ -375,27 +388,27 @@ internal class CoderCLIManagerTest {
             ).joinToString(System.lineSeparator())
         val tests =
             listOf(
-                SSHTest(listOf("foo", "bar"), null, "multiple-workspaces", "blank"),
-                SSHTest(listOf("foo", "bar"), null, "multiple-workspaces", "blank"),
-                SSHTest(listOf("foo-bar"), "blank", "append-blank", "blank"),
-                SSHTest(listOf("foo-bar"), "blank-newlines", "append-blank-newlines", "blank"),
-                SSHTest(listOf("foo-bar"), "existing-end", "replace-end", "no-blocks"),
-                SSHTest(listOf("foo-bar"), "existing-end-no-newline", "replace-end-no-newline", "no-blocks"),
-                SSHTest(listOf("foo-bar"), "existing-middle", "replace-middle", "no-blocks"),
+                SSHTest(listOf(workspace, workspace2), null, "multiple-workspaces", "blank"),
+                SSHTest(listOf(workspace, workspace2), null, "multiple-workspaces", "blank"),
+                SSHTest(listOf(workspace), "blank", "append-blank", "blank"),
+                SSHTest(listOf(workspace), "blank-newlines", "append-blank-newlines", "blank"),
+                SSHTest(listOf(workspace), "existing-end", "replace-end", "no-blocks"),
+                SSHTest(listOf(workspace), "existing-end-no-newline", "replace-end-no-newline", "no-blocks"),
+                SSHTest(listOf(workspace), "existing-middle", "replace-middle", "no-blocks"),
                 SSHTest(
-                    listOf("foo-bar"),
+                    listOf(workspace),
                     "existing-middle-and-unrelated",
                     "replace-middle-ignore-unrelated",
                     "no-related-blocks"
                 ),
-                SSHTest(listOf("foo-bar"), "existing-only", "replace-only", "blank"),
-                SSHTest(listOf("foo-bar"), "existing-start", "replace-start", "no-blocks"),
-                SSHTest(listOf("foo-bar"), "no-blocks", "append-no-blocks", "no-blocks"),
-                SSHTest(listOf("foo-bar"), "no-related-blocks", "append-no-related-blocks", "no-related-blocks"),
-                SSHTest(listOf("foo-bar"), "no-newline", "append-no-newline", "no-blocks"),
+                SSHTest(listOf(workspace), "existing-only", "replace-only", "blank"),
+                SSHTest(listOf(workspace), "existing-start", "replace-start", "no-blocks"),
+                SSHTest(listOf(workspace), "no-blocks", "append-no-blocks", "no-blocks"),
+                SSHTest(listOf(workspace), "no-related-blocks", "append-no-related-blocks", "no-related-blocks"),
+                SSHTest(listOf(workspace), "no-newline", "append-no-newline", "no-blocks"),
                 if (getOS() == OS.WINDOWS) {
                     SSHTest(
-                        listOf("header"),
+                        listOf(workspace),
                         null,
                         "header-command-windows",
                         "blank",
@@ -403,7 +416,7 @@ internal class CoderCLIManagerTest {
                     )
                 } else {
                     SSHTest(
-                        listOf("header"),
+                        listOf(workspace),
                         null,
                         "header-command",
                         "blank",
@@ -411,7 +424,7 @@ internal class CoderCLIManagerTest {
                     )
                 },
                 SSHTest(
-                    listOf("foo"),
+                    listOf(workspace),
                     null,
                     "disable-autostart",
                     "blank",
@@ -422,9 +435,9 @@ internal class CoderCLIManagerTest {
                         reportWorkspaceUsage = true,
                     ),
                 ),
-                SSHTest(listOf("foo"), null, "no-disable-autostart", "blank", ""),
+                SSHTest(listOf(workspace), null, "no-disable-autostart", "blank", ""),
                 SSHTest(
-                    listOf("foo"),
+                    listOf(workspace),
                     null,
                     "no-report-usage",
                     "blank",
@@ -436,26 +449,54 @@ internal class CoderCLIManagerTest {
                     ),
                 ),
                 SSHTest(
-                    listOf("extra"),
+                    listOf(workspace),
                     null,
                     "extra-config",
                     "blank",
                     extraConfig = extraConfig,
                 ),
                 SSHTest(
-                    listOf("extra"),
+                    listOf(workspace),
                     null,
                     "extra-config",
                     "blank",
                     env = Environment(mapOf(CODER_SSH_CONFIG_OPTIONS to extraConfig)),
                 ),
                 SSHTest(
-                    listOf("foo"),
+                    listOf(workspace),
                     null,
                     "log-dir",
                     "blank",
                     sshLogDirectory = tmpdir.resolve("ssh-logs"),
                 ),
+                SSHTest(
+                    listOf(workspace),
+                    input = null,
+                    output = "url",
+                    remove = "blank",
+                    url = URI.create("https://test.coder.invalid?foo=bar&baz=qux").toURL(),
+                ),
+                SSHTest(
+                    listOf(workspace, betterWorkspace),
+                    input = null,
+                    output = "multiple-users",
+                    remove = "blank",
+                ),
+                SSHTest(
+                    listOf(workspaceWithMultipleAgents),
+                    input = null,
+                    output = "multiple-agents",
+                    remove = "blank",
+                ),
+                SSHTest(
+                    listOf(workspace),
+                    input = null,
+                    output = "wildcard",
+                    remove = "blank",
+                    features = Features(
+                        wildcardSsh = true,
+                    ),
+                ),
             )
 
         val newlineRe = "\r?\n".toRegex()
@@ -475,7 +516,8 @@ internal class CoderCLIManagerTest {
                     context.logger,
                 ).readOnly()
 
-            val ccm = CoderCLIManager(URL("https://test.coder.invalid"), context.logger, settings)
+            val ccm =
+                CoderCLIManager(it.url ?: URI.create("https://test.coder.invalid").toURL(), context.logger, settings)
 
             val sshConfigPath = Path.of(settings.sshConfigPath)
             // Input is the configuration that we start with, if any.
@@ -506,7 +548,14 @@ internal class CoderCLIManagerTest {
                     }
 
             // Add workspaces.
-            ccm.configSsh(it.workspaces.toSet(), it.features)
+            ccm.configSsh(
+                it.workspaces.flatMap { ws ->
+                    ws.latestBuild.resources.filter { r -> r.agents != null }.flatMap { r -> r.agents!! }.map { a ->
+                        ws to a
+                    }
+                }.toSet(),
+                it.features,
+            )
 
             assertEquals(expectedConf, sshConfigPath.toFile().readText())
 
@@ -568,9 +617,18 @@ internal class CoderCLIManagerTest {
                 "new\nline",
             )
 
+
+        val workspace = workspace(
+            "foo",
+            agents = mapOf("agentid1" to UUID.randomUUID().toString(), "agentid2" to UUID.randomUUID().toString())
+        )
+        val withAgents = workspace.latestBuild.resources.filter { it.agents != null }.flatMap { it.agents!! }.map {
+            workspace to it
+        }
+
         tests.forEach {
             val ccm = CoderCLIManager(
-                URL("https://test.coder.invalid"),
+                URI.create("https://test.coder.invalid").toURL(),
                 context.logger,
                 CoderSettingsStore(
                     pluginTestSettingsStore(
@@ -583,7 +641,7 @@ internal class CoderCLIManagerTest {
 
             assertFailsWith(
                 exceptionClass = Exception::class,
-                block = { ccm.configSsh(setOf("foo", "bar")) },
+                block = { ccm.configSsh(withAgents.toSet()) },
             )
         }
     }
diff --git a/src/test/resources/fixtures/outputs/append-blank-newlines.conf b/src/test/resources/fixtures/outputs/append-blank-newlines.conf
index 7124556..c73e3a2 100644
--- a/src/test/resources/fixtures/outputs/append-blank-newlines.conf
+++ b/src/test/resources/fixtures/outputs/append-blank-newlines.conf
@@ -3,15 +3,15 @@
 
 
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 d884838..7c9df80 100644
--- a/src/test/resources/fixtures/outputs/append-blank.conf
+++ b/src/test/resources/fixtures/outputs/append-blank.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 e4c161b..8db68d4 100644
--- a/src/test/resources/fixtures/outputs/append-no-blocks.conf
+++ b/src/test/resources/fixtures/outputs/append-no-blocks.conf
@@ -4,15 +4,15 @@ Host test2
   Port 443
 
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 b5b9d2c..0a48b7e 100644
--- a/src/test/resources/fixtures/outputs/append-no-newline.conf
+++ b/src/test/resources/fixtures/outputs/append-no-newline.conf
@@ -3,15 +3,15 @@ Host test
 Host test2
   Port 443
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 87446f5..73ebf8d 100644
--- a/src/test/resources/fixtures/outputs/append-no-related-blocks.conf
+++ b/src/test/resources/fixtures/outputs/append-no-related-blocks.conf
@@ -10,15 +10,15 @@ some jetbrains config
 # --- END CODER JETBRAINS TOOLBOX test.coder.unrelated
 
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 cf993f8..916aa9f 100644
--- a/src/test/resources/fixtures/outputs/disable-autostart.conf
+++ b/src/test/resources/fixtures/outputs/disable-autostart.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo--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 foo
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo--test.coder.invalid--bg
-  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=disable foo
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 3acb86d..9a7900c 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-extra--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 extra
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
@@ -8,8 +8,8 @@ Host coder-jetbrains-toolbox-extra--test.coder.invalid
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
   ServerAliveInterval 5
   ServerAliveCountMax 3
-Host coder-jetbrains-toolbox-extra--test.coder.invalid--bg
-  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=disable extra
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 84d0529..a27f0ab 100644
--- a/src/test/resources/fixtures/outputs/header-command-windows.conf
+++ b/src/test/resources/fixtures/outputs/header-command-windows.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-header--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 header
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-header--test.coder.invalid--bg
-  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=disable header
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 c8ee5cd..61b5d74 100644
--- a/src/test/resources/fixtures/outputs/header-command.conf
+++ b/src/test/resources/fixtures/outputs/header-command.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-header--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 header
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-header--test.coder.invalid--bg
-  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=disable header
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 a0be236..84d7549 100644
--- a/src/test/resources/fixtures/outputs/log-dir.conf
+++ b/src/test/resources/fixtures/outputs/log-dir.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo--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 foo
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo--test.coder.invalid--bg
-  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=disable foo
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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
new file mode 100644
index 0000000..a81a8be
--- /dev/null
+++ b/src/test/resources/fixtures/outputs/multiple-agents.conf
@@ -0,0 +1,30 @@
+# --- 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
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable owner/foo.agent1
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  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
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+Host coder-jetbrains-toolbox--owner--foo.agent2--test.coder.invalid--bg
+  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=disable owner/foo.agent2
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+# --- END CODER JETBRAINS TOOLBOX test.coder.invalid
diff --git a/src/test/resources/fixtures/outputs/multiple-users.conf b/src/test/resources/fixtures/outputs/multiple-users.conf
new file mode 100644
index 0000000..c8cd03d
--- /dev/null
+++ b/src/test/resources/fixtures/outputs/multiple-users.conf
@@ -0,0 +1,30 @@
+# --- 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
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable owner/foo.agent1
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  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
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable owner/foo.agent1
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+# --- END CODER JETBRAINS TOOLBOX test.coder.invalid
diff --git a/src/test/resources/fixtures/outputs/multiple-workspaces.conf b/src/test/resources/fixtures/outputs/multiple-workspaces.conf
index e54e00c..8629ce3 100644
--- a/src/test/resources/fixtures/outputs/multiple-workspaces.conf
+++ b/src/test/resources/fixtures/outputs/multiple-workspaces.conf
@@ -1,27 +1,27 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo--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 foo
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo--test.coder.invalid--bg
-  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=disable foo
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable owner/foo.agent1
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-bar--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 bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-bar--test.coder.invalid--bg
-  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=disable bar
+Host coder-jetbrains-toolbox--owner--bar.agent1--test.coder.invalid--bg
+  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=disable 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 cd9e3ad..7c9df80 100644
--- a/src/test/resources/fixtures/outputs/no-disable-autostart.conf
+++ b/src/test/resources/fixtures/outputs/no-disable-autostart.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo--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 foo
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo--test.coder.invalid--bg
-  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=disable foo
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 03a8d81..7c971e5 100644
--- a/src/test/resources/fixtures/outputs/no-report-usage.conf
+++ b/src/test/resources/fixtures/outputs/no-report-usage.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo--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 foo
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo--test.coder.invalid--bg
-  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 foo
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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
   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 4d4e958..77a7cbb 100644
--- a/src/test/resources/fixtures/outputs/replace-end-no-newline.conf
+++ b/src/test/resources/fixtures/outputs/replace-end-no-newline.conf
@@ -2,15 +2,15 @@ Host test
   Port 80
 Host test2
   Port 443 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 b5b9d2c..0a48b7e 100644
--- a/src/test/resources/fixtures/outputs/replace-end.conf
+++ b/src/test/resources/fixtures/outputs/replace-end.conf
@@ -3,15 +3,15 @@ Host test
 Host test2
   Port 443
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 36b03f3..ce23062 100644
--- a/src/test/resources/fixtures/outputs/replace-middle-ignore-unrelated.conf
+++ b/src/test/resources/fixtures/outputs/replace-middle-ignore-unrelated.conf
@@ -4,15 +4,15 @@ Host test
 some coder config
 # ------------END-CODER------------
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 437404c..9125cd8 100644
--- a/src/test/resources/fixtures/outputs/replace-middle.conf
+++ b/src/test/resources/fixtures/outputs/replace-middle.conf
@@ -1,15 +1,15 @@
 Host test
   Port 80
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 d884838..7c9df80 100644
--- a/src/test/resources/fixtures/outputs/replace-only.conf
+++ b/src/test/resources/fixtures/outputs/replace-only.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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 aeb47d4..060582d 100644
--- a/src/test/resources/fixtures/outputs/replace-start.conf
+++ b/src/test/resources/fixtures/outputs/replace-start.conf
@@ -1,13 +1,13 @@
 # --- START CODER JETBRAINS TOOLBOX test.coder.invalid
-Host coder-jetbrains-toolbox-foo-bar--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 foo-bar
+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
   ConnectTimeout 0
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
   SetEnv CODER_SSH_SESSION_TYPE=JetBrains
-Host coder-jetbrains-toolbox-foo-bar--test.coder.invalid--bg
-  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=disable foo-bar
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable 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
new file mode 100644
index 0000000..dd3b17b
--- /dev/null
+++ b/src/test/resources/fixtures/outputs/url.conf
@@ -0,0 +1,16 @@
+# --- 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
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+Host coder-jetbrains-toolbox--owner--foo.agent1--test.coder.invalid--bg
+  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=disable owner/foo.agent1
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+# --- END CODER JETBRAINS TOOLBOX test.coder.invalid
diff --git a/src/test/resources/fixtures/outputs/wildcard.conf b/src/test/resources/fixtures/outputs/wildcard.conf
new file mode 100644
index 0000000..b3fd6b8
--- /dev/null
+++ b/src/test/resources/fixtures/outputs/wildcard.conf
@@ -0,0 +1,17 @@
+# --- 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
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+
+Host coder-jetbrains-toolbox-test.coder.invalid-bg--*
+  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-bg-- %h
+  ConnectTimeout 0
+  StrictHostKeyChecking no
+  UserKnownHostsFile /dev/null
+  LogLevel ERROR
+  SetEnv CODER_SSH_SESSION_TYPE=JetBrains
+# --- END CODER JETBRAINS TOOLBOX test.coder.invalid