MCPcopy Index your code
hub / github.com/angziii/PawPause

github.com/angziii/PawPause @v1.0.9

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.9 ↗ · + Follow
344 symbols 1,155 edges 37 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PawPause

PawPause

A local-first pixel companion for breaks, focus, hydration, and agent activity nudges.

Glossary / 术语表

English · 中文 · 日本語 · 한국어 · Français · Deutsch · Русский · العربية · Español

Downloads Electron React License

PawPause is a macOS and Windows desktop companion. It keeps a small pixel friend on your screen, nudges you to take breaks, reminds you to drink water, helps protect focus sessions, and supports PetDex-style companion imports.

Features

  • Pixel companion: transparent, always-on-top, draggable desktop companion with animated states.
  • Break intervention: optional screen-block break mode when a reminder is easy to ignore.
  • Hydration reminders: water reminders with daily and historical stats.
  • Custom reminders: daily reminders with pet countdowns that appear only shortly before they are due, plus optional due-time pet enlargement.
  • Focus mode: macOS active-window detection can trigger full-screen distraction nudges for blocked apps or keywords.
  • Agent activity alerts: local Codex, Claude Code, OpenCode, DeepSeek TUI, and Hermes events can trigger completion, failure, review-needed, and progress nudges.
  • Pet imports: import pet.json + spritesheet.webp/png folders or zip packages in the app.
  • PetDex compatibility: PawPause reads companions installed to ~/.codex/pets.
  • Multilingual UI: English, Chinese, Japanese, Korean, French, German, Russian, Arabic, and Spanish.
  • Dark mode: settings and companion UI adapt to system appearance.

Install

Download installers from Releases:

File Platform
PawPause-x.x.x-mac-arm64.dmg macOS Apple Silicon
PawPause-x.x.x-mac-x64.dmg macOS Intel
PawPause-x.x.x-win-x64.exe Windows 64-bit

On macOS, distraction detection and Agent window recognition require Accessibility permission.

OpenCode Agent Hook

PawPause can consume OpenCode lifecycle events through a small OpenCode plugin:

mkdir -p ~/.config/opencode/plugins
cp integrations/opencode/pawpause-agent-hook.js ~/.config/opencode/plugins/

The plugin writes JSONL events to ~/.local/share/pawpause/agent-events/opencode.jsonl. You can override that path with PAWPAUSE_AGENT_EVENTS.

DeepSeek TUI Activity

PawPause also watches local DeepSeek TUI activity without a plugin. It reads recent session updates from ~/.deepseek/sessions and approval events from ~/.deepseek/audit.log, so normal chats, tool use, completion, failures, and permission prompts can move the companion.

Hermes Agent Hook

PawPause can consume Hermes Agent lifecycle events through a small Hermes plugin:

mkdir -p ~/.hermes/plugins
cp -R integrations/hermes/pawpause-agent-hook ~/.hermes/plugins/

Then enable it in ~/.hermes/config.yaml:

plugins:
  enabled:
    - pawpause-agent-hook

The plugin writes JSONL events to ~/.local/share/pawpause/agent-events/hermes.jsonl. You can override that path with PAWPAUSE_HERMES_AGENT_EVENTS.

If the plugin is not installed, PawPause still watches recent Hermes session files in ~/.hermes/sessions as a local fallback, so normal chat turns can trigger progress and completion nudges.

Hermes in WSL + PawPause on Windows

If Hermes runs inside WSL and PawPause runs on Windows, Hermes must write events to a path that the Windows app also watches. The current PawPause Hermes hook handles this automatically, but if your Hermes process does not load environment variables correctly or PawPause still does not react, hardcode the event path in the WSL plugin.

In WSL, edit the plugin:

nano ~/.hermes/plugins/pawpause-agent-hook/__init__.py

Replace the whole _output_file() function with:

def _output_file() -> Path:
    # WSL -> Windows PawPause fallback.
    return Path("/mnt/c/Users/Administrator/.local/share/pawpause/agent-events/hermes.jsonl")

If the Windows username is not Administrator, replace it in the path:

/mnt/c/Users/<WindowsUserName>/.local/share/pawpause/agent-events/hermes.jsonl

Then create the directory from WSL:

mkdir -p /mnt/c/Users/Administrator/.local/share/pawpause/agent-events

Finally, restart Hermes. The key point is that Hermes writes from WSL into the mounted Windows user directory, and PawPause reads the same event file from Windows.

Import Companions

From PawPause

  1. Open the PawPause settings window.
  2. Go to the companion page.
  3. Import a folder or zip containing pet.json and spritesheet.webp or spritesheet.png.

From PetDex

npx petdex install trump

PawPause scans ~/.codex/pets automatically, so installed companions usually appear without restarting.

Run From Source

git clone https://github.com/angziii/PawPause.git
cd PawPause
corepack enable
corepack pnpm install
corepack pnpm dev

Build

corepack pnpm typecheck
corepack pnpm build
corepack pnpm dist:mac
corepack pnpm dist:win

Project Structure

src/main/       Electron main process: windows, tray, timers, focus detection, imports
src/preload/    IPC bridge between Electron and React
src/renderer/   React UI for the companion and settings windows
src/shared/     Types, defaults, i18n, PetDex state mapping
landing/        PawPause landing page deployed to pawpause.vercel.app
docs/readme/    Localized README pages

Large companion asset packs are intentionally not committed to keep the repository small. Import or install companions locally instead.

Star History

Star History Chart

License

Source code is released under the MIT License. Companion assets may have separate licensing; see ASSET_LICENSE.md.

Acknowledgements

PawPause is built with appreciation for:

  • PawPal, the original Electron desktop companion foundation.
  • PetDex, the inspiration for the pixel companion package format.

Extension points exported contracts — how you extend this code

Window (Interface)
(no doc)
src/renderer/vite-env.d.ts

Core symbols most depended-on inside this repo

stringValue
called by 64
src/main/main.ts
setPetState
called by 36
src/main/main.ts
getSettings
called by 35
src/main/main.ts
pick
called by 33
src/shared/i18n.ts
text
called by 28
src/main/main.ts
updateDraft
called by 26
src/renderer/src/components/SettingsView.tsx
publishSnapshot
called by 22
src/main/main.ts
sendToAll
called by 18
src/main/main.ts

Shape

Function 343
Interface 1

Languages

TypeScript97%
Python3%

Modules by API surface

src/main/main.ts198 symbols
src/renderer/src/components/SettingsView.tsx44 symbols
src/main/petPackages.ts18 symbols
integrations/hermes/pawpause-agent-hook/__init__.py12 symbols
src/renderer/src/components/PetView.tsx10 symbols
landing/src/app/PetChaseLanding.tsx9 symbols
integrations/opencode/pawpause-agent-hook.js8 symbols
src/renderer/src/format.ts5 symbols
src/main/distraction.ts5 symbols
src/shared/i18n.ts4 symbols
src/main/trayIcon.ts4 symbols
src/shared/constants.ts2 symbols

For agents

$ claude mcp add PawPause \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact