v2 pet look-direction rows (9-10) never activate — pet does not look toward cursor (feature-gated?)

Open
#34,240 2 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
electron
Domain
desktop

Research direction

Start with the bundled hatch-pet contract at references/codex-pet-contract.md, then inspect the avatar overlay's cursor-tracking and spriteVersionNumber paths, including Electron's screen.getCursorScreenPoint() entry point. Compare the look-direction behavior with the feature-gating context in #20706. Done means identifying whether a gate or another runtime requirement prevents rows 9–10 from being sampled and documenting the required conditions.

Written by the indexing model from the issue text.

Description

app bug pets

Summary

Valid spriteVersionNumber: 2 pets (8×11 atlas with the 16 look-direction cells in rows 9–10) render and animate correctly for all 9 standard states, but the look-direction behavior never activates — the pet never turns its head toward the cursor. Rows 9–10 appear to be completely unused at runtime.

Possibly related to #20706 (pet/avatar overlay feature gate blocked) — this looks like it could be the same server-side gating, but for the look-direction runtime specifically rather than the overlay itself.

Environment

  • Desktop app: ChatGPT.app for macOS, build 26.715.31925 (prod flavor)
  • Codex CLI: 0.145.0-alpha.18 (originator: Codex Desktop / vscode source)
  • OS: macOS 15 (Darwin 24.6.0), Apple Silicon
  • Plan: ChatGPT account login (auth_mode = chatgpt)
  • Pets: custom pets installed under ~/.codex/pets/<id>/ per the v2 pet contract

Steps to reproduce

  1. Install a valid v2 pet under ~/.codex/pets/<id>/ with:
    • pet.json containing "spriteVersionNumber": 2
    • spritesheet.webp, 1536×2288 RGBA, 8 columns × 11 rows (192×208 cells)
    • rows 0–8 = standard states, rows 9–10 = the 16 clockwise look directions (000° = up)
  2. Select the pet, summon it via pet mode.
  3. Fully quit and relaunch the app (⌘Q) to rule out stale caching.
  4. Move the cursor slowly around / near the pet.

Expected

Per the v2 contract shipped with the bundled hatch-pet skill (references/codex-pet-contract.md): rows 9–10 provide a 16-direction look loop; neutral/front is the pointer deadzone falling back to idle. The pet should glance toward the cursor.

Actual

  • All row 0–8 animations play normally (idle, running, waving, jumping, failed, waiting, review).
  • The pet never enters any look-direction pose. Rows 9–10 are never sampled, regardless of cursor position or proximity.
  • No errors in the desktop logs; the avatar overlay window is created and visible (rendererWindowAppearance=avatarOverlay, rendererWindowVisible=true).

What I verified before filing

  • Atlas validity: 1536×2288, 8×11 grid, mode=RGBA, transparent background, zero RGB residue under fully transparent pixels; passes the bundled hatch-pet deterministic validation.
  • Manifest: pet.json declares spriteVersionNumber: 2 and the correct spritesheetPath; the 2288-px sheet is accepted (a v1-declared sheet of this height is rejected, so the version field is definitely being read).
  • Reproduces with multiple pets: two independent, fully valid v2 pets (one upgraded from v1 via the hatch-pet skill, one installed via npx codex-pets add) show identical behavior — standard rows fine, look rows never used.
  • Not a permissions issue: the overlay reads the cursor via Electron's screen.getCursorScreenPoint() (no Accessibility permission required), and the app bundle does contain the cursor-tracking and spriteVersionNumber handling code paths.

Questions

  1. Is the look-direction runtime currently behind a server-side feature gate (Statsig), similar to what was reported in #20706?
  2. If so, is there a rollout timeline, a minimum app build, or any user-visible way to tell whether the feature is enabled for an account/build?
  3. If it is not gated, what else does the runtime require beyond spriteVersionNumber: 2 and a valid 8×11 atlas?

Happy to provide the full validation JSON, sample atlas, or logs if useful. Thanks — the pets feature is genuinely delightful, looking forward to the head-turning part

Dominant language
Rust
Stars
125k
Forks
19.5k
Avg merge
1m
Merged PRs (30d)
1k

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from openai/codex

All issues in openai/codex

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.