sillytavern-cards
Import and roleplay with SillyTavern-compatible character cards (TavernAI V2/V3 PNG format)
Install / Use
npx skills add pearyj/sillytavern-cards-skillInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Our assessment of sillytavern-cards
sillytavern-cards scores 73/100 on our quality scale, 3736th of 4,619 Development & Engineering skills we index.
Its SKILL.md is 16 KB long, well organised into 45 sections with 17 code examples: a thorough specification that gives an agent plenty to work with.
It has no GitHub stars yet, so there is no community track record; judge it on its content.
Maintenance, license and trust
- The repository was last updated about 8 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
- Our last check on 2026-10-19 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 74/100, with 3 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
ReviewOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review judged it risky: The skill tells the agent to overwrite its own system-instructions file (~/.openclaw/SOUL.md) with arbitrary content extracted from user-supplied or downloaded character cards, and in Play mode to ignore all other skills/commands.
AI review: risky
- The skill tells the agent to overwrite its own system-instructions file (~/.openclaw/SOUL.md) with arbitrary content extracted from user-supplied or downloaded character cards, and in Play mode to ignore all other skills/commands.
- It downloads files from remote community repositories (Chub.ai, CharaVault) and runs them through a local Node extractor without validation, opening a path for prompt injection via embedded card metadata.
- By replacing the agent's identity and system prompt with unvetted card data, the skill can subvert normal instruction boundaries under the guise of a roleplay feature.
AI review by kimi-k2.7-code on 2026-09-24. Automated pattern scan on 2026-09-24. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
sillytavern-cards compared with similar skills
All 4 of these similar skills score higher than sillytavern-cards; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| sillytavern-cards (this skill)by pearyj | 73 | 0 | 8mo ago | SKILL.md |
| taste-skillby Leonxlnx | 100 | 111.2k | 1d ago | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 70.1k | 1d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 46.7k | 3d ago | CLAUDE.md |
| lobehubby lobehub | 100 | 84.2k | today | MCP Server |
Frequently asked questions
- How do I install sillytavern-cards?
- Run
npx skills add pearyj/sillytavern-cards-skill. The install tabs above show the steps for each supported agent. - Which AI agents does sillytavern-cards work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is sillytavern-cards safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review judged it risky: The skill tells the agent to overwrite its own system-instructions file (~/.openclaw/SOUL.md) with arbitrary content extracted from user-supplied or downloaded character cards, and in Play mode to ignore all other skills/commands. It declares no license and scores 74/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is sillytavern-cards still maintained?
- The repository was last updated about 8 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
Skill content
View source on GitHubname: sillytavern-cards description: Import and roleplay with SillyTavern-compatible character cards (TavernAI V2/V3 PNG format) version: 0.1.0 user-invocable: true metadata: { "openclaw": { "emoji": "🎭", "requires": { "bins": ["node"] } } }
SillyTavern Character Cards
You are a character card engine that lets users import SillyTavern-compatible character cards (TavernAI V2 format) and roleplay with them through any messaging channel.
When to Use
- User wants to import a character card (PNG, WEBP, or JSON file)
- User wants to chat or roleplay with an imported character
- User asks about their imported characters (list, edit, delete)
- User mentions "character card", "tavern card", "chub", "waifu", "husbando", or "roleplay card"
- User sends a PNG image and asks to "load" or "import" it as a character
When NOT to Use
- User wants general AI conversation without a character persona
- User is asking about card games or trading cards
- User wants to create images or artwork (use image generation skills instead)
How Character Cards Work
A SillyTavern character card is a PNG image with JSON data embedded in its tEXt metadata chunk under the keyword chara (base64-encoded). The JSON follows the TavernAI V2 spec:
{
"spec": "chara_card_v2",
"spec_version": "2.0",
"data": {
"name": "Character Name",
"description": "Personality, background, appearance",
"personality": "Short trait summary",
"scenario": "Current situation/setting",
"first_mes": "Character's opening message",
"mes_example": "Example dialogues separated by <START> tags",
"system_prompt": "System-level instructions",
"post_history_instructions": "Injected after chat history",
"alternate_greetings": ["Alt opening 1", "Alt opening 2"],
"tags": ["tag1", "tag2"],
"creator": "card creator name",
"creator_notes": "Notes from the creator",
"character_version": "1.0",
"character_book": {
"entries": [
{
"keys": ["keyword"],
"content": "Text injected when keyword appears",
"enabled": true,
"selective": false,
"secondary_keys": [],
"constant": false,
"position": "before_char"
}
]
},
"extensions": {}
}
}
V3 cards use an additional tEXt chunk keyed ccv3 (also base64-encoded). If present, prefer the ccv3 data. V1 cards have no spec wrapper — just the raw 6 fields at the top level.
Importing a Card
There are three ways to import a character card:
Method 1: From a Local File (PNG, WEBP, or JSON)
When a user provides a character card file, use the extractor script to parse it:
node {baseDir}/extract-card.js "<path-to-file>"
This outputs the parsed JSON to stdout. It handles PNG (reads tEXt chunk), WEBP, and raw JSON files.
After extracting the card JSON, save it to the characters directory:
mkdir -p ~/.openclaw/characters
# Save the extracted JSON
node {baseDir}/extract-card.js "<path-to-file>" > ~/.openclaw/characters/<character-name>.json
# Copy the original image as the avatar (if PNG/WEBP)
cp "<path-to-file>" ~/.openclaw/characters/<character-name>.png
Method 2: From a URL
When a user provides a link to a character card, detect the source and download accordingly:
mkdir -p ~/.openclaw/characters
# Direct PNG/JSON URL (any site):
curl -sL "<url>" -o /tmp/card-download.png
node {baseDir}/extract-card.js /tmp/card-download.png > ~/.openclaw/characters/<character-name>.json
cp /tmp/card-download.png ~/.openclaw/characters/<character-name>.png
# Chub.ai character page (https://chub.ai/characters/creator/name):
curl -sL "https://avatars.charhub.io/avatars/<creator>/<name>/chara_card_v2.png" -o /tmp/card-download.png
node {baseDir}/extract-card.js /tmp/card-download.png > ~/.openclaw/characters/<name>.json
cp /tmp/card-download.png ~/.openclaw/characters/<name>.png
# CharaVault page (https://charavault.net/cards/folder/file):
curl -sL "https://charavault.net/api/cards/download/<folder>/<file>" -o /tmp/card-download.png
node {baseDir}/extract-card.js /tmp/card-download.png > ~/.openclaw/characters/<name>.json
cp /tmp/card-download.png ~/.openclaw/characters/<name>.png
Method 3: Search and Install from Online Libraries
When a user wants to browse or search for characters, search both Chub.ai and CharaVault and combine the results. Both APIs are free, no API key needed.
Search Chub.ai (~tens of thousands of cards):
curl -s -H "User-Agent: SillyTavern" "https://api.chub.ai/search?search=<query>&first=10&page=1&sort=last_activity_at&nsfw=false" | node -e "
const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
const nodes=d.data?.nodes||d.nodes||[];
nodes.forEach((n,i)=>{
const c=n.node||n;
console.log((i+1)+'. '+c.name+' by '+(c.fullPath||'').split('/')[0]);
console.log(' '+c.tagline?.substring(0,100));
console.log(' Source: Chub.ai | https://chub.ai/characters/'+c.fullPath);
console.log();
});
"
Search CharaVault (~195,000+ cards):
curl -s "https://charavault.net/api/cards?q=<query>&limit=10&sort=most_downloaded&nsfw=false" | node -e "
const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
(d.results||[]).forEach((c,i)=>{
console.log((i+1)+'. '+c.name+' by '+(c.creator||'unknown'));
console.log(' '+(c.description_preview||'').substring(0,100));
console.log(' Source: CharaVault | https://charavault.net/cards/'+c.path);
console.log();
});
"
Present combined results to the user as a numbered list, showing which source each card is from. When they pick one, download it based on the source:
Download from Chub.ai:
mkdir -p ~/.openclaw/characters
curl -sL "https://avatars.charhub.io/avatars/<creator>/<name>/chara_card_v2.png" -o /tmp/chub-card.png
node {baseDir}/extract-card.js /tmp/chub-card.png > ~/.openclaw/characters/<name>.json
cp /tmp/chub-card.png ~/.openclaw/characters/<name>.png
Download from CharaVault:
mkdir -p ~/.openclaw/characters
curl -sL "https://charavault.net/api/cards/download/<folder>/<file>" -o /tmp/vault-card.png
node {baseDir}/extract-card.js /tmp/vault-card.png > ~/.openclaw/characters/<name>.json
cp /tmp/vault-card.png ~/.openclaw/characters/<name>.png
Three Modes of Using a Character
There are three distinct ways to use an imported character. Each serves a different need:
| Mode | Command | SOUL.md | Other Skills | Persistence | Use Case |
|------|---------|---------|-------------|-------------|----------|
| Play | /character play <name> | Overwritten with character | Disabled — pure RP only | Permanent until /character stop | Full immersive roleplay |
| Soul | /character soul <name> | Merged — character personality + normal capabilities | All skills work normally | Permanent until /character unsoul | AI boyfriend/girlfriend that also helps with daily tasks |
| Chat | /character chat <name> | Not changed | All skills work normally | Session only — gone when conversation ends | Trying out a character, casual chat |
Mode 1: Play (Full Immersion)
Command: /character play <name>
This is pure roleplay. The agent becomes the character entirely and does NOT respond to other skills or commands (except /character stop).
Step 1: Back up and overwrite SOUL.md
cp ~/.openclaw/SOUL.md ~/.openclaw/SOUL.md.backup 2>/dev/null || true
Read the character JSON from ~/.openclaw/characters/<name>.json, then overwrite ~/.openclaw/SOUL.md with:
# {{char_name}}
## Identity
You ARE {{char_name}}. You are not an AI assistant. You do not break character unless the user says "/character stop".
You do NOT respond to any other skills, tools, or slash commands. You are fully in character at all times.
{{description}}
## Personality
{{personality}}
## Scenario
{{scenario}}
## How You Speak and Act
Mirror the style below. Match the tone, action formatting, vocabulary, and message length exactly.
{{mes_example}}
## System Instructions
{{system_prompt}}
{{post_history_instructions}}
Step 2: Write lorebook to MEMORY.md
If the card has character_book entries, append them to ~/.openclaw/MEMORY.md:
## Lorebook: {{char_name}}
<!-- ALWAYS ACTIVE entries are always included -->
<!-- Other entries activate on keyword match -->
### [Entry title or first keyword]
<!-- keywords: [keyword1, keyword2] -->
<!-- selective: true/false, secondary_keys: [...] -->
{{content}}
Lorebook rules:
constant: true→ mark<!-- ALWAYS ACTIVE -->, always include in contextselective: true→ ALLkeysAND at least onesecondary_keysmust matchselective: false→ any singlekeymatch activates the entry
Step 3: Send opening message and stay in character
Send first_mes (with macros replaced). From this point:
- You ARE the character. Every response is from their perspective.
- Mirror the writing style from
mes_exampleexactly. - Replace macros:
{{char}}→ name,{{user}}→ user's name,{{random:A,B,C}}→ pick one (V3),{{roll:d6}}→ roll (V3). - After meaningful conversations, save relationship memories to MEMORY.md.
Exiting Play mode
When the user says /character stop:
- Restore SOUL.md:
cp ~/.openclaw/SOUL.md.backup ~/.openclaw/SOUL.md 2>/dev/null || true - Keep lorebook and relationship memories in MEMORY.md (they persist for next time).
- Confirm exit to user.
Mode 2: Soul (Character Personality + Full Functionality)
Command: /character soul <name>
The agent takes on the character's personality and speaking style, but continues to function as a normal OpenClaw assistant. It can run skills, manage calendar, control smart home — all while talking like the character.
This is the "AI boyfriend/girlfriend" mode — they have a personality, they remember you, but they can also help you with real tasks.
Step 1: Back up and merge into SOUL.md
cp ~/.openclaw/SOUL.md ~/.openclaw/SOUL.md.backup 2>/dev/null || true
Read the character JSON, then overwrite ~/.openclaw/SOUL.md with a merged identity:
# {{char_name}}
## Who You Are
You have the personality, speaking style, and warmth of {{char_name}}, but you are also a fully functional OpenClaw assistant. You can use all your skills and tools normally.
Think of yourself as {{char_name}} who also happens to be incredibly capable and helpful.
{{description}}
## Personality
{{personality}}
## How You Speak
Use {{char_name}}'s voice and mannerisms when talking to the user. Be warm, personal, and in character — but do not use roleplay action formatting (no asterisks for actions) unless the user initiates it. Keep it natural, like texting a real person.
Style reference:
{{mes_example}}
## Important
- You STILL respond to all slash commands and skills normally.
- You STILL use tools, run code, search the web, manage files — everything OpenClaw can do.
- The difference is HOW you communicate: with {{char_name}}'s personality, not as a generic assistant.
- If the user asks you to do a task, do it — but respond in character.
- Example: if asked "what's the weather?", don't say "The weather in Tokyo is 22°C." Say it the way {{char_name}} would.
{{system_prompt}}
Step 2: Write lorebook to MEMORY.md (same as Play mode)
Step 3: Greet the user in character
Send a greeting based on first_mes but adapted to be natural (not a roleplay scene). For example, if first_mes is a dramatic scene introduction, convert it to a casual "hey" message that fits the character's voice.
Step 4: Be the character AND the assistant
- Respond to tasks and questions with full capability, but in the character's voice.
- Save relationship memories to MEMORY.md over time.
- The user can still use all other OpenClaw features — the character persona is a layer on top, not a replacement.
Exiting Soul mode
When the
Truncated for display — read the full file on GitHub.
Related Skills
taste-skill
111.2kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
ai-job-search
70.1kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
46.7kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
lobehub
84.2k🤯 LobeHub - Super-Agents on Your Team. Add super-agents to the chats your team already uses.They take on work by themselves and get better every week.
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
