<?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: 郭立 Guo Li</title>
    <description>The latest articles on DEV Community by 郭立 Guo Li (@leeguooooo).</description>
    <link>https://dev.to/leeguooooo</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%2F4150855%2F6b6082fc-4a79-4e99-a59e-0ffc8e37a5fa.jpg</url>
      <title>DEV Community: 郭立 Guo Li</title>
      <link>https://dev.to/leeguooooo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leeguooooo"/>
    <language>en</language>
    <item>
      <title>ChooseBrowser: every link on your Mac opens in the right browser and Chrome profile</title>
      <dc:creator>郭立 Guo Li</dc:creator>
      <pubDate>Wed, 30 Sep 2026 02:18:51 +0000</pubDate>
      <link>https://dev.to/leeguooooo/choosebrowser-every-link-on-your-mac-opens-in-the-right-browser-and-chrome-profile-2238</link>
      <guid>https://dev.to/leeguooooo/choosebrowser-every-link-on-your-mac-opens-in-the-right-browser-and-chrome-profile-2238</guid>
      <description>&lt;p&gt;You click a link in Slack or Mail and it opens in the wrong browser, signed in to the wrong Chrome account. Copy the URL, switch windows, paste, again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChooseBrowser makes that stop.&lt;/strong&gt; Tell it where each site belongs, and every link lands in the right place from then on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://choosebrowser.leeguoo.com/choose-browser/?lang=en&amp;amp;utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=choosebrowser"&gt;Try it free for 7 days&lt;/a&gt; · &lt;a href="https://apps.apple.com/app/choosebrowser/id6808098194" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt; · &lt;a href="https://choosebrowser.leeguoo.com/buy?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=choosebrowser"&gt;Buy — US$4.99&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does for you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Work and personal, kept apart&lt;/strong&gt;: company GitLab, Jira and docs open in your work profile; personal GitHub and banking in another browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with many accounts without logging out&lt;/strong&gt;: staging in the test account, the admin panel in the admin account, buyer and seller each in their own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Down to the Chrome profile&lt;/strong&gt;: every profile in Chrome, Edge, Brave and Vivaldi is its own target.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Even one site, split two ways&lt;/strong&gt;: &lt;code&gt;github.com/your-company&lt;/code&gt; in the work profile, the rest in your personal one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One keystroke for everything else&lt;/strong&gt;: links without a rule show a small chooser by the pointer; ⌘1–⌘9 picks, ⌘R saves the choice as a rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learns as you go&lt;/strong&gt;: remembers what you pick per site and puts it first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stays out of your way
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It quits right after opening the link. Nothing running in the background.&lt;/li&gt;
&lt;li&gt;No account, no analytics, no tracking. Rules live on your Mac, or sync through your own iCloud.&lt;/li&gt;
&lt;li&gt;English, Chinese, Japanese and Korean.&lt;/li&gt;
&lt;li&gt;macOS 26 or newer. A free Windows 10/11 preview is available too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Price
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;US$4.99, one-time. No subscription.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://apps.apple.com/app/choosebrowser/id6808098194" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;: installs on every Mac with your Apple ID, updates automatically.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://choosebrowser.leeguoo.com/buy?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=choosebrowser"&gt;Buy direct&lt;/a&gt;: &lt;a href="https://choosebrowser.leeguoo.com/choose-browser/?lang=en&amp;amp;utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=choosebrowser"&gt;try it free for 7 days&lt;/a&gt; first; one licence activates up to 3 Macs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The price of a coffee, for dozens fewer copy-pastes a day.&lt;/p&gt;




&lt;p&gt;By &lt;a href="https://leeguoo.com/about/en" rel="noopener noreferrer"&gt;Guo Li (郭立, leeguoo)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>macos</category>
      <category>productivity</category>
      <category>chrome</category>
      <category>tools</category>
    </item>
    <item>
      <title>Pastyx: everything you've copied on your Mac, one keystroke away</title>
      <dc:creator>郭立 Guo Li</dc:creator>
      <pubDate>Wed, 30 Sep 2026 02:16:08 +0000</pubDate>
      <link>https://dev.to/leeguooooo/pastyx-everything-youve-copied-on-your-mac-one-keystroke-away-28ja</link>
      <guid>https://dev.to/leeguooooo/pastyx-everything-youve-copied-on-your-mac-one-keystroke-away-28ja</guid>
      <description>&lt;p&gt;You copy a snippet, then a link, and the snippet is gone. Your Mac's clipboard only remembers the last thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pastyx remembers everything you copy.&lt;/strong&gt; Press ⌘⇧V and your recent text, links, code and images line up; pick one and press Return to paste it into the app you're in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://paste.leeguoo.com/download?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=pastyx"&gt;Try it free for 7 days&lt;/a&gt; · &lt;a href="https://paste.leeguoo.com/buy?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=pastyx"&gt;Buy — US$9.99&lt;/a&gt; · &lt;a href="https://app.leeguoo.com/paste?lang=en&amp;amp;utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=pastyx"&gt;Product page&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it feels
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;⌘⇧V, then just type&lt;/strong&gt;: find something you copied weeks ago with a few letters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Return pastes&lt;/strong&gt;, ⇧Return pastes as plain text with no stray formatting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⌘1–⌘9&lt;/strong&gt; pastes one of your last nine clips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knows what you copied&lt;/strong&gt;: links with their site icon, code detected automatically, colour values as swatches, and the app each clip came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter by type&lt;/strong&gt;: Favorites, Text, Links, Code, Images — Tab to switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Favorites never expire&lt;/strong&gt;: keep your signature, addresses and go-to commands one keystroke away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag a clip&lt;/strong&gt; straight into another app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Safe by default
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Passwords stay out&lt;/strong&gt;: items password managers mark as concealed are skipped; Keychain, 1Password and Bitwarden are ignored; ignore any app you like, or pause capture from the menu bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-first&lt;/strong&gt;: history lives on your Mac, kept for 30 days or forever, your choice. No account needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync only if you want&lt;/strong&gt;: sign in to sync with the web app at &lt;a href="https://paste.leeguoo.com/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=pastyx"&gt;paste.leeguoo.com&lt;/a&gt; and your other devices, or keep everything local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native and quick&lt;/strong&gt;: a menu-bar app whose panel takes the keyboard without stealing focus or switching Spaces, so the paste lands where you were.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Requires macOS 26 or newer (Apple silicon or Intel).&lt;/p&gt;

