5분

주간 개발일지 2026‑W34: 모바일 화면부터 내 컴퓨터의 CLI까지, 실행 표면을 넓히다

  • 주간 개발일지
  • 바이브코딩
  • 셀프호스팅 AI
  • 2026-W34
모바일 답변, 로컬 CLI와 네이티브 데스크톱을 하나의 모델 게이트웨이로 연결한 W34 개발일지 일러스트. 2026-09-05에 개발일지 내용을 바탕으로 생성했으며, 실제 제품 화면은 아닙니다.

SHIPPED / EVIDENCE

이번 주 OpenMake

이번 주에는 115개 커밋으로 1.26.0부터 1.32.1까지 아홉 개 릴리스를 냈습니다. 폰 화면에 맞춘 답변 렌더링과 카카오 지도·위치·카메라로 모바일 경험을 끌어올렸고, 서버 샌드박스 대신 내 컴퓨터에서 도구를 실행하는 OpenMake Code를 열어 감사 기록과 브리지 코어 단일화까지 마쳤습니다. 데스크톱은 Electron 셸을 동결하고 SwiftUI 네이티브 컴패니언으로 축을 옮겼습니다. 주 마지막 날에는 방향이 한 번 더 꺾여, 설정에 적어 둔 값보다 모델 자신을 믿는 쪽으로 갔습니다. 능력과 컨텍스트 길이를 부팅 때 실측하고, 추론 강도를 사용자가 고르게 하고, 답변 검증을 붙이고, 모든 LLM 호출을 LiteLLM 한 경로로 모았습니다. 그 사이 스킬 주입 오염·SSRF·API 키 스코프처럼 조용히 새던 경계를 좁히고 쓰이지 않던 코드와 GitHub 연동을 걷어냈습니다.

기간
2026-08-17 – 2026-08-23
Git 커밋
115
근거
Git 이력

01

