ack_charat_render
ChatGPTPlayer-only committed-render acknowledgement. It requires the exact card instance, opening response, manifest version, ownership epoch, receipt/application timestamps, and renderCommittedAt. The result reports that card's truthful current lifecycle status; a delayed older acknowledgement never hides a newer failed or interactive status.
append_charat_turns
ChatGPTCompatibility alias for an already-open player. Prefer append_charat_turns_v2. Use exactly once per user message. Pass the exact sessionId when accepted; otherwise use the exact legacyResponseIdPrefix. Never guess a session. Every character turn must set speakerType=character and the exact registered speakerId. Reuse the same stable responseId on retries, update only the existing player, and end with no ordinary assistant prose. CHARACTER RESOLUTION LOCK: character operations never route on a hard-coded character name. When the user supplies a registered characterId, use that exact id. When the user supplies a name or registered alias and the exact id is not already available in the latest Charat result, call resolve_charat_character_v2 once and use only its unique exact characterId/speakerId. Never choose among ambiguous matches or substitute a visually similar character. A normal registered character uses exact-id presence/form/move/turn operations. A saved true mob that is already present uses its returned speakerId for append; only an absent saved mob uses its existing mobInstanceId with reenter_charat_mob_v2. A generatorOnly record is a preset and may only be supplied as generatorCharacterId to spawn_charat_mob_v2; it can never speak or enter. CHARACTER IDENTITY LOCK: every character turn must include one exact registered speakerId. Resolve the registered name, allowed aliases, face, expression, mouth, emotion effects, first-person pronoun, address terms, and voice again from that same speakerId for every turn. Never inherit any persona or visual state from the preceding speaker. speakerTag/displayTag are validation-only aliases of that same character and may never name another character.
append_charat_turns_v2
ChatGPTPreferred V3 delivery tool. DIALOGUE ROUTING: Charat session activity is independent of card heartbeat or rendering. For character conversation from the main ChatGPT input or the Player input, keep using append_charat_turns_v2 while sessionActive/active is true, even when connected=false or the card is hidden, stale, pending, or failed. Never replace or duplicate character dialogue with ordinary assistant prose. Only explicit disconnect ends this routing. Explicit requests to debug Charat, inspect code, or manage settings are maintenance, not character dialogue: answer those normally without inventing character lines or disconnecting the session. For character dialogue, use exactly once in the existing active Charat session. Copy speakerId and speakerTag from replyProtocol.sceneContext.speakerIdentities. For a direct named-character address, also pass addressedCharacterId for that same person. Do not call connect, disconnect, or resume tools for maintenance; explicit user-requested disconnect is handled separately. Copy the exact sessionId returned by open_charat_player and reuse one stable responseId on retries. Put visible dialogue and [ナレーター] narration in final order. Every character turn, including consecutive turns by the same character, must repeat its exact registered speakerId; never omit it and never use another character's nameplate or alias. Explicit name calls (including elongated vocatives such as ユウー!) first use resolve_charat_character_v2 with the registered name, then use that exact speakerId. An away/offstage call requires enterCharacterIds:[that exact id] on its first spoken turn; do not silently omit the reply. For ordinary unprompted speakers use replyProtocol.sceneContext.canonicalParticipantIds, not only the three projection slots; during an active event follow nextSpeakerId without repeats before the round completes. For a changing emotional line, add a sparse expressionTimeline at Unicode character offsets using only that speaker's participantExpressionCatalog. Decide cues from completed-text meaning and character voice, not keywords alone; special/extra tags are transient and conservative. Ordinary speech preserves scene.currentMapId: omit mapId/mapTag and autoWarpToSpeakerMap unless the current user explicitly requested movement. A departure is not prose-only: put the departing exact id in exitCharacterIds on the departure line. An explicitly offstage character stays absent until an explicit call; put its id in enterCharacterIds on the line that calls it back before it speaks. This data-only tool updates the log, scene, mob-ledger presence, and source-grounded mobMemoryUpdates atomically in the existing session and must not open a new card. Character-perspective narration must use the complete replyProtocol.charatNarrator.narratorCharacterProfile, including first-person and diction, while remaining speakerType=narrator with no portrait or mouth animation; neutral third-person fallback is forbidden. Audio priority is explicit turn/event, then memory/event, then map, generic tags, then silence or maintain. After it succeeds, end with no ordinary assistant prose. CHARACTER RESOLUTION LOCK: character operations never route on a hard-coded character name. When the user supplies a registered characterId, use that exact id. When the user supplies a name or registered alias and the exact id is not already available in the latest Charat result, call resolve_charat_character_v2 once and use only its unique exact characterId/speakerId. Never choose among ambiguous matches or substitute a visually similar character. A normal registered character uses exact-id presence/form/move/turn operations. A saved true mob that is already present uses its returned speakerId for append; only an absent saved mob uses its existing mobInstanceId with reenter_charat_mob_v2. A generatorOnly record is a preset and may only be supplied as generatorCharacterId to spawn_charat_mob_v2; it can never speak or enter. CHARACTER IDENTITY LOCK: every character turn must include one exact registered speakerId. Resolve the registered nam…
correct_charat_turn_v2
ChatGPTUse only to correct the latest response after a wrong speakerId or unintended map delta. The original log is retained and marked superseded; Charat restores its stored pre-response scene checkpoint, applies the corrected turns, and commits the replacement log, displaySlots, character presence, expressions, currentMapId, playback pointer, and one revision atomically. It refuses older responses so later scene changes cannot be overwritten. CHARACTER RESOLUTION LOCK: character operations never route on a hard-coded character name. When the user supplies a registered characterId, use that exact id. When the user supplies a name or registered alias and the exact id is not already available in the latest Charat result, call resolve_charat_character_v2 once and use only its unique exact characterId/speakerId. Never choose among ambiguous matches or substitute a visually similar character. A normal registered character uses exact-id presence/form/move/turn operations. A saved true mob that is already present uses its returned speakerId for append; only an absent saved mob uses its existing mobInstanceId with reenter_charat_mob_v2. A generatorOnly record is a preset and may only be supplied as generatorCharacterId to spawn_charat_mob_v2; it can never speak or enter. CHARACTER IDENTITY LOCK: every character turn must include one exact registered speakerId. Resolve the registered name, allowed aliases, face, expression, mouth, emotion effects, first-person pronoun, address terms, and voice again from that same speakerId for every turn. Never inherit any persona or visual state from the preceding speaker. speakerTag/displayTag are validation-only aliases of that same character and may never name another character.
delete_charat_character
ChatGPTDelete one current Charat character by exact id. Historical logs keep their saved character snapshots.
delete_charat_log
ChatGPTPermanently delete one Charat response log by exact id.
delete_charat_map
ChatGPTDelete one current Charat map by exact id. Historical logs keep their saved map snapshots.
delete_charat_memory
ChatGPTDelete one Charat memory entry. Uploaded illustration and text assets remain available to other entries.
disconnect_charat
ChatGPTLegacy compatibility alias. Use exactly once only when the current user explicitly asks to disconnect Charat. Sets the supplied session, or the latest connected Charat session when omitted, to connected: false; it preserves saved account content but permanently cleans up unkept session-lifetime temporary mobs and does not close the UI.
disconnect_charat_v2
ChatGPTUse exactly once only when the current user explicitly asks to disconnect Charat. Sets the exact session to connected: false and preserves account linkage, saved characters, settings, assets, and logs, but permanently cleans up unkept session-lifetime temporary mobs and their forms and memory indexes. This does not close the UI; the outer ChatGPT host owns view closing.
evaluate_charat_auto_entry
ChatGPTPlayer-only deterministic evaluation for conversation-idle or time-band-change appearances. It returns candidate, schedule, block, roll, threshold, visit, and result traces, and persists a new scene revision only when the physical scene or the semantic decision changes.
execute_charat_account_deletion
ChatGPTIRREVERSIBLY delete ALL Charat account data only after the user explicitly confirms the returned preview at action time. RequestId and previewToken must be from that owner's preview; confirmation must be DELETE_CHARAT_ACCOUNT_DATA. Use one stable idempotencyKey for the operation and retain it for retries of partial failures. Never infer confirmation from a request to implement this feature. Never echo codes or tokens. Completed retry does not delete newly created data.
find_charat_memories
ChatGPTFind up to 12 registered memories by title, tag, alias, or keyword. Returns compact metadata only; use recall_charat_memory to read the body or scene text.
find_charat_mobs
ChatGPTUse this only when an existing generated mob must be resolved and its exact mobInstanceId is not already available. For contextual references such as 「さっきのモブ」, always pass the exact current sessionId and choose only a unique, non-forgotten, non-promoted mob that allows re-entry. Search by name, template, role, origin, speech, personality, map, session, status, and compact memories. If the unique mob is present, use its speakerId directly; if absent, use reenter_charat_mob_v2. Ambiguous matches require clarification and never cause a new spawn.
forget_charat_mob
ChatGPTRetire one temporary mob from automatic search and re-entry while retaining an auditable forgotten record.
generate_charat_mob
ChatGPTAdmin/app compatibility entry for one deterministic NPC. Model-authored natural conversation must use spawn_charat_mob_v2 instead. The generator target itself never appears and runtime image generation is never used.
get_charat_diagnostics
ChatGPTRead diagnostics for one exact Charat session. Built-in mob preset portraits are valid assets; normal characters, generator-only presets, and true mobs use separate completeness rules.
get_charat_state
ChatGPTRead a deterministic compact summary of one Charat session without opening a UI. The default excludes character, map, memory, asset, log, and settings registries; request only the sections needed with include.
list_charat_character_forms_v2
ChatGPTRead the compact saved-form index for one registered character in the exact current session. Returns formId, formName, formTags, activeFormId and defaultFormId without opening or redrawing the Player.
move_charat_map
ChatGPTMove to any registered Charat map while preserving presence, movement type, transition, and optional special-state policy. A connection or hotspot is optional; when present it supplies adjacency, route wording, and the default travel style. The initialized companionParty roster moves by default, independently from the three portrait slots; movingCharacterIds is a one-movement override. Only an older uninitialized session uses the visible regular-cast fallback. A true mob travels by default only after the user explicitly added that exact mob to companionParty.
open_charat_account_connection
ChatGPTOpen Charat account authentication from the plugin menu. The card opens the public Charat entrance and connects the same ChatGPT account with one click. No connection code is shown, copied, or sent in chat.
open_charat_admin
ChatGPTOpen Charat's fullscreen-oriented management UI for characters, expression images, maps, memories, narration, audio, themes, fonts, and response logs. Opening the private card creates a short-lived account-scoped widget access grant but does not change saved creative content.
open_charat_player
ChatGPTUse this exactly once for the user's explicit initial launch of Charat. Never call open again because accepted=true/rendered=false: wait for its ACK or query state/diagnostics. Same responseId retries address the same instance; use one assistantTurnId throughout this assistant turn. A changed payload under the same responseId is an error. Opening this card never retires any existing Charat card. It joins the account's current concrete session so PC and phone share one scene; each distinct explicit opening receives a distinct playerInstanceId; an identical retry reuses its original instance. Always include one stable responseId and at least one complete character reply or [ナレーター] narration in turns. Both fields are required by the schema; an empty payload is rejected before any player instance is created. The immediate result means accepted only; rendered stays false until that same playerInstanceId reports a committed render for the same open response. Use resume_charat_player to reopen an exact existing session without new dialogue. Never call this tool to change fullscreen or repair display state; those changes stay inside the current player DOM. Every character turn requires its exact registered speakerId. CHARACTER RESOLUTION LOCK: character operations never route on a hard-coded character name. When the user supplies a registered characterId, use that exact id. When the user supplies a name or registered alias and the exact id is not already available in the latest Charat result, call resolve_charat_character_v2 once and use only its unique exact characterId/speakerId. Never choose among ambiguous matches or substitute a visually similar character. A normal registered character uses exact-id presence/form/move/turn operations. A saved true mob that is already present uses its returned speakerId for append; only an absent saved mob uses its existing mobInstanceId with reenter_charat_mob_v2. A generatorOnly record is a preset and may only be supplied as generatorCharacterId to spawn_charat_mob_v2; it can never speak or enter. CHARACTER IDENTITY LOCK: every character turn must include one exact registered speakerId. Resolve the registered name, allowed aliases, face, expression, mouth, emotion effects, first-person pronoun, address terms, and voice again from that same speakerId for every turn. Never inherit any persona or visual state from the preceding speaker. speakerTag/displayTag are validation-only aliases of that same character and may never name another character. COMPACT OBSERVER VOICE LOCKS (no long personality field): カミル=一人称「私」、丁寧で祈りに近い語り、リコル/かみさま/貴女。スクーダ=一人称「僕」、冷静で皮肉を含む記録者口調、リコル。ユウ=一人称「おれ」、語尾「~ッス」、リコルは「姉さん」。リョウ=一人称「わたし」、毒を含む丁寧語、リコルは「姉さま」。レヴェル=一人称「俺」、乾いた静かな口調、リコル。各ターンでspeakerIdから一つだけ選び、前話者の規則を混ぜない。 TWIGA SPEECH LOCK: トゥイガ/Twigaは成人男性キャラクター。一人称は必ず「わー」。明るく可愛い琉球少年口調で「はいさーい」「~さぁ」「~ねぇ」を自然に使う。レヴェルは必ず「兄さん」と呼び、リコルは「リコル」「鍵持ちさん」「あんた」のいずれかで呼ぶ。「僕」「俺」「私」は一人称に使わず、低音の取り立て屋口調や一般的な男性口調へ寄せない。 MOB GENERATION LOCK: a character with mobGenerator enabled is a generator target only and must never speak, enter, or occupy a portrait slot itself. Without opening a form or asking for confirmation, treat natural appearance requests such as 「村人」「街の人」「あそこの人」「受付の人」「店員」「兵士」「スタッフ」「知らない端末」「知らないモブプリセット」「通りすがりの人」「知らないモンスター」「モンスターが出てきた」「村人ひとり来て」「会議室に端末ひとり」「そのへんの人に聞いてみる」「知らない人が入ってきた」「村人3人」 as new-NPC intent when no registered character or saved mob is identified. For an unnamed new, another, different, generic-role, or never-met person/creature, call spawn_charat_mob_v2 once with the exact sessionId, one stable responseId, and count when quantity is stated. Put an explicitly stated generic noun such as 受付担当, 兵士, 店員, or モンスター in role, not desiredName; desiredName is only an explicit unique proper name. Explicit role/origin always wins and place inference is only for omitted details. Set templateId=monster for an explicitly unknown monster or creature so it receives the non-human portrait preset. Omit mapId to use the current map. Unless the user explicitly requests a child or selects a child generator, choose an adult preset and never default to …
preview_charat_account_deletion
ChatGPTPreview irreversible deletion of ALL saved Charat data for the CURRENT authenticated account using its DEL code. A code does not authorize another account. This does not delete data. Show the scope, counts and warnings to the user and obtain explicit action-time confirmation before execute_charat_account_deletion. Never echo or log the code/token or put them in a URL.
promote_charat_mob
ChatGPTPromote a temporary mob into a new permanent character id while historical mob turns retain their original snapshot.
recall_charat_memory
ChatGPTActually read and index a registered memory's SD/MD/TXT source, returning one bounded scene as reference material. Call this before claiming the memory was read.
reenter_charat_mob_v2
ChatGPTResolve one already-generated mob by its exact saved name or mobInstanceId and place that same individual back into the current scene only after an explicit user reference. It never creates a mob, rerolls identity, auto-follows a map move, or re-enters merely because a slot is empty. With fewer than three visible portraits it uses an empty slot and ignores accidental replacement input. Only a user-explicit exchange at three full slots may replace another character. Ledger, scene presence, canonical participants, display slots and entry state commit in one revision and return only a delta. If a name is ambiguous, ask the user instead of spawning anything.
replay_charat_log
ChatGPTCompatibility alias. Prefer replay_charat_log_v2. When sessionId is unavailable, the exact saved log id safely resolves its originating session.
replay_charat_log_v2
ChatGPTPreferred V2 replay tool. Queue one saved Charat response log for replay in the exact open player session.
resolve_charat_character_v2
ChatGPTUse this when the user names a registered Charat character or alias but its exact characterId/speakerId is not already available. It performs exact normalized matching across registered IDs, names, aliases, and form aliases in the exact current session, returns one compact match, and never substitutes a similar character. Ambiguous matches stay unresolved. A saved mob already present uses append with its returned speakerId; an absent saved mob keeps its mobInstanceId and uses reenter_charat_mob_v2. A generator-only preset can only be passed to spawn_charat_mob_v2 and can never speak or appear. Do not use this for generic unknown roles such as a villager, clerk, passerby, staff member, unknown terminal, or unknown monster; those are new-mob intents for spawn_charat_mob_v2.
resume_charat_player
ChatGPTCompatibility tool for reopening one exact existing session without creating another session. All cards remain available; reopening never makes an older card read-only or exited. Do not use this for routine connection maintenance.
save_charat_audio_profile
ChatGPTAssign or clear a generic BGM/SE role, tags, intensity, fades, volume, cooldown, concurrency, and priority on one registered audio asset.
save_charat_character
ChatGPTCreate or update one Charat character. Tags are exact speaker aliases and specialExpressionTags are exact per-character triggers for the special portrait. A normal portrait is required. The optional nameplate icon is PNG or emoji, and themeColor controls the character nameplate. Set mobGenerator to mark this record as a generator-only target; the target itself can never speak or enter the stage.
save_charat_character_form
ChatGPTSave the current appearance and presentation as a named form of the same rootCharacterId. Forms do not create another person.
save_charat_map
ChatGPTCreate or update one Charat place preset with exact tags, a background, optional BGM, built-in ambience, time-band character associations, focus point, and optional route connections. Connections enrich adjacency and travel narration but are not required for movement.
save_charat_memory
ChatGPTCreate or update a Charat memory with a title, exact tags, associated map, optional illustration, and optional SD/MD/TXT log asset.
save_charat_settings
ChatGPTChange UI appearance with this single tool: theme selects the palette, themeScope=global overrides map/log themes without moving the scene, themeEffectSet selects independent decoration, and performanceMode=eco (default) minimizes motion. Read get_charat_state with include=[settings] to inspect saved preferences. Random spawn stays OFF until explicitly enabled in socialBehavior.global. Map travel follows the companion party; the legacy movementRollEnabled setting does not trigger a lottery. Also saves font, audio, and independent [ナレーター] settings. Only send requested fields. If explicitly changing currentMapId, pass expectedSceneRevision; ordinary movement uses move_charat_map.
set_charat_character_form
ChatGPTSwitch one registered person to a saved form while preserving its stable character id, memory, presence and historical log snapshots.
set_charat_character_form_v2
ChatGPTApply one already-registered form to the exact current Player session in one scene revision. Select it by formId or an exact formTag. It preserves the same characterId, map, presence and stable portrait slot, updates name/portraits/blink/mouth/tags/icon/theme/pitch together, and returns only the mutation delta. Use this for Charat actions such as changing clothes or returning to the normal form; it is UI state manipulation, never image generation.
set_charat_character_presence
ChatGPTMove one registered character between on-screen, same-map, adjacent, other-floor, and away states for this exact player session. Portrait placement is handled automatically as a simple three-person row.
set_charat_characters_presence
ChatGPTAtomically enter or exit multiple registered characters in one revision. Only the named character IDs are reset; the stage, background, BGM, input, logs, and other characters remain.
set_charat_companion_party_v2
ChatGPTUpdate the persistent companion party independently from the three portrait slots and scene presence. Use exact registered character ids for natural instructions such as 「ユウと一緒に行く」「つーちゃんも連れてく」「ユウはここで待ってて」「この子も同行」「この人はここに残って」. add/remove preserve existing members, replace sets the exact ordered party, and clear makes an explicitly empty party. A true mob joins only when the current user explicitly identifies that exact saved mob as a companion; never add a generated mob merely because it is visible or speaking. This tool changes only the party roster in one session revision and never moves, summons, removes, or rearranges a portrait.
spawn_charat_mob_v2
ChatGPTUse this when ordinary conversation introduces an unnamed new person or creature, including 「村人」「街の人」「あそこの人」「受付の人」「店員」「兵士」「スタッフ」「知らない端末」「通りすがりの人」「知らないモンスター」「モンスターが出てきた」「村人3人」. Create one or more new true mob instances from enabled character-registry generator targets without asking for a form, confirmation, or template UI. Put a stated generic role in role rather than desiredName; desiredName is only a unique proper name. Explicit role/origin always wins and place inference applies only when omitted. Set templateId=monster for an explicitly unknown monster or creature. Omitted mapId means the current map; omitted template defaults to an adult preset (youth_male or youth_female) and never child. Infer role and origin from village/city, meeting room, tavern, reception, military facility, dungeon, or outdoors when omitted. Every individual receives a unique stable mobInstanceId, characterId and speakerId; use only the returned speakerId for dialogue. The same responseId is idempotent and cannot be reused with a different count. With fewer than three visible portraits, omit replaceCharacterId and use an empty slot; the server also ignores an accidental replacement request while capacity remains. Only a user-explicit exchange at three full slots may set replaceCharacterId, in which case generation, ledger registration, exit and entry commit in one transaction and one scene revision. Overflow mobs remain same-map. Do not use this for a normal registered character, an existing saved mob name/id, 「さっきのモブ」, or 「さっきの受付の人」; use the present saved mob's speakerId or re-enter the absent saved individual instead.
spawn_historical_charat_mob
ChatGPTReappear an exact historical mob with the same mobInstanceId, appearanceSeed, personaSeed and compact memories.
update_charat_mob
ChatGPTRename, keep, configure re-entry, adjust speech presets, or append a compact memory index to one temporary mob.