<?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>Forem: Said Arturo Lopez</title>
    <description>The latest articles on Forem by Said Arturo Lopez (@gsalp).</description>
    <link>https://forem.com/gsalp</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%2F3856529%2F6bfb1259-8ad3-4b3c-850d-fbebe6a053f8.jpeg</url>
      <title>Forem: Said Arturo Lopez</title>
      <link>https://forem.com/gsalp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gsalp"/>
    <language>en</language>
    <item>
      <title>I Built a macOS Terminal That Detects Your AI Coding Agents — Here's Why</title>
      <dc:creator>Said Arturo Lopez</dc:creator>
      <pubDate>Thu, 02 Apr 2026 01:22:57 +0000</pubDate>
      <link>https://forem.com/gsalp/i-built-a-macos-terminal-that-detects-your-ai-coding-agents-heres-why-1nd</link>
      <guid>https://forem.com/gsalp/i-built-a-macos-terminal-that-detects-your-ai-coding-agents-heres-why-1nd</guid>
      <description>&lt;p&gt;I've been writing Swift since 2015 and building macOS apps for most of my career. I always wanted to build a terminal — not because the world needed another one, but because a terminal emulator touches everything I find interesting: low-level input handling, GPU rendering, process management, and shell integration.&lt;/p&gt;

&lt;p&gt;For years, it stayed on my someday list. Then two things happened at the same time.&lt;/p&gt;

&lt;p&gt;In late 2024, &lt;a href="https://ghostty.org" rel="noopener noreferrer"&gt;Ghostty&lt;/a&gt; launched and open-sourced &lt;strong&gt;libghostty&lt;/strong&gt; — a production-grade terminal rendering engine built on Metal. Suddenly, I didn't need to write a GPU renderer from scratch. The hardest part of building a terminal was solved.&lt;/p&gt;

&lt;p&gt;Around the same time, AI coding agents went from novelty to daily workflow. Claude Code, Codex, Aider, Gemini CLI — I was running these tools for hours every day. And I kept hitting the same frustration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start a long task in Claude Code&lt;/li&gt;
&lt;li&gt;Switch to another tab&lt;/li&gt;
&lt;li&gt;Come back 10 minutes later&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Wait... did it finish? Is it waiting for me? Did it error out?"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every terminal I used — iTerm2, Ghostty, Warp, Kitty — they all show you text. That's it. They have zero awareness of what's actually running inside them.&lt;/p&gt;

&lt;p&gt;So I built Cocxy Terminal. A native macOS terminal built on libghostty that actually understands what your AI agents are doing.&lt;/p&gt;

&lt;p&gt;It's open source, MIT licensed, zero telemetry, and not a business. I built it for my own workflow and decided to share it. If it helps you, great. If not, no hard feelings.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works: 4-Layer Agent Detection
&lt;/h2&gt;

&lt;p&gt;Cocxy watches your terminal through 4 independent detection layers. The key part: &lt;strong&gt;no agent cooperation needed&lt;/strong&gt;. You don't install plugins in Claude or configure Codex. Cocxy figures it out on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 0 — Hook Integration&lt;/strong&gt;&lt;br&gt;
Direct event stream from Claude Code's hook system. Real-time notifications for tool calls, completions, and errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1 — OSC Sequences&lt;/strong&gt;&lt;br&gt;
Terminal escape sequences that agents emit for titles, directory changes, and prompt markers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2 — Pattern Matching&lt;/strong&gt;&lt;br&gt;
Configurable regex patterns that detect agent-specific output (thinking indicators, tool calls, progress markers).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 3 — Timing Heuristics&lt;/strong&gt;&lt;br&gt;
Statistical analysis of output patterns — long pauses followed by bursts indicate an agent is processing.&lt;/p&gt;

&lt;p&gt;Each layer works independently. If one misses something, another catches it. The result: you see agent state (working, waiting, done, error) in the sidebar, tab bar, and notification system — without switching tabs.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Else Is in There
&lt;/h2&gt;

&lt;p&gt;Beyond agent detection, I built everything I wanted in my daily terminal:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPU Rendering&lt;/strong&gt; — Built on &lt;a href="https://ghostty.org" rel="noopener noreferrer"&gt;libghostty&lt;/a&gt;, the same Metal engine behind Ghostty. Smooth scrolling, crisp text, zero lag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;65 CLI Commands&lt;/strong&gt; — Full scriptability via Unix socket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cocxy hooks &lt;span class="nb"&gt;install&lt;/span&gt;              &lt;span class="c"&gt;# Configure Claude Code integration&lt;/span&gt;
cocxy notify &lt;span class="s2"&gt;"Deploy complete"&lt;/span&gt;   &lt;span class="c"&gt;# Trigger notification&lt;/span&gt;
cocxy window list                &lt;span class="c"&gt;# List all windows&lt;/span&gt;
cocxy session save my-workspace  &lt;span class="c"&gt;# Save/restore sessions&lt;/span&gt;
cocxy remote connect prod-web    &lt;span class="c"&gt;# SSH multiplexing&lt;/span&gt;
cocxy capture-pane               &lt;span class="c"&gt;# Capture terminal content&lt;/span&gt;
cocxy dashboard toggle           &lt;span class="c"&gt;# Agent dashboard&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Built-in Panels&lt;/strong&gt; — Agent dashboard, event timeline, smart routing between sessions, embedded browser with DevTools, native macOS notifications with custom sounds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote Workspaces&lt;/strong&gt; — SSH multiplexing, port tunnels, SFTP browser, connection profiles. No extensions needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero Telemetry&lt;/strong&gt; — No analytics. No PostHog. No Sentry. No crash reporting. Nothing leaves your machine. Verify it yourself — the code is all there.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Swift + AppKit&lt;/strong&gt; — native macOS, no Electron&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;libghostty&lt;/strong&gt; — Metal-accelerated terminal rendering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero third-party dependencies&lt;/strong&gt; — no npm, no Node, no external Swift packages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3,053 tests&lt;/strong&gt; across the codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CLI Commands&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;3,053&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External Dependencies&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telemetry&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Homebrew:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew tap salp2403/tap
brew &lt;span class="nb"&gt;install &lt;/span&gt;cocxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or download the DMG&lt;/strong&gt; from &lt;a href="https://cocxy.dev" rel="noopener noreferrer"&gt;cocxy.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build from source:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/salp2403/cocxy-terminal
&lt;span class="nb"&gt;cd &lt;/span&gt;cocxy-terminal
swift build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://cocxy.dev" rel="noopener noreferrer"&gt;cocxy.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/salp2403/cocxy-terminal" rel="noopener noreferrer"&gt;github.com/salp2403/cocxy-terminal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://cocxy.dev/getting-started.html" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This is a solo project. No company, no funding, no team. Just a developer who needed a better terminal for working with AI agents and decided to share it.&lt;/p&gt;

&lt;p&gt;If it solves a problem for you, I'd appreciate a star on GitHub or any feedback. If you find a bug or want to contribute, issues and PRs are open. And if it's not for you, that's totally fine too.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>macos</category>
      <category>terminal</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
