<?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: Gemron Guo</title>
    <description>The latest articles on DEV Community by Gemron Guo (@gemron_guo_d4c2e5a892fb40).</description>
    <link>https://dev.to/gemron_guo_d4c2e5a892fb40</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%2F1979086%2F671d4b09-1372-4a6a-bbfb-086f954df134.jpg</url>
      <title>DEV Community: Gemron Guo</title>
      <link>https://dev.to/gemron_guo_d4c2e5a892fb40</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gemron_guo_d4c2e5a892fb40"/>
    <language>en</language>
    <item>
      <title>The Software Era Is Coming to an End</title>
      <dc:creator>Gemron Guo</dc:creator>
      <pubDate>Sun, 18 Oct 2026 17:28:54 +0000</pubDate>
      <link>https://dev.to/gemron_guo_d4c2e5a892fb40/the-software-era-is-coming-to-an-end-4b45</link>
      <guid>https://dev.to/gemron_guo_d4c2e5a892fb40/the-software-era-is-coming-to-an-end-4b45</guid>
      <description>&lt;p&gt;&lt;em&gt;When AI Generates Its Own Code and Collaboration Protocols&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;郭猛跃 (Guo Mengyue)&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Core arguments supplied by the author; text and English translation drafted with AI assistance. The cover is AI-generated. This is an opinion essay about a possible future.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Human-authored software and protocols will no longer be a prerequisite for getting work done.&lt;/p&gt;

&lt;p&gt;People will set goals. AI will generate executable code, negotiate the rules of collaboration, and organize the work. The era organized around fixed applications is coming to an end.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Much of Our Day Belongs to Software?
&lt;/h2&gt;

&lt;p&gt;Consider a familiar working day. You open a messaging app to receive a task, search a shared drive for an attachment, copy data into a spreadsheet, and turn the findings into a presentation. After the meeting, you update the project tracker, send notifications, and add deadlines to a calendar.&lt;/p&gt;

&lt;p&gt;One coherent job has been split across several applications. A person must remember where its pieces live, connect the workflows, and explain the same objective repeatedly.&lt;/p&gt;

&lt;p&gt;Expense reporting makes the arrangement especially clear. The purchase is complete, but the employee still has to download an invoice, upload a receipt, choose a category, and enter an amount. The systems already hold some of the information. The employee must assemble it again.&lt;/p&gt;

&lt;p&gt;We call these activities work. How much of that work creates value, and how much exists to accommodate the systems?&lt;/p&gt;

&lt;p&gt;Software expanded human capability. It also trained us to accept a particular order: learn the tool first, pursue the goal second; adapt to the workflow first, move the work forward second. Users paid with attention. Employers paid for training. Familiarity and the difficulty of moving elsewhere became commercial defenses.&lt;/p&gt;

&lt;p&gt;AI raises a fundamental question: must we keep paying that cost?&lt;/p&gt;

&lt;h2&gt;
  
  
  One AI Builds. Another AI Operates.
&lt;/h2&gt;

&lt;p&gt;Today, one side uses AI to write software: pages, buttons, forms, and workflows. The other side uses AI to operate that software: recognize the page, locate the button, fill in the form.&lt;/p&gt;

&lt;p&gt;One AI packages a capability. Another AI unpacks it.&lt;/p&gt;

&lt;p&gt;A system renders data as a dashboard, and an AI extracts the conclusion. A system arranges functions in a menu, and an AI works out what to click.&lt;/p&gt;

&lt;p&gt;This approach has immediate value. Much of the world's operational capability is locked inside existing systems, and AI must work through them to get things done. But a useful transition need not become the permanent architecture.&lt;/p&gt;

&lt;p&gt;If both ends can understand a task, why require them to communicate through an entire interaction structure designed for people?&lt;/p&gt;

&lt;p&gt;The next step is to exchange goals, constraints, and results directly. AI can generate task-specific code and negotiate data formats, acceptance criteria, and interaction rules. People need not build a separate application for every anticipated need or prescribe a fixed workflow for every possible collaboration.&lt;/p&gt;

&lt;p&gt;There is an important technical distinction here. Assembly or machine code is still software and must follow the hardware's instruction set. Communication between devices still needs shared rules. What changes is who generates those rules, and whether they must be fixed in advance.&lt;/p&gt;

