clawd-buddy 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ # Clawd Buddy commands
2
+
3
+ Clawd Buddy — manage the animated taskbar companion.
4
+
5
+ Usage: /buddy [action]
6
+
7
+ Actions:
8
+ start — Launch the buddy on the taskbar (if not already running)
9
+ stop — Kill the running buddy
10
+ test — Send a test celebration to the running buddy
11
+ wave — Send a wave/attention signal to the running buddy
12
+ status — Check if the buddy is running
13
+
14
+ If no action is given, default to "start".
15
+
16
+ Implementation:
17
+
18
+ - `clawd-buddy` is installed globally via `uv tool install`
19
+ - For "start": run `clawd-buddy` in the background (detached)
20
+ - For "stop": find the buddy process via `netstat -ano | findstr 44556` to get the PID, then `taskkill /F /PID <pid>`
21
+ - For "test": run `clawd-buddy --send "Test!"`
22
+ - For "wave": run `clawd-buddy --wave`
23
+ - For "status": check if port 44556 is in use via `netstat -ano | findstr 44556`
@@ -0,0 +1,26 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "clawd-buddy --send done",
9
+ "timeout": 5000
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "PermissionRequest": [
15
+ {
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "clawd-buddy --wave",
20
+ "timeout": 5000
21
+ }
22
+ ]
23
+ }
24
+ ]
25
+ }
26
+ }
@@ -0,0 +1,28 @@
1
+ # Python
2
+ __pycache__/
3
+ *.pyc
4
+ *.pyo
5
+ *.egg-info/
6
+ *.egg
7
+ dist/
8
+ build/
9
+ *.whl
10
+
11
+ # Virtual environments
12
+ venv/
13
+ .venv/
14
+
15
+ # IDE
16
+ .vscode/
17
+ .idea/
18
+ *.swp
19
+ *.swo
20
+
21
+ # OS
22
+ Thumbs.db
23
+ Desktop.ini
24
+ .DS_Store
25
+
26
+ # Env
27
+ .env
28
+ .env.local
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ All notable changes to Clawd Buddy will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [0.1.0] - 2026-04-13
8
+
9
+ ### Added
10
+
11
+ - Initial release
12
+ - Animated terminal character with idle, celebrate, and wave states
13
+ - Borderless transparent window positioned on the Windows taskbar
14
+ - Click-and-drag repositioning
15
+ - TCP socket listener (port 44556) for receiving signals
16
+ - `--send` flag to trigger celebration on a running instance
17
+ - `--wave` flag to trigger wave/attention animation
18
+ - `--test` flag to start with a celebration
19
+ - `--port` flag for custom TCP port
20
+ - `--no-topmost` flag to disable always-on-top
21
+ - `--startup` flag to enable run at Windows login
22
+ - `--no-startup` flag to disable run at Windows startup
23
+ - Single-instance enforcement via lock socket
24
+ - System tray icon with context menu
25
+ - Claude Code hook support (`Stop` and `PermissionRequest` events)
26
+ - Confetti particle system during celebrations
27
+ - Floating pulsing "!" indicator during wave state
28
+ - Hidden console window when started via startup launcher
@@ -0,0 +1,82 @@
1
+ # Contributing to Clawd Buddy
2
+
3
+ Thanks for your interest in contributing!
4
+
5
+ ## Development setup
6
+
7
+ ```bash
8
+ git clone https://github.com/ramymagdy-rm/clawd-buddy.git
9
+ cd clawd-buddy
10
+
11
+ # Create a venv and install in editable mode
12
+ uv venv
13
+ uv pip install -e ".[dev]"
14
+
15
+ # Or with pip
16
+ python -m venv venv
17
+ venv\Scripts\activate
18
+ pip install -e .
19
+ ```
20
+
21
+ ## Running locally
22
+
23
+ ```bash
24
+ # Run from source
25
+ python -m clawd_buddy.app
26
+
27
+ # Or if installed in editable mode
28
+ clawd-buddy
29
+ ```
30
+
31
+ ## Project structure
32
+
33
+ ```text
34
+ clawd-buddy/
35
+ ├── src/clawd_buddy/
36
+ │ ├── __init__.py # Package metadata
37
+ │ └── app.py # All application code (rendering, state, socket, tray)
38
+ ├── .claude/
39
+ │ ├── settings.json # Claude Code hook definitions
40
+ │ └── commands/
41
+ │ └── buddy.md # /buddy slash command for Claude Code
42
+ ├── pyproject.toml # Package configuration
43
+ ├── README.md
44
+ ├── CHANGELOG.md
45
+ ├── CONTRIBUTING.md
46
+ └── LICENSE
47
+ ```
48
+
49
+ ## How the code is organized
50
+
51
+ Everything lives in `app.py` to keep the package simple:
52
+
53
+ - **Win32 helpers** — `ctypes` calls for transparency, positioning, taskbar detection
54
+ - **State machine** — `BuddyState` with three modes: `idle`, `celebrating`, `waving`
55
+ - **Drawing** — `draw_buddy()` renders the character based on current state and time
56
+ - **Socket listener** — TCP server on port 44556, parses JSON `{"action": "..."}` messages
57
+ - **System tray** — `pystray` icon with context menu
58
+ - **CLI** — `argparse` for `--send`, `--wave`, `--test`, `--startup`, etc.
59
+ - **Main loop** — pygame event loop at 60 FPS
60
+
61
+ ## Making changes
62
+
63
+ 1. Fork the repo and create a feature branch
64
+ 2. Make your changes in `src/clawd_buddy/app.py`
65
+ 3. Test manually: `clawd-buddy --test` (celebrate), `clawd-buddy --wave` (wave signal)
66
+ 4. Update `CHANGELOG.md` under an `[Unreleased]` section
67
+ 5. Open a pull request
68
+
69
+ ## Adding a new animation state
70
+
71
+ 1. Add the state name to `BuddyState` (add a property and trigger method)
72
+ 2. Add drawing logic in `draw_buddy()` — follow the pattern of `cel`/`wav` branches
73
+ 3. Add a new action string in `socket_listener()` dispatch
74
+ 4. Add a CLI flag in `parse_args()` and handle it in `main()`
75
+ 5. Document the new hook in `README.md`
76
+
77
+ ## Guidelines
78
+
79
+ - Keep everything in `app.py` unless there's a strong reason to split
80
+ - No external assets — all rendering is procedural (pygame draw calls)
81
+ - Windows-only is fine for now; cross-platform support would need platform abstraction for the win32 calls
82
+ - Test all three states (idle, celebrate, wave) after any drawing changes
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ramy Ezzat
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,294 @@
1
+ Metadata-Version: 2.4
2
+ Name: clawd-buddy
3
+ Version: 0.1.0
4
+ Summary: Animated terminal pet that sits on your taskbar and reacts to AI coding assistant events
5
+ Project-URL: Homepage, https://github.com/ramymagdy-rm/clawd-buddy
6
+ Project-URL: Repository, https://github.com/ramymagdy-rm/clawd-buddy
7
+ Project-URL: Issues, https://github.com/ramymagdy-rm/clawd-buddy/issues
8
+ Author-email: Ramy Magdy <ramymagdy-rm@users.noreply.github.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: animation,buddy,clawd,coding-assistant,pet,taskbar
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Win32 (MS Windows)
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Utilities
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: pillow>=10.0
25
+ Requires-Dist: pygame-ce>=2.5
26
+ Requires-Dist: pystray>=0.19
27
+ Description-Content-Type: text/markdown
28
+
29
+ # Clawd Buddy
30
+
31
+ A tiny animated terminal pet that sits on your Windows taskbar and reacts to [Claude Code](https://claude.ai/code) events.
32
+
33
+ <!-- TODO: add a gif/screenshot here -->
34
+ <!-- ![Clawd Buddy demo](docs/demo.gif) -->
35
+
36
+ ## What it does
37
+
38
+ Clawd Buddy is a small always-on-top character that lives on your taskbar while you work with Claude Code:
39
+
40
+ | State | What happens |
41
+ | --- | --- |
42
+ | **Idle** | Gently bobs, blinks, breathes — your quiet companion |
43
+ | **Assistant finishes** (`Stop` hook) | Celebrates with confetti, happy eyes, and waving arms |
44
+ | **Assistant needs permission** (`PermissionRequest` hook) | Waves at you with a floating **!** so you know to check back |
45
+
46
+ ## Install
47
+
48
+ ```bash
49
+ # With uv (recommended — installs as an isolated tool)
50
+ uv tool install clawd-buddy
51
+
52
+ # With pipx
53
+ pipx install clawd-buddy
54
+
55
+ # With pip (into current environment)
56
+ pip install clawd-buddy
57
+ ```
58
+
59
+ ### From source
60
+
61
+ ```bash
62
+ git clone https://github.com/ramymagdy-rm/clawd-buddy.git
63
+ cd clawd-buddy
64
+ uv tool install --from . clawd-buddy
65
+ ```
66
+
67
+ ## Quick start
68
+
69
+ ### 1. Launch the buddy
70
+
71
+ ```bash
72
+ clawd-buddy
73
+ ```
74
+
75
+ The buddy appears on your taskbar, centered at the bottom of the screen. It runs until you close it.
76
+
77
+ ### 2. Run at startup (optional)
78
+
79
+ ```bash
80
+ # Enable — buddy starts automatically when you log into Windows
81
+ clawd-buddy --startup
82
+
83
+ # Disable — remove from startup
84
+ clawd-buddy --no-startup
85
+ ```
86
+
87
+ This places a lightweight launcher in your Windows Startup folder (`shell:startup`). No console window appears — the buddy runs silently in the background.
88
+
89
+ ### 3. Wire up Claude Code hooks
90
+
91
+ Add to your **global** Claude Code settings (`~/.claude/settings.json`) so every session triggers the buddy:
92
+
93
+ ```json
94
+ {
95
+ "hooks": {
96
+ "Stop": [
97
+ {
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "clawd-buddy --send done",
102
+ "timeout": 5000
103
+ }
104
+ ]
105
+ }
106
+ ],
107
+ "PermissionRequest": [
108
+ {
109
+ "hooks": [
110
+ {
111
+ "type": "command",
112
+ "command": "clawd-buddy --wave",
113
+ "timeout": 5000
114
+ }
115
+ ]
116
+ }
117
+ ]
118
+ }
119
+ }
120
+ ```
121
+
122
+ > **Note:** If you already have other hooks in your `settings.json`, merge the `Stop` and `PermissionRequest` entries into the existing `hooks` object.
123
+
124
+ ### 4. Done
125
+
126
+ Start a Claude Code session anywhere. When the assistant finishes or needs your attention, the buddy reacts.
127
+
128
+ ## CLI reference
129
+
130
+ ```text
131
+ clawd-buddy Start buddy on taskbar
132
+ clawd-buddy --test Start with a celebration animation
133
+ clawd-buddy --send MSG Signal a running buddy to celebrate
134
+ clawd-buddy --wave Signal a running buddy to wave (needs attention)
135
+ clawd-buddy --startup Enable run at Windows startup
136
+ clawd-buddy --no-startup Disable run at Windows startup
137
+ clawd-buddy --port PORT Use a custom TCP port (default: 44556)
138
+ clawd-buddy --no-topmost Don't keep the window always-on-top
139
+ clawd-buddy --help Show help
140
+ ```
141
+
142
+ ## Controls
143
+
144
+ | Input | Action |
145
+ | --- | --- |
146
+ | **Drag** | Click anywhere on the buddy and drag to reposition |
147
+ | **Space** | Trigger a test celebration |
148
+ | **Escape** | Quit the buddy |
149
+ | **Tray icon** | Right-click the system tray icon for a menu |
150
+
151
+ ## How it works
152
+
153
+ ### Architecture
154
+
155
+ ```text
156
+ Claude Code Clawd Buddy
157
+ ----------- -----------
158
+ hooks/Stop ──> clawd-buddy --send ──> TCP:44556 ──> celebrate animation
159
+ hooks/PermissionRequest ──> clawd-buddy --wave ──> TCP:44556 ──> wave animation
160
+ ```
161
+
162
+ 1. **Claude Code hooks** fire shell commands when events happen (response done, permission needed).
163
+ 2. The `clawd-buddy --send` / `--wave` CLI connects to `127.0.0.1:44556` and sends a JSON action.
164
+ 3. The running buddy process receives the signal and plays the animation.
165
+
166
+ ### Signal protocol
167
+
168
+ The buddy listens on a TCP socket (default port `44556`). Send a JSON payload to trigger actions:
169
+
170
+ ```json
171
+ {"action": "celebrate"}
172
+ ```
173
+
174
+ ```json
175
+ {"action": "wave"}
176
+ ```
177
+
178
+ You can send signals from any language:
179
+
180
+ ```python
181
+ import socket, json
182
+ s = socket.socket()
183
+ s.connect(("127.0.0.1", 44556))
184
+ s.sendall(json.dumps({"action": "celebrate"}).encode())
185
+ s.close()
186
+ ```
187
+
188
+ ```bash
189
+ echo '{"action": "wave"}' | nc localhost 44556
190
+ ```
191
+
192
+ ### Single instance
193
+
194
+ Only one buddy can run at a time. If you launch `clawd-buddy` while one is already running, it sends a signal to the existing instance and exits.
195
+
196
+ ### System tray
197
+
198
+ The buddy adds a system tray icon with a right-click menu:
199
+
200
+ - **Test Celebration** — trigger the celebrate animation
201
+ - **Quit** — close the buddy
202
+
203
+ ### Windows startup
204
+
205
+ `clawd-buddy --startup` places a small VBS launcher in your Windows Startup folder:
206
+
207
+ ```text
208
+ %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\clawd-buddy-startup.vbs
209
+ ```
210
+
211
+ This script starts the buddy with a hidden console window. To remove it, run `clawd-buddy --no-startup` or delete the file manually.
212
+
213
+ ## Animations
214
+
215
+ ### Idle
216
+
217
+ - Gentle vertical bobbing (sine wave)
218
+ - Periodic blinking (every ~3.5 seconds)
219
+ - Pupils wander slowly
220
+ - Small mouth line with subtle movement
221
+ - Arms sway gently at sides
222
+
223
+ ### Celebrate (on `Stop`)
224
+
225
+ - Fast bouncing
226
+ - Happy arc eyes (^ ^)
227
+ - Wide smile
228
+ - Both arms waving up
229
+ - Legs kicking
230
+ - Confetti burst (40 particles with gravity and drag)
231
+ - Duration: 3.5 seconds
232
+
233
+ ### Wave (on `PermissionRequest`)
234
+
235
+ - Medium bobbing
236
+ - Wide alert eyes (large pupils, staring)
237
+ - Surprised "o" mouth
238
+ - Right arm waving high
239
+ - Pulsing floating **!** indicator above head
240
+ - Duration: 5 seconds
241
+
242
+ ## Configuration
243
+
244
+ ### Custom port
245
+
246
+ If port `44556` is taken, use a different one:
247
+
248
+ ```bash
249
+ clawd-buddy --port 55000
250
+ ```
251
+
252
+ Update your hooks to match:
253
+
254
+ ```json
255
+ "command": "clawd-buddy --send done --port 55000"
256
+ ```
257
+
258
+ ### Disable always-on-top
259
+
260
+ ```bash
261
+ clawd-buddy --no-topmost
262
+ ```
263
+
264
+ ## Troubleshooting
265
+
266
+ ### Buddy doesn't appear
267
+
268
+ - **Windows only**: Clawd Buddy uses Windows-specific APIs (`user32`, `shell32`) for transparency and taskbar detection. It does not work on macOS or Linux.
269
+ - Make sure no other process is using port `44556`: `netstat -ano | findstr 44556`
270
+
271
+ ### Hook doesn't trigger the buddy
272
+
273
+ - Make sure the buddy is running (`clawd-buddy` in a terminal or via `--startup`).
274
+ - Test manually: `clawd-buddy --send test` — if this says "No buddy on port 44556", the buddy isn't running.
275
+ - Check that `clawd-buddy` is on your PATH: `where clawd-buddy`
276
+
277
+ ### Multiple buddies / port conflict
278
+
279
+ - The buddy uses a lock socket on port `44557` (main port + 1) to prevent duplicates.
280
+ - If a stale lock is stuck, kill the process and restart: `taskkill /F /IM clawd-buddy.exe`
281
+
282
+ ### Startup not working
283
+
284
+ - Verify the VBS file exists: `dir "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\clawd-buddy*"`
285
+ - Re-run `clawd-buddy --startup` to regenerate it.
286
+ - Make sure `clawd-buddy.exe` is on your PATH: `where clawd-buddy`
287
+
288
+ ## Disclaimer
289
+
290
+ Clawd Buddy is an independent open-source project. It is not affiliated with, endorsed by, or sponsored by Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic, PBC.
291
+
292
+ ## License
293
+
294
+ [MIT](LICENSE)