<?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: Shuaipeng Guo</title>
    <description>The latest articles on DEV Community by Shuaipeng Guo (@shuaipeng_guo_79180b50553).</description>
    <link>https://dev.to/shuaipeng_guo_79180b50553</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4195131%2F53f8d228-36e6-4378-a7cf-ddc0322c8401.png</url>
      <title>DEV Community: Shuaipeng Guo</title>
      <link>https://dev.to/shuaipeng_guo_79180b50553</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shuaipeng_guo_79180b50553"/>
    <language>en</language>
    <item>
      <title>Debugging an nginx 502 with an AI assistant next to your terminal</title>
      <dc:creator>Shuaipeng Guo</dc:creator>
      <pubDate>Tue, 20 Oct 2026 13:07:27 +0000</pubDate>
      <link>https://dev.to/shuaipeng_guo_79180b50553/debugging-an-nginx-502-with-an-ai-assistant-next-to-your-terminal-2o63</link>
      <guid>https://dev.to/shuaipeng_guo_79180b50553/debugging-an-nginx-502-with-an-ai-assistant-next-to-your-terminal-2o63</guid>
      <description>&lt;p&gt;It's 3 AM, the pager goes off, and the site is answering every request with &lt;strong&gt;502 Bad Gateway&lt;/strong&gt;. You know the drill: SSH in, read the nginx error log, check the upstream, check the port, check memory. None of it is hard. Doing it half-asleep, without skipping a step, is.&lt;/p&gt;

&lt;p&gt;This post walks through that triage the way I now do it in &lt;strong&gt;AI-SSH-Pro&lt;/strong&gt;, an open-source SSH desktop client with an AI assistant docked next to the terminal. The idea is simple: the assistant reads output, proposes the next command and explains it. You decide what actually runs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://guoshuaipeng.github.io/ai-ssh-pro/" rel="noopener noreferrer"&gt;https://guoshuaipeng.github.io/ai-ssh-pro/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download: &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro/releases" rel="noopener noreferrer"&gt;https://github.com/guoshuaipeng/ai-ssh-pro/releases&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4862vhw2fkdwutbjlbed.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4862vhw2fkdwutbjlbed.png" alt="Terminal on the left, AI assistant on the right, bound to the same tab" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Screenshots use the English UI and the built-in demo host, so all data is simulated. Some sample AI replies in the demo are in Chinese.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A quick refresher: what a 502 actually means
&lt;/h2&gt;

&lt;p&gt;nginx returns 502 when it is acting as a reverse proxy and gets no valid response from the upstream. In practice it is almost always one of these:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you see in &lt;code&gt;error.log&lt;/code&gt;
&lt;/th&gt;
&lt;th&gt;Usual cause&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;connect() failed (111: Connection refused)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The upstream process (php-fpm, a Node or Java app) is down, or listening on a different port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;connect() to unix:/run/php/php-fpm.sock failed (2: No such file or directory)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Socket path in nginx config doesn't match php-fpm's &lt;code&gt;listen&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;upstream prematurely closed connection&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The app crashed mid-request, often OOM-killed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;upstream sent too big header&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Response headers exceed &lt;code&gt;proxy_buffer_size&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the job is: find which line you have, then find why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: describe the symptom, get read-only commands back
&lt;/h2&gt;

&lt;p&gt;Connect to the web host, open the AI panel on the right and just type what you see, e.g. &lt;em&gt;"nginx on web-01 returns 502, help me check"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The panel is bound to the terminal tab you're in, so the assistant knows which host it is talking about. A good first answer is a short explanation plus a couple of safe, read-only commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status nginx &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 50 /var/log/nginx/error.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each suggested command shows up in a compact block with &lt;strong&gt;Copy / Run&lt;/strong&gt; and a &lt;strong&gt;risk label&lt;/strong&gt; (low / medium / high). Both of these are read-only, so they're labelled low.&lt;/p&gt;

&lt;p&gt;If the log shows &lt;code&gt;Connection refused&lt;/code&gt;, you already know the upstream isn't answering. That one line saves a lot of guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: follow the thread
&lt;/h2&gt;

