any-buddy 1.0.10 → 1.0.11
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 +14 -14
- package/assets/current.svg +1 -1
- package/assets/species.svg +1 -1
- package/bin/cli.mjs +10 -10
- package/lib/config.mjs +1 -1
- package/lib/tui.mjs +3 -3
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -12,14 +12,14 @@ That's it. Follow the prompts to choose your species, rarity, eyes, hat, and nam
|
|
|
12
12
|
Claude Code assigns you a deterministic pet based on your account ID — you can't change it through normal means. This tool lets you choose your own species, rarity, eyes, and hat, then patches the Claude Code binary to make it happen.
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="assets/demo.svg" alt="Demo of
|
|
15
|
+
<img src="assets/demo.svg" alt="Demo of any-buddy" width="700">
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
## How it works
|
|
19
19
|
|
|
20
20
|
Claude Code's companion system generates your pet's visual traits (species, rarity, eyes, hat) by hashing your user ID with a salt string (`friend-2026-401`), then feeding that hash into a deterministic PRNG (Mulberry32). The result is always the same pet for the same user — and it's recalculated on every launch, so you can't override it through config files.
|
|
21
21
|
|
|
22
|
-
**
|
|
22
|
+
**any-buddy** works by:
|
|
23
23
|
|
|
24
24
|
1. **You pick** your desired species, rarity, eyes, and hat through an interactive TUI
|
|
25
25
|
2. **Brute-force search** finds a replacement salt string that produces your chosen pet when combined with your real user ID (typically takes <100ms)
|
|
@@ -70,28 +70,28 @@ npm install -g any-buddy
|
|
|
70
70
|
|
|
71
71
|
```bash
|
|
72
72
|
# Interactive pet picker (default) — pick your pet and apply
|
|
73
|
-
|
|
73
|
+
any-buddy
|
|
74
74
|
|
|
75
75
|
# Show your current pet
|
|
76
|
-
|
|
76
|
+
any-buddy current
|
|
77
77
|
|
|
78
78
|
# Browse and preview pets without applying
|
|
79
|
-
|
|
79
|
+
any-buddy preview
|
|
80
80
|
|
|
81
81
|
# Re-apply saved pet after a Claude Code update
|
|
82
|
-
|
|
82
|
+
any-buddy apply
|
|
83
83
|
|
|
84
84
|
# Silent re-apply (used by the SessionStart hook)
|
|
85
|
-
|
|
85
|
+
any-buddy apply --silent
|
|
86
86
|
|
|
87
87
|
# Restore original pet
|
|
88
|
-
|
|
88
|
+
any-buddy restore
|
|
89
89
|
|
|
90
90
|
# Delete companion so Claude Code re-hatches a fresh one on next /buddy
|
|
91
|
-
|
|
91
|
+
any-buddy rehatch
|
|
92
92
|
|
|
93
93
|
# Non-interactive with flags (skip prompts you already know the answer to)
|
|
94
|
-
|
|
94
|
+
any-buddy --species dragon --rarity legendary --eye '✦' --hat wizard --name Draco --yes
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
### CLI flags
|
|
@@ -208,7 +208,7 @@ When you choose to install the hook, it adds this to `~/.claude/settings.json`:
|
|
|
208
208
|
"hooks": [
|
|
209
209
|
{
|
|
210
210
|
"type": "command",
|
|
211
|
-
"command": "
|
|
211
|
+
"command": "any-buddy apply --silent"
|
|
212
212
|
}
|
|
213
213
|
]
|
|
214
214
|
}
|
|
@@ -220,7 +220,7 @@ When you choose to install the hook, it adds this to `~/.claude/settings.json`:
|
|
|
220
220
|
The hook is **optional and defaults to No** — you'll be asked during the interactive flow. If you prefer, just run `any-buddy apply` manually after Claude Code updates.
|
|
221
221
|
|
|
222
222
|
On every Claude Code session start, this runs `apply --silent` which:
|
|
223
|
-
1. Reads your saved salt from `~/.
|
|
223
|
+
1. Reads your saved salt from `~/.any-buddy.json`
|
|
224
224
|
2. Checks if the current binary already has the correct salt (fast `Buffer.indexOf`)
|
|
225
225
|
3. If not (Claude updated), re-patches — same string replacement, same logic
|
|
226
226
|
4. Silent mode: produces no output unless a patch was actually applied
|
|
@@ -250,7 +250,7 @@ A backup is always created at `<binary-path>.anybuddy-bak` before the first patc
|
|
|
250
250
|
| File | Purpose |
|
|
251
251
|
|---|---|
|
|
252
252
|
| `~/.claude.json` | Read-only — your user ID is read from here |
|
|
253
|
-
| `~/.claude-code-any-buddy.json` | Stores your chosen salt and pet config |
|
|
253
|
+
| `~/.claude-code-any-buddy.json` | Stores your chosen salt and pet config (legacy name kept for compatibility) |
|
|
254
254
|
| `~/.claude/settings.json` | SessionStart hook is added here (optional) |
|
|
255
255
|
| `<binary>.anybuddy-bak` | Backup of the original binary |
|
|
256
256
|
|
|
@@ -258,7 +258,7 @@ A backup is always created at `<binary-path>.anybuddy-bak` before the first patc
|
|
|
258
258
|
|
|
259
259
|
```bash
|
|
260
260
|
# Restore original pet and remove the hook
|
|
261
|
-
|
|
261
|
+
any-buddy restore
|
|
262
262
|
```
|
|
263
263
|
|
|
264
264
|
This patches the salt back to the original, removes the SessionStart hook, and clears the saved config.
|
package/assets/current.svg
CHANGED
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
</style>
|
|
41
41
|
</defs>
|
|
42
42
|
<svg id="screen" width="480" height="272" viewBox="0 0 480 272" preserveAspectRatio="xMidYMin slice">
|
|
43
|
-
<rect class="background" height="100%" width="100%" x="0" y="0"/><defs><g id="g1"><text x="0" textLength="184" font-weight="bold" class="foreground">
|
|
43
|
+
<rect class="background" height="100%" width="100%" x="0" y="0"/><defs><g id="g1"><text x="0" textLength="184" font-weight="bold" class="foreground"> any-buddy</text></g><g id="g2"><text x="0" textLength="288" class="foreground"> Pick any Claude Code companion pet</text></g><g id="g3"><text x="0" textLength="208" class="foreground"> User ID: d6242b55-d9f...</text></g><g id="g4"><text x="0" textLength="336" class="color2"> Default pet (original salt): mushroom ★★</text></g><g id="g5"><text x="0" textLength="400" class="color2"> Rarity: uncommon Eyes: ° Hat: crown Shiny: no</text></g><g id="g6"><text x="0" textLength="128" class="color2"> \^^^/ </text></g><g id="g7"><text x="0" textLength="128" class="color2"> .-o-OO-o-. </text></g><g id="g8"><text x="0" textLength="128" class="color2"> (__________)</text></g><g id="g9"><text x="0" textLength="128" class="color2"> |° °| </text></g><g id="g10"><text x="0" textLength="128" class="color2"> |____| </text></g><g id="g11"><text x="0" textLength="8" class="background"> </text></g></defs><g><use xlink:href="#g1" y="17"/><use xlink:href="#g2" y="34"/><use xlink:href="#g3" y="68"/><use xlink:href="#g4" y="102"/><use xlink:href="#g5" y="119"/><use xlink:href="#g6" y="153"/><use xlink:href="#g7" y="170"/><use xlink:href="#g8" y="187"/><use xlink:href="#g9" y="204"/><use xlink:href="#g10" y="221"/><rect x="0" y="255" width="8" height="17" class="foreground"/><use xlink:href="#g11" y="255"/></g></svg>
|
|
44
44
|
</svg>
|
package/assets/species.svg
CHANGED
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
</style>
|
|
41
41
|
</defs>
|
|
42
42
|
<svg id="screen" width="640" height="935" viewBox="0 0 640 935" preserveAspectRatio="xMidYMin slice">
|
|
43
|
-
<rect class="background" height="100%" width="100%" x="0" y="0"/><defs><g id="g1"><text x="0" textLength="184" font-weight="bold" class="color14"> claude-code-any-buddy</text></g><g id="g2"><text x="0" textLength="360" class="foreground"> Pick any Claude Code companion pet you want</text></g><g id="g3"><text x="0" textLength="128" font-weight="bold" class="foreground"> All 18 Species</text></g><g id="g4"><text x="0" textLength="640" class="foreground"> ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ </text></g><g id="g5"><text x="0" textLength="80" class="foreground">─ ─ ─ ─</text></g><g id="g6"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="32" font-weight="bold" class="foreground">duck</text><text x="48" textLength="160" class="foreground"> </text><text x="208" textLength="40" font-weight="bold" class="foreground">goose</text><text x="248" textLength="152" class="foreground"> </text><text x="400" textLength="32" font-weight="bold" class="foreground">blob</text><text x="432" textLength="160" class="foreground"> </text></g><g id="g7"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> __ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> (·> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> .----. </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g8"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> <(· )___ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> || </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g9"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( ._> </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> _(__)_ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g10"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> `--´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> ^^^^ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `----´ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g11"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="24" font-weight="bold" class="foreground">cat</text><text x="40" textLength="168" class="foreground"> </text><text x="208" textLength="48" font-weight="bold" class="foreground">dragon</text><text x="256" textLength="144" class="foreground"> </text><text x="400" textLength="56" font-weight="bold" class="foreground">octopus</text><text x="456" textLength="136" class="foreground"> </text></g><g id="g12"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> /\_/\ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g13"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( · ·) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> /^\ /^\ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> .----. </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g14"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( ω ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> < · · > </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g15"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> (")_(") </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> ( ~~ ) </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> (______) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g16"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> `-vvvv-´ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> /\/\/\/\ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g17"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="24" font-weight="bold" class="foreground">owl</text><text x="40" textLength="168" class="foreground"> </text><text x="208" textLength="56" font-weight="bold" class="foreground">penguin</text><text x="264" textLength="136" class="foreground"> </text><text x="400" textLength="48" font-weight="bold" class="foreground">turtle</text><text x="448" textLength="144" class="foreground"> </text></g><g id="g18"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> /\ /\ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> _,--._ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g19"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ((·)(·)) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> .---. </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g20"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( >< ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> (·>·) </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> /[______]\ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g21"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> `----´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> /( )\ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `` `` </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g22"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> `---´ </text><text x="304" textLength="288" class="foreground"> </text></g><g id="g23"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="40" font-weight="bold" class="foreground">snail</text><text x="56" textLength="152" class="foreground"> </text><text x="208" textLength="40" font-weight="bold" class="foreground">ghost</text><text x="248" textLength="152" class="foreground"> </text><text x="400" textLength="56" font-weight="bold" class="foreground">axolotl</text><text x="456" textLength="136" class="foreground"> </text></g><g id="g24"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> · .--. </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6">}~(______)~{</text><text x="496" textLength="96" class="foreground"> </text></g><g id="g25"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> \ ( @ ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> .----. </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6">}~(· .. ·)~{</text><text x="496" textLength="96" class="foreground"> </text></g><g id="g26"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> \_`--´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> / · · \ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( .--. ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g27"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ~~~~~~~ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> | | </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> (_/ \_) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g28"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> ~`~``~`~ </text><text x="304" textLength="288" class="foreground"> </text></g><g id="g29"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="64" font-weight="bold" class="foreground">capybara</text><text x="80" textLength="128" class="foreground"> </text><text x="208" textLength="48" font-weight="bold" class="foreground">cactus</text><text x="256" textLength="144" class="foreground"> </text><text x="400" textLength="40" font-weight="bold" class="foreground">robot</text><text x="440" textLength="152" class="foreground"> </text></g><g id="g30"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g31"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> n______n </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> n ____ n </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> .[||]. </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g32"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( · · ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> | |· ·| | </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> [ · · ] </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g33"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( oo ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> |_| |_| </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> [ ==== ] </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g34"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> `------´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> | | </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `------´ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g35"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="48" font-weight="bold" class="foreground">rabbit</text><text x="64" textLength="144" class="foreground"> </text><text x="208" textLength="64" font-weight="bold" class="foreground">mushroom</text><text x="272" textLength="128" class="foreground"> </text><text x="400" textLength="40" font-weight="bold" class="foreground">chonk</text><text x="440" textLength="152" class="foreground"> </text></g><g id="g36"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> (\__/) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> /\ /\ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g37"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( · · ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> .-o-OO-o-. </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g38"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> =( .. )= </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6">(__________)</text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( .. ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g39"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> (")__(") </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> |· ·| </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `------´ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g40"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> |____| </text><text x="304" textLength="288" class="foreground"> </text></g><g id="g41"><text x="0" textLength="8" class="background"> </text></g></defs><g><use xlink:href="#g1" y="17"/><use xlink:href="#g2" y="34"/><use xlink:href="#g3" y="68"/><use xlink:href="#g4" y="85"/><use xlink:href="#g5" y="102"/><use xlink:href="#g6" y="136"/><use xlink:href="#g7" y="153"/><use xlink:href="#g8" y="170"/><use xlink:href="#g9" y="187"/><use xlink:href="#g10" y="204"/><use xlink:href="#g11" y="238"/><use xlink:href="#g12" y="255"/><use xlink:href="#g13" y="272"/><use xlink:href="#g14" y="289"/><use xlink:href="#g15" y="306"/><use xlink:href="#g16" y="323"/><use xlink:href="#g17" y="357"/><use xlink:href="#g18" y="374"/><use xlink:href="#g19" y="391"/><use xlink:href="#g20" y="408"/><use xlink:href="#g21" y="425"/><use xlink:href="#g22" y="442"/><use xlink:href="#g23" y="476"/><use xlink:href="#g24" y="493"/><use xlink:href="#g25" y="510"/><use xlink:href="#g26" y="527"/><use xlink:href="#g27" y="544"/><use xlink:href="#g28" y="561"/><use xlink:href="#g29" y="595"/><use xlink:href="#g30" y="612"/><use xlink:href="#g31" y="629"/><use xlink:href="#g32" y="646"/><use xlink:href="#g33" y="663"/><use xlink:href="#g34" y="680"/><use xlink:href="#g35" y="714"/><use xlink:href="#g36" y="731"/><use xlink:href="#g37" y="748"/><use xlink:href="#g38" y="765"/><use xlink:href="#g39" y="782"/><use xlink:href="#g40" y="799"/><rect x="0" y="833" width="8" height="17" class="foreground"/><use xlink:href="#g41" y="833"/></g></svg>
|
|
43
|
+
<rect class="background" height="100%" width="100%" x="0" y="0"/><defs><g id="g1"><text x="0" textLength="184" font-weight="bold" class="color14"> any-buddy</text></g><g id="g2"><text x="0" textLength="360" class="foreground"> Pick any Claude Code companion pet you want</text></g><g id="g3"><text x="0" textLength="128" font-weight="bold" class="foreground"> All 18 Species</text></g><g id="g4"><text x="0" textLength="640" class="foreground"> ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ </text></g><g id="g5"><text x="0" textLength="80" class="foreground">─ ─ ─ ─</text></g><g id="g6"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="32" font-weight="bold" class="foreground">duck</text><text x="48" textLength="160" class="foreground"> </text><text x="208" textLength="40" font-weight="bold" class="foreground">goose</text><text x="248" textLength="152" class="foreground"> </text><text x="400" textLength="32" font-weight="bold" class="foreground">blob</text><text x="432" textLength="160" class="foreground"> </text></g><g id="g7"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> __ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> (·> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> .----. </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g8"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> <(· )___ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> || </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g9"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( ._> </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> _(__)_ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g10"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> `--´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> ^^^^ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `----´ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g11"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="24" font-weight="bold" class="foreground">cat</text><text x="40" textLength="168" class="foreground"> </text><text x="208" textLength="48" font-weight="bold" class="foreground">dragon</text><text x="256" textLength="144" class="foreground"> </text><text x="400" textLength="56" font-weight="bold" class="foreground">octopus</text><text x="456" textLength="136" class="foreground"> </text></g><g id="g12"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> /\_/\ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g13"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( · ·) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> /^\ /^\ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> .----. </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g14"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( ω ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> < · · > </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g15"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> (")_(") </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> ( ~~ ) </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> (______) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g16"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> `-vvvv-´ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> /\/\/\/\ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g17"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="24" font-weight="bold" class="foreground">owl</text><text x="40" textLength="168" class="foreground"> </text><text x="208" textLength="56" font-weight="bold" class="foreground">penguin</text><text x="264" textLength="136" class="foreground"> </text><text x="400" textLength="48" font-weight="bold" class="foreground">turtle</text><text x="448" textLength="144" class="foreground"> </text></g><g id="g18"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> /\ /\ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> _,--._ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g19"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ((·)(·)) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> .---. </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g20"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( >< ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> (·>·) </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> /[______]\ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g21"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> `----´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> /( )\ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `` `` </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g22"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> `---´ </text><text x="304" textLength="288" class="foreground"> </text></g><g id="g23"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="40" font-weight="bold" class="foreground">snail</text><text x="56" textLength="152" class="foreground"> </text><text x="208" textLength="40" font-weight="bold" class="foreground">ghost</text><text x="248" textLength="152" class="foreground"> </text><text x="400" textLength="56" font-weight="bold" class="foreground">axolotl</text><text x="456" textLength="136" class="foreground"> </text></g><g id="g24"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> · .--. </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6">}~(______)~{</text><text x="496" textLength="96" class="foreground"> </text></g><g id="g25"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> \ ( @ ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> .----. </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6">}~(· .. ·)~{</text><text x="496" textLength="96" class="foreground"> </text></g><g id="g26"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> \_`--´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> / · · \ </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( .--. ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g27"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ~~~~~~~ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> | | </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> (_/ \_) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g28"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> ~`~``~`~ </text><text x="304" textLength="288" class="foreground"> </text></g><g id="g29"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="64" font-weight="bold" class="foreground">capybara</text><text x="80" textLength="128" class="foreground"> </text><text x="208" textLength="48" font-weight="bold" class="foreground">cactus</text><text x="256" textLength="144" class="foreground"> </text><text x="400" textLength="40" font-weight="bold" class="foreground">robot</text><text x="440" textLength="152" class="foreground"> </text></g><g id="g30"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g31"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> n______n </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> n ____ n </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> .[||]. </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g32"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( · · ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> | |· ·| | </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> [ · · ] </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g33"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( oo ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> |_| |_| </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> [ ==== ] </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g34"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> `------´ </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> | | </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `------´ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g35"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="48" font-weight="bold" class="foreground">rabbit</text><text x="64" textLength="144" class="foreground"> </text><text x="208" textLength="64" font-weight="bold" class="foreground">mushroom</text><text x="272" textLength="128" class="foreground"> </text><text x="400" textLength="40" font-weight="bold" class="foreground">chonk</text><text x="440" textLength="152" class="foreground"> </text></g><g id="g36"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> (\__/) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> /\ /\ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g37"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> ( · · ) </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> .-o-OO-o-. </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( · · ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g38"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> =( .. )= </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6">(__________)</text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> ( .. ) </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g39"><text x="0" textLength="16" class="foreground"> </text><text x="16" textLength="96" class="color6"> (")__(") </text><text x="112" textLength="96" class="foreground"> </text><text x="208" textLength="96" class="color6"> |· ·| </text><text x="304" textLength="96" class="foreground"> </text><text x="400" textLength="96" class="color6"> `------´ </text><text x="496" textLength="96" class="foreground"> </text></g><g id="g40"><text x="0" textLength="208" class="foreground"> </text><text x="208" textLength="96" class="color6"> |____| </text><text x="304" textLength="288" class="foreground"> </text></g><g id="g41"><text x="0" textLength="8" class="background"> </text></g></defs><g><use xlink:href="#g1" y="17"/><use xlink:href="#g2" y="34"/><use xlink:href="#g3" y="68"/><use xlink:href="#g4" y="85"/><use xlink:href="#g5" y="102"/><use xlink:href="#g6" y="136"/><use xlink:href="#g7" y="153"/><use xlink:href="#g8" y="170"/><use xlink:href="#g9" y="187"/><use xlink:href="#g10" y="204"/><use xlink:href="#g11" y="238"/><use xlink:href="#g12" y="255"/><use xlink:href="#g13" y="272"/><use xlink:href="#g14" y="289"/><use xlink:href="#g15" y="306"/><use xlink:href="#g16" y="323"/><use xlink:href="#g17" y="357"/><use xlink:href="#g18" y="374"/><use xlink:href="#g19" y="391"/><use xlink:href="#g20" y="408"/><use xlink:href="#g21" y="425"/><use xlink:href="#g22" y="442"/><use xlink:href="#g23" y="476"/><use xlink:href="#g24" y="493"/><use xlink:href="#g25" y="510"/><use xlink:href="#g26" y="527"/><use xlink:href="#g27" y="544"/><use xlink:href="#g28" y="561"/><use xlink:href="#g29" y="595"/><use xlink:href="#g30" y="612"/><use xlink:href="#g31" y="629"/><use xlink:href="#g32" y="646"/><use xlink:href="#g33" y="663"/><use xlink:href="#g34" y="680"/><use xlink:href="#g35" y="714"/><use xlink:href="#g36" y="731"/><use xlink:href="#g37" y="748"/><use xlink:href="#g38" y="765"/><use xlink:href="#g39" y="782"/><use xlink:href="#g40" y="799"/><rect x="0" y="833" width="8" height="17" class="foreground"/><use xlink:href="#g41" y="833"/></g></svg>
|
|
44
44
|
</svg>
|
package/bin/cli.mjs
CHANGED
|
@@ -70,18 +70,18 @@ try {
|
|
|
70
70
|
|
|
71
71
|
function printHelp() {
|
|
72
72
|
console.log(`
|
|
73
|
-
|
|
73
|
+
any-buddy — Pick any Claude Code companion pet
|
|
74
74
|
|
|
75
75
|
Usage:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
76
|
+
any-buddy Interactive pet picker
|
|
77
|
+
any-buddy --species dragon Skip species prompt
|
|
78
|
+
any-buddy -s cat -r legendary -e ✦ -t wizard -y
|
|
79
|
+
Fully non-interactive
|
|
80
|
+
any-buddy preview Browse pets without applying
|
|
81
|
+
any-buddy current Show your current pet
|
|
82
|
+
any-buddy apply [--silent] Re-apply saved pet after update
|
|
83
|
+
any-buddy restore Restore original pet
|
|
84
|
+
any-buddy rehatch Delete companion to re-hatch via /buddy
|
|
85
85
|
|
|
86
86
|
Options:
|
|
87
87
|
-s, --species <name> Species (duck, goose, blob, cat, dragon, octopus, owl,
|
package/lib/config.mjs
CHANGED
|
@@ -133,7 +133,7 @@ export function saveClaudeSettings(settings) {
|
|
|
133
133
|
writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n');
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
const HOOK_COMMAND = '
|
|
136
|
+
const HOOK_COMMAND = 'any-buddy apply --silent';
|
|
137
137
|
|
|
138
138
|
// Claude Code hooks schema: { "SessionStart": [{ "matcher": "", "hooks": [{ "type": "command", "command": "..." }] }] }
|
|
139
139
|
function findHookEntry(matchers) {
|
package/lib/tui.mjs
CHANGED
|
@@ -44,7 +44,7 @@ function colorize(text, rarity) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function banner() {
|
|
47
|
-
console.log(chalk.bold('\n
|
|
47
|
+
console.log(chalk.bold('\n any-buddy'));
|
|
48
48
|
console.log(chalk.dim(' Pick any Claude Code companion pet\n'));
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -114,7 +114,7 @@ export async function runPreview(flags = {}) {
|
|
|
114
114
|
export async function runApply({ silent = false } = {}) {
|
|
115
115
|
const config = loadPetConfig();
|
|
116
116
|
if (!config?.salt) {
|
|
117
|
-
if (!silent) console.error('No saved pet config. Run
|
|
117
|
+
if (!silent) console.error('No saved pet config. Run any-buddy first.');
|
|
118
118
|
process.exit(silent ? 0 : 1);
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -373,7 +373,7 @@ export async function runInteractive(flags = {}) {
|
|
|
373
373
|
hat: desired.hat,
|
|
374
374
|
appliedAt: new Date().toISOString(),
|
|
375
375
|
});
|
|
376
|
-
console.log(chalk.dim(' Salt saved. Apply later with:
|
|
376
|
+
console.log(chalk.dim(' Salt saved. Apply later with: any-buddy apply\n'));
|
|
377
377
|
return;
|
|
378
378
|
}
|
|
379
379
|
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "any-buddy",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"description": "Pick any Claude Code companion pet you want",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"any-buddy": "./bin/cli.mjs"
|
|
8
|
-
"claude-code-any-buddy": "./bin/cli.mjs"
|
|
7
|
+
"any-buddy": "./bin/cli.mjs"
|
|
9
8
|
},
|
|
10
9
|
"files": [
|
|
11
10
|
"bin/",
|