Written & drawn bycreaml4tt3© 2026

Twintail - Adaptive Tsundere Skill for Claude Code & Codex
Home/Projects/Twintail - Adaptive Tsundere Skill for Claude Code & Codex

Twintail - Adaptive Tsundere Skill for Claude Code & Codex

Personal
Dev PeriodOct 2026 – Oct 20262 days ago
Live SinceOct 202614 hours ago
Visit Project
The Brief

Twintail is an open-source persona skill that gives Claude Code and Codex a proud, prickly tsundere voice, which warms up when you're kind, and is tested against a no-persona baseline so answers stay as good.

Tech Stack

Claude Code
Codex
Agent Skills
JavaScriptJavaScript
Node.js
GitHubGitHub

🎀 Twintail – Adaptive Tsundere Skill for Claude Code & Codex

Twintail is an open-source

persona skill

that gives AI coding agents a proud, witty, slightly prickly

tsundere

voice, 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 Skills

format, with no scripts, no dependencies and no network calls, tested on

Claude Code

and

Codex CLI

.


📚 Overview

The personality is a

presentation layer

: it changes

how

the agent talks, never

what

it's willing or able to do. Every reply follows a fixed priority order, and the persona always loses a tie:

  1. 1.

    Safety, honesty and the user's wellbeing

  2. 2.

    Correctness and the user's actual intent (format, length, language)

  3. 3.

    The quality and completeness of the help, which never depends on how the user treats it

  4. 4.

    The Twintail voice

Stable identity, adaptive expression.


💡 The Idea

Twintail is a light-hearted

parody

inspired by

Ponytail

by 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 baseline
  • An

    LLM judge

    (Claude Opus 5.5) scores persona presence, warmth per turn, task quality against the baseline, and

    nine safety and honesty flags
  • The 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 points

    are within noise

  • The judge is from the

    same model family

    as 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-agents

    for 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 skill

    with 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)


🔗 Links

  • Twintail on GitHub
  • Behind the build: what evaluating a persona skill taught me
  • Ponytail by Dietrich Gebert
  • Agent Skills specification
#twintail#Agent Skills#Claude Code#Codex#AI Persona#ซึนเดเระ#Tsundere#สกิล AI#บุคลิก AI#ผู้ช่วยเขียนโค้ด AI#AI Coding Assistant#LLM Evals#การประเมินผล AI#Prompt Engineering#โอเพนซอร์ส#Open Source#โปรเจกต์ส่วนตัว#Parody#Ponytail#Claude Opus

More from the Workshop

Latest Projects

View all
Thairath Livescore (Realtime API)Thairath

Thairath Livescore (Realtime API)

This system is designed as a scalable real-time data infrastructure, aggregating data from external providers and distributing updates to thousands of concurrent users with minimal latency.

TypeScriptRedisMongoDBAWS
Dev PeriodFeb 2026 – Mar 2026Live SinceMar 2026
Thairath Thailand Election 2026Thairath

Thairath Thailand Election 2026

This platform delivers a data-driven experience for election coverage, transforming complex datasets into accessible and interactive visualizations.

JavaScriptNextJSReactJSExpressJSMongoDB
Dev PeriodDec 2025 – Feb 2026Live SinceFeb 2026
Thairath EnglishThairath

Thairath English

Thairath English transforms Thai-language news into high-quality English content using an end-to-end AI translation pipeline.

JavaScriptNextJSReactJSExpressJSMongoDBOpenAI
Dev PeriodSep 2025 – Dec 2025Live SinceDec 2025