pawmode 1.3.0 → 1.4.0

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.
Files changed (3) hide show
  1. package/README.md +69 -344
  2. package/dist/index.js +39 -9
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -45,7 +45,6 @@
45
45
 
46
46
  <h1 align="center">OpenPaw</h1>
47
47
  <p align="center"><b>Personal Assistant Wizard for Claude Code</b></p>
48
- <p align="center"><i>*wags tail furiously* — your new best friend is here.</i></p>
49
48
 
50
49
  <p align="center">
51
50
  <a href="https://www.npmjs.com/package/pawmode"><img src="https://img.shields.io/npm/v/pawmode?color=b4783c&label=npm&style=flat-square" alt="npm"></a>
@@ -62,433 +61,159 @@
62
61
  npx pawmode
63
62
  ```
64
63
 
65
- Pick your skills. Choose terminal, Telegram, or both. Claude does the rest. Good boy.
64
+ Pick skills, choose your interface (terminal, Telegram, or both), and you're done. No daemon, no subscriptions runs once and gets out of the way.
66
65
 
67
66
  ```bash
68
- # Skip the wizard with a preset
69
- npx pawmode --preset essentials
70
- npx pawmode --preset developer --yes
67
+ npx pawmode --preset essentials # skip the wizard
68
+ npx pawmode --preset developer --yes # fully non-interactive
71
69
  ```
72
70
 
73
71
  ---
74
72
 
75
- ## What is OpenPaw?
76
-
77
- OpenPaw turns **Claude Code** into a full personal assistant. One command, 38 skills, and a really good boy who fetches your emails, plays your music, and controls your smart home.
78
-
79
- ```
80
- npx pawmode
81
- ┌───────────────────────────────────────┐
82
- │ How should we set things up, human? │
83
- │ │
84
- │ > ⚡ Quick Setup (pick a preset) │
85
- │ 🎯 Custom (sniff through skills) │
86
- └───────────────────────────────────────┘
87
-
88
- How do you want to talk to Claude? 🐾
89
- > 🖥 Terminal only
90
- > 🖥📱 Terminal + Telegram
91
-
92
- ✔ Sniffed out Homebrew taps
93
- ✔ Taught Claude new tricks
94
- ✔ Buried treats in ~/.claude/skills/
95
- ✔ Set up the doggy door (permissions)
96
- ✔ Put up the baby gate (safety hooks)
97
- ✔ All done! *tail wag intensifies*
98
- ```
99
-
100
- Then just talk to Claude — from your terminal or your phone:
101
-
102
- ```
103
- > "What emails did I get today?"
104
- > "Play lo-fi on Spotify"
105
- > "Turn the bedroom lights to 20%"
106
- > "What's on my calendar tomorrow?"
107
- > "Go to hacker news and summarize the top 5 posts"
108
- ```
109
-
110
- **No daemon.** OpenPaw runs once, writes config, gets out of the way. No subscriptions. No extra cost. Just a wizard that sets things up and takes a nap.
111
-
112
- ![OpenPaw Setup Demo](docs/demo.gif)
113
-
114
- ---
115
-
116
- ## What's New in v1.2.0
117
-
118
- - **Task Dashboard** — local kanban board with 3 themes (Paw, Midnight, Neon), drag-and-drop, runs on `localhost:3141`
119
- - **3D ASCII Title** — extruded block-character title with depth effect
120
- - **Overwrite Protection** — existing SOUL.md and skills are preserved unless you choose to update them
121
- - **4 New Skills** — Weather, Clipboard, Contacts, Timer
122
- - **Dependency Resolution** — skills that need other skills auto-install them
123
-
124
- ---
125
-
126
- ## Task Dashboard
127
-
128
- A local kanban board for your assistant. No accounts, no cloud — just a tiny server on your machine.
129
-
130
- ```bash
131
- openpaw dashboard # Start + open browser
132
- openpaw dashboard --theme midnight # Switch theme
133
- openpaw dashboard --port 8080 # Custom port
134
- ```
135
-
136
- **3 themes:**
137
- - **Paw** — warm brown tones (`#b4783c`)
138
- - **Midnight** — cool dark blue (`#6688cc`)
139
- - **Neon** — cyber green on black (`#00ff88`)
140
-
141
- Features: drag-and-drop kanban, inline editing, priority dots, persistent JSON storage. The wizard asks if you want a dashboard during setup.
142
-
143
- ![Dashboard](docs/dashboard.png)
144
-
145
- ---
146
-
147
- ## Telegram Bridge
148
-
149
- Talk to Claude from your phone. Full bidirectional. All your skills available as bot commands.
150
-
151
- ```bash
152
- # Set up during the wizard, or separately:
153
- openpaw telegram setup
154
-
155
- # Start the bridge:
156
- openpaw telegram
157
- ```
158
-
159
- **Bot commands** (auto-generated from your skills):
160
- - `/email check my inbox`
161
- - `/music play some jazz`
162
- - `/notes add grocery list`
163
- - `/model sonnet` / `/model opus` / `/model haiku` — switch models on the fly
164
- - `/skills` — see what's installed
165
- - `/stop` — cancel current operation
166
- - `/clear` — fresh start
167
-
168
- Or just send a regular message. Claude figures out which skill to use.
169
-
170
- ---
171
-
172
- ## Smart Scheduling
173
-
174
- Automate recurring tasks with built-in cost control. No runaway bills.
175
-
176
- ```bash
177
- # Morning briefing to Telegram
178
- openpaw schedule add "weekdays 8am" --run "check email and summarize" --delivery telegram
179
-
180
- # Evening project summary
181
- openpaw schedule add "daily 6pm" --run "summarize today's git commits" --delivery file
182
-
183
- # Urgent email monitor (cheap with Haiku)
184
- openpaw schedule add "every 30 minutes" --run "check for urgent emails" --model haiku --budget 0.25
185
- ```
186
-
187
- **Cost control built in:**
188
- - Daily cap: $5/day by default (configurable)
189
- - Per-run budget: $1.00 default
190
- - Jobs auto-skip if cap would be exceeded
191
- - Track spending: `openpaw schedule costs`
192
-
193
- Jobs run via launchd (macOS) or cron (Linux) — they keep running even when your terminal is closed.
194
-
195
- ---
196
-
197
- ## PAW MODE
198
-
199
- When you launch Claude through OpenPaw, it runs in **PAW MODE** — full personal assistant mode. Claude knows your name, your preferences, what skills are installed, and greets you at session start.
200
-
201
- PAW MODE is established through:
202
- - `~/.claude/SOUL.md` — your personality config
203
- - `~/.claude/skills/c-core/SKILL.md` — the coordinator brain
204
- - `~/.claude/memory/` — persistent facts across sessions
205
-
206
- ---
207
-
208
- ## Presets
209
-
210
- Get started fast with a preset, or choose `Custom` to sniff through skills one by one.
211
-
212
- | Preset | Skills |
213
- |---|---|
214
- | **Everything** | All 38 skills for your platform |
215
- | **Essentials** | Email, calendar, notes, music, weather, clipboard, browser, system, notifications |
216
- | **Productivity** | Notes, Obsidian, tasks, email, calendar, Slack, cloud files, notifications |
217
- | **Developer** | GitHub, Linear, Jira, browser, network, cron |
218
- | **Creative & Media** | Music, video, screen, voice, browser, research |
219
- | **Smart Home** | Lights, speakers, Bluetooth, system, display, notifications |
220
-
221
- ---
222
-
223
73
  ## Skills
