Agnai stores characters as JSON, but with a schema that diverges from Tavern cards in three notable ways: the persona is an object rather than a plain string, the greeting is stored under greeting, and example dialogue lives under sampleChat. Those differences are exactly where naive conversions go wrong, so knowing them makes migration reliable.
How Agnai structures a character
An Agnai character JSON includes familiar top-level fields like name, description, and scenario. The divergence is in three places. First, persona is not a string — it is an object with a kind (such as "attributes" or "text") and an attributes map holding lists of traits. Second, the opening message is greeting, not first_mes. Third, example dialogue is sampleChat, not mes_example.
This design reflects Agnai's flexibility — the attribute-based persona supports different persona "formats" the app can render in various ways. But it means a converter that only looks for Tavern key names will miss the greeting and examples, and will treat the persona object as opaque.
Why a careless conversion produces a half-empty card
If you export an Agnai character and run it through a tool that expects Tavern field names, you can end up with a card that has the right name and scenario but a blank greeting and no example dialogue — because those tools looked for first_mes and mes_example and found greeting and sampleChat instead. The persona object may also be dumped in as raw structured data rather than readable text. The character imports, but hollowed out.
Converting Agnai characters the right way
A correct migration maps Agnai's fields onto the standard model: greeting becomes the greeting, sampleChat becomes the example dialogue, and the object persona is flattened into readable personality text by joining its attribute lists. Once that mapping is done, the character can be written into any target format — a V2 PNG for SillyTavern, JSON for Voxta, or a V3 CharX. When you convert, verify the greeting and examples specifically, since those are the fields most likely to be affected by schema differences.
Migrating to Agnai
Going the other direction is more forgiving. When you convert a Tavern card to Agnai, the standard fields map onto Agnai's structure, and the persona can be provided as text that Agnai accepts. Agnai's willingness to read a plain persona makes importing into it straightforward compared with exporting out of it.
Agnai's strengths worth keeping in mind
Agnai is notable for being genuinely multi-user and multi-backend: it supports shared chats and a range of AI services, and it can run self-hosted. That flexibility is why some creators keep characters there. The trade-off is the schema divergence covered above — worth the small extra care at conversion time.
Understanding Agnai's persona formats
Agnai historically supported several persona "formats," and the object-based persona reflects that. An "attributes" persona holds named lists — for example a personality list and a speech list — that Agnai can render into the prompt in different styles. A "text" persona is closer to the Tavern approach: a single descriptive block. Knowing which kind your character uses tells you how a converter should flatten it: attribute lists get joined into readable sentences, while a text persona passes through almost directly.
This is also why round-tripping an Agnai character through a Tavern-only tool and back can subtly change it: the structured attributes get flattened to text on the way out, and there is no clean way to reconstruct the original lists on the way back. If you plan to keep a character in Agnai long-term, keep the original Agnai JSON as your master copy and treat conversions as one-way exports for use in other apps.
Practical migration checklist
To move an Agnai character out cleanly: export the character JSON; convert it with a tool that understands greeting, sampleChat, and object personas; open the result in your destination app; and confirm four things — name, personality text (not raw attributes), greeting, and example dialogue. If any field is blank, the conversion likely missed an Agnai-specific key, and re-running through a normalizer that handles the Agnai schema will fix it. Our Universal Converter and the conversion guide cover the full process.