&lt;p&gt;Designing software and protocols will become part of the AI execution process itself.&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%2Fuurdpmjml8u0f0lwmr6a.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%2Fuurdpmjml8u0f0lwmr6a.png" alt="Original workflow comparison diagram" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Original diagram drawn programmatically. Shared communication foundations, explicit authorization, and verification remain necessary.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future Will Not Begin by Opening an App
&lt;/h2&gt;

&lt;p&gt;Imagine a future business trip.&lt;/p&gt;

&lt;p&gt;You specify the destination, schedule, and budget. AI checks the meetings, coordinates with transport and accommodation services, and presents a plan you can inspect. You approve material spending. Changes to the trip trigger proposed adjustments. When the trip ends, expenses and receipts are assembled for verification.&lt;/p&gt;

&lt;p&gt;You do not have to remember which app holds the reservation or carry the same information between systems. You keep track of the trip as a whole.&lt;/p&gt;

&lt;p&gt;Now imagine a small factory receiving an order. The customer's AI provides specifications and a delivery deadline. The factory's AI builds a proposal around inventory, capacity, and cost. Both sides establish quality standards and acceptance conditions. Production proceeds within authorized limits. If the delivery schedule changes, the system proposes alternatives and the responsible person makes the trade-off.&lt;/p&gt;

&lt;p&gt;Capabilities that once required buying applications, configuring workflows, and training staff could instead be assembled around the task.&lt;/p&gt;

&lt;p&gt;Interfaces would change with them. A comparison calls up a table. A design task calls up a canvas. A decision calls up evidence. Once the job is complete, the temporary workspace closes. Tools appear around the work, and human attention returns to the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Remains When Applications Recede?
&lt;/h2&gt;

&lt;p&gt;This future forces the software industry to prove its value again.&lt;/p&gt;

&lt;p&gt;Reliable data, scarce expertise, accurate execution, and the ability to deliver on a promise will matter more than page counts or feature lists. Businesses sustained by complicated operations, closed formats, and migration friction will come under pressure.&lt;/p&gt;

&lt;p&gt;Users will face new judgments too. Did the AI understand the objective? Were the negotiated terms fair? Did execution exceed its authority? Important decisions, verification records, and ways to correct errors must remain visible.&lt;/p&gt;

&lt;p&gt;The opportunity is to spend less time maintaining tools and more time choosing directions, creating value, and taking responsibility for our decisions.&lt;/p&gt;

&lt;p&gt;Stop asking one AI to build a maze and another AI to find the exit.&lt;/p&gt;

&lt;p&gt;Let people set the goals. Let AI generate the necessary code and negotiate the rules of collaboration, with explicit authorization and verification.&lt;/p&gt;

&lt;p&gt;Human-authored software and protocols will no longer be a prerequisite for getting work done.&lt;/p&gt;

&lt;p&gt;The software industry's old order begins to unravel at that point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html" rel="noopener noreferrer"&gt;Intel processor architecture manuals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/info/rfc1122/" rel="noopener noreferrer"&gt;RFC 1122: Internet communication layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>automation</category>
    </item>
    <item>
      <title>One PTY, two screens: choosing who controls terminal size</title>
      <dc:creator>Gemron Guo</dc:creator>
      <pubDate>Mon, 07 Sep 2026 11:56:02 +0000</pubDate>
      <link>https://dev.to/gemron_guo_d4c2e5a892fb40/one-pty-two-screens-choosing-who-controls-terminal-size-3hde</link>
      <guid>https://dev.to/gemron_guo_d4c2e5a892fb40/one-pty-two-screens-choosing-who-controls-terminal-size-3hde</guid>
      <description>&lt;p&gt;A browser terminal can look responsive while showing the wrong grid.&lt;/p&gt;

&lt;p&gt;Imagine a desktop displaying 140 columns and a phone displaying 48. Both clients are attached to the same running command-line application. If each emulator independently resizes itself to its container, the application still receives only one terminal size. Cursor positioning and line wrapping can then disagree between the application and one of its viewers.&lt;/p&gt;

&lt;p&gt;This is a state-ownership problem hiding inside a layout problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate three sizes
&lt;/h2&gt;

&lt;p&gt;There are three quantities worth naming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Container size:&lt;/strong&gt; the pixels available in one browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proposed grid:&lt;/strong&gt; the rows and columns that fit that container at its current font size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accepted grid:&lt;/strong&gt; the rows and columns the host has applied to the shared terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Windows, &lt;a href="https://learn.microsoft.com/en-us/windows/console/resizepseudoconsole" rel="noopener noreferrer"&gt;ResizePseudoConsole&lt;/a&gt; takes the pseudoconsole handle and a character-grid size. It changes the dimensions seen by attached console applications. Meanwhile, &lt;a href="https://xtermjs.org/docs/api/terminal/classes/terminal/#resize" rel="noopener noreferrer"&gt;xterm.js resize&lt;/a&gt; changes a client emulator's grid.&lt;/p&gt;

