character-card-skills
Agent skills, 18 original character cards, and calibrated AI-flavor detectors for roleplay card authors — including, as far as we know, the first English-native card-authoring skill in the agent-skills ecosystem (calibrated on what English communities actually publish, not translated from another language's rules). Skills follow the open SKILL.md convention — they run in Claude Code, Cursor, Codex, Gemini CLI, and natively inside Foreverse. Cards import into SillyTavern (v2 JSON + v3 PNG included) and any chara_card_v2/v3 frontend.
Why this repo exists, in one experiment: we asked LLM judges to tell human-written cards from AI-written ones, blind. They agreed with each other 86% of the time — and were right 12% of the time, rating the human cards as AI and the AI cards as human. LLM judges take detail density, status-bar layouts and polished sentences as proof of humanity. Real readers take the same things as proof of a machine. So we stopped asking models whether prose sounds human, wrote down what real readers flagged, and turned it into a rule-based discipline plus a deterministic detector. Full writeup: docs/blind-review-experiment.md · blog version · release post.
What's inside
| Path | What | Language |
|---|---|---|
skills/character-card-author/ |
The Chinese-native authoring skill: four-axis positioning → 47 genre playbooks → five opening paradigms, nine liveliness techniques, lorebook patterns, output-rhythm laws, card-copy prose discipline. Plus 18 cover-art style guides and 7 annotated example cards | zh (EN mirror: SKILL.en.md) |
skills/character-card-author-en/ |
The English-native authoring skill. Same method skeleton, every calibration re-derived from Western evidence: a 30-card sample of top-starred SFW community cards (greeting median 178.5 words, 0/30 rich HTML), the rentry guide canon, platform docs. Adds English-only disciplines: the no-user-actions red line, AnyPOV pronoun engineering, permanent-token budgets, a 95-phrase English slop lexicon, naming-slop bans | en |
skills/chat-quality-doctor/ |
The triage skill for "I chatted and it feels off": symptom table → diagnosis → scoped surgery → verification, with 8 per-model RP symptom profiles and a slop lexicon | zh (EN mirror: SKILL.en.md) |
cards/zh/ · cards/en/ |
12 Chinese + 6 English original cards, every one shipped as card.md source + *.v2.json + PNG-embedded card + cover |
zh + en |
tools/ |
score_card.py (8-dimension scorer, zh calibration) · score_card_en.py (8-dimension scorer, English calibration, with red-line auto-fails) · ai_flavor_check.py (standalone flavor scan) · card_md_to_st.py (md → v2 JSON + v3 PNG, zero deps) · blind_review/ (the judge harness) |
Python 3.9+, no third-party deps |
docs/ |
The experiment · before/after surgery record · full matrices · card.md format spec | en + zh |
Use the cards
Grab any PNG under cards/ and import it — SillyTavern (character import), Foreverse (character page → import), or anything that reads chara/ccv3 PNG chunks. The .v2.json next to it is the same card for frontends that prefer JSON. Lorebooks, alternate greetings and example dialogues are embedded.
Use the skills
git clone https://github.com/foreverse-app/character-card-skills
# Claude Code
cp -r character-card-skills/skills/* ~/.claude/skills/
# Cursor (project-level)
cp -r character-card-skills/skills/* your-project/.cursor/skills/
# Codex
cp -r character-card-skills/skills/* ~/.codex/skills/
Then ask your agent to "write a character card" (写一张角色卡) — it will route through the four-axis positioning, read the matching genre playbook, and self-check against the prose discipline. For English-audience cards, ask for "an English character card" and the agent should read character-card-author-en instead. In the Foreverse Android app the same skills are built in, wired to native scoring, cover generation, one-tap import and community publishing.
Two authoring skills, two calibrations — not a translation pair. The Chinese skill's rules come from Chinese community data (its SKILL.en.md is a translated mirror for agents that prefer English instructions). The English skill's rules come from English community data, and several of them contradict the Chinese ones where the communities genuinely differ: greeting bands (150–350 words vs 800–2,600 characters), HTML status panels (a Western anti-pattern vs a Chinese art form), lorebook density, even the em-dash (an AI tell in Chinese prose; ordinary furniture in English RP prose — our calibration data showed 8 of 30 top human English cards exceed the density that would flag a Chinese card). The first three English cards in cards/en/ (Rosalind, Caleb, The Lighthouse) were written before that re-derivation, with the Chinese methodology on an English surface; they stay in the repo as an honest contrast group. The three newer ones (Edmund, Frankie, Redline) were written by the English-native skill.
Run the tools
python3 tools/score_card.py cards/zh/*/card.md # 8-dimension gate (zh), <75 → exit 1
python3 tools/score_card_en.py cards/en/frankie-doyle/card.md # 8-dimension gate (en) + red lines
python3 tools/ai_flavor_check.py some-prose.txt # standalone flavor scan
python3 tools/card_md_to_st.py cards/zh/peiyu/card.md --slug peiyu \
--avatar cards/zh/peiyu/cover.png --outdir out/ # md → v2 JSON + v3 PNG
python3 tools/tests/test_ai_flavor_gold.py # detector gold regression
The English scorer adds five red lines that fail a card regardless of score: user actions/dialogue written into the greeting, NSFW lexicon on an SFW card, naming-slop character names, clinical/therapy claims, and a permanent-token estimate over 2,000.
CI scores every Chinese card with the zh gate and the three English-native cards with the en gate (≥75 + red lines), runs the detector's gold regression, and round-trips every card through the converter on each push.
The discipline, in one before/after
A card of ours scored 91.2/100 on structure. A real reader called it AI on sight and named the sentences. That gap became the "card-copy prose discipline" (seven quota-checked flaw patterns). One pair from the surgery record:
Before (AI-flavored): 大二摔栏摔的,她说那是「学费」。 — hurdling injury from sophomore year; "tuition," she calls it. Every fact gets capped with a witty quote. Uniform cleverness is the fingerprint.
After: 大二跨栏的时候摔过一次,锁骨下面留了道浅疤。 — fell hurdling in sophomore year; a faint scar under the collarbone. Facts laid flat. The wit budget is one per card.
The full seven-pattern record with detector evidence: docs/before-after.md. The counterintuitive part: fixing AI flavor is mostly a job of deletion — cut the cleverness, keep the idle details. The detector had to be de-tuned the same way (isolated stock phrases like 一丝凉意 are human; only pattern-level hits count). Detection philosophy and its honest limits: docs/blind-review-experiment.md.
Coverage
47 genre playbooks (15 female-oriented / 9 male-oriented / 18 universal / 5 form-layer), each with audience analysis, archetype library, opening paradigms, a 30-turn pacing table, lorebook templates, cover-art recipe and a genre-specific 10+ item checklist. 18 cover-art style guides. 8 per-model symptom profiles with confidence labels (observed / community / hypothesis / stale — stale profiles are barred from quoting exact numbers, a rule the doctor skill enforces on itself). Full tables: docs/matrix.md.
Card gallery

| Card | Genre | Opening paradigm | Score |
|---|---|---|---|
| 宋知夏 Song Zhixia | campus / sprinter senior, injured & lying about it | event-scene | 88.9 |
| 江迟野 Jiang Chiye | campus / delinquent with a sketchbook | event-scene | 91.8 |
| 霍聿深 Huo Yushen | office / boss with a locked drawer | event-scene | 92.6 |
| 奈芙尔 Nefer | fantasy / cursed cat-eared alchemist | event-scene | 92.3 |
| 苏念栀 Su Nianzhi | campus / system-quest heroine | event-scene | 91.3 |
| 裴聿 Pei Yu | 古风 / Tang-dynasty magistrate, serial case | event-scene | 93.9 |
| 沈砚 Shen Yan | urban / art-money revenge patron | event-scene | 92.0 |
| 纪闻笙 Ji Wensheng | urban / composer fiancé at 3 a.m. | conflict-drop | 86.2 |
| 唐团团 Tang Tuantuan | slice-of-life / bakery owner at closing time | event-scene | 89.9 |
| 玄净 Xuan Jing | 仙侠 / sword master, three-year discipleship | event-scene | 90.0 |
| 聂小倩 Nie Xiaoqian | 聊斋同人 (public-domain) / ghost at the temple | event-scene | 88.4 |
| 晚孤市 Wangu Market | simulator / dream night-market, multi-NPC | guide-console | 92.7 |
| Edmund Harrower | fantasy / rival chartmakers, one boat, six weeks | event-scene + confrontation | 94.0 (en) |
| Frankie Doyle | modern cozy / 3 a.m. diner, grumpy owner | event-scene | 94.0 (en) |
| Redline Salvage Co. | sci-fi / salvage tug crew, debt and dead ships | world-broadcast | 94.0 (en) |
| Rosalind Vane | fencing instructor, comeback denied | event-scene | contrast group |
| Caleb Moore | garage apprentice / midnight radio host | dual-POV | contrast group |
| The Lighthouse at Grey Hollow | 1897 keeper station, rule-horror world card | world-broadcast | contrast group |
Chinese scores are from tools/score_card.py (calibrated on Chinese community data); English scores are from tools/score_card_en.py (calibrated on Western community data — the two numbers are not comparable to each other). The three contrast-group cards predate the English-native skill and deliberately keep their original form (Chinese methodology, English surface: long greetings, panel instincts, numeric affection ladders); scored today by the en gate they land at 74–85, and the shape of what they lose points on is the whole lesson. Every card passes the anti-AI-flavor full-text scan; English slop control for the new cards additionally runs through the en scorer's 95-phrase lexicon and pattern quotas.
Content note: the genre playbooks cover adult-genre narrative methodology (dark-thriller, power-exchange and similar categories carry their own compliance clauses); the shipped cards themselves are SFW — tension on the page, nothing explicit.
About Foreverse
We build Foreverse, a free Android app where novel reading, plot branching and character chat share one bookshelf — import a TXT/EPUB, fork the plot from any paragraph, chat spoiler-free with the cast, or hand a whole book to the on-shelf agent and get character cards drafted from it. Deep SillyTavern compatibility (PNG/JSON/charx, lorebooks, presets, regex, group chat) and BYOK for 60+ providers. The app itself is a free closed-source product; this repo is the open, standalone part and works without it. These skills started as the app's built-in agent skills; open-sourcing them is our way of paying the card-making community back — the statistical baselines came from reading what that community publishes. Google Play · foreverse.app · @foreverseapp
Contributing & license
Issues and PRs welcome — cards must pass tools/score_card.py (≥75, anti-AI-flavor 5/5) and the genre checklist of their category; the CI gate enforces the first half automatically. Code is MIT; skills, cards and docs are CC BY 4.0 (attribute to this repo or foreverse.app). All cards are original; all cover art is AI-generated by us and labeled as such in each card's creator notes.
中文说明见 README.zh.md。
No comments yet
Be the first to share your take.