Skip to content

Add a cat as an office pet - #374

Open
JCPetrelli wants to merge 1 commit into
AgentSystemLabs:mainfrom
JCPetrelli:cat-office-pet
Open

JCPetrelli wants to merge 1 commit into
AgentSystemLabs:mainfrom
JCPetrelli:cat-office-pet

Conversation

@JCPetrelli

Copy link
Copy Markdown

Closes #297. Closes #314.

A floor's dog can now be a cat: ⚙️ → Office dog → 🐱 Cat. Same style as the dogs (same toon look, collar, coats), but it moves like a cat.

The model. blender/scripts/build_cat.py builds it on top of build_dog.py (same skin, rig, skinning and export helpers), with a cat's numbers, parts (whiskers, a bell on the collar, a pink nose, tabby stripes) and clips. It keeps the dog contract in blender/README.md: the same 28 bones, sockets, materials and clip names, so the office poses, picks and dresses it up with the dog's code. It's exported as dog-cat.glb (9.3k tris, 0.68 m tall).

The clips, as a cat does them:

  • walk: one paw after another (back, front, other back, other front), the back level, the shoulders rolling, the tail up and swaying
  • run: a gallop, back legs together, the back arching and stretching
  • sit: upright, the tail on the floor and wrapped round the front paws
  • sniff: washing, one paw up to the mouth and wiped over the face
  • bark: sat up tall meowing at the desk, the tail tip lashing
  • lie: a loaf, the paws tucked under the chest
  • nap: curled up in a ring, the head tucked in
  • wag (petted): the tail straight up with its tip quivering, a head rub, kneading

Every clip passes floor_report (nothing more than 1 cm under the floor). The tail and leg angles for the sit, the loaf and the curl came from a small search over that check.

On the page. features/dog/voice.ts (new) holds what differs between a dog and a cat, so world.ts only asks it and gets shorter (700 → 685 lines). The cat meows instead of barking ("Meow!" bubble) and purrs instead of yipping. Both sounds are made in the browser like the woof, in features/dog/sound.ts. It doesn't pant, it half shuts its eyes when petted, and its nose is pink. The hint bar, name tag, breed toast and settings note say 🐱 and "meowing", "loafing", "curled up under Ada's desk"…

What doesn't change. cat is the last entry in DOG_BREEDS, and it isn't in the dealt list, so no existing floor turns into a cat: it's only ever picked. The server runs the same day for it (follows, naps under desks, runs to workers that need input).

Tested. npm run typecheck, npm test (622 pass: the cat goes through every check in dog-model.test.ts, and the new tests/cat.test.ts covers picking it, saving it, and its voice) and npm run build. Screenshots taken headless from lab/dog.html?breed=cat (each act, a tuxedo coat petted, every breed sitting). I also walked round a local office with it, switching from a dog to the cat in ⚙️ and petting it.

A floor's dog can now be a cat (⚙️ → Office dog → 🐱 Cat). The cat is
one more breed for the server and the rig: the same bones, sockets,
materials and clip names, built by blender/scripts/build_cat.py on top
of build_dog.py, and exported as dog-cat.glb.

Its clips move like a cat: a walk that sets one paw down after another,
a gallop that arches the back, a sit with the tail wrapped round the
front paws, face washing, a loaf with the paws tucked under, a curled-up
nap and, when petted, the tail straight up with a head rub. Each clip
passes the floor check.

On the page, features/dog/voice.ts holds what differs between a dog and
a cat: it meows instead of barking, purrs instead of yipping, doesn't
pant, half shuts its eyes when petted, has a pink nose, and the hint bar
and name tag say so. No floor is dealt a cat; it's only ever picked.

Closes AgentSystemLabs#297
Closes AgentSystemLabs#314
muguetdev pushed a commit to muguetdev/agent-office that referenced this pull request Oct 27, 2026
A floor's dog can now be a cat (⚙️ → Office dog → 🐱 Cat). The cat is
one more breed for the server and the rig: the same bones, sockets,
materials and clip names, built by blender/scripts/build_cat.py on top
of build_dog.py, and exported as dog-cat.glb.

Its clips move like a cat: a walk that sets one paw down after another,
a gallop that arches the back, a sit with the tail wrapped round the
front paws, face washing, a loaf with the paws tucked under, a curled-up
nap and, when petted, the tail straight up with a head rub. Each clip
passes the floor check.

On the page, features/dog/voice.ts holds what differs between a dog and
a cat: it meows instead of barking, purrs instead of yipping, doesn't
pant, half shuts its eyes when petted, has a pink nose, and the hint bar
and name tag say so. No floor is dealt a cat; it's only ever picked.

Upstream: Agent Office issue 297
Upstream: Agent Office issue 314

Ported to the fork: what the cat says and does is in en, pt-BR and ko (a cat
section beside the dog's, its breed in Settings, its note and the floor's
toast), and the dog's dance at a /party carries on as before.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not a cat option??? Feature Request: Add a Cat option for the office pet 🐈

2 participants