&lt;h2&gt;
  
  
  Price
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;US$9.99, one-time. No subscription.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://paste.leeguoo.com/download?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=pastyx"&gt;Try it free for 7 days&lt;/a&gt;, then &lt;a href="https://paste.leeguoo.com/buy?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=pastyx"&gt;buy&lt;/a&gt; if you like it. One licence activates up to 3 Macs.&lt;/p&gt;

&lt;p&gt;Or install from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/leeguooooo/pastyx/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;By &lt;a href="https://leeguoo.com/about/en" rel="noopener noreferrer"&gt;Guo Li (郭立, leeguoo)&lt;/a&gt;. Pastyx is an independent product, not affiliated with Paste (pasteapp).&lt;/p&gt;

</description>
      <category>macos</category>
      <category>productivity</category>
      <category>tools</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Making Claude Code and Codex talk to each other — even across two computers</title>
      <dc:creator>郭立 Guo Li</dc:creator>
      <pubDate>Tue, 29 Sep 2026 18:40:46 +0000</pubDate>
      <link>https://dev.to/leeguooooo/making-claude-code-and-codex-talk-to-each-other-even-across-two-computers-16e7</link>
      <guid>https://dev.to/leeguooooo/making-claude-code-and-codex-talk-to-each-other-even-across-two-computers-16e7</guid>
      <description>&lt;p&gt;I usually have several AI coding sessions open at once: Claude Code writing a feature, Codex reviewing, Pi doing chores. Each is capable on its own. The problem is that &lt;strong&gt;they can't see each other&lt;/strong&gt;. If I want Codex to look at the diff Claude just wrote, I copy it, switch windows, paste it, and carry the answer back. I had become the clipboard between two AIs.&lt;/p&gt;

&lt;p&gt;Claude Code and Codex both ship native cross-session features, but each stops at its own product boundary. So I built &lt;a href="https://github.com/leeguooooo/open-cross-session" rel="noopener noreferrer"&gt;ocs (Open Cross-session)&lt;/a&gt;: a single binary that lets Claude Code, Codex, Pi and terminal agents message each other and &lt;strong&gt;wake each other up&lt;/strong&gt;. No server, no account; everything lives in &lt;code&gt;~/.ocs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;Once installed, you can just tell any session "find another agent to review this" and it goes looking. By hand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ocs &lt;span class="nb"&gt;who&lt;/span&gt;                                     &lt;span class="c"&gt;# live sessions on this machine&lt;/span&gt;
ocs dm codex-01a06a98 &lt;span class="s2"&gt;"review this diff"&lt;/span&gt;    &lt;span class="c"&gt;# message Codex and wake it&lt;/span&gt;
ocs rename reviewer                         &lt;span class="c"&gt;# give this session a memorable name&lt;/span&gt;
ocs send dev &lt;span class="s2"&gt;"status? @reviewer"&lt;/span&gt;            &lt;span class="c"&gt;# multi-party channel; @ wakes whoever you mention&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The receiver doesn't just get a new line in a file. The message shows up in its conversation, with a ready-to-run reply command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ocs wake] claude-7043ea85 mentioned you in #dm-… (seq 7)

review this diff

Reply: ocs dm claude-7043ea85 "&amp;lt;your reply&amp;gt;"
Thread: ocs read dm-…
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It replies, you get woken, and the two agents go back and forth while you watch with &lt;code&gt;ocs watch&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  0.6: across computers
&lt;/h2&gt;

