En liten gubbe per Cowork-tråd. Daemonen läser Coworks/Claude Codes transkript-loggar, ritar en pixel-figur per aktiv tråd, och pingar dig med en macOS-notis när en tråd väntar på ditt svar — så du slutar barnvakta fönstret och vet direkt vilken tråd som vill något.
Rent observerande. Ingenting i Cowork ändras — samma trick som Pixel Agents, fast riktat mot Cowork-trådarna istället för VS Code-terminaler.
cd pixel-office
npm install
npm startÖppna sedan http://localhost:4577 i en webbläsare. Det är pixelpanelen. Lämna fliken öppen (eller se "Alltid överst" nedan).
Säkerhet: Servern lyssnar bara på
127.0.0.1(localhost) och har ingen autentisering. Kör inte exponerat mot ett nätverk.
Notiser kommer automatiskt via macOS Notiser när en tråd går till väntar. Första gången frågar macOS om osascript/Terminal får skicka notiser — godkänn det.
Per tråd, tre lägen:
| Läge | Färg | Betyder |
|---|---|---|
| jobbar | blå | transkriptet växer just nu |
| väntar på dig | gul | turen tog slut, eller jag ställde en AskUserQuestion — din tur |
| inaktiv | grå | tyst, inget hänt på ett tag |
Notis skickas bara vid övergången in i "väntar" (en gång), aldrig vid uppstart. Träffsäkrast är detektionen när jag ställt en konkret fråga (AskUserQuestion) — då visas själva frågan i notisen och i pratbubblan.
| Variabel | Default | Vad |
|---|---|---|
CLAUDE_SESSIONS_DIR |
~/Library/Application Support/Claude/local-agent-mode-sessions |
rot som scannas efter .claude/projects/**/*.jsonl |
PIXEL_PORT |
4577 |
port för panel + websocket |
IDLE_MS |
6000 |
hur länge en fil får vara tyst innan turen räknas som slut |
ACTIVE_WINDOW_MS |
1800000 |
hur länge en tråd visas efter senaste aktivitet (30 min) |
STALL_MS |
300000 |
hur länge en pågående tur får vara tyst innan den räknas som stall (5 min) |
NOTIFY |
på | sätt NOTIFY=0 för att stänga av notiser |
Exempel: NOTIFY=0 IDLE_MS=4000 npm start
Spara som ~/Library/LaunchAgents/com.jamesmcstrid.pixeloffice.plist (byt ut SÖKVÄG mot var mappen ligger, t.ex. ~/pixel-office):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.jamesmcstrid.pixeloffice</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>SÖKVÄG/watcher.js</string>
</array>
<key>WorkingDirectory</key><string>SÖKVÄG</string>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardErrorPath</key><string>/tmp/pixeloffice.err</string>
<key>StandardOutPath</key><string>/tmp/pixeloffice.out</string>
</dict>
</plist>Kolla din node-sökväg med which node och justera. Ladda: launchctl load ~/Library/LaunchAgents/com.jamesmcstrid.pixeloffice.plist.
En liten gubbe som sitter på skrivbordet — genomskinlig bakgrund, ramlös, alltid överst, dragbar. Fyra stämningar som speglar dina trådar sammantaget:
| Stämning | När |
|---|---|
| jobbar | minst en tråd skriver just nu — skriver vid datorn, skärmen glöder |
| väntar | minst en tråd väntar — tittar upp, lugn andning, trådens namn under |
| uttråkad | allt tyst senaste minuterna — lutar huvudet i handen, pillar med papper |
| sover | lugnt längre än 3 min — huvudet ner, Zzz |
Kräver Hammerspoon. Kopiera hammerspoon-pixel-pet.lua till din Hammerspoon-config och ladda om (Cmd+Alt+Ctrl+P startar om gubben, ×-knappen döljer den tillfälligt).
Watcher måste köra (npm start) — Hammerspoon-skriptet öppnar bara http://localhost:4577/pet.html i ett WKWebView-fönster.
npm install # hämtar Electron (~tar en stund första gången)
# Terminal 1 — watcher
npm start
# Terminal 2 — gubben
npm run petGubben dyker upp nere till höger. Dra den dit du vill. Stäng med Cmd+Q.
Vill du ha både skrivbordsgubben och panelvyn (en gubbe per tråd) kör du
npm startoch öppnarhttp://localhost:4577i en flik.
- "Väntar" är en heuristik. Cowork-loggarna säger inte rakt ut "nu väntar jag på input". Vi gissar på att turen tog slut (filen tystnade) eller att en
AskUserQuestionligger sist. Frågefallet är pålitligt; "tyst-betyder-klar" kan missfyra om en tur har en lång naturlig paus mitt i. Höj/sänkIDLE_MSför att kalibrera. - Subagenter ritas inte i v1 (filtreras bort). Lätt att lägga till som småfigurer kopplade till föräldern.
- Klick gör inget än. Att klicka en gubbe och hoppa till rätt tråd i Cowork går inte att skripta säkert — figurerna är display + notis i v1.
- En karaktär = en transkriptfil. Om en tråd byter sessionsfil kan en ny gubbe dyka upp.
watcher.js— daemonen: filbevakning, tillståndslogik, notiser, http/websocket-serverpublic/index.html— pixelpanelen (canvas, en gubbe per tråd)public/pet.html— skrivbordsgubben (canvas, animerad pixelkaraktär med stämningar)hammerspoon-pixel-pet.lua— Hammerspoon-bryggan (ramlöst WKWebView-fönster, macOS-nativ)electron-main.cjs— Electron-alternativ till Hammerspoon för skrivbordsgubbenpackage.json— beroenden (chokidar,ws; Electron som devDependency)
Inspirerad av Pixel Agents (VS Code-versionen).
Pixelkaraktären är en inofficiell homage till Claude — skapad med uppskattning, utan koppling till Anthropic. Inget officiellt varumärke används och inga loggor kopieras. MIT-licens — se LICENSE.