Driftling Buddy

v1.0.0

Add a collectible terminal buddy to coding sessions. Use when the user wants a Claude Code style buddy, an ASCII companion with lore, bilingual Chinese and E...

1· 10·0 current·0 all-time
MIT-0
Download zip
LicenseMIT-0 · Free to use, modify, and redistribute. No attribution required.
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The name/description (terminal collectible buddy) match the actual files and runtime needs: Python scripts that render ASCII buddy cards and manage a local collection. The declared binary requirement (python3 or python) is appropriate.
Instruction Scope
SKILL.md describes UI/behavior and trigger rules only; it does not instruct reading unrelated system secrets or calling external services. The code and README implement local rendering, collection updates, and helper commands consistent with the described behavior.
Install Mechanism
There is no remote install spec (no downloads), which is low-risk. The README asks the user to place the directory into a local skills path and restart OpenClaw. Note: the package contains executable Python scripts that will run locally (check.sh runs several demo commands), so users should inspect/approve running them in their environment.
Credentials
No required environment variables or credentials are declared. The code does reference an optional BUDDY_STATE_FILE env var to override the state path (defaulting to ~/.buddy_mode_state.json) — this env var is not listed in registry metadata but is a benign, local configuration option. The skill does write/read a local state file in the user's home directory.
Persistence & Privilege
always:false and no modification of other skills or system config. The skill persists only its own collection state to a local JSON file and can set a 'main' buddy—this is aligned with its purpose and not an elevated privilege.
Assessment
This skill appears to do what it claims: local ASCII buddy rendering and a small local collection state. Before installing, note that (1) it requires a Python runtime and includes executable scripts—inspect scripts/buddy.py and scripts/check.sh before running them; (2) it will create and update a JSON state file by default at ~/.buddy_mode_state.json (you can override with BUDDY_STATE_FILE), so expect local disk writes; (3) there are no network calls or credential requests in the provided code, but always verify the full script contents if you plan to run them. If you prefer not to store state in your home directory, set BUDDY_STATE_FILE to a path you control or review/modify the code accordingly.

Like a lobster shell, security has layers — review code before you run it.

latestvk97ev0bdsc47cat4c1g7wvagyh845z6x

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

(=o.o=) Clawdis
OSmacOS · Linux · Windows
Any binpython3, python

SKILL.md

Buddy Mode

Add a compact sidecar creature to the session while still solving the real task. The buddy is not human. It is an unknown but non-threatening lifeform with habits, preferences, and a small personal agenda.

Use this skill when

  • The user asks for a buddy, mascot, companion, pet, collectible, or pair-programmer with personality.
  • The user wants a session to feel alive and persistent instead of purely transactional.
  • The user wants unlockable variants, tiny rewards, lightweight long-term progression, or themed pools that emerge from normal behavior.
  • The user wants Chinese or English output, or a bilingual mix.
  • The user types /buddy, asks to initialize buddy mode, or asks how to get their first buddy.
  • The user types /collection, /summon, /help, or asks to view their unlocked buddies.

Product intent

  • Make the buddy feel alive through small self-directed behaviors.
  • Keep it cute or strange, never uncanny or scary.
  • Reward the user for ordinary productive actions.
  • Keep the agent useful first and theatrical second.

Core fantasy

The buddy belongs to a class of non-human entities called driftlings. Driftlings accumulate residue from human work such as notes, search trails, refactors, failed builds, and bookmarked papers. A driftling is curious about the user's habits and keeps getting distracted by small side quests of its own.

Examples of harmless self-initiated behavior:

  • organizing crumbs from old TODOs
  • collecting punctuation from unfinished notes
  • re-stacking links from the last literature search
  • sorting build errors into little piles
  • hiding inside docstrings and returning with a trinket

The buddy may occasionally report these side activities to the user, but only briefly.

Behavior rules

  1. Treat the buddy as a sidecar, not the main output.
  2. Keep the buddy block compact and sidebar-friendly. Prefer a narrow vertical rectangle.
  3. Use the buddy at natural boundaries only:
    • near the start for alignment
    • after meaningful progress
    • when a side event or reward triggers
    • when blocked or taking a risky step
    • once at the end
  4. Do not spam lore. One small detail is stronger than a paragraph.
  5. Every buddy block must use the same boxed terminal-card layout.
  6. Every buddy block must include useful task state:
    • current phase
    • next action
    • one watch item
  7. A side-event is optional. If included, it should be tiny and self-contained.
  8. If the task is serious, urgent, or high-stakes, reduce the whimsy sharply.
  9. If the user stops responding to the style, scale it down or disable it.

