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.
- package/README.md +69 -344
- package/dist/index.js +39 -9
- 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
|
|
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
|
-
#
|
|
69
|
-
npx pawmode --preset
|
|
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
|
-

|
|
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
|
-

|
|
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
|
|
75
|
+
38 skills across 8 categories. Install only what you need.
|
|
226
76
|
|
|
227
77
|
### Productivity
|
|
228
78
|
|
|
229
|
-
| Skill |
|
|
79
|
+
| Skill | What it does | Tools |
|
|
230
80
|
|---|---|---|
|
|
231
|
-
| `c-notes` | Apple Notes + Reminders | [`memo`](https://github.com/antoniorodr/memo)
|
|
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
|
|
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 |
|
|
88
|
+
| Skill | What it does | Tools |
|
|
239
89
|
|---|---|---|
|
|
240
|
-
| `c-email` |
|
|
241
|
-
| `c-calendar` |
|
|
242
|
-
| `c-messaging` | iMessage + WhatsApp | [`imsg`](https://github.com/steipete/imsg)
|
|
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 |
|
|
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)
|
|
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 |
|
|
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 |
|
|
112
|
+
| `c-bluetooth` | Bluetooth devices | `blueutil` |
|
|
263
113
|
|
|
264
114
|
### Browser & Automation
|
|
265
115
|
|
|
266
|
-
| Skill |
|
|
116
|
+
| Skill | What it does | Tools |
|
|
267
117
|
|---|---|---|
|
|
268
|
-
| `c-
|
|
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 |
|
|
125
|
+
| Skill | What it does | Tools |
|
|
276
126
|
|---|---|---|
|
|
277
|
-
| `c-
|
|
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
|
|
283
|
-
| `c-display` |
|
|
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 |
|
|
138
|
+
| Skill | What it does | Tools |
|
|
289
139
|
|---|---|---|
|
|
290
|
-
| `c-weather` | Weather forecasts
|
|
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
|
|
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 |
|
|
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 |
|
|
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
|
-
##
|
|
157
|
+
## Presets
|
|
308
158
|
|
|
309
|
-
|
|
|
159
|
+
| Preset | Skills |
|
|
310
160
|
|---|---|
|
|
311
|
-
|
|
|
312
|
-
|
|
|
313
|
-
|
|
|
314
|
-
|
|
|
315
|
-
|
|
|
316
|
-
|
|
|
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
|
-
##
|
|
170
|
+
## Features
|
|
363
171
|
|
|
364
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
182
|
+
## Commands
|
|
389
183
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
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
|
|
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 —
|
|
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(
|
|
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
|
-
|
|
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
|
|
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.
|
|
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);
|