&lt;p&gt;Next questions write themselves: is the upstream running, is it listening where nginx expects, did the kernel kill it?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ss &lt;span class="nt"&gt;-ltnp&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;':(80|443|8080|9000)\b'&lt;/span&gt;
systemctl status php-fpm &lt;span class="nt"&gt;--no-pager&lt;/span&gt;      &lt;span class="c"&gt;# or your app's unit&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;--since&lt;/span&gt; &lt;span class="s2"&gt;"1 hour ago"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"oom|killed process"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of reading raw &lt;code&gt;ps&lt;/code&gt; output yourself, you can ask &lt;em&gt;"list the top processes by memory"&lt;/em&gt;. In the screenshot above the assistant proposes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's labelled &lt;strong&gt;Risk: low&lt;/strong&gt;, and because it's read-only it ran right away under the tab's policy ("Ran automatically under the AI execution policy"). The reply then summarizes the output: which process is using the most memory, how much, and whether it's something you should touch.&lt;/p&gt;

&lt;p&gt;If you'd rather paste context than describe it, the input row has a button to &lt;strong&gt;attach terminal output&lt;/strong&gt; to your question, so the assistant reads exactly what you're looking at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: the fix is a change, so you approve it
&lt;/h2&gt;

&lt;p&gt;Once the cause is clear, the fix usually mutates the host: restart the upstream, correct the socket path, bump a buffer, reload nginx.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart php-fpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where the execution policy matters. AI-SSH-Pro has three levels:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Suggest only&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Read-only commands run; changes are shown as suggestions only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Confirm before run&lt;/strong&gt; (default)&lt;/td&gt;
&lt;td&gt;Read-only commands run; changes need your confirmation; high-risk needs a second confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto run&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low- and medium-risk commands run automatically; high-risk still asks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You set it globally in &lt;strong&gt;Settings → AI&lt;/strong&gt;, per host on the host's Safety card, or for the current tab only from the policy menu in the input row. The tab override is in memory only and resets on disconnect.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dbq29uhlt04jsaghc9x.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dbq29uhlt04jsaghc9x.png" alt="AI execution policy settings" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For an incident on a real web node, &lt;strong&gt;Confirm before run&lt;/strong&gt; is the sweet spot: diagnostics flow without friction, and nothing restarts until you click.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guardrails that matter at 3 AM
&lt;/h2&gt;

&lt;p&gt;Tired people make mistakes, so a few safety nets are built in rather than left to discipline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production banner.&lt;/strong&gt; Hosts marked Production show a red banner on the tab, and dangerous commands require typing the host name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-only hosts are enforced in the main process.&lt;/strong&gt; If a host is marked Read-only, the AI cannot write to its terminal, even if you click approve. The check happens in Electron's main process, not just in the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The effective policy is visible.&lt;/strong&gt; The host Safety card shows what is actually in effect, e.g. "In effect: Suggest only (limited by read-only guard)".&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3yoao6dgpnl039bs4rxg.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3yoao6dgpnl039bs4rxg.png" alt="Production banner on the terminal tab" width="799" height="491"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7p2mg779mxxajrmujg49.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7p2mg779mxxajrmujg49.png" alt="Host Safety card with protection level and AI policy" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: keep the trail for the postmortem
&lt;/h2&gt;

&lt;p&gt;Every terminal tab has its own conversation, and history is grouped &lt;strong&gt;per host&lt;/strong&gt;. Next time web-01 acts up, open the history and the previous investigation is right there: which commands ran, what they returned, what fixed it. &lt;strong&gt;+ New chat&lt;/strong&gt; archives the current conversation instead of deleting it.&lt;/p&gt;

&lt;p&gt;AI-initiated commands and dangerous operations also land in the &lt;strong&gt;audit log&lt;/strong&gt;, which you can filter by time and export when writing up the incident.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0wv9tc744qc4xmmgy38.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0wv9tc744qc4xmmgy38.png" alt="Conversation history grouped by host" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bring your own model
&lt;/h2&gt;

&lt;p&gt;The assistant talks to any OpenAI-compatible provider (OpenAI, DeepSeek, Qwen, and others). API keys are stored with the OS secure store on your machine and are not uploaded to any product cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it without touching a server
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Grab the installer for Windows, macOS or Linux from &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Open the built-in &lt;strong&gt;demo host&lt;/strong&gt;. Everything is simulated, so you can click Run freely.&lt;/li&gt;
&lt;li&gt;Add your model provider in &lt;strong&gt;Settings → AI&lt;/strong&gt;, then try it on a real box with &lt;strong&gt;Confirm before run&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;More details are on the &lt;a href="https://guoshuaipeng.github.io/ai-ssh-pro/" rel="noopener noreferrer"&gt;project site&lt;/a&gt;. AI-SSH-Pro is MIT-licensed; stars, feedback and &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt; are very welcome.&lt;/p&gt;

