Pi 엔진 전체를 내 앱으로 포크해서 크기를 3분의 1로 줄여버림
I forked the full pi engine into my own app and cut it down to a third of its size
핵심 요약
Pi 엔진의 불필요한 기능을 제거하고 자체 코드베이스에 통합하여 성능을 최적화한 사례 공유.
- 기능 최적화 — TUI, CLI, MCP 등 미사용 기능을 제거하여 코드 7만 줄 이상 삭제함
- 성능 개선 — 세션 준비 시간 단축 및 메모리 사용량 감소 효과 확인
- 코드 품질 — 엄격한 TypeScript 설정과 린트 규칙 적용으로 타입 오류 0건 달성
- 유지보수 전략 — 업스트림을 참조용으로만 두고 필요한 수정 사항만 수동으로 포팅함
내 자체 웹 UI(Sayl) 안에서 pi를 돌리고 있는데, pi의 특정 동작들을 계속 수정하고 기능을 덧붙여 왔음. MCP랑 Codemode가 도입되면서 pi가 슬슬 "무거워진다"는 느낌을 받았거든. 그래서 pi v1.1.0 소스(pi-ai, agent-core, coding-agent)를 가져와서 내 코드베이스에 박아넣고, 안 쓰는 건 싹 다 쳐냈음. 이제 업스트림은 그냥 참고용일 뿐임. 필요한 수정 사항만 직접 포팅해서 쓰고, 자동 업데이트 같은 건 없음.
어떻게 했냐면:
-
안 쓰는 거 다 쳐냄. 터미널 UI, CLI, RPC/print 모드, MCP, codemode, 확장 프로그램 로더(이제 확장 프로그램은 그냥 프로세스 내 함수로 돌아감), 그리고 pi 자체 HTTP 디스패처까지 다 날림. TUI/CLI/MCP만 걷어냈는데도 커밋 하나에서 7만 7천 줄이 사라지더라. 설치 후 패치 스크립트도 없애버림.
-
내 프로젝트로 이식. 엔진을 내
src/폴더로 옮겨서 앱 나머지 부분이랑 똑같은 빌드, 린트, 테스트 환경에서 돌아가게 만들었음. 모델 제공자는 내가 실제로 로그인해서 쓰는 6개만 남김. -
내 규칙 따르게 만듦. pi가 쓰는 것보다 훨씬 빡센 TypeScript 옵션이랑 내 린트 규칙을 적용했음. 처음엔 타입 에러 1,163개,
any44개, 캐스팅 119개, non-null 단언 7개 나왔는데, 지금은 싹 다 잡아서 에러 0개임. 예외 처리 같은 꼼수도 안 씀.
런타임 변화(1단계 완료 후 npm 패키지와 비교):
-
세션 서버 준비 시간: 2.10s → 1.86s (웹 쪽은 1.11s → 0.87s)
-
시작 후 메모리 점유율: 338 → 298 MB (웹 쪽은 175 → 144 MB)
-
런타임 의존성: 121 → 105개 패키지
그냥 이런 데이터 흥미로워하는 사람이나, 직접 해볼까 고민하는 사람 있을까 봐 공유함.


