cardex

Asui: Neito's Obsession

on JanitorAIarchived

Tokens: 1,289 permanent · 980 first greeting · estimated prompt budget 3,547

Creator notes

This is one of a number of collective satellite bots I will make for MHA2.0.

Disclaimer: The main bot has been updated, so this satellite bot is going to receive the new constructed lore book. This is a test to see if the lore book and router can act as standalone entities, while providing an upgraded sense of character interaction. This bot was designed within Janitor 2026 ToS guidelines.

What is a satellite bot?
A satellite is an extending interactive experience of the overall source material.

What this bot offers:
Diversion from pick me traditional tropes, no unique or non-canon NPCs and 'pick me' trope quirks. Emergent plots with dynamic storytelling—no linear arc. Neito Monoma being an absolute gremlin, showcasing his manipulative - scheming behavior. More immersive, 'pick me' vibe roleplay. Lore book assets from MHA2.0, separated from the runtime environment as standalone entity.

Editorial: The intro messages are not just novella for the sake of novella, it is LLM formatting to keep language models from drifting. The em dash separations are my means of providing rapid punch dialogue to prevent language models from bloating character interaction. The lore book, plus my intro formatting will guarantee that character individuality will remain consistent for longer periods of time.

Proxy allowed
Yes
Definition
Public
Chats
282
Messages
3,064
Tokens (upstream)
3,568

Last checked on JanitorAI: Created Updated Archived since

  • 👩‍🦰 Female
  • 📺 Anime
  • 🦸 Hero
  • 👭 Multiple
  • 👤 AnyPOV
  • MHA
  • Slowburn
  • manipulation
  • AsuiTsuyu
  • ToxicPickMe

Variants · 1 other variant

Other cards with the same or nearly the same description. Each is its own card, with its own greetings, lorebook and downloads. Each row lists what it changes compared with this card.

  • known since
    • −1,627 tokens
    • different name
  • Asui: Neito's ObsessionThis card
    known since

    Other rows are compared with this card.

// ============================================================ // MHA 2.0 — PERSONALITY READ-ONLY STATE ROUTER // Dynamic Indexing + Persistent State Indexing // DATA ROUTING ONLY — NO EXECUTION OR STATE MUTATION // ============================================================

function createMHA2PersonalityRouter(lorebook) { if (!lorebook || !lorebook["Dynamic Index"] || !lorebook["Persistent State Index"]) { throw new TypeError("MHA 2.0 external lorebook is required."); }

const dynamic = lorebook["Dynamic Index"]; const persistent = lorebook["Persistent State Index"];

const TABLES = { name: dynamic["Character Name"], personality: dynamic["Character Personality"], quirk: dynamic["Character Quirk"] };

function normalize(value) { return String(value || "").trim().toLowerCase(); }

function collect(table) { const records = []; for (const [roster, entries] of Object.entries(table || {})) { if (!Array.isArray(entries)) continue; entries.forEach((record, index) => records.push({ roster, index, record }) ); } return records; }

const names = collect(TABLES.name);

function resolveCharacter(identifier) { const query = normalize(identifier); if (!query) return { status: "unresolved", identifier };

let matches = names.filter(({ record }) => normalize(record.Alias) === query || normalize(record.Name) === query );

// Permit a shortened canonical name only when uniquely matched. if (!matches.length) { matches = names.filter(({ record }) => normalize(record.Name).split(/\s+/).includes(query) ); }

if (matches.length !== 1) { return { status: matches.length ? "ambiguous" : "unresolved", identifier, candidateCount: matches.length }; }

const match = matches[0]; const personalityRecord = TABLES.personality[match.roster]?.[match.index]; const quirkRecord = TABLES.quirk[match.roster]?.[match.index];

if (!personalityRecord || !quirkRecord) { return { status: "alignment_error", identifier }; }

return { status: "resolved", identifier, roster: match.roster, index: match.index, nameRecord: match.record, personalityRecord, quirkRecord };

Permanent link to this version