<?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: Renan Brito Cano Butkeraites</title>
    <description>The latest articles on DEV Community by Renan Brito Cano Butkeraites (@butkeraites).</description>
    <link>https://dev.to/butkeraites</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%2F4172011%2F308c8be5-1da2-451c-8654-cb050ccdae60.jpg</url>
      <title>DEV Community: Renan Brito Cano Butkeraites</title>
      <link>https://dev.to/butkeraites</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/butkeraites"/>
    <language>en</language>
    <item>
      <title>Zeca: a pixel-art desktop pet that reacts to Claude Code</title>
      <dc:creator>Renan Brito Cano Butkeraites</dc:creator>
      <pubDate>Thu, 08 Oct 2026 19:34:17 +0000</pubDate>
      <link>https://dev.to/butkeraites/zeca-a-pixel-art-desktop-pet-that-reacts-to-claude-code-38o4</link>
      <guid>https://dev.to/butkeraites/zeca-a-pixel-art-desktop-pet-that-reacts-to-claude-code-38o4</guid>
      <description>&lt;p&gt;Meet &lt;strong&gt;Zeca&lt;/strong&gt; — a pixel-art parrot that lives on top of your screen and reacts to &lt;a href="https://claude.com/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; running in your terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq5v9acu8i8uqz8feggxw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq5v9acu8i8uqz8feggxw.gif" alt="Zeca celebrating" width="388" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When Claude finishes a task, he celebrates. When Claude needs you — a question, a plan to approve, a permission — he chirps and calls you. When you step away, he naps. Click him and you jump straight to the terminal of the session that needs you most. Drag him anywhere; he remembers where you put him on each monitor, and follows the one you're working on.&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq5v9acu8i8uqz8feggxw.gif" alt="done" width="388" height="192"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Claude finished&lt;/strong&gt; → a hop, a short flight, confetti — and a bigger flight across the screen with a confetti rain when the job was large.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxwrkxai4d48fs5njcolr.gif" alt="needs you" width="388" height="192"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Claude needs you&lt;/strong&gt; → he chirps with a &lt;code&gt;!&lt;/code&gt; and a bubble showing the project. If you're not looking, the call escalates — always with a ceiling.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbyz10s3sd7zh016ru12i.gif" alt="working" width="388" height="192"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Working&lt;/strong&gt; → nearly still, pecking a seed now and then.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feneyk163d8cgni3we85c.gif" alt="idle" width="388" height="192"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Nobody around&lt;/strong&gt; → yawns and sleeps.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;He sees &lt;strong&gt;every&lt;/strong&gt; Claude Code session — even ones you opened &lt;em&gt;before&lt;/em&gt; installing him — by reading your session transcripts, so there's nothing to reload.&lt;/p&gt;

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

&lt;p&gt;It's Rust. All the pet logic — the "brain," the animator, the L1–L4 escalation state machine — lives in a &lt;strong&gt;platform-pure core&lt;/strong&gt; with fake-clock tests; each OS (Linux/Wayland, macOS, Windows) just implements a small &lt;code&gt;Overlay&lt;/code&gt;/&lt;code&gt;Desktop&lt;/code&gt; trait pair behind it, so &lt;code&gt;cargo clippy --target&lt;/code&gt; cross-checks all three from one machine. &lt;code&gt;unsafe&lt;/code&gt; is confined to the platform crates (Win32/AppKit).&lt;/p&gt;

&lt;p&gt;It draws as a click-through, always-on-top overlay and is deliberately cheap: an idle, awake pet averages &lt;strong&gt;≤2 screen redraws per second, and 0 while asleep&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy was a hard constraint
&lt;/h2&gt;

&lt;p&gt;Zeca only ever sees &lt;strong&gt;metadata&lt;/strong&gt; — event names, a session id, the project folder name, a hash of an edited file's path. Your prompts, Claude's responses, your code, and window titles &lt;strong&gt;never leave the machine, never hit a log, and are never written to disk&lt;/strong&gt;. The daemon binds to &lt;code&gt;127.0.0.1&lt;/code&gt; only and talks to no network. (So no, there's no usage telemetry — by design.)&lt;/p&gt;

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

&lt;p&gt;The art is &lt;strong&gt;CC0&lt;/strong&gt; — the whole point is &lt;em&gt;your&lt;/em&gt; pet. A skin is just a sprite sheet + a small &lt;code&gt;skin.json&lt;/code&gt; mapping animations to states, so even a recolor is a one-liner:&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%2Fj1mze03va1z4z9mefmpt.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%2Fj1mze03va1z4z9mefmpt.png" alt="Zeca in three palettes" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install — one command
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;macOS or Linux (Hyprland):&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;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/butkeraites/claude-pet/main/scripts/get.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows (PowerShell):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&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/butkeraites/claude-pet/main/scripts/get.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;It's brand new and MIT-licensed. I'd love your feedback, a star, your own sprites, and especially help with more Linux compositors:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/butkeraites/claude-pet" rel="noopener noreferrer"&gt;https://github.com/butkeraites/claude-pet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