개발 현황

  • OpenMake Code — 서버 샌드박스 대신 사용자 머신에서 도구를 실행하는 로컬 CLI 에이전트 작업을 열었습니다. 웹에서 CLI 재시작 없이 실행 폴더를 고르는 브리지 폴더 선택 프로토콜을 붙이고, 준비 로그에 선택 폴더를 남겼으며, 주 후반에는 로컬 작업 생성을 감사 기록으로 남겨 1축을 닫고 브리지 디바이스 코드를 packages/local-bridge-core 하나로 합쳐 2축을 열었습니다. untracked 하위 폴더 연결 시 나던 worktree cwd ENOENT를 고치고, 파일 kind의 FS 호출을 async로 바꿔 한 번의 블로킹이 모든 루트 연결을 죽이던 문제를 타임아웃 가드와 함께 해소했으며, 브리지 하네스를 CI에 편입했습니다.
  • 데스크톱의 축을 옮겼습니다. SwiftUI 네이티브 컴패니언 1차가 헬퍼 브리지·승인 다이얼로그·알림 딥링크·native 업데이트 채널과 함께 들어왔고, 여러 루트를 동시에 연결해 루트마다 파생 deviceId로 독립 브리지 연결을 유지합니다. Electron 셸은 동결을 공지한 이튿날 저장소에서 내려갔습니다. 로컬 에이전트는 desktop-native가 전담하고, 기존 설치본이 쓰는 업데이트 경로와 구 dmg는 그대로 둔 채 신규 게시만 멈췄습니다.
  • 모바일 답변 렌더링을 다시 짰습니다. 표를 폰 화면용 카드로 구조화하고, 답변 형식 힌트와 긴 답변 섹션 접기를 넣었으며, 이미지 응답 끊김·마크다운 블록 서식·파이프 없는 표·아티팩트 placeholder 노출을 함께 고쳤습니다.
  • 폰 기능을 1단계에서 3단계까지 이어 붙였습니다. 카카오 지도 블록을 네이티브 지도 카드로 렌더하고 서버 임베드 + MapKit 폴백으로 옮긴 뒤 404가 나던 임베드를 /api/embed로 이전했고(1.26.0), GPS 위치 컨텍스트와 웹 로고 앱 아이콘을 넣었으며(1.30.0), 카메라 촬영과 음성 입력을 추가했습니다(1.31.0).
  • 입력 처리를 손봤습니다. PDF 첨부에는 앞쪽 페이지를 이미지로 함께 주입하는 vision 하이브리드를 넣고 해상도 상한을 뒀으며, OpenAI 호환 클라이언트의 system 메시지는 버려지는 대신 맨 앞 system 프롬프트에 병합하도록 고쳤습니다. 채팅 composer의 첨부 버튼은 파일 첨부와 폴더 선택을 아우르는 + 메뉴 하나로 합쳤고, 웹 검색 쿼리에 길이 상한을 둬 장문 프롬프트가 provider 414로 막히지 않게 했습니다.
  • 주 마지막 날, 설정보다 모델 자신을 믿기 시작했습니다. 모델 능력 해석을 단일 기준으로 모으고 부팅 때 도구 호출을 실제로 찔러 봐서, 모델을 갈아 끼웠다고 도구가 조용히 무력화되지 않게 했습니다. 컨텍스트 길이도 262K 고정 임계 대신 부팅 시 실측하고, Thinking은 스트림을 넘겨짚지 않고 모델이 선언한 capability로 게이팅합니다. 추론 강도는 입력창의 3단 버튼으로 사용자가 고르면 모델별로 정규화되고, LiteLLM 게이트웨이가 막던 문제도 통과 힌트를 함께 보내 해소했습니다. 그 옆에 답변 검증이 붙어 판정 모델이 답을 한 번 더 읽고 지적할 점만 표시합니다. 구조화 답변은 json_schema 미지원이나 스키마 불일치에 422로 죽는 대신 낮춰서 답하고, 외부 provider에는 프롬프트 대신 json_schema를 직접 넘겨 필드 누락을 막습니다. 전송되지 않던 repeat_penalty 매핑은 vLLM 이름으로 정정하고, 결과를 쓰지 않던 샘플링 튜닝 배선은 걷어내 분류 결과를 관측 전용으로 확정했습니다.
  • 실패의 원인이던 기본값과 경계를 정정했습니다. 에이전트 작업 기본 max_turns를 10에서 32로 올리고, 사용자 MCP 도구 노출 cap을 12에서 20으로 넓혀 실질 가드를 예산 쪽에 뒀으며, triggers를 선언한 스킬이 매 턴 주입되던 오염을 관련 턴으로 한정했습니다. SSRF allowlist에 host:port 최소 권한 형태를 추가하고, API 키의 bridge/chat 스코프를 하드닝했으며, 기록되지 않아 죽은 프로세스를 판별하지 못하던 MCP instance pid를 채우고, 종료 후 N일이 지난 에이전트 작업의 업로드 원본을 회수하는 보존 스윕을 넣었습니다.
  • 라우팅 관측과 제품 표면을 정리했습니다. URL만 있는 질의는 LLM 판정을 건너뛰고 도메인 힌트를 쓰게 했고, 게이트 판정 관측 루프가 라우팅 게이트를 집계해 주간 리포트로 내며, 관리자 화면에는 에이전트 작업 워크플로우 관측 지표 4종이 붙었습니다. 설치에는 update 서브커맨드와 2단 인스톨러 CI 게이트를 더했고, 브랜드 마크 SVG를 다시 그려 파비콘·로고와 iOS·PWA 아이콘을 교체했으며, 미참조 소스 5건·미사용 의존성 6종과 에이전트 작업의 GitHub 연동(clone→PR)을 걷어내고 594줄이던 external-provider 가드를 353줄로 나눴습니다. 게이트웨이를 우회하던 direct 경로도 함께 정리해 anthropic direct 어댑터와 ollama-local을 제거했고, 구현 디바이스가 사라진 로컬 에이전트 브라우저(D3)를 폐기했으며, 아키텍처 도면은 소스를 추적 대상에 넣고 배치·통합 도면을 흐름이 보이는 일러스트로 다시 그린 뒤 목표 구조 도면을 새로 더했습니다.

02

주간 기록을 재구성한 방법

이 기간과 일치하는 로컬 Claude Code 프로젝트 세션을 찾지 못했습니다. 따라서 Git 이력이 증명하는 개발 내용만 기록했습니다.

확인 가능한 Claude Code 메인 세션과 명시적으로 연결된 하위 세션, 저장소 Git 이력을 전수 점검했습니다. 세션은 의도와 조사 과정을 설명하고, 실제 반영된 코드는 Git을 최종 근거로 판단했습니다.

근거 자료

근거

OPENMAKE · MIT OPEN SOURCE

개발일지로 돌아가기