Skip to content

jamesmcstrid/pixel-office

Repository files navigation

🏢 Pixel Office

Pixel Office — skrivbordsgubben i jobbat-läge

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.

Kör igång

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.

Hur den tänker

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.

Konfig (env-variabler)

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 sätt NOTIFY=0 för att stänga av notiser

Exempel: NOTIFY=0 IDLE_MS=4000 npm start

Starta automatiskt vid inloggning (launchd)

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.

🪑 Skrivbordskompisen

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

Hammerspoon (rekommenderat, macOS-nativt)

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.

Electron (alternativ)

npm install   # hämtar Electron (~tar en stund första gången)

# Terminal 1 — watcher
npm start

# Terminal 2 — gubben
npm run pet

Gubben 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 start och öppnar http://localhost:4577 i en flik.

Kända begränsningar (ärligt)

  • "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 AskUserQuestion ligger 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änk IDLE_MS fö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.

Filer

  • watcher.js — daemonen: filbevakning, tillståndslogik, notiser, http/websocket-server
  • public/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 skrivbordsgubben
  • package.json — beroenden (chokidar, ws; Electron som devDependency)

Krediter

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.

About

Desktop pet that watches your Claude Code threads and pings you when one is waiting for input

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors