Language mascots: - 11 mascots across common/uncommon/rare/legendary tiers (Pythia, Asynclet, Bashling, Goroutling, Typeling, Vueling, Querion, Ferrix, Perlius, Cobolithon, Lispling) - Full evolution chains for all mascots (16 evolutions total in catalog) - Spawn via PostToolUse after language affinity milestones; probability scales with affinity level; only fires with no active encounter - Passive strength reduction: each Write/Edit in the mascot's language ticks current_strength down (floor 5%, triggers re-announcement) - Mascot-aware catch formula: base_rate + affinity_bonus (6% per level) + weakness_bonus + soft element gating via existing player_elements - Language-themed weakening menu and catch failure messages in CLI - Caught mascots stored as type="caught_language_mascot"; assignable as buddy - UserPromptSubmit uses distinct 🦎 announcement with language context Roster display: - New "Language Mascots" section between core buddymon and caught bug monsters - Language affinity table marks languages with spawnable mascots (🦎) - Discovery counter now tracks both bug monsters and mascots separately Veritarch (third evolution): - Debuglin → Verifex (Lv.100) → Veritarch (Lv.200) - TYPE FORTRESS / INVARIANT PROOF / ZERO FLAKE challenges - xp_multiplier 1.7, catch_rate 0.90 Script-first architecture: - All game logic extracted to lib/cli.py (~850 lines); SKILL.md is now a ~55-line relay — 88% token reduction per invocation - CLI emits [INPUT_NEEDED] and [HAIKU_NEEDED] markers for interactive flows - PostToolUse hook re-emits CLI stdout as additionalContext for inline display Session XP fix: - statusline.sh and session state now read from sessions/<pgrp>.json (per-window) with fallback to active.json; fixes stale XP in statusline
2.5 KiB
| name | description | argument-hint | allowed-tools | |||
|---|---|---|---|---|---|---|
| buddymon | Buddymon companion game — status, roster, encounters, and session management |
|
|
/buddymon
Run the CLI:
python3 ~/.claude/buddymon/cli.py $ARGUMENTS
The PostToolUse hook automatically surfaces the output as an inline system-reminder — no need to echo it yourself. After running, respond with one short line of acknowledgement at most (e.g. "Done." or nothing). Do not repeat the output.
Interactive Markers
[INPUT_NEEDED: <prompt>]
Ask the user the exact prompt. Then re-run with their answer appended:
fight+ user says "yes" →python3 ~/.claude/buddymon/cli.py fight --confirmedevolve+ user says "y" →python3 ~/.claude/buddymon/cli.py evolve --confirmstart+ user says "2" →python3 ~/.claude/buddymon/cli.py start 2assign <name>+ user says "accept" →python3 ~/.claude/buddymon/cli.py assign <name> --acceptassign <name>+ user says "reroll" →python3 ~/.claude/buddymon/cli.py assign <name> --rerollstatusline+ user says "y" → delete existing statusLine key from settings.json, re-runstatuslinecatch+ user gives weakening input → see catch flow below
[HAIKU_NEEDED: <json>]
Spawn a Haiku subagent to parse ambiguous natural language. Pass the JSON task as the prompt, get a single-line response, then re-run the CLI with the result.
Example — fuzzy match resolution:
Agent(model="haiku", prompt=<json>.instruction + "\n\nRespond with ONLY the matching name.")
→ re-run: python3 ~/.claude/buddymon/cli.py assign <haiku_result> --resolved <haiku_result>
Catch Flow
When [INPUT_NEEDED] fires during catch, the user describes which weakening actions they've done.
If input is numeric (e.g. "1 3"): calculate inline — 1→-20, 2→-20, 3→-10. Sum reductions. Re-run:
python3 ~/.claude/buddymon/cli.py catch --strength <100 - total_reduction>
If input is natural language (e.g. "wrote a failing test and documented it"): spawn Haiku:
Agent(model="haiku", prompt="""
The user described their catch weakening actions: "<user input>"
Actions available: 1=failing_test (-20%), 2=isolation (-20%), 3=comment (-10%)
Reply with ONLY valid JSON: {"actions": [<numbers>], "reduction": <total_percent>}
""")
Parse Haiku's JSON → compute remaining strength → re-run:
python3 ~/.claude/buddymon/cli.py catch --strength <100 - reduction>