&lt;p&gt;The latest release extends this to the LAN. I have a Mac and a Windows PC at home; a Claude on the Mac can now hand "run the build on Windows" to the Claude or Codex on the PC:&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="c"&gt;# machine A                      # machine B&lt;/span&gt;
ocs lan up                       ocs lan up
ocs lan pair   &lt;span class="c"&gt;# prints a code → ocs lan pair 7K2M-9QXD-…&lt;/span&gt;
                                 ocs dm claude-1a2b3c4d@mini &lt;span class="s2"&gt;"run the build on Windows"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Letting another machine type into your AI sessions needs a real threat model, so this assumes someone hostile is on the network:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity is a public key.&lt;/strong&gt; Each machine has an Ed25519 key; IPs, hostnames and self-reported names are only hints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair once, no trust-on-first-use.&lt;/strong&gt; The pairing code carries a prefix of the issuer's key fingerprint, and the client verifies the server's key before sending its own identity or any request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutual authentication and encryption.&lt;/strong&gt; Signed X25519 handshake plus AES-256-GCM, with forward secrecy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unpaired machines can do nothing&lt;/strong&gt; except redeem a valid pairing code, with frames capped at 1 KiB; a code burns after 5 wrong attempts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Off by default.&lt;/strong&gt; Nothing listens until &lt;code&gt;ocs lan up&lt;/code&gt;. Remote senders always show up as &lt;code&gt;name@&amp;lt;the label you gave that peer&amp;gt;&lt;/code&gt;, which the peer cannot change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The hard part: "OK" doesn't mean delivered
&lt;/h2&gt;

&lt;p&gt;In a messaging tool, the dangerous failures aren't errors. They're the ones that &lt;strong&gt;look like success while the message is gone&lt;/strong&gt;. Several of ocs's hard rules come from those.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Claude answering &lt;code&gt;ok&lt;/code&gt; doesn't mean the message reached the conversation.&lt;/strong&gt; Injecting into a Claude Code session returns &lt;code&gt;ok:true&lt;/code&gt; from the socket. But Claude's &lt;code&gt;crossSessionInbound&lt;/code&gt; defaults to &lt;code&gt;hold&lt;/code&gt;: the message waits for approval and is &lt;strong&gt;silently dropped after 5 minutes&lt;/strong&gt;. ocs never treats that &lt;code&gt;ok&lt;/code&gt; as delivered, and &lt;code&gt;ocs doctor&lt;/code&gt; walks you through switching to &lt;code&gt;accept&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;codex queue&lt;/code&gt; writes to storage; it doesn't deliver.&lt;/strong&gt; For terminal Codex the only official way in is &lt;code&gt;codex queue&lt;/code&gt;, which appends to the thread store and returns success even if that session exited long ago. So ocs first proves the session is alive by finding a process holding its rollout file (&lt;code&gt;lsof&lt;/code&gt;). Then it turned out that indexing tools hold those files too, so there's a second check: the holder, or one of its ancestors, has to actually be a &lt;code&gt;codex&lt;/code&gt; process. Otherwise the message waits in the inbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Unknown outcome means never retry.&lt;/strong&gt; Talking to ChatGPT Desktop goes through its private IPC. If a frame went out and no answer came back, the message may or may not have arrived. Retrying risks the other agent doing the work twice. ocs reports "unknown" as its own state (exit code 3) and &lt;strong&gt;never retries automatically&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. One source of truth for sequence numbers.&lt;/strong&gt; Every message gets a monotonically increasing seq. An early version kept the current seq in a separate file; a crash between "log written" and "seq file updated" produced a duplicate seq, and the reader's dedup permanently hid the later message. Now the seq is derived from the log itself under a lock, with a regression test pinning it.&lt;/p&gt;

&lt;p&gt;None of these are hard in isolation. What makes them hard is that every one of them passes a normal test suite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/leeguooooo/open-cross-session/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows (PowerShell)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://raw.githubusercontent.com/leeguooooo/open-cross-session/main/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installer also adds the ocs skill to Claude Code, Codex and Pi; run &lt;code&gt;ocs doctor --fix&lt;/code&gt; afterwards. macOS, Linux and Windows, MIT licensed.&lt;/p&gt;

&lt;p&gt;If you outgrow one LAN — different networks, a team, several organizations — the same workflow carries over to &lt;a href="https://agentparty.leeguoo.com" rel="noopener noreferrer"&gt;Agent Party&lt;/a&gt;, hosted or self-hosted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/leeguooooo/open-cross-session" rel="noopener noreferrer"&gt;leeguooooo/open-cross-session&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Protocol and threat model: &lt;a href="https://github.com/leeguooooo/open-cross-session/blob/main/docs/lan.md" rel="noopener noreferrer"&gt;docs/lan.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Issues and ideas welcome on GitHub.&lt;/p&gt;




&lt;p&gt;By &lt;a href="https://leeguoo.com/about/en" rel="noopener noreferrer"&gt;Guo Li (郭立, leeguoo)&lt;/a&gt;, a full-stack engineer building tools that let AI agents do real work: &lt;a href="https://github.com/leeguooooo/chrome-use" rel="noopener noreferrer"&gt;chrome-use&lt;/a&gt;, &lt;a href="https://github.com/leeguooooo/iphone-use" rel="noopener noreferrer"&gt;iphone-use&lt;/a&gt;, &lt;a href="https://github.com/leeguooooo/mail-use" rel="noopener noreferrer"&gt;mail-use&lt;/a&gt; and more.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
