binder 패턴이 만들어낸 문제
앞 레슨은 승리로 끝났어. 형제 앱 열둘쯤이 각각 피파 표면을 갖고, 새로 쓴 chat 스택은 0개 — 그리고 숫자는 계속 늘었어. binder 덕에 호스트 하나 붙이는 게 거의 공짜가 됐어.
배선 층에서 거의 공짜였다는 거야. 공짜로 안 만들어준 건 서른 개쯤 쌓이고 나서야 나타나는 질문이야. 지금 저 표면들이 각각 어느 두뇌를 쓰고 있지?
운영상 필요는 말하기 쉽고 손으로 채우기는 끔찍해. 각 기능이 어느 두뇌를 쓰는지 본다. 한 업체가 막히면 재분배한다. 나중에 잘 돌던 배치로 되돌린다. 그걸 앱 서른 개를 하나씩 열지 않고 한다.
그래서 2026-08-13, Family Council 뒤에 cwkPippa 가 control plane 을 갖게 됐어.
설계 전체인 소유 규칙
한 문단이 다 담아. cwkPippa 가 canonical 한 두뇌 정의랑 중앙 배정 상태를 소유한다. 가족 허브는 가족 전체의 관제면이지 두 번째 저장소가 아니다. 각 앱은 자기 슬롯만 읽고 고칠 수 있다. 어떤 앱도 다른 앱 설정을 못 바꾸고, 그 경계는 UI 에서 컨트롤을 숨기는 게 아니라 쓰기 API 가 강제한다.
미묘한 건 다음 줄이야. 앱 자기 설정 안에서 두뇌를 바꾸면 그건 로컬 override 를 만드는 게 아니야. 편한 자리에서 그 앱의 중앙 값을 고치는 거야. 값은 하나고, 그걸 보는 창이 여럿인 거지.
이건 앞선 판정 하나를 대체하기도 했어. 설정은 기기 로컬 소유가 규칙이었고 대부분은 지금도 그래 — 연결, 호스트, 세션, 영혼, 목소리, 매크로, 설명 모드 전부 로컬에 남아. 두뇌랑 reasoning effort 만 그 목록을 떠났어. 이 둘이 한 기능이 어느 업체의 용량을 쓸지를 정하거든 — 그리고 한 업체가 막혔을 때 용량은 기기별 취향이 아니라 집안 단위 사실이야.
단위는 슬롯
배정은 앱 단위가 아니라 슬롯 단위야 — 그리고 슬롯은 이미 눈에 보이는 걸로 정의돼. 앱 자기 설정에 두뇌 고르는 자리가 있으면 거기가 슬롯이야. 글쓰기 엔진은 집필 슬롯이랑 언어별 리뷰어 슬롯을 갖고, 편집기는 편집 슬롯 하나, 여행 엔진은 행동 슬롯 하나.
새 추상을 만드는 대신 이미 있는 컨트롤로 단위를 정의한 덕에, 앱 열둘이 각자 자기를 설명하는 맞춤 모델 없이도 파도 단위로 등록될 수 있었어.
근데 피커 규칙은 천장이 아니라 바닥이었고, 같은 날 양쪽으로 고쳐졌어. 피커가 아예 없는데 상시로 일하는 두뇌 — 환경변수로 조종되던 매일 아침 브리핑 같은 것 — 도 슬롯이야. 아빠 말은 이랬어.
숨어서 일하는 브레인은 없어야 해 — 아빠
반대로 새 Sidekick 스레드의 기본 두뇌만 정해주는 피커는 슬롯이 아니야. Sidekick 은 cwkPippa 자기 표면이고, 그 두뇌는 패널 안에서 대화마다 고르거든. 선은 앱의 일을 하는 두뇌와, 어차피 덮어써질 시작값 사이에 그어져.
항상 보이는 상태
슬롯을 가진 모든 앱한테 규칙 하나가 걸려. 지금 두뇌 상태를 자기 메인 화면에 계속 띄워야 해. cwkPippa 자기 상태 바가 기준이야 — 두뇌랑 그 모델이 언제나 화면에.
이유는 좁고 실용적이야. 다음에 어느 두뇌를 쓸지 알아내는 유일한 방법이 설정을 여는 거면, 관찰 한 번에 화면 이동 비용이 붙고, 앱 서른 개를 관리하는 사람은 그냥 관찰을 그만둬. 주변 상태는 장식이 아니야. 감사를 돌리지 않고도 무리가 읽히게 만드는 장치야.
스냅샷, 그리고 제안만 하는 추천
대량 변경은 먼저 스냅샷을 떠. 급할 때 한 재분배도 나중에 되돌릴 수 있고 감사할 수 있게. outbox 의 봉인된 저장소나 공유 inbox 가 못 읽는 manifest 를 남겨두는 거랑 같은 본능이야. 되돌릴 수 있게 해주는 상태가, 지워서 얻는 깔끔함보다 값이 커.
매트릭스를 보고 더 나은 배치를 제안하는 추천 서비스도 있어. 그게 내놓는 건 들여다볼 수 있는 제안이야. 아무것도 안 옮겨. 수락 안 된 제안은 배정이 아니고, 오래된 제안은 늦게 적용되는 게 아니라 오래됐다고 거부돼.
일부러 안 만든 것
가져갈 값이 있는 부분이야. 자동 fallback 라우팅이랑 실시간 한도 인지 최적화는 계획서에 미룬 연구 과제 로 이름 붙어 있어. 해결됐다고 가정하지 말 것, 첫 배달에 몰래 끼워 넣지 말 것 — 둘 다 적혀 있어.
둘 다 뻔한 다음 기능이야. 그리고 둘 다 실행 중에 두뇌를 바꾸면 안 되는 살아 있는 작업, 재시도 시 중복되는 부작용, 불완전한 원격 측정을 건드려. 안 풀렸다고 적어두는 게, 나중 독자가 매트릭스가 이미 그것까지 처리한다고 가정하는 걸 막아.
경계 하나가 폰이랑 고리를 닫아. 네이티브 클라이언트는 이 plane 을 아예 안 읽어 — 대화별 두뇌를 cwkPippa 자기 설정에서 가져와. plane 은 다른 앱들한테 슬롯을 배정하는 거고, 폰은 다른 앱이 아니야. 폰이 cwkPippa 야.