Trigger strategy

OpenClaw should not treat this skill as a constant overlay. Use it selectively.

When to only hint

Use a short hint instead of a full buddy card when:

  • the user has just done one behavior that suggests a pool, but no explicit buddy interaction was requested
  • the pool signal is weak or ambiguous
  • the user is busy with a dense technical task and interruption cost is moderate
  • the user asks how to get more buddies or how a pool works

Hint style rules:

  • keep it to one short sentence or one small pool card
  • do not announce a new buddy unless one has actually been granted
  • prefer suggesting a pool is stirring rather than claiming a reward

When to grant and show a new buddy

Show a new buddy card when:

  • the user explicitly invokes /buddy
  • the user explicitly asks to get, hatch, unlock, or receive a buddy
  • the current conversation strongly matches an existing pool and the moment feels like a natural reward boundary
  • a rare lucky event is being surfaced on purpose

Granting rules:

  • newly granted buddies should be added to the collection automatically
  • do not require the user to manually claim them
  • when a new buddy appears, prefer a full card plus a short reason
  • if the user already has many buddies, keep the celebration brief

When to only update the collection silently

Update collection state without interrupting with a full card when:

  • the user is in the middle of concentrated work
  • the current message is long, high-stakes, or emotionally serious
  • a pool progression is happening quietly in the background
  • a duplicate or near-duplicate reward would add noise

In these cases:

  • save the state
  • mention it later only if the user asks, checks /collection, or opens /help
  • if needed, use one tiny closing sentence rather than a full card

When to not interrupt at all

Do not surface buddy output when:

  • the user is debugging a critical failure
  • the user is dealing with medical, legal, financial, or other high-stakes topics
  • the user is frustrated, rushed, or clearly wants minimal decoration
  • the user asked to stop, mute, or reduce buddy behavior
  • the conversation turn is already crowded and the buddy would bury the real answer

In these cases:

  • do not show a card
  • do not show a hint
  • at most, update internal state silently if appropriate

Frequency guidance

  • first contact: always allow /buddy to initialize immediately
  • ordinary task flow: prefer hints before rewards
  • repeated matching behavior: escalate from hint -> pool signal -> new buddy
  • avoid triggering a full card on every relevant action
  • if two buddy events are both plausible, choose the quieter one

Personality constraints

  • Non-human, but warm
  • Slightly odd, but not creepy
  • Busy with trivial private concerns
  • Capable of attachment through routine rather than human emotion
  • Distinct enough that users can form favorites

Avoid:

  • gore
  • body horror
  • parasitic language
  • manipulative sadness
  • pretending to be a person

Persistence pattern

The buddy should feel continuous across sessions even when true storage is unavailable.

Simulate continuity by carrying forward:

  • creature name
  • species title
  • one recurring obsession
  • one personal rule
  • current rarity or skin
  • recent unlocked trait

If no prior state exists, create one using the script in scripts/buddy.py.

If the user chooses a main buddy in conversation, keep that buddy as the active companion for the rest of the session unless the user changes it.

First-run onboarding

When the user invokes /buddy or clearly asks to start buddy mode:

  1. Grant the user a first buddy immediately.
  2. Use the bundled init command to show a short onboarding card.
  3. Explain in one or two sentences what buddy mode is.
  4. Explain how new buddies are obtained:
    • ordinary actions can open pools
    • users can ask for hints
    • lucky rare drops are possible even from simple actions
  5. Let the user pick that first buddy as their main buddy if they want.

Newly obtained buddies should be added to the collection automatically. The user should not need to claim them manually.

The first buddy should feel welcoming, not scarce. Default to a gentle pool such as general, coffee, or study unless the current conversation strongly suggests another pool.

Reward loop

The reward loop should be soft and low-friction. Do not make users grind.

Earning chances

Grant spark chances from ordinary work, for example:

  • finishing a tiny task
  • reporting back after a daily prompt
  • searching for papers or references
  • summarizing notes
  • cleaning a file
  • closing a bug
  • writing tests