224
74
 
225
- 38 capabilities across 8 categories. Install only what you need.
75
+ 38 skills across 8 categories. Install only what you need.
226
76
 
227
77
  ### Productivity
228
78
 
229
- | Skill | Description | Tools |
79
+ | Skill | What it does | Tools |
230
80
  |---|---|---|
231
- | `c-notes` | Apple Notes + Reminders | [`memo`](https://github.com/antoniorodr/memo) [`remindctl`](https://github.com/nicklama/remindctl) |
81
+ | `c-notes` | Apple Notes + Reminders | [`memo`](https://github.com/antoniorodr/memo), `remindctl` |
232
82
  | `c-obsidian` | Obsidian vault management | [`obsidian-cli`](https://github.com/yakitrak/obsidian-cli) |
233
83
  | `c-notion` | Notion pages + databases | [`notion-cli`](https://github.com/litencatt/notion-cli) |
234
- | `c-tasks` | Todoist / Taskwarrior | [`todoist-cli`](https://github.com/sachaos/todoist) [`taskwarrior`](https://github.com/GothenburgBitFactory/taskwarrior) |
84
+ | `c-tasks` | Todoist / Taskwarrior | [`todoist`](https://github.com/sachaos/todoist), [`taskwarrior`](https://github.com/GothenburgBitFactory/taskwarrior) |
235
85
 
236
86
  ### Communication
237
87
 
238
- | Skill | Description | Tools |
88
+ | Skill | What it does | Tools |
239
89
  |---|---|---|
240
- | `c-email` | Read, send, search email (Gmail or IMAP) | [`gog`](https://github.com/steipete/gog) [`himalaya`](https://github.com/pimalaya/himalaya) |
241
- | `c-calendar` | Events + scheduling (Google or Apple) | [`gog`](https://github.com/steipete/gog) [`icalBuddy`](https://hasseg.org/icalBuddy/) |
242
- | `c-messaging` | iMessage + WhatsApp | [`imsg`](https://github.com/steipete/imsg) [`wacli`](https://github.com/nicklama/wacli) |
90
+ | `c-email` | Gmail or IMAP — read, send, search | `gog`, [`himalaya`](https://github.com/pimalaya/himalaya) |
91
+ | `c-calendar` | Google Calendar + Apple Calendar | `gog`, [`icalBuddy`](https://hasseg.org/icalBuddy/) |
92
+ | `c-messaging` | iMessage + WhatsApp | [`imsg`](https://github.com/steipete/imsg), `wacli` |
243
93
  | `c-slack` | Slack channels + DMs | [`slack-cli`](https://github.com/rockymadden/slack-cli) |
244
94
  | `c-telegram` | Telegram bridge (built-in) | — |
245
95
 
246
96
  ### Media
247
97
 
248
- | Skill | Description | Tools |
98
+ | Skill | What it does | Tools |
249
99
  |---|---|---|
250
100
  | `c-music` | Spotify playback + search | [`spogo`](https://github.com/steipete/spogo) |
251
- | `c-video` | YouTube download + convert | [`yt-dlp`](https://github.com/yt-dlp/yt-dlp) [`ffmpeg`](https://ffmpeg.org/) |
101
+ | `c-video` | YouTube download + convert | [`yt-dlp`](https://github.com/yt-dlp/yt-dlp), [`ffmpeg`](https://ffmpeg.org/) |
252
102
  | `c-video-edit` | Programmatic video creation | [`remotion`](https://github.com/remotion-dev/remotion) |
253
- | `c-screen` | Screenshots, OCR, webcam | [`peekaboo`](https://github.com/steipete/peekaboo) [`camsnap`](https://github.com/nicklama/camsnap) |
103
+ | `c-screen` | Screenshots, OCR, webcam | [`peekaboo`](https://github.com/steipete/peekaboo), `camsnap` |
254
104
  | `c-voice` | Speech-to-text + TTS | [`sag`](https://github.com/steipete/sag) |
255
105
 
256
106
  ### Smart Home
257
107
 
258
- | Skill | Description | Tools |
108
+ | Skill | What it does | Tools |
259
109
  |---|---|---|
260
110
  | `c-lights` | Philips Hue control | [`openhue-cli`](https://github.com/openhue/openhue-cli) |
261
111
  | `c-speakers` | Sonos speakers | [`sonoscli`](https://github.com/steipete/sonoscli) |
262
- | `c-bluetooth` | Bluetooth devices | [`blucli`](https://github.com/nicklama/blucli) |
112
+ | `c-bluetooth` | Bluetooth devices | `blueutil` |
263
113
 
264
114
  ### Browser & Automation
265
115
 
266
- | Skill | Description | Tools |
116
+ | Skill | What it does | Tools |
267
117
  |---|---|---|
268
- | `c-schedule` | Smart scheduling with cost control | built-in |
118
+ | `c-browser` | Headless browser navigate, click, scrape | `playwright` |
119
+ | `c-cron` | Cron jobs + launchctl services | `lunchy` |
120
+ | `c-schedule` | Recurring tasks with cost control | built-in |
269
121
  | `c-briefing` | Daily morning briefing | depends on email + calendar |
270
- | `c-browser` | Headless browser — navigate, click, scrape | [`agent-browser`](https://github.com/nicklama/agent-browser) [`playwright`](https://github.com/nicklama/playwright-cli) |
271
- | `c-cron` | Cron jobs + launchctl services | [`lunchy-go`](https://github.com/nicklama/lunchy-go) |
272
122
 
273
123
  ### System & Files
274
124
 
275
- | Skill | Description | Tools |
125
+ | Skill | What it does | Tools |
276
126
  |---|---|---|
277
- | `c-clipboard` | Copy, paste, transform clipboard content | built-in |
278
- | `c-contacts` | Search macOS Contacts / Address Book | built-in |
279
- | `c-timer` | Countdown timers, alarms, pomodoro | [`terminal-notifier`](https://github.com/julienXX/terminal-notifier) |
280
- | `c-system` | macOS Swiss Army Knife — volume, wifi, battery, dock | [`m-cli`](https://github.com/rgcr/m-cli) |
127
+ | `c-system` | Volume, wifi, battery, dock | [`m-cli`](https://github.com/rgcr/m-cli) |
281
128
  | `c-apps` | Mac App Store from CLI | [`mas`](https://github.com/mas-cli/mas) |
282
- | `c-files` | Cloud sync — Google Drive, S3, Dropbox, 70+ providers | [`rclone`](https://github.com/rclone/rclone) |
283
- | `c-display` | Display brightness + safe trash | [`brightness`](https://github.com/nriley/brightness) [`macos-trash`](https://github.com/sindresorhus/macos-trash) |
129
+ | `c-files` | Cloud sync (Drive, S3, Dropbox, 70+) | [`rclone`](https://github.com/rclone/rclone) |
130
+ | `c-display` | Brightness + safe trash | [`brightness`](https://github.com/nriley/brightness), [`macos-trash`](https://github.com/sindresorhus/macos-trash) |
284
131
  | `c-notify` | Native macOS notifications | [`terminal-notifier`](https://github.com/julienXX/terminal-notifier) |
132
+ | `c-clipboard` | Copy, paste, transform clipboard | built-in |
133
+ | `c-contacts` | Search macOS Contacts | built-in |
134
+ | `c-timer` | Countdown, alarms, pomodoro | [`terminal-notifier`](https://github.com/julienXX/terminal-notifier) |
285
135
 
286
136
  ### Research & Utilities
287
137
 
288
- | Skill | Description | Tools |
138
+ | Skill | What it does | Tools |
289
139
  |---|---|---|
290
- | `c-weather` | Weather forecasts and conditions | built-in (curl + [wttr.in](https://wttr.in)) |
140
+ | `c-weather` | Weather forecasts | built-in (curl + [wttr.in](https://wttr.in)) |
291
141
  | `c-research` | Summarize URLs, PDFs, videos | [`summarize`](https://github.com/steipete/summarize) |
292
142
  | `c-location` | Apple Maps + nearby places | [`goplaces`](https://github.com/steipete/goplaces) |
293
143
  | `c-tracking` | Package tracking (UPS, FedEx, etc.) | [`ordercli`](https://github.com/steipete/ordercli) |
294
- | `c-secrets` | 1Password / Bitwarden | [`op`](https://developer.1password.com/docs/cli/) [`bw`](https://github.com/bitwarden/clients) |
295
- | `c-network` | DNS lookups + HTTP client | [`doggo`](https://github.com/mr-karan/doggo) [`httpie`](https://github.com/httpie/cli) |
144
+ | `c-secrets` | 1Password / Bitwarden | [`op`](https://developer.1password.com/docs/cli/), [`bw`](https://github.com/bitwarden/clients) |
145
+ | `c-network` | DNS + HTTP client | [`doggo`](https://github.com/mr-karan/doggo), [`httpie`](https://github.com/httpie/cli) |
296
146
 
297
147
  ### Developer
298
148
 
299
- | Skill | Description | Tools |
149
+ | Skill | What it does | Tools |
300
150
  |---|---|---|
301
- | `c-github` | PRs, issues, repos, actions | [`gh`](https://github.com/cli/cli) [`jq`](https://github.com/jqlang/jq) |
302
- | `c-linear` | Linear issues + projects | [`linear-cli`](https://github.com/linear/linear-cli) |
151
+ | `c-github` | PRs, issues, repos, actions | [`gh`](https://github.com/cli/cli), [`jq`](https://github.com/jqlang/jq) |
152
+ | `c-linear` | Linear issues + projects | `linear` |
303
153
  | `c-jira` | Jira issues + sprints | [`jira-cli`](https://github.com/ankitpokhrel/jira-cli) |
304
154
 
305
155
  ---
306
156
 
307
- ## Commands
157
+ ## Presets
308
158
 
309
- | Command | Description |
159
+ | Preset | Skills |
310
160
  |---|---|
311
- | `openpaw` | Interactive setup wizard |
312
- | `openpaw --preset <name>` | Quick setup with a preset |
313
- | `openpaw --preset <name> --yes` | Non-interactive setup |
314
- | `openpaw --dry-run` | Preview what would be installed |
315
- | `openpaw dashboard` | Start the task manager dashboard |
316
- | `openpaw dashboard --theme <name>` | Change dashboard theme (paw, midnight, neon) |
317
- | `openpaw telegram` | Start the Telegram bridge |
318
- | `openpaw telegram setup` | Configure Telegram bot |
319
- | `openpaw schedule add` | Add a scheduled job |
320
- | `openpaw schedule list` | List scheduled jobs |
321
- | `openpaw schedule costs` | View cost usage and daily cap |
322
- | `openpaw schedule set-cap <usd>` | Set daily cost cap |
323
- | `openpaw configure` | Configure your setup — add skills, personality, dashboard |
324
- | `openpaw list` | Show all available skills |
325
- | `openpaw add <skills>` | Add skills — `openpaw add notes music email` |
326
- | `openpaw remove <skills>` | Remove skills |
327
- | `openpaw status` | Show installed skills + tool versions |
328
- | `openpaw doctor` | Diagnose issues |
329
- | `openpaw update` | Upgrade CLI tools |
330
- | `openpaw soul` | Edit personality (SOUL.md) |
331
- | `openpaw export` | Export config + memory |
332
- | `openpaw import <file>` | Import config from file |
333
- | `openpaw reset` | Remove everything OpenPaw installed |
334
-
335
- ---
336
-
337
- ## How It Works
338
-
339
- OpenPaw doesn't run in the background (except the optional Telegram bridge). Here's what happens:
340
-
341
- ```
342
- 1. You pick a preset or choose individual skills
343
- 2. Pick your interface: terminal, Telegram, or both
344
- 3. Optionally set up a task dashboard with your preferred theme
345
- 4. CLI tools are installed via brew/npm/pip
346
- 5. SKILL.md files are created in ~/.claude/skills/
347
- 6. Permissions + safety hooks are configured
348
- 7. Telegram bridge is set up (if selected)
349
- 8. Claude launches in PAW MODE — ready to fetch!
350
- ```
351
-
352
- **Skills** are SKILL.md files that Claude auto-discovers. They teach Claude how to use each CLI tool.
353
-
354
- **Permissions** let Claude run tools without prompting you every time. Only the minimum needed.
355
-
356
- **Safety hooks** block dangerous patterns like mass-delete, mass-email, and credential exposure. Baby gate = installed.
357
-
358
- **`--dangerously-skip-permissions`** lets Claude actually be your assistant. The wizard explains this and asks before enabling. Safety hooks still protect you.
161
+ | **Everything** | All 38 skills |
162
+ | **Essentials** | Email, calendar, notes, music, weather, clipboard, browser, system, notifications |
163
+ | **Productivity** | Notes, Obsidian, tasks, email, calendar, Slack, cloud files, notifications |
164
+ | **Developer** | GitHub, Linear, Jira, browser, network, cron |
165
+ | **Creative** | Music, video, screen, voice, browser, research |
166
+ | **Smart Home** | Lights, speakers, Bluetooth, system, display, notifications |
359
167
 
360
168
  ---
361
169
 
362
- ## The `/c` Coordinator
170
+ ## Features
363
171
 
364
- Every OpenPaw install includes `c-core` a coordinator skill that acts as the brain. It knows what's installed and routes your requests to the right tool.
172
+ **Telegram Bridge**Talk to Claude from your phone. Set up with `openpaw telegram setup`, start with `openpaw telegram`.
365
173
 
366
- ```
367
- /c what emails came in today?
368
- /c play something chill on spotify
369
- /c add "buy groceries" to my reminders
370
- /c search my obsidian vault for project ideas
371
- ```
372
-
373
- ---
174
+ **Task Dashboard** — Local kanban board with 3 themes (Paw, Midnight, Neon). Run `openpaw dashboard`.
374
175
 
375
- ## tmux Support
376
-
377
- For the Telegram bridge (or running "both" mode), OpenPaw can set up a tmux session:
378
-
379
- ```bash
380
- # The wizard offers this automatically, or:
381
- tmux new-session -s openpaw 'openpaw telegram'
382
- ```
176
+ **Scheduling** Recurring tasks with per-run and daily cost caps. `openpaw schedule add "weekdays 8am" --run "check email"`.
383
177
 
384
- In "both" mode, tmux splits into two panes Claude Code on the left, Telegram bridge on the right.
178
+ **CLAUDE.md Integration** OpenPaw writes a section into `~/.claude/CLAUDE.md` so Claude knows its name, installed skills, and personality on every session start. Your existing CLAUDE.md content is preserved.
385
179
 
386
180
  ---
387
181
 
388
- ## Architecture
182
+ ## Commands
389
183
 
390
- ```
391
- ~/.claude/
392
- ├── SOUL.md # Personality (name, tone, proactivity)
393
- ├── skills/
394
- │ ├── c-core/SKILL.md # Coordinator brain
395
- │ ├── c-memory/SKILL.md # Memory management
396
- │ ├── c-email/SKILL.md # Email skill
397
- │ ├── c-music/SKILL.md # Spotify skill
398
- │ └── ... # More skills
399
- ├── memory/
400
- │ ├── MEMORY.md # Persistent facts
401
- │ ├── journal.md # Session logs
402
- │ ├── people.md # Contact notes
403
- │ └── preferences.md # User preferences
404
- └── settings.json # Permissions + hooks
405
-
406
- ~/.config/openpaw/
407
- └── dashboard.json # Dashboard tasks + theme
408
- ```
184
+ | Command | Description |
185
+ |---|---|
186
+ | `openpaw` | Interactive setup wizard |
187
+ | `openpaw configure` | Menu to add skills, edit personality, manage dashboard |
188
+ | `openpaw add <skills>` | Add skills — `openpaw add notes music email` |
189
+ | `openpaw remove <skills>` | Remove skills |
190
+ | `openpaw list` | Show all available skills |
191
+ | `openpaw status` | Show installed skills + tool versions |
192
+ | `openpaw doctor` | Diagnose issues |
193
+ | `openpaw update` | Upgrade CLI tools |
194
+ | `openpaw dashboard` | Task dashboard (`--theme midnight`, `--port 8080`) |
195
+ | `openpaw telegram` | Start Telegram bridge |
196
+ | `openpaw schedule add` | Add a scheduled job |
197
+ | `openpaw schedule list` | List scheduled jobs |
198
+ | `openpaw schedule costs` | View cost usage |
199
+ | `openpaw soul` | Edit personality |
200
+ | `openpaw export` / `import` | Backup and restore config |
201
+ | `openpaw reset` | Remove everything OpenPaw installed |
409
202
 
410
203
  ---
411
204
 
412
205
  ## Contributing
413
206
 
414
- Want to teach this pup a new trick? It's easy:
415
-
416
207
  ```bash
417
- # 1. Fork the repo
418
208
  gh repo fork daxaur/openpaw
419
-
420
- # 2. Create your skill template
421
209
  mkdir skills/c-yourskill
422
- # Write a SKILL.md with YAML frontmatter + usage instructions
423
-
424
- # 3. Add tool definitions to the catalog
425
- # Edit src/catalog/index.ts
426
-
427
- # 4. Submit a PR
210
+ # Write a SKILL.md with YAML frontmatter (name, description, tags)
211
+ # Add tool definitions to src/catalog/index.ts
428
212
  gh pr create
429
213
  ```
430
214
 
431
- ### Skill template format
432
-
433
- ```markdown
434
- ---
435
- name: c-yourskill
436
- description: Short description (under 400 chars)
437
- tags: [tag1, tag2]
438
- ---
439
-
440
- # Your Skill Name
441
-
442
- Instructions for Claude on how to use the CLI tool...
443
- ```
444
-
445
- ---
446
-
447
- ## Why OpenPaw?
448
-
449
- - **Free forever** — uses your existing Claude subscription
450
- - **No daemon** — runs once, configures, takes a nap
451
- - **No attack surface** — no open ports, no cloud dependencies
452
- - **5-minute setup** — from zero to personal assistant
453
- - **Telegram built-in** — talk to Claude from your phone
454
- - **Task dashboard** — local kanban board with 3 themes
455
- - **38 skills** — email, music, smart home, GitHub, scheduling, video editing, and more
456
- - **Cost-controlled scheduling** — automate tasks without runaway bills
457
- - **Open source** — MIT license, community-driven
458
-
459
- ---
460
-
461
- ## Changelog
462
-
463
- ### v1.2.0
464
- - Task manager dashboard with 3 themes (Paw, Midnight, Neon)
465
- - 3D ASCII title with extruded depth effect
466
- - Overwrite protection for existing SOUL.md and skills
467
- - 4 new skills: Weather, Clipboard, Contacts, Timer
468
- - Dependency resolution for skill prerequisites
469
- - Dashboard integrated into setup wizard
470
-
471
- ### v1.1.0
472
- - Smart scheduling with cost control
473
- - Video editing skill (Remotion + Editly)
474
- - Obsidian memory integration
475
- - Daily briefing skill
476
- - Telegram + Discord curl-based bridge
477
- - MCP server setup
478
- - Soul export/import
479
-
480
- ### v1.0.0
481
- - Initial release
482
- - 32 skills across 8 categories
483
- - Interactive setup wizard with presets
484
- - Telegram bridge
485
- - PAW MODE with SOUL.md personality
486
- - Safety hooks and permission management
487
-
488
215
  ---
489
216
 
490
217
  ## License
491
218
 
492
- MIT — do whatever you want with it. Go fetch.
493
-
494
- Made with care (and tail wags) by [@daxaur](https://github.com/daxaur)
219
+ MIT — [@daxaur](https://github.com/daxaur)
package/dist/index.js CHANGED
@@ -1487,6 +1487,8 @@ function launchInBackground(cmd) {
1487
1487
 
1488
1488
  //#endregion
1489
1489
  //#region src/core/claude-md.ts
1490
+ const START_MARKER = "<!-- OPENPAW:START -->";
1491
+ const END_MARKER = "<!-- OPENPAW:END -->";
1490
1492
  function getClaudeMdPath() {
1491
1493
  return path$2.join(os$3.homedir(), ".claude", "CLAUDE.md");
1492
1494
  }
@@ -1503,12 +1505,10 @@ function readBotName() {
1503
1505
  } catch {}
1504
1506
  return "Paw";
1505
1507
  }
1506
- /**
1507
- * Write ~/.claude/CLAUDE.md with identity, installed skills, and dashboard info.
1508
- * This is what Claude Code auto-reads at every session start.
1509
- */
1510
- function writeClaudeMd(botName, installedSkills, hasDashboard) {
1508
+ function generateSection(botName, installedSkills, hasDashboard) {
1511
1509
  const lines = [
1510
+ START_MARKER,
1511
+ "",
1512
1512
  "# OpenPaw — PAW MODE Active",
1513
1513
  "",
1514
1514
  `You are **${botName}**, a personal assistant powered by OpenPaw. PAW MODE is active.`,
@@ -1526,7 +1526,7 @@ function writeClaudeMd(botName, installedSkills, hasDashboard) {
1526
1526
  else {
1527
1527
  for (const skill of installedSkills) lines.push(`- **c-${skill.id}** — ${skill.description}`);
1528
1528
  lines.push("");
1529
- lines.push(`Use \`/c <request>\` to route through the coordinator, or talk naturally.`);
1529
+ lines.push("Use `/c <request>` to route through the coordinator, or talk naturally.");
1530
1530
  }
1531
1531
  lines.push("");
1532
1532
  if (hasDashboard) {
@@ -1550,12 +1550,42 @@ function writeClaudeMd(botName, installedSkills, hasDashboard) {
1550
1550
  lines.push("- If asked about your setup: \"I'm powered by OpenPaw — open-source personal assistant skills for Claude Code\"");
1551
1551
  lines.push("- Project: https://github.com/daxaur/openpaw");
1552
1552
  lines.push("");
1553
+ lines.push(END_MARKER);
1554
+ return lines.join("\n");
1555
+ }
1556
+ /**
1557
+ * Write or update the OpenPaw section in ~/.claude/CLAUDE.md.
1558
+ *
1559
+ * If CLAUDE.md already exists, only the content between
1560
+ * <!-- OPENPAW:START --> and <!-- OPENPAW:END --> is replaced.
1561
+ * Everything else (user's own instructions) is preserved.
1562
+ *
1563
+ * If no markers exist yet, the section is appended to the end.
1564
+ * If the file doesn't exist, it's created with just the OpenPaw section.
1565
+ */
1566
+ function writeClaudeMd(botName, installedSkills, hasDashboard) {
1553
1567
  const dir = path$2.dirname(getClaudeMdPath());
1554
1568
  if (!fs$2.existsSync(dir)) fs$2.mkdirSync(dir, { recursive: true });
1555
- fs$2.writeFileSync(getClaudeMdPath(), lines.join("\n"), "utf-8");
1569
+ const section = generateSection(botName, installedSkills, hasDashboard);
1570
+ const filePath = getClaudeMdPath();
1571
+ if (!fs$2.existsSync(filePath)) {
1572
+ fs$2.writeFileSync(filePath, section + "\n", "utf-8");
1573
+ return;
1574
+ }
1575
+ const existing = fs$2.readFileSync(filePath, "utf-8");
1576
+ const startIdx = existing.indexOf(START_MARKER);
1577
+ const endIdx = existing.indexOf(END_MARKER);
1578
+ if (startIdx !== -1 && endIdx !== -1) {
1579
+ const before = existing.slice(0, startIdx);
1580
+ const after = existing.slice(endIdx + END_MARKER.length);
1581
+ fs$2.writeFileSync(filePath, before + section + after, "utf-8");
1582
+ } else {
1583
+ const separator = existing.endsWith("\n") ? "\n" : "\n\n";
1584
+ fs$2.writeFileSync(filePath, existing + separator + section + "\n", "utf-8");
1585
+ }
1556
1586
  }
1557
1587
  /**
1558
- * Regenerate CLAUDE.md from current state (installed skills, SOUL.md, dashboard config).
1588
+ * Regenerate the OpenPaw section in CLAUDE.md from current state.
1559
1589
  * Call this after `openpaw add` or `openpaw remove`.
1560
1590
  */
1561
1591
  function regenerateClaudeMd() {
@@ -2837,7 +2867,7 @@ async function scheduleSetCapCommand(amount) {
2837
2867
  //#endregion
2838
2868
  //#region src/index.ts
2839
2869
  const program = new Command();
2840
- program.name("openpaw").description("Personal Assistant Wizard for Claude Code").version("1.3.0");
2870
+ program.name("openpaw").description("Personal Assistant Wizard for Claude Code").version("1.4.0");
2841
2871
  program.command("setup", { isDefault: true }).description("Interactive setup wizard — pick skills, install tools, configure Claude Code").option("-p, --preset <name>", "Use a preset (everything, essentials, productivity, developer, creative, smart-home)").option("-y, --yes", "Skip confirmations, use defaults").option("--dry-run", "Show what would be installed without making changes").action(setupCommand);
2842
2872
  program.command("add").description("Add skill(s) by name").argument("<skills...>", "Skill IDs to add (e.g. notes music email)").action(addCommand);
2843
2873
  program.command("remove").description("Remove skill(s) by name").argument("<skills...>", "Skill IDs to remove").action(removeCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pawmode",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Open-source Personal Assistant Wizard for Claude Code. Turn Claude Code into your PA with CLI tools and skills.",
5
5
  "type": "module",
6
6
  "bin": {