<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zw-awa</title>
    <description>The latest articles on DEV Community by Zw-awa (@zwawa).</description>
    <link>https://dev.to/zwawa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3890783%2F01d8e8f6-5c63-4057-8ca5-42b3e2fa4970.png</url>
      <title>DEV Community: Zw-awa</title>
      <link>https://dev.to/zwawa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zwawa"/>
    <language>en</language>
    <item>
      <title>I Got Tired of Splitting My Brain Between Local AI and Remote SSH, So I Built ssh-session-mcp</title>
      <dc:creator>Zw-awa</dc:creator>
      <pubDate>Tue, 21 Apr 2026 14:44:43 +0000</pubDate>
      <link>https://dev.to/zwawa/i-got-tired-of-splitting-my-brain-between-local-ai-and-remote-ssh-so-i-built-ssh-session-mcp-d0e</link>
      <guid>https://dev.to/zwawa/i-got-tired-of-splitting-my-brain-between-local-ai-and-remote-ssh-so-i-built-ssh-session-mcp-d0e</guid>
      <description>&lt;p&gt;The missing piece between local AI coding and remote SSH work is not another command runner.&lt;/p&gt;

&lt;p&gt;It is a shared runtime.&lt;/p&gt;

&lt;p&gt;Project site:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://zw-awa.github.io/ssh-session-mcp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqt27wzgdagnuvrzx5qc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqt27wzgdagnuvrzx5qc.gif" alt="ssh-session-mcp shared terminal demo" width="560" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most AI coding workflows already work well on local code. The model can inspect a repository, modify files, explain a failure, and suggest the next step. Then the moment the real environment lives on a board, a Linux box, a test host, or a GPU server, the workflow often collapses back into manual relay: switch to SSH, run the command yourself, inspect the output yourself, and carry the result back to the model.&lt;/p&gt;

&lt;p&gt;The usual response is to ask for better remote execution.&lt;/p&gt;

&lt;p&gt;I think that is the wrong abstraction.&lt;/p&gt;

&lt;p&gt;A remote terminal is stateful. It may be at a prompt, inside &lt;code&gt;less&lt;/code&gt;, waiting for a password, sitting in an editor, or still occupied by a long-running command. So the real problem is not just whether the model can send a command. It is whether the model and the user are operating around the same terminal state.&lt;/p&gt;

&lt;p&gt;That is the core of &lt;code&gt;ssh-session-mcp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It keeps one persistent SSH PTY alive, exposes it through MCP tools, and lets the human observe or take over through a browser viewer for that exact same session.&lt;/p&gt;

&lt;p&gt;Not a second session.&lt;/p&gt;

&lt;p&gt;Not a lookalike shell.&lt;/p&gt;

&lt;p&gt;The same PTY.&lt;/p&gt;

&lt;p&gt;Once that is the model, the rest follows naturally: lock behavior because humans and models can collide, safer execution modes because not every terminal state should accept blind input, and history plus diagnostics because a shared runtime cannot be a black box.&lt;/p&gt;

&lt;p&gt;The main loop stays intentionally simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh-quick-connect -&amp;gt; ssh-run -&amp;gt; inspect -&amp;gt; ssh-command-status if async -&amp;gt; ssh-run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is what I wanted: not a bigger SSH abstraction, but a runtime layer that keeps remote work inside the same collaboration loop as local AI coding.&lt;/p&gt;

&lt;p&gt;If this direction resonates with you, start with the project site:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://zw-awa.github.io/ssh-session-mcp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you find it useful, a free GitHub &lt;code&gt;star&lt;/code&gt; helps. And if you try it in a real environment, I would much rather get a concrete issue than a vague compliment, especially if it includes the machine, terminal state, and handoff point where the workflow broke down.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://github.com/Zw-awa/ssh-session-mcp&lt;/code&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>ssh</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