&lt;p&gt;How do you triage 502s today? I'd love to hear which checks you run first.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>nginx</category>
      <category>ssh</category>
      <category>ai</category>
    </item>
    <item>
      <title>AI-SSH-Pro: a multi-session SSH client with an AI ops assistant you stay in control of</title>
      <dc:creator>Shuaipeng Guo</dc:creator>
      <pubDate>Tue, 20 Oct 2026 01:43:48 +0000</pubDate>
      <link>https://dev.to/shuaipeng_guo_79180b50553/ai-ssh-pro-a-multi-session-ssh-client-with-an-ai-ops-assistant-you-stay-in-control-of-50ke</link>
      <guid>https://dev.to/shuaipeng_guo_79180b50553/ai-ssh-pro-a-multi-session-ssh-client-with-an-ai-ops-assistant-you-stay-in-control-of-50ke</guid>
      <description>&lt;p&gt;&lt;strong&gt;AI-SSH-Pro&lt;/strong&gt; is a local, multi-session SSH desktop client with a built-in, Cursor-style AI ops assistant. The AI proposes commands; you decide how they run: &lt;strong&gt;Suggest only&lt;/strong&gt;, &lt;strong&gt;Confirm before run&lt;/strong&gt;, or &lt;strong&gt;Auto run&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://guoshuaipeng.github.io/ai-ssh-pro/" rel="noopener noreferrer"&gt;https://guoshuaipeng.github.io/ai-ssh-pro/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download: &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro/releases" rel="noopener noreferrer"&gt;https://github.com/guoshuaipeng/ai-ssh-pro/releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source (MIT): &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro" rel="noopener noreferrer"&gt;https://github.com/guoshuaipeng/ai-ssh-pro&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The UI ships in both English and Chinese — switch the language in &lt;strong&gt;Settings&lt;/strong&gt;. Screenshots below use the English UI with the built-in demo host (simulated data; some sample AI replies are in Chinese).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ops / SRE engineers&lt;/strong&gt; watching several machines at once who want one place to see everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend developers&lt;/strong&gt; who regularly SSH in to read logs or restart services, and want help structuring the troubleshooting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small-team leads&lt;/strong&gt; who want AI in the loop, with per-host control over what it may execute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xshell / FinalShell users&lt;/strong&gt; looking for familiar tabs and a session tree.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ops home: every host at a glance
&lt;/h2&gt;

&lt;p&gt;The app opens on an ops dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Online hosts and open alerts at the top.&lt;/li&gt;
&lt;li&gt;One card per host with live CPU, memory and disk.&lt;/li&gt;
&lt;li&gt;One click into Terminal, SFTP or Monitor.&lt;/li&gt;
&lt;li&gt;Quick actions for common playbooks, such as a rolling nginx restart or disk cleanup.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7s56dj60v2afzts4ksp0.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7s56dj60v2afzts4ksp0.png" alt="Ops home with host metrics" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-session SSH, done properly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tabs, split panes and session groups, with search and &lt;code&gt;#tag&lt;/code&gt; filtering.&lt;/li&gt;
&lt;li&gt;Jump hosts (multi-level ProxyJump), port forwarding and host-key verification.&lt;/li&gt;
&lt;li&gt;Import from &lt;code&gt;~/.ssh/config&lt;/code&gt;; reconnect to recent sessions in one click.&lt;/li&gt;
&lt;li&gt;Production tabs carry a prominent banner, so you always know where you are.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3yoao6dgpnl039bs4rxg.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3yoao6dgpnl039bs4rxg.png" alt="Terminal with production banner" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI panel
&lt;/h2&gt;

&lt;p&gt;The assistant lives in a panel to the right of the terminal, so you never switch windows mid-incident.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suggested commands are grouped into one compact block with &lt;strong&gt;Copy / Run&lt;/strong&gt; and a risk label (low / medium / high).&lt;/li&gt;
&lt;li&gt;Each reply shows how long it took and can be copied in one click.&lt;/li&gt;
&lt;li&gt;The input row holds everything: model, execution policy, attach terminal output, send.&lt;/li&gt;
&lt;li&gt;Connect any OpenAI-compatible provider (OpenAI, DeepSeek, Qwen, …). Your API keys stay on your machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Three execution policies
&lt;/h2&gt;

