Repository navigation
Add a cat as an office pet - #374
Open
JCPetrelli wants to merge 1 commit into
Open
JCPetrelli wants to merge 1 commit into
JCPetrelli wants to merge 1 commit into
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.pybuilds it on top ofbuild_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 inblender/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 asdog-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 swayingrun: a gallop, back legs together, the back arching and stretchingsit: upright, the tail on the floor and wrapped round the front pawssniff: washing, one paw up to the mouth and wiped over the facebark: sat up tall meowing at the desk, the tail tip lashinglie: a loaf, the paws tucked under the chestnap: curled up in a ring, the head tucked inwag(petted): the tail straight up with its tip quivering, a head rub, kneadingEvery 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, soworld.tsonly 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, infeatures/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.
catis the last entry inDOG_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 indog-model.test.ts, and the newtests/cat.test.tscovers picking it, saving it, and its voice) andnpm run build. Screenshots taken headless fromlab/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.