<?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: Breno Alvim</title>
    <description>The latest articles on DEV Community by Breno Alvim (@brenoalvim).</description>
    <link>https://dev.to/brenoalvim</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%2F851831%2Ffddbf090-8caf-40aa-a155-f407378546f0.jpeg</url>
      <title>DEV Community: Breno Alvim</title>
      <link>https://dev.to/brenoalvim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brenoalvim"/>
    <language>en</language>
    <item>
      <title>no-watermark: your text may already carry an invisible mark, here's how to check</title>
      <dc:creator>Breno Alvim</dc:creator>
      <pubDate>Mon, 17 Aug 2026 16:23:58 +0000</pubDate>
      <link>https://dev.to/brenoalvim/no-watermark-your-text-may-already-carry-an-invisible-mark-heres-how-to-check-40hh</link>
      <guid>https://dev.to/brenoalvim/no-watermark-your-text-may-already-carry-an-invisible-mark-heres-how-to-check-40hh</guid>
      <description>&lt;p&gt;Anthropic confirmed it this month: Claude now embeds an imperceptible watermark into the text it generates. Quoting their own help center article, "you won't see it, and it doesn't change the meaning, quality, or readability." It travels with the text through copy-paste, and it covers the Claude app, Claude Code, Claude Cowork, Claude Tag, the API, and the AWS/Google Cloud/Microsoft Foundry integrations, worldwide. Files get signed C2PA provenance metadata on top of that. The trigger is Anthropic signing Article 50(2) of the EU AI Act, the Code of Practice on Transparency of AI-Generated Content. Models shipped from August 2, 2026 onward carry the mark from day one, and older models are getting it retrofitted.&lt;/p&gt;

&lt;p&gt;This isn't unique to Claude. Invisible-character watermarking has been circulating in AI-generated text for a while: zero-width space/joiner, variation selectors, tag-block encoding, bidi controls, anomalous non-ASCII spaces, alternate line-break characters. None of it shows up on screen. All of it survives a copy-paste into your document, your PR description, your customer email.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/obrenoalvim/no-watermark" rel="noopener noreferrer"&gt;no-watermark&lt;/a&gt; to inspect and strip that layer through deterministic character normalization, not a model guessing at patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it strips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Format characters: zero-width space/joiner/non-joiner, word joiner, BOM, bidi controls&lt;/li&gt;
&lt;li&gt;Variation selectors (U+FE00-FE0F, U+E0100-E01EF)&lt;/li&gt;
&lt;li&gt;Tag block characters (U+E0000-E007F)&lt;/li&gt;
&lt;li&gt;Anomalous spaces: all 16 non-ASCII Unicode "Zs" space characters, normalized to a regular space&lt;/li&gt;
&lt;li&gt;Line separator variants: NEL, LINE SEPARATOR, PARAGRAPH SEPARATOR, converted to newlines&lt;/li&gt;
&lt;li&gt;Soft hyphens, Mongolian vowel separator, combining grapheme joiner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of the invisible-character layer, it also targets stylistic AI-writing tells that trip detectors: overused em dashes, formulaic structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety guards
&lt;/h2&gt;

&lt;p&gt;Zero-width joiners are also how legitimate emoji sequences work (family, couple, flag combos), and ZWNJ has real linguistic use in Indic scripts. Both are preserved by default. Pass &lt;code&gt;--no-emoji-guard&lt;/code&gt; if you want unconditional removal instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn't do
&lt;/h2&gt;

&lt;p&gt;Anthropic's own writeup admits their mark isn't proof of authorship, just a signal content "may have been processed by Claude," and it breaks under heavy editing, paraphrasing, translation. My tool has a similar boundary: statistical token-distribution watermarking (Kirchenbauer-style green/red list methods) is out of scope. That kind of mark isn't a set of extra characters, it's a bias in which tokens got picked during generation, so removing it requires paraphrasing, not character stripping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

nowatermark detect suspicious.txt
nowatermark clean suspicious.txt &lt;span class="nt"&gt;-o&lt;/span&gt; clean.txt &lt;span class="nt"&gt;--report&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"text"&lt;/span&gt; | nowatermark clean -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python, tested with pytest, MIT licensed. Ships with a Claude Code skill, so you can run detection straight from a conversation and see what's embedded in the text you're working with.&lt;/p&gt;

&lt;p&gt;It's early and functional, and the invisible-marking landscape just got a lot more mainstream. Repo's at &lt;a href="https://github.com/obrenoalvim/no-watermark" rel="noopener noreferrer"&gt;https://github.com/obrenoalvim/no-watermark&lt;/a&gt;. Issues and PRs welcome. Have you checked what's hiding in text you've copied from an AI tool recently?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Claude Terminal Hub: stop hunting for folders to resume Claude Code sessions</title>
      <dc:creator>Breno Alvim</dc:creator>
      <pubDate>Fri, 14 Aug 2026 21:06:42 +0000</pubDate>
      <link>https://dev.to/brenoalvim/claude-terminal-hub-stop-hunting-for-folders-to-resume-claude-code-sessions-2p4j</link>
      <guid>https://dev.to/brenoalvim/claude-terminal-hub-stop-hunting-for-folders-to-resume-claude-code-sessions-2p4j</guid>
      <description>&lt;p&gt;Every time I went back to an old Claude Code session, the process was the same: open Explorer, remember which folder that project lived in, open a terminal there, type &lt;code&gt;claude --resume &amp;lt;id&amp;gt;&lt;/code&gt; from memory or paste it from somewhere. I got tired of it and built &lt;strong&gt;Claude Terminal Hub&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;It's a Windows desktop app, built with Electron, that lists your recent Claude Code sessions from every project on the machine in a single screen. It reads the &lt;code&gt;.jsonl&lt;/code&gt; files Claude Code writes to &lt;code&gt;~/.claude/projects&lt;/code&gt;, zero configuration needed. Each session shows an AI-generated title and the last prompt sent, sorted by recent activity.&lt;/p&gt;

&lt;p&gt;One click on a session opens a terminal panel in the right folder, already running &lt;code&gt;claude --resume&lt;/code&gt;. You can keep up to 4 panels open side by side, each one a real PowerShell process via &lt;code&gt;node-pty&lt;/code&gt;, not a fake console. Arrow keys, &lt;code&gt;vim&lt;/code&gt;, the Claude Code TUI itself, all work normally inside the panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the hood
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Main process (Node) reads only the first and last KB of each &lt;code&gt;.jsonl&lt;/code&gt; file, not the full transcript, to list sessions fast even with a large session history.&lt;/li&gt;
&lt;li&gt;A narrow &lt;code&gt;contextBridge&lt;/code&gt; between main and renderer, no broad IPC surface.&lt;/li&gt;
&lt;li&gt;React frontend, one &lt;code&gt;xterm.js&lt;/code&gt; instance per terminal panel.&lt;/li&gt;
&lt;li&gt;Each panel spawns a real PowerShell process through &lt;code&gt;node-pty&lt;/code&gt;, so shell state, arrow keys, and TUIs behave like a native terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting it
&lt;/h2&gt;

&lt;p&gt;Windows installer ready (NSIS), no admin rights required. Open source on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/obrenoalvim/claude-terminal-hub" rel="noopener noreferrer"&gt;https://github.com/obrenoalvim/claude-terminal-hub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Does anyone else miss multiplexing Claude Code terminals like this, or already solved it a different way?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>electron</category>
      <category>software</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
