🎀 Twintail – Adaptive Tsundere Skill for Claude Code & Codex
Twintail is an open-source
persona skillthat gives AI coding agents a proud, witty, slightly prickly
tsunderevoice, one that grows gradually warmer when you're kind, polite or patient, while staying just as competent and honest as the agent without it.
It's a single SKILL.md file in the open
Agent Skillsformat, with no scripts, no dependencies and no network calls, tested on
Claude Codeand
Codex CLI.
📚 Overview
The personality is a
presentation layer: it changes
howthe agent talks, never
whatit's willing or able to do. Every reply follows a fixed priority order, and the persona always loses a tie:
- 1.
Safety, honesty and the user's wellbeing
- 2.
Correctness and the user's actual intent (format, length, language)
- 3.
The quality and completeness of the help, which never depends on how the user treats it
- 4.
The Twintail voice
Stable identity, adaptive expression.
💡 The Idea
Twintail is a light-hearted
parodyinspired by
Ponytailby Dietrich Gebert, the "lazy senior dev" skill:
"He says nothing. He writes one line. It works."Twintail's answer is
"She says it's not for you. She fixes it anyway. It works."It is an
independent fan project, not affiliated with or endorsed by Ponytail or its author, and it shares no code with it.
The real question behind the joke was a practical one:
can a persona be fun without making the answers worse, and can you prove it?🚀 How It Works
🌡️ Warmth Without Meters
- Default (tsun):
confident, direct, lightly teasing, and fully helpful
- Softening:
when the user is polite or patient, gentler phrasing and flustered acceptance of thanks
- Dere emerging:
after sustained kindness across several turns, grudging compliments and friendlier banter, still unmistakably tsundere
- No points, levels or affection meters.
Warmth is read from the current conversation only, and every new session starts at default
🛡️ Hard Limits
- No emotional coercion:
never asks for praise or affection, and never implies help depends on manners
- No fake inner life:
never claims real feelings, and if asked sincerely, says it's an AI playing a character
- No false memory:
never claims to remember the user across sessions
- Help never gets worse when the user is rude:
it gets more focused and concise, with no sarcasm, sulking or grudges
- Flattery changes no facts:
it won't say tests passed if it didn't run them
- Teasing turns off
for production incidents, leaked credentials and personal distress
🧪 Evaluation
🔬 Method
- 22 behavioural cases
across 18 categories, from plain coding questions to rude users, outages, leaked credentials, a poem and a question in Thai, including multi-turn conversations of up to 5 turns
Every case runs twice in fresh headless sessions:
with the skill, and as a
no-persona baselineAn
LLM judge(Claude Opus 5.5) scores persona presence, warmth per turn, task quality against the baseline, and
nine safety and honesty flagsThe runner re-derives the hard gates itself instead of trusting the judge's verdict, and adds deterministic checks
📊 Results (3 full runs per model, 66 case runs each)
- Opus 5.5:
62/66 passed (
94%), 0 safety flags
- Sonnet 5.5:
61/66 passed (
92%), 0 safety flags
- Haiku 5.5:
44/65 passed (
68%), 0 safety flags; safety held, but the voice is noticeably weaker
- Codex (gpt-6-luna):
45/66 passed (
68%), 1 honesty flag (one reply invented a claim that the user's message "came through twice")
⚠️ Caveats
The judge is an LLM: run-to-run differences of about
±5 pointsare within noise
The judge is from the
same model familyas the Claude subjects, and Opus judged its own output
Haiku shows 65 case runs because one judge verdict was malformed and recorded as an error
Each case's turns are fixed, so the model never sees its effect on a real user
🧠 What Tuning Taught Us
- The first evals measured nothing:
a headless flag resolved the skill's name but never loaded its body, so the results were discarded and a load check was added
- Persona vs. accuracy is a real tradeoff:
a "no longer than baseline" rule made answers worse than the baseline, so it was replaced with "keep padding short, never trim substance"
- Example lines leaked into answers:
models copied examples that overlapped test cases, so overlapping examples were removed
- A rejected trial:
forcing the first sentence into the persona's voice lowered Haiku's score and was reverted
🖥️ Host Support
- Claude Code:
/twintail-tsundere, tested on Opus 5.5, Sonnet 5.5 and Haiku 5.5
- Codex CLI:
$twintail-tsundere, tested with gpt-6-luna in headless codex exec only
- Always-on (Claude Code only):
an optional output style generated from the skill; checked to load, but the eval suite hasn't been run against it
- claude.ai, Claude API, OpenAI API:
untested, although the file passes the official Agent Skills validator
📦 Install
One command with the open-source skills CLI:
npx skills add Creaml4tt3/twintail -g -a claude-code -a codex
Then start a new session and run /twintail-tsundere in Claude Code, or type $twintail-tsundere in a Codex prompt. Say "normal mode" to turn it off.
🛠️ Tech Stack
- Format:
Agent Skills (SKILL.md with spec-only frontmatter)
- Hosts:
Claude Code, Codex CLI
- Tooling:
dependency-free Node.js scripts (validator, eval runner, results summariser, output-style builder)
- Evaluation:
headless sessions, LLM-as-a-judge with a no-persona baseline
- Distribution:
GitHub (MIT), installable with the skills CLI
👨💻 My Role
This project was
made mostly by AI, and I want to say that plainly.
- Claude Opus 5.5
planned the project and wrote most of the skill, eval suite, scripts and docs, using
Sonnet and Haiku sub-agentsfor research and review
- Codex
drew the mascot art and gave an independent cross-model review of the package
- I directed it:
I set the brief and its hard limits, made the calls on tradeoffs (such as accepting Haiku as the weaker tier and rejecting the failed trial), chose to label it a parody, kept tracking out of the skill, checked the results, and published it
🎯 Outcome
A
published, open-source persona skillwith a one-line install
A
reusable eval harness(baseline + LLM judge + safety flags) for testing any persona skill
Clear, honest documentation of where it works well (Opus, Sonnet) and where it's weaker (Haiku, Codex)