&lt;p&gt;Pick one in &lt;strong&gt;Settings → AI&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Suggest only&lt;/td&gt;
&lt;td&gt;Runs read-only commands; changes are shown as suggestions only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirm before run (default)&lt;/td&gt;
&lt;td&gt;Read-only commands run; changes need confirmation; high-risk needs a second confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto run&lt;/td&gt;
&lt;td&gt;Low- and medium-risk commands run automatically; high-risk still asks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Under Auto run you can additionally allow high-risk commands to run automatically. It's off by default.&lt;/li&gt;
&lt;li&gt;The policy menu in the input row can override the policy for the current tab only.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dbq29uhlt04jsaghc9x.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7dbq29uhlt04jsaghc9x.png" alt="AI execution policy settings" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Per-host safety
&lt;/h2&gt;

&lt;p&gt;Every host profile has a &lt;strong&gt;Safety&lt;/strong&gt; card:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protection level: Normal / Production / Read-only.&lt;/li&gt;
&lt;li&gt;AI policy for this host: follow the global setting, or pick one.&lt;/li&gt;
&lt;li&gt;The card shows the policy &lt;strong&gt;actually in effect&lt;/strong&gt;, e.g. "In effect: Suggest only (limited by read-only guard)".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production hosts are not capped: your chosen policy applies as-is, and the banner reminds you of the environment. Only &lt;strong&gt;read-only&lt;/strong&gt; hosts block AI writes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7p2mg779mxxajrmujg49.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7p2mg779mxxajrmujg49.png" alt="Host safety card" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversations bound to tabs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Each terminal tab is its own conversation; two tabs on the same host give you #1 and #2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;+ New chat&lt;/strong&gt; archives the current conversation instead of deleting it.&lt;/li&gt;
&lt;li&gt;History is grouped by host — click to restore.&lt;/li&gt;
&lt;li&gt;With no terminal bound, the assistant is plain Q&amp;amp;A and never runs anything.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0wv9tc744qc4xmmgy38.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0wv9tc744qc4xmmgy38.png" alt="Conversation history grouped by host" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SFTP and the rest of the toolbox
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual-pane SFTP&lt;/strong&gt;: local and remote side by side, drag-and-drop, transfer queue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: resource charts, multi-host dashboard, alert rules and an alert workbench.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toolbox&lt;/strong&gt;: processes, ports, services, logs, Docker containers and Compose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Productivity&lt;/strong&gt;: snippets, playbooks, batch execution, broadcast input, session recording and replay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit&lt;/strong&gt;: sensitive operations are logged, filterable by time and exportable.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F75pghhlja7fbhi84ysmt.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F75pghhlja7fbhi84ysmt.png" alt="Dual-pane SFTP" width="799" height="491"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrrm7o2tyztph0fjgq1l.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrrm7o2tyztph0fjgq1l.png" alt="Tabs and workspace" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Security by design
&lt;/h2&gt;

&lt;p&gt;Safety is layered, not a single switch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main-process enforcement&lt;/strong&gt;: before the AI writes to a terminal, the main process re-checks host protection. On a read-only host, the AI cannot write even if you click approve.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One rule everywhere&lt;/strong&gt;: settings, host card, AI input and background execution all compute the effective policy the same way — no "UI says confirm, backend just runs".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounded overrides&lt;/strong&gt;: per-tab overrides live in memory only, reset on close or disconnect, and still respect read-only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credentials stay local&lt;/strong&gt;: passwords, key passphrases and API keys are encrypted with the OS secure store and never uploaded to any product cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traceable&lt;/strong&gt;: AI-initiated commands and dangerous operations are recorded in the audit log.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Download the latest installer from &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Launch it and try the built-in &lt;strong&gt;demo host&lt;/strong&gt; — all data is simulated, nothing touches a real server.&lt;/li&gt;
&lt;li&gt;Add your own model provider in &lt;strong&gt;Settings → AI&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want a comfortable multi-session SSH client where the AI proposes and &lt;strong&gt;you&lt;/strong&gt; decide how it executes, give AI-SSH-Pro a try. Stars and &lt;a href="https://github.com/guoshuaipeng/ai-ssh-pro/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt; are very welcome.&lt;/p&gt;

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