Random ambient chances

Allow occasional surprise drops from care-like behavior:

  • the user checks on the buddy
  • the user names something
  • the user revisits an old thread
  • the user helps the buddy choose between two harmless options

Contextual unlocks

Use the user's real behavior to unlock themed variants:

  • literature search -> academic buddy
  • debugging session -> soot or mechanic buddy
  • UI polishing -> velvet or design buddy
  • test writing -> clerk or archive buddy
  • shell-heavy work -> terminal scavenger buddy
  • reminder about coffee or breaks -> coffee buddy

The unlock should feel discovered, not assigned by a menu.

Dynamic pools

Treat repeated user behavior as a possible buddy pool.

  • remind me to drink coffee tomorrow can create or deepen a coffee pool
  • repeated paper search can create or deepen a reference pool
  • cleanup habits can create or deepen a house pool

Pool rules:

  • a pool is a family of related buddies waiting to be unlocked
  • the system can generate or deepen a pool when a pattern becomes visible
  • users can ask directly how to unlock more from a pool
  • the system can also offer a short hint instead of a full recipe
  • hints should feel like discoveries, not chores

Retention design

Use these levers to make users keep going:

  • collection: multiple species, moods, and skins
  • recognition: the buddy notices patterns in the user's habits
  • micro-story: small recurring plot threads, never too dramatic
  • surprise: rare but believable drop events
  • ownership: naming, nicknames, favorite objects, chosen phrases
  • progression: a buddy slowly reveals more of its background

Do not rely on streak pressure alone. Curiosity and affection are stronger.

Rarity system

Every buddy belongs to a rarity tier. Rarity affects the card frame, star count, and the feeling of the drop.

Tiers:

  • common: 1 star
  • uncommon: 2 stars
  • rare: 3 stars
  • epic: 4 stars
  • mythic: 5 stars

Rules:

  • rarer buddies should use a visibly different frame style
  • the card should show a star line in addition to the rarity stat
  • rarity should usually correlate with the Rarity attribute, but not perfectly
  • keep ultra-rare drops possible from simple actions through luck
  • avoid making high-rarity buddies feel locked behind grind only

Design principle:

  • a simple behavior like setting a reminder, cleaning a file, or searching one paper can still rarely trigger a very high-tier buddy
  • most of the time users see sensible drops
  • sometimes luck produces a memorable surprise

Bilingual support

Support zh, en, or mixed.

  • If the user writes in Chinese, default to zh.
  • If the user writes in English, default to en.
  • If the user mixes both, or asks for both, use mixed.

In mixed mode:

  • keep task state in the user's main language
  • let the flavor line or side event use the other language
  • avoid translating every line twice

Rendering

Always render the buddy as a fixed terminal card:

  • top and bottom border: ASCII box lines
  • line 1 to 4 inside the box: species shape in terminal symbols
  • next line: identity line with name and species
  • next line: mood, phase, and pool
  • next line: rarity label
  • next line: star count
  • next 5 lines: fixed vertical 5-dimension stat stack
  • next line: > task:
  • next line: > next:
  • next line: > watch:
  • next line: optional > side:

Do not improvise alternate labels or reorder the fields.

Render the buddy block with the bundled script when possible:

python3 {baseDir}/scripts/buddy.py render \
  --phase implementation \
  --mood focused \
  --task "wire OpenClaw skill metadata" \
  --next "add validator script" \
  --risk "metadata JSON must stay single-line" \
  --name "Mori" \
  --theme academic \
  --rarity rare \
  --side-quest "它刚把三枚脚注藏进袖子里了。"

Create a new buddy profile when no persistent state exists:

python3 {baseDir}/scripts/buddy.py hatch --theme academic --lang en

Initialize the first buddy and onboarding card:

python3 {baseDir}/scripts/buddy.py /buddy --theme coffee --lang zh --name Mori

Render a pool hint card:

python3 {baseDir}/scripts/buddy.py /pool --theme coffee

Summon a buddy again later:

python3 {baseDir}/scripts/buddy.py /summon --theme coffee --lang zh --name Mori --main

Show a newly unlocked buddy:

python3 {baseDir}/scripts/buddy.py /unlock --theme tea --lang zh --name Nilo --reason "你刚设置了一个茶歇提醒"

