You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Clanker character avatars are currently implemented inside the upstream pets subsystem (codex-rs/tui/src/pets/). A clanker character's avatar is represented as pet = "custom:<name>" in configuration, and the rendering, animation, and lifecycle code all lives in the pets module alongside novelty pet animations (fox, cat, unicorn, etc.).
This creates several problems:
Semantic mismatch. A clanker's avatar is its identity — not a decorative pet. The avatar should be a first-class character concept, not a pet variant.
Coupling. Changes to the pet system (animation frames, sprite formats, positioning) unintentionally affect character avatars and vice versa.
Naming confusion. Config fields like pet, types like PetWidget, and module paths like pets/ are misleading when the actual concept is "character avatar."
Extract avatar as a standalone TUI concept. Create an avatar module (or similar) that owns character avatar rendering, animation, and state. The pet system can delegate to it or coexist separately.
Rename the seam. Config fields, types, and module paths should use "avatar" (or "character avatar") terminology for clanker identity display. The pet concept can remain for novelty animations but should be clearly separated.
Preserve backward compatibility. The upstream pet config and rendering must continue to work. This is an additive extraction, not a removal.
Character manifest integration. The avatar should be loaded from the character manifest (CharacterManifestV1) rather than from pet configuration. The manifest already has avatar-related fields.
Context
Clanker character avatars are currently implemented inside the upstream pets subsystem (
codex-rs/tui/src/pets/). A clanker character's avatar is represented aspet = "custom:<name>"in configuration, and the rendering, animation, and lifecycle code all lives in thepetsmodule alongside novelty pet animations (fox, cat, unicorn, etc.).This creates several problems:
pet, types likePetWidget, and module paths likepets/are misleading when the actual concept is "character avatar."What is needed
Extract avatar as a standalone TUI concept. Create an
avatarmodule (or similar) that owns character avatar rendering, animation, and state. The pet system can delegate to it or coexist separately.Rename the seam. Config fields, types, and module paths should use "avatar" (or "character avatar") terminology for clanker identity display. The
petconcept can remain for novelty animations but should be clearly separated.Preserve backward compatibility. The upstream
petconfig and rendering must continue to work. This is an additive extraction, not a removal.Character manifest integration. The avatar should be loaded from the character manifest (
CharacterManifestV1) rather than from pet configuration. The manifest already has avatar-related fields.Relationship to existing issues
Acceptance criteria
pets/into its own modulepet = "custom:..."config hack)