본문으로 건너뛰기

resumate 개발일지 03. Nova 에이전트, 파이프라인, 원격 개발

·7 min read·3 / 3

2026-04-01 | Nova 에이전트 교체, 파이프라인 완성, 그리고 모바일 원격 개발 탐구


오늘 한 일 요약

  1. Forge 에이전트를 Nova로 교체하고 파이프라인 전체 재구성
  2. 컨텍스트 동기화 & AI 응답 파싱 엣지 케이스 수정
  3. Claude Code Remote Control 탐구 → 블로그 정리

Forge → Nova: 왜 바꿨나

처음엔 forge 라는 이름으로 에이전트를 만들었다. "단련"한다는 느낌이 좋아서. 그런데 막상 코딩하다 보니 이름이 프로젝트 분위기와 안 맞았다. Nyx, Paws, Echo가 모두 고양이 계열 감성인데, Forge는 혼자 공장 분위기였다.

그래서 nova로 바꿨다. 별이 폭발할 때 나오는 에너지. 취업 준비생이 면접을 통과하는 순간의 느낌에 더 가깝다고 생각했다.

이름만 바꾼 게 아니라 파이프라인 구조도 손봤다.

이전 (Forge):
사용자 입력 → 단일 에이전트 처리 → 출력
 
이후 (Nova):
사용자 입력 → Nova 오케스트레이터 → Nyx / Paws / Echo 라우팅 → 출력

Nova는 이제 독립 에이전트가 아니라 파이프라인 조율자 역할을 맡는다. 사용자 의도를 파악해서 어떤 캐릭터에게 넘길지 결정한다. 코드로 보면 단순한 if-else처럼 보이지만, 실제론 Claude에게 라우팅 판단을 맡기는 구조다.


파이프라인 구현 중 마주친 엣지 케이스

컨텍스트 동기화 문제

멀티 에이전트 구조에서 대화 히스토리를 어떻게 공유할 것인지가 골치였다.

Nyx가 이미 이력서를 분석했는데, Paws에게 "이 이력서를 기반으로 공고 맞춤 수정해줘"라고 하면 — Paws는 이력서를 모른다.

해결책은 생각보다 단순했다. 세션 컨텍스트 스냅샷을 에이전트 전환 시점에 주입하는 것.

Nyx 대화 히스토리 (요약) → Nova → Paws 프롬프트 prefix에 주입

Claude CLI의 -p 플래그로 프롬프트를 직접 넘기는 구조라서, 컨텍스트를 텍스트로 직렬화해서 앞에 붙이면 됐다. 우아하진 않지만 동작한다.

AI 응답 파싱 오류

Claude CLI가 stdout으로 뱉는 JSON stream이 항상 예상대로 나오지 않는다.

정상:  {"type":"text","text":"안녕하세요..."}
비정상: 빈 줄, 불완전한 JSON, 혼합 텍스트

파싱 로직이 JSON.parse() 하나로 끝나던 게 문제였다. 줄 단위로 파싱하고, 실패하면 버퍼에 쌓았다가 다음 줄과 합쳐서 다시 시도하는 로직을 추가했다.

엣지 케이스 수정이라 코드 줄 수는 얼마 안 됐는데, 찾는 데 시간이 더 걸렸다. 재현이 어려운 종류의 버그였다.


오늘의 여담: 소파에서 코딩하기

오후에 외출할 일이 있었다. 노트북을 들고 나가기 귀찮아서 "Claude Code로 원격 제어가 되나?" 를 찾아봤다.

결론: 된다.

구조

맥북 (Claude Code 실행 중)

    │  아웃바운드 HTTPS (인바운드 포트 없음)


Anthropic 서버


스마트폰 / 브라우저

claude remote-control 명령 하나로 세션 URL과 QR 코드가 뜬다. 스마트폰으로 스캔하면 그 세션에 접속된다. 맥북에서 돌아가는 Claude Code를 스마트폰이 창문처럼 들여다보는 것.

인바운드 포트를 열지 않는 설계가 인상적이었다. 맥북 → Anthropic API로 아웃바운드만 쓰는 폴링 방식이라서 방화벽 건드릴 필요가 없다.

두 가지 방식의 차이

Remote ControlClaude Code on the Web
실행 위치내 맥북Anthropic 클라우드 VM
로컬 파일 접근OX (GitHub 저장소 기반)
맥북 꺼지면세션 종료계속 실행
사용 상황잠깐 자리 비울 때오래 걸리는 작업 위임

오늘은 Remote Control로 Nova 파이프라인 테스트를 스마트폰에서 지시했다. 실제로 동작하는 걸 보니까 신기했다. 소파에서 맥북에 코드를 짜게 만드는 경험.


현재 상태

완료:

  • Nova 에이전트 + 파이프라인 (Forge 대체)
  • 컨텍스트 동기화 로직
  • AI 응답 파싱 안정화
  • Nyx / Paws / Echo 라우팅 기반

남은 것:

  • 캐릭터별 시스템 프롬프트 취업 특화
  • 이력서 PDF 파싱
  • 채용공고 URL 스크래핑
  • CharacterBlob 3D 컴포넌트 연결

느낀 점

에이전트 이름을 바꾸는 게 사소해 보이지만, 프로젝트 방향을 다시 생각하게 만든다. Nova로 바꾸면서 "이 에이전트가 무엇을 해야 하는가"를 다시 정의했다. 이름이 설계를 끌고 간다.

그리고 엣지 케이스는 언제나 예상보다 많다. 파싱 로직 하나가 몇 줄밖에 안 됐는데, 그게 없으면 응답의 일부가 조용히 사라진다. 조용한 버그가 제일 위험하다.


다음 일지는 이력서 PDF 파싱 구현하면서 쓸 예정.