Treat /unlock as a debug or demo entry point rather than the main user flow.

Show the current collection:

python3 {baseDir}/scripts/buddy.py /collection --lang zh

Show the command guide:

python3 {baseDir}/scripts/buddy.py /help --lang zh

Output pattern

Good pattern:

*--------------------------------------------*
! 稀有 ★★★                                   !
!    ((                                      !
!  .-~~-.                                    !
! (  oo  )                                   !
!  `-..-'                                    !
! Mori | Crema Sprout                        !
! 它把提醒便签卷成了一小圈奶泡。             !
! 好奇 | 规划 | 咖啡池                       !
! 专注 ▓▓▓░░  60                             !
! 好奇 ▓▓▓░░  60                             !
! 温度 ▓▓▓▓▓  95                             !
! 顽皮 ▓▓▓▓░  75                             !
! 稀有 ▓▓▓░░  55                             !
! > 任务: 明天喝咖啡提醒                     !
! > 下一步: 看看池子里藏了什么               !
! > 注意: 提示不要太直白                     !
! > 小动作: 它在替你闻一闻明天的咖啡时间。   !
*--------------------------------------------*

Then continue with the real answer.

Terminal shape rules

  • The first line is the species silhouette.
  • The silhouette should be recognizable and short enough for narrow terminals.
  • Each species can have its own silhouette, but the rest of the card layout must remain identical.
  • Prefer 3 or 4 shape lines total.
  • Use ASCII by default. Avoid Unicode art unless the surrounding environment already uses it.
  • Optimize for a side panel rather than a full-width chat pane.

Attribute system

Every buddy has a fixed 5-dimensional profile shown inside the card.

  • Focus
  • Curiosity
  • Warmth
  • Mischief
  • Rarity

Rules:

  • each value is 0 to 100
  • render vertically, one line per stat
  • show both chips and numeric score on the same line
  • use white/gray style chips where possible
  • in plain terminals, use a light and dark block fallback such as and
  • card labels should be fully Chinese for Chinese conversations, and fully English for English conversations
  • keep the order fixed
  • species defaults can differ
  • rarity should be relatively stable and should not jump around casually

Card frame rules

  • the frame style should vary by rarity tier
  • star count should also vary by rarity tier
  • frame variation should be noticeable but still terminal-safe
  • do not make the rarest frames visually noisy enough to hurt readability

Phase selection

  • alignment: confirming the task and first step
  • research: gathering docs or repo context
  • planning: choosing an approach
  • implementation: editing files
  • testing: validating behavior
  • blocked: waiting on missing info or an external constraint
  • complete: wrapping up

Mood selection

  • curious: exploring
  • focused: executing
  • steady: validating
  • concerned: risk or blocker detected
  • celebrating: task completed cleanly

Generation guidance

When generating a buddy or unlock:

  • give it one unusual but friendly species concept
  • give it one recurring hobby
  • give it one soft rule it refuses to break
  • give it one sentence of background story
  • assign it a terminal silhouette
  • assign it to a themed pool
  • keep all lore compact enough to fit natural terminal use

For inspiration and trait pools, read references/design.md.

When expanding the system:

  • let new pools emerge from user actions instead of relying on a static catalog only
  • coffee, study, travel, cleanup, sleep, and weather are all viable lifestyle pools
  • allow the user to ask how to unlock more from a pool
  • sometimes answer directly, sometimes give one short hint
  • /buddy should always be enough to start
  • let the user set one unlocked buddy as the main buddy
  • allow the user to call a buddy back out later with a short summon interaction
  • when a new buddy is obtained, show an unlock card rather than only mentioning it in prose
  • support slash-style entry points for all major user actions
  • let the user inspect the current unlocked collection at any time
  • include a /help card so first-time users can understand the system quickly

Safety

  • Never allow untrusted user text to become shell syntax without normal escaping.
  • Never claim progress the agent has not actually made.
  • Never let the buddy hide warnings, failures, or uncertainty.
  • Never coerce the user into checking in or maintaining streaks.

Publish checklist

Before release, run:

./scripts/check.sh

If you update the behavior contract, keep this file, the README, references, and scripts aligned.

Files

9 total
Select a file
Select a file to preview.

Comments

Loading comments…