&lt;p&gt;Calling the browser method does not, by itself, coordinate the host or the other browser.&lt;/p&gt;

&lt;p&gt;A useful invariant is: every viewer of the same terminal should render the host's accepted grid. A narrower container can scroll horizontally. It should not silently invent a different number of columns for the same live output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose an ownership policy
&lt;/h2&gt;

&lt;p&gt;Several policies are reasonable, with different costs.&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;Benefit&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fixed desktop grid&lt;/td&gt;
&lt;td&gt;Stable desktop layout&lt;/td&gt;
&lt;td&gt;Phones need horizontal scrolling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smallest attached viewport&lt;/td&gt;
&lt;td&gt;Content fits every viewer&lt;/td&gt;
&lt;td&gt;One passive phone can shrink everyone's terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active viewer owns the grid&lt;/td&gt;
&lt;td&gt;Layout follows the person interacting&lt;/td&gt;
&lt;td&gt;Changing devices changes the grid for every viewer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The third policy needs an explicit distinction between &lt;strong&gt;reporting a size&lt;/strong&gt; and &lt;strong&gt;claiming control&lt;/strong&gt;. A background window opening a sidebar is a size report. An intentional interaction with the terminal can be a claim.&lt;/p&gt;

&lt;p&gt;Do not make every resize observer callback a claim. Otherwise, background layout changes can take ownership back immediately after the user switches devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small state machine
&lt;/h2&gt;

&lt;p&gt;The core decision can be expressed separately from networking and rendering:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;cols&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ViewportState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Grid&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mayResize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;viewer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;claim&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;owner&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;owner&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;viewer&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;claim&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is illustrative policy code, not a complete terminal server. The surrounding handler needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authenticate the connection and validate positive integer dimensions within supported limits.&lt;/li&gt;
&lt;li&gt;Serialize ownership and resize decisions for each terminal.&lt;/li&gt;
&lt;li&gt;Reject passive reports from viewers that do not own it.&lt;/li&gt;
&lt;li&gt;Apply the requested grid to the host terminal.&lt;/li&gt;
&lt;li&gt;After success, commit the accepted state and broadcast it to every viewer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Clients then resize their emulators from that accepted event. Keeping a local proposal separate avoids treating an unacknowledged request as an accomplished resize.&lt;/p&gt;

&lt;p&gt;An owner change can matter even if the dimensions stay identical. Deduplicating messages only by rows and columns would lose that handoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disconnects and failure cases
&lt;/h2&gt;

&lt;p&gt;When an owner disconnects, clearing ownership while retaining the last accepted grid avoids a surprise resize for remaining readers. The next intentional interaction can claim ownership. A reconnecting client should obtain the current grid before presenting the session as ready.&lt;/p&gt;

&lt;p&gt;Failed host resizes should leave the previously accepted grid authoritative. Rapid claims from two clients need a defined order. If the protocol uses multiple channels or asynchronous handlers, include a revision number or another ordering mechanism; broadcasting dimensions alone does not establish that order.&lt;/p&gt;

&lt;p&gt;Sharing terminal dimensions also does not solve input ownership. Allowing two clients to type into the same process is a separate product decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checks that reveal the bug
&lt;/h2&gt;

&lt;p&gt;A useful manual exercise is to attach a wide desktop and a narrow phone, then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interact on the phone and confirm both emulators adopt the same accepted dimensions.&lt;/li&gt;
&lt;li&gt;Resize a passive desktop panel and confirm it does not steal ownership.&lt;/li&gt;
&lt;li&gt;Switch control back to the desktop while a full-screen terminal application is open.&lt;/li&gt;
&lt;li&gt;Disconnect the active viewer and check that the remaining screen keeps its grid.&lt;/li&gt;
&lt;li&gt;Simulate a rejected resize and verify that clients keep the last accepted state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are suggested checks, not a report of a new device test run. They target the boundary between local layout and shared state, where ordinary single-window testing misses the problem.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI disclosure: This article was generated by an AI agent from the author's terminal-workbench implementation notes, with technical claims checked against the relevant source code and the API documentation linked above. The code sample is illustrative.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>architecture</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Stopped Losing Track of Claude Code and Codex Sessions</title>
      <dc:creator>Gemron Guo</dc:creator>
      <pubDate>Sun, 02 Aug 2026 06:15:53 +0000</pubDate>
      <link>https://dev.to/gemron_guo_d4c2e5a892fb40/how-i-stopped-losing-track-of-claude-code-and-codex-sessions-4egg</link>
      <guid>https://dev.to/gemron_guo_d4c2e5a892fb40/how-i-stopped-losing-track-of-claude-code-and-codex-sessions-4egg</guid>
      <description>&lt;p&gt;Using one coding agent is simple. Using several across multiple projects is where the real mess begins.&lt;/p&gt;

