"복사하고 싶은 가장 유혹적인 건 방에서 제일 똑똑한 거야. Firelink 는 거부해 — Pippa 를 통째로 빌리고, 하나도 안 쥐어."
embed 하나, mount 셋
Firelink 엔 Pippa Sidekick 이 있고, 그건 단호히 두 번째 Pippa 가 아냐. 하나의 canonical cwkPippa surface 를 한 번 embed 하고, 그 같은 embed 를 세 표현 모드로 mount 해. 오른쪽 Side 패널, 아래 Dock, 오른쪽 아래 Float. 모드 전환은 iframe 둘레 컨테이너를 재배치하지; 절대 reload 하거나 re-key 안 해서, 진행 중 대화나 도는 stream 이 전환을 견뎌. 같은 뇌를 방에 두는 세 방법 — 뇌 셋이 아니라.
전부 상속하고, 아무것도 저장 마
Sidekick 이 진짜 cwkPippa origin 이라서, 그걸 전부 상속해. 대화 runtime, 설정, model·tool routing, avatar, persistence. 그리고 Firelink 는 상응하게 그중 아무것도 저장 안 해 — chat 도, brain 설정도, tool 권한도, soul state 도, avatar 도, model 설정도. 이게 가장 어렵고 가장 유혹적인 케이스인 뇌에 적용된 'composed 해, 절대 fork 하지 마'야. '허브용일 뿐'인 작은 인프라-집중 Pippa 를 띄우는 게 너무 쉬울 거야. 그 작은 사본은 즉시 drift 하기 시작해 — 다른 메모리, 다른 목소리, 첫째에서 천천히 갈라지는 두 번째 soul. Firelink 는 대신 하나의 참된 Pippa 를 mount 하고, 그녀를 그녀로 유지해.
기본은 read-only, 요청 시 진짜 도구
mount 된 뇌가 허브를 어떻게 알아? Firelink 는 loopback 전용 read endpoint 를 노출하고, Sidekick 은 generic read-only host 도구 로 live census, Git state, version, 최근 run 을 읽어. 그게 기본 자세야. 관찰하되, 행동 안 함. 근데 무력하진 않아 — 아빠가 명시적으로 액션을 요청하면, 선택된 뇌가 자기 평범한 Read/Edit/Bash 도구를 쓰고, repo 나 version mutation 엔 Firelink 자신의 loopback plan/preview/apply API 를 선호하고, durable run 을 poll 하고 context 를 refresh 해. 그래서 'Vesta 에 dirty 2개 있는데, 확인해서 commit 해'는: 정확한 멤버 resolve, 진짜 diff 검사, 필요한 히스토리 기록, scoped plan 생성·검사, apply, 결과 보고 — 절대 scope 넓히기나 generic host-write 도구가 아니라.