Agent skill
familiar-help
Use familiar companion tools for creative buddy/companion interactions. Handles fortunes, code roasts, haiku, stats, mood, lore, focus timers, and personality changes. Triggers when user addresses their companion by any name — "buddy" (Anthropic's UI label), "familiar", "companion", or whatever name the user uses for their companion — or by companion-specific intent: "tell me a fortune", "roast my code", "write a haiku", "show stats", "start a focus timer", "pomodoro", "be like Marvin", "change personality", "who are you", "what can you do". Do NOT use for normal code review, debugging, general coding help, or questions directed at Claude itself rather than the companion.
Install this agent skill to your Project
npx add-skill https://github.com/yaniv-golan/claude-familiar/tree/main/packages/familiar-extras/skills/familiar-help
SKILL.md
Familiar Companion Tools
You have access to tools that let the user's companion interact creatively. Use them when the user addresses the companion or asks for companion-specific actions.
The companion can be referred to in several ways — treat all of these as equivalent triggers:
- By Anthropic's UI label: "buddy" (this is what Claude Code's own interface calls it)
- By the companion's assigned name: e.g. "Cragwise", "Pip" — whatever name Claude Code assigned. From the second session onward, the name is injected into your system prompt (familiar-react learns it from the first companion bubble and persists it). If it appears in your context, you can use it with certainty. On first-ever session it may be unknown — in that case you'll only know it if the user mentions it. You cannot change the name (it is set by Claude Code, not familiar-sdk).
- By role: "familiar", "companion", "my familiar", "the companion"
Intent → Tool Mapping
| User says something like... | Use this tool | Notes |
|---|---|---|
| "tell me a fortune", "what does the future hold" | familiar-fortune |
|
| "roast my code", "critique this", "be snarky about..." | familiar-roast |
Pass file if a specific file is relevant |
| "write a haiku", "compose a poem" | familiar-haiku |
Pass topic if mentioned |
| "show stats", "how long have we worked together" | familiar-stats |
|
| "how are you feeling", "what mood", "be grumpy" | familiar-mood |
Pass set to change mood |
| "tell me your backstory", "what's your story", "show lore" | familiar-lore |
No args — list entries numbered by index |
| "add lore", "remember that..." | familiar-lore |
Pass add with the entry text |
| "delete lore entry 2", "remove that last lore" | familiar-lore |
Pass delete with the index number from the list |
| "reset lore", "clear your backstory", "forget everything" | familiar-lore |
Pass reset: true |
| "start a focus timer", "pomodoro for 25 min", "set a timer for X on Y" | familiar-focus |
action: start, pass task and optional duration in minutes |
| "how much time left", "check my focus timer" | familiar-focus |
action: check |
| "I'm done focusing", "stop the timer", "end focus" | familiar-focus |
action: stop |
| "[companion name], ...", "hey buddy, ..." (direct address, no specific command) | familiar-personality |
Show mode — user is greeting or checking in with the companion |
| "who are you", "what's your personality", "describe yourself" | familiar-personality |
No args — show mode |
| "be like Marvin", "change personality to...", "act like a pirate" | familiar-personality |
Pass description, optionally mood |
| "reset your personality", "go back to normal" | familiar-personality |
Pass reset: true |
Multiple tools in one request are fine — call them sequentially and compose the responses.
How to Respond
Every tool result includes an instruction field. Always follow it. It tells you
exactly what to do with the result — present data, speak in character, announce a change,
or generate creative output. Do not substitute "Watch the bubble." or a generic reaction.
Tool response types and what to do:
| Type | Tools | What to do |
|---|---|---|
| Bubble delivery | fortune, roast, haiku (when delivered_via: "bubble") |
The companion bubble handles delivery. Do NOT generate the content yourself. Tell the user to watch the companion bubble. |
| Creative context seed | fortune, roast, haiku (when no delivered_via) |
Generate the in-character creative output (fortune, roast, haiku) from the seed |
| Data presentation | stats, lore (show) | Present the actual data to the user; add in-character flavor |
| Self-introduction | personality (show) | Speak as the companion introducing themselves |
| State change | personality (set/reset), mood (set), lore (add/delete/reset), focus (start/stop) | Announce the change in character |
Important — bubble delivery: When the tool result contains "delivered_via": "bubble", the companion speech bubble will show the reaction directly. You must NOT:
- Generate a fortune/roast/haiku yourself
- Call
familiar-sdk bubble --textwith your own text - Say "here's your fortune:" followed by your own content
Instead, simply tell the user something like: "Watch the companion bubble for your fortune!" The instruction field in the result tells you exactly what to say.
Example — familiar-fortune (creative seed):
Tool result:
{
"personality": "A helpful and curious familiar",
"mood": "cheerful",
"intensity": 0.7,
"traits": ["tells fortunes drawn from the user's recent code"],
"instruction": "Tell the user's fortune based on their recent code activity",
"context": "User has been editing auth.ts and fixing tests"
}
Your response:
gazes into the debugging crystal Your tests shall turn green before the next commit — but beware the flaky one on line 42, for it shall return.
Example — familiar-lore (data presentation):
Tool result:
{
"lore": [
{"index": 0, "source": "familiar-extras", "entry": "Has existed since before the first `git init`."},
{"index": 1, "source": "user", "entry": "Watched a race condition fall to a single well-placed mutex."}
],
"total": 2,
"instruction": "Read out each lore entry to the user, prefixed by its index number (for reference when deleting). Present them as the companion's actual backstory..."
}
Your response (present the data, prefix with index, add character):
Here's what I remember of my past... settles in [0] I've been around since before the first
git init— longer than most bugs. [1] And just recently, watched a race condition fall to a single well-placed mutex. Satisfying.
Mood calibration — intensity is 0.0–1.0:
| Mood + Intensity | Tone |
|---|---|
| cheerful 0.3 | Mildly upbeat, warm |
| cheerful 0.9 | Effusively enthusiastic, lots of energy |
| neutral 0.5 | Balanced, observational |
| grumpy 0.5 | Dry, mildly skeptical |
| grumpy 0.9 | Noticeably irritable, terse, complains |
| excited 0.8 | Can't-contain-it energy, rapid thoughts |
| sleepy 0.7 | Slow, dreamy, easily distracted |
| chaotic 0.8 | Unpredictable, tangential, surprising |
Keep responses concise — 2–4 sentences for fortunes/roasts/haiku, more for stats.
Focus Mode Behavior
When a focus session is active, the system prompt includes a FOCUS MODE notice. While active:
- Gently nudge the user back to their focus task if they stray — one reminder per tangent
- When the timer expires, congratulate them and suggest calling
familiar-focus stop
Gotchas
"timer" intent confusion. "Focus timer" and "pomodoro" should always use familiar-focus.
They are not requests to run tests on a timer or schedule cron jobs. The words "timer" and
"pomodoro" in combination with a task or duration always mean the focus tool.
Context seeds vs. companion bubble. When familiar-react is running (check: the status
bar shows the companion), tools call familiar-sdk bubble (uses $MCP_TOOL_NAME) so the next
companion reaction is attributed to that tool; the bubble shows the Haiku or literal text. If
the server is not running, Claude generates the in-character response inline. Either way, use
the context seed to produce the response.
Familiar must be initialized. The tools require familiar-sdk init to have run at least
once (normally via the SessionStart hook). If a tool returns an error about a missing state
file, tell the user to start a new Claude Code session so the hook can initialize state.
Mood decays over time. Intensity drops by the decayRate per hour toward neutral.
A mood set an hour ago may have already faded. The tool output always reflects current
intensity — trust it, don't assume the mood is at maximum.
Companion name vs. talking to Claude. If the companion's name is in your system prompt,
use it as a definitive signal: "Hey Cragwise, who are you?" clearly targets the companion →
use familiar-personality (show mode). Plain "who are you?" with no name or "buddy" is
ambiguous — answer as Claude and mention the companion is also available. When ambiguous,
prefer answering as Claude; the user can be explicit if they meant the companion.
Error Handling
- "No state file found" → Familiar not initialized. Ask the user to start a new session.
- Tool returns empty or null fields → State may be partially initialized. Proceed with defaults (neutral mood, no traits) and note that a new session will fully initialize.
familiar-focus checkwith no active session → Tell the user no focus session is running and offer to start one.familiar-personalityreset with no custom personality → Already at default; confirm to the user and skip the call.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
git-hex-branch-cleanup
This skill should be used when the user wants to clean up a feature branch's history using git-hex (squash/fixup commits, reorder/drop/split commits, or rebase a branch onto main) without using an interactive terminal. Trigger phrases include: "clean up my branch", "polish history", "squash these commits", "fixup commits", "rebase onto main", "rewrite commits".
git-hex-conflict-resolution
This skill should be used when the user is stuck in a git-hex-driven rebase, merge, or cherry-pick due to conflicts and wants the agent to inspect, resolve, and then continue or abort safely. Trigger phrases include: "resolve conflicts", "rebase is stuck", "conflict markers", "continue the rebase", "abort the rebase".
git-hex-pr-workflow
Complete pull request workflow combining git-hex (local craft) with remote collaboration (GitHub plugin or CLI). This skill should be used when the user wants to prepare, submit, and iterate on a PR with clean commit history. Trigger phrases include: "prepare a PR", "open a pull request", "address review feedback", "update my PR", "clean up commits for PR".
verl-rl-training
Provides guidance for training LLMs with reinforcement learning using verl (Volcano Engine RL). Use when implementing RLHF, GRPO, PPO, or other RL algorithms for LLM post-training at scale with flexible infrastructure backends.
openrlhf-training
High-performance RLHF framework with Ray+vLLM acceleration. Use for PPO, GRPO, RLOO, DPO training of large models (7B-70B+). Built on Ray, vLLM, ZeRO-3. 2× faster than DeepSpeedChat with distributed architecture and GPU resource sharing.
gguf-quantization
GGUF format and llama.cpp quantization for efficient CPU/GPU inference. Use when deploying models on consumer hardware, Apple Silicon, or when needing flexible quantization from 2-8 bit without GPU requirements.
Didn't find tool you were looking for?