&lt;p&gt;I often had Claude Code and Codex running side by side. One agent was working, another was waiting for approval, and yesterday’s useful session was buried under a different path, branch, or terminal window.&lt;/p&gt;

&lt;p&gt;The agents were capable. My workspace was not.&lt;/p&gt;

&lt;p&gt;That frustration led me to build &lt;strong&gt;Termexo&lt;/strong&gt;, a local-first Windows workbench for coding agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem was not the model
&lt;/h2&gt;

&lt;p&gt;The hardest part was no longer generating code. It was keeping track of context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which agent is still working?&lt;/li&gt;
&lt;li&gt;Which one needs my approval?&lt;/li&gt;
&lt;li&gt;Where did I leave yesterday’s session?&lt;/li&gt;
&lt;li&gt;Which project, path, and branch did that terminal belong to?&lt;/li&gt;
&lt;li&gt;Which model profile was active?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A pile of terminal windows can answer all of those questions—but only if you remember everything yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I wanted instead
&lt;/h2&gt;

&lt;p&gt;I wanted one recoverable workspace where I could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run Claude Code and Codex in real PTY terminals;&lt;/li&gt;
&lt;li&gt;arrange terminals in custom grids;&lt;/li&gt;
&lt;li&gt;see when an agent needs attention;&lt;/li&gt;
&lt;li&gt;search and resume native sessions;&lt;/li&gt;
&lt;li&gt;restore a workspace after restarting the app;&lt;/li&gt;
&lt;li&gt;switch Claude-compatible model profiles without rebuilding environment variables;&lt;/li&gt;
&lt;li&gt;keep API keys in Windows Credential Manager.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That became Termexo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why keep the native CLI?
&lt;/h2&gt;

&lt;p&gt;Termexo does not replace Claude Code or Codex with a custom chat interface. The real CLI remains visible and usable.&lt;/p&gt;

&lt;p&gt;That matters because the terminal is still the source of truth. Existing commands, hooks, approvals, keyboard shortcuts, and session behavior continue to work. Termexo focuses on the coordination layer around those tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workspace should be recoverable
&lt;/h2&gt;

&lt;p&gt;A useful coding-agent session should not disappear just because the app restarted or a terminal was closed.&lt;/p&gt;

&lt;p&gt;Termexo treats terminals, layouts, projects, and native agent sessions as parts of the same workspace. The goal is simple: when you return, you should be able to understand what was happening and continue without rebuilding the entire setup from memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attention should be visible
&lt;/h2&gt;

&lt;p&gt;When several agents are active, I do not want to stare at every terminal. Termexo can surface approval requests and completion events through system notifications and taskbar attention indicators.&lt;/p&gt;

&lt;p&gt;This sounds small, but it changes the workflow. You can focus on one task while another agent works, then switch only when the second task actually needs you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-first by default
&lt;/h2&gt;

&lt;p&gt;Termexo does not require a Termexo account. Workspaces and settings stay on the machine, and credentials are stored through Windows Credential Manager.&lt;/p&gt;

&lt;p&gt;The project is Windows-only today. It is still evolving, but it already solves the problem that originally pushed me to build it: losing track of several useful coding-agent sessions at once.&lt;/p&gt;

&lt;p&gt;If you regularly run multiple coding agents, I would love to know which part of that workflow wastes the most time for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.termexo.com/" rel="noopener noreferrer"&gt;termexo.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/gemron/Termexo" rel="noopener noreferrer"&gt;gemron/Termexo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Product Hunt: &lt;a href="https://www.producthunt.com/products/termexo?launch=termexo" rel="noopener noreferrer"&gt;Termexo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— 爱玩科技&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
