I Built a Better Codex Pet Than OpenAI Did
OpenAI보다 나은 Codex 펫을 만들었습니다
개발자는 Codex 작업 상태를 보여주는 반려동물과 달리, 데스크톱에서 독립적으로 살아가는 Linux용 오픈소스 동반자 Mochi를 만들었습니다. 단일 행동 상태 머신과 로컬 맥락 감지, 관계 성장, 포커스 세션을 결합한 구조를 소개합니다.
- 주제
에디터 노트
제목은 도발적이지만 글쓴이 스스로 '공정한 싸움이 아니다'라고 인정하는 게 이 글의 미덕입니다. 핵심 지적은 Codex Pets가 스프라이트를 벗기면 '꼬리 달린 상태등'에 불과하다는 거죠. 에이전트 스레드가 끝나면 펫이 보여줄 것도 사라지거든요. 반면 Mochi는 데스크톱에 산다는 것 자체가 목적이라, 단일 권위 상태 머신과 로컬 규칙 기반 맥락 감지, 관계 성장, 포커스 세션까지 얹었습니다. AmbiSense가 키 입력·파일명·창 제목을 일부러 읽지 않는 설계나, 연속 기록도 감점도 두지 않은 관계 시스템은 요즘 보기 드문 다정한 선택이에요. 다만 비교 자체가 어려운 건 글쓴이도 압니다. Codex Pets는 수백만 명이 쓰는 에이전트에 붙은 가벼운 기능이고, 그 목적엔 그 얇음이 정답이거든요. Mochi는 아직 1인 개발 리눅스 알파고, GNOME 기반이라 macOS 포팅은 지원자를 구하는 중이죠. 그래도 'OpenAI는 제품의 마스코트를 만들었고, 나는 마스코트 자체가 제품인 걸 만들었다'는 한 줄은 대기업 기능과 개인 프로젝트가 겨루는 방식에 대한 좋은 정의입니다.
AI 요약
OpenAI의 Codex Pets는 코딩 에이전트 상태를 데스크톱 위에 애니메이션으로 보여주는 기능입니다. 글쓴이는 여기에 영감을 받아 Linux용 오픈소스 데스크톱 동반자 Mochi를 만들었습니다. Codex Pets는 Codex 스레드의 진행 상황을 귀엽게 알리는 데 집중하고, Mochi는 특정 앱에 기대지 않고 데스크톱에서 지속적으로 동작하도록 설계했습니다. 글쓴이도 두 프로젝트가 같은 목적을 두고 경쟁하는 것은 아니며, Codex Pets에는 그 목적에 알맞은 간결한 설계가 들어갔다고 설명합니다.
상태 표시 위젯과 독립적인 동반자
Codex Pets는 에이전트가 생각하는 동안 머리를 긁거나 작업이 끝나면 말풍선을 띄우는 식으로 Codex의 상태를 반영합니다. 사용자 이미지를 활용한 커스텀 펫도 매니페스트 파일과 스프라이트 시트로 구성합니다. 하지만 에이전트 스레드가 끝나면 펫이 보여줄 상태도 사라지며, 세션 사이에 이어지는 기억이나 자체 행동은 없습니다. 글쓴이는 이런 범위가 상태 표시 위젯의 목적에 적절하다고 인정합니다.
Mochi는 외부 앱의 상태를 전달하는 대신 데스크톱 맥락과 사용자 행동에 반응합니다. 클릭, 끌기, 절전, 입력 감지, 미디어 재생, 앱 맥락 같은 여러 요소가 동시에 영향을 주므로, Mochi의 현재 행동을 결정하는 단일한 권위 상태 머신을 둡니다. 이 상태 머신은 현재 누가 Mochi의 동작을 제어하는지, 다음에 어떤 전이가 허용되는지 판단합니다. 화면에 보이는 애니메이션과 내부에서 유지되는 실제 상태를 분리해, 드래그나 클릭으로 시각 효과가 끊겨도 포커스 세션의 시계는 계속 흐르게 합니다.
개인정보를 고려한 데스크톱 맥락 감지
AmbiSense는 로컬에서 규칙 기반으로 동작하는 주변 상황 감지 계층입니다. 입력 활동, 동영상 재생, 파일 탐색, 활성 앱 등을 의미 단위의 신호로 줄여 Mochi에 전달합니다. LLM이나 클라우드 서비스에 의존하지 않으며, 실제 키 입력과 파일 이름, 창 제목은 읽지 않도록 설계했습니다. GNOME Shell 헬퍼는 D-Bus를 사용해 입력 활동, 유휴·활성 상태, 앱 범주, 동영상 포커스 같은 정보를 전달합니다. 원시 데이터를 넘기는 대신 거친 의미 신호로 축약합니다.
Mochi에는 관계 성장 시스템도 있습니다. 입력 시간과 먹이 주기로 경험치를 얻고 레벨이 오르면 별도의 연출이 시작됩니다. 연속 접속 기록이나 결석에 따른 감소·벌점은 두지 않습니다. 관계 단계에 따라 감정 표현을 해금하고 희귀도 등급을 부여하는 이모트 카탈로그도 갖췄습니다. 포커스 세션은 자체 도메인 모델과 타이머를 사용하며, 화면 연출이 중단돼도 세션의 실제 진행 상태를 유지합니다.
여러 기능이 충돌할 때의 수명주기 관리
글쓴이는 코드베이스에서 생명주기와 소유권 관리가 큰 비중을 차지한다고 설명합니다. 기능이 중단된 뒤 오래된 애니메이션 콜백이 실행되지 않게 하고, 컨텍스트 메뉴를 닫은 뒤 보이지 않는 입력 가로채기가 남지 않게 해야 합니다. 중단된 상황에서 복구할 때도 과거 상태를 그대로 재생하는 대신 현재의 데스크톱 맥락을 다시 확인합니다. 기능이 많아지면 서로 상태를 바꾸려는 요소가 충돌하므로, 무엇이 현재 유효한지와 어떤 전이가 가능한지를 한곳에서 관리해야 한다는 설명입니다.
글쓴이는 Codex Pets에 Mochi와 같은 구조를 넣는 일은 목적에 비해 과도한 설계라고 선을 긋습니다. Codex Pets는 한눈에 이해되는 가벼운 에이전트 기능이고, Mochi는 지속성·맥락 인식·관계 시스템 자체가 제품의 목적입니다. Mochi는 오픈소스로 공개됐으며, 글쓴이는 macOS 테스트 환경이 없어 포팅에 참여할 개발자도 환영한다고 밝혔습니다.
dev.to 반응
- @danielecangi — 아이디어가 정말 좋네요. 몇 가지 문제를 발견해서 작업을 시작하겠습니다 🤗
- @mikachu — 오, 정말 좋습니다 👀 발견한 문제는 무엇이든 이슈로 올려 주세요. PR도 환영합니다. 코드베이스에서 헷갈리는 부분이 있으면 편하게 연락해 주세요 <3
- @phalkmin — 이 아이디어가 정말 마음에 듭니다. macOS 버전을 만들 수 있을지 궁금하네요.
- @mikachu — macOS 포팅을 도와주시면 정말 감사하겠습니다 😂💜 지금은 제대로 된 macOS 테스트 환경이 없어서, 그 환경에서 실제로 빌드하고 테스트할 분이 있으면 큰 도움이 됩니다. 이슈나 PR을 편하게 올려 주세요. 코드베이스에서 헷갈리는 점이 있으면 연락해 주세요!
원문: dev.to / 번역·요약: Trawling