Nora Intake 가이드
Nora Intake는 여러 채널의 데이터를 이 PC에서 수집하고, SQL 없이 canonical 데이터로 가공해, 어떤 제품·에이전트든 읽어갈 수 있는 데이터 API와 MCP로 내보내는 데스크탑 앱입니다. 서버도, 로그인도 없습니다.
개요
네 단계로 생각하면 쉽습니다.
- 연동 — 커넥터·봇·파일로 소스를 붙입니다.
- 수집 — 데이터가 로컬 DB에 멱등하게 쌓입니다(중복 없음).
- 가공·조합 — 조합(라이브 뷰)·가공(canonical)으로 원하는 형태로.
- 소비 — 데이터 API·MCP로 제품과 코딩 에이전트가 읽어갑니다.
설치
최신 릴리스에서 macOS(.dmg)를 내려받아 설치합니다. 설치 후 자동 업데이터가 새 버전을 받습니다.
봇 자동화를 쓰려면 Google Chrome이 필요합니다(앱이 사용자의 Chrome을 구동).
라이선스 활성화
첫 실행 시 라이선스 키를 입력합니다. 키는 이 기기에 전역 저장(~/.nora)되고 온라인으로 검증됩니다. 오프라인에서도 마지막 검증 이후 일정 기간(grace) 동작합니다.
연동 (커넥터)
연동 화면에서 커넥터(네이버·쿠팡·이지어드민·Meta·Apify 등)를 추가합니다. 커넥터마다 필요한 인증(키/토큰)을 입력하며, 비밀값은 이 PC에만 저장되고 화면으로 평문 반출되지 않습니다.
Apify처럼 검색 조건이 바뀌는 커넥터는 연결 시 키워드·조건을 입력하고, 이후에도 “검색 입력”에서 수정할 수 있습니다.
수집
“지금 수집”으로 즉시, 또는 수집 방식(배치/리얼타임)과 주기를 정해 자동으로 데이터를 가져옵니다. 같은 레코드를 다시 받아도 자연키·내용 해시로 중복을 걸러 깨끗하게 누적됩니다.
로컬 DB
수집 데이터는 production급으로 튜닝된 로컬 SQLite(WAL·busy_timeout·인덱스)에 저장됩니다. 여러 커넥터·봇·API가 동시에 써도 안전하게 동작하는 “한 대짜리 데이터 서버”입니다.
로컬 화면에서 테이블(소스)을 보고, 행을 직접 추가·수정·삭제할 수 있습니다. 즉, 앱을 설치하면 그 자체로 단단한 로컬 DB가 됩니다.
조합 (Combine)
여러 소스를 union·조인·필터·집계해 하나의 “뷰”로 만듭니다. 복사 없이 매번 라이브로 계산되어 항상 최신입니다. `/v1/data?source=<조합>` 또는 MCP로 읽습니다.
가공 (Transforms)
원천 수집을 named canonical 소스(예: `tiktok.post_metrics`)로 바꾸는 데이터 레이어입니다. SQL 없이 수식(중첩 path·coalesce·if·cast·null-safe 비율)과 단계(compute·filter·latest_per·group_summarize·rank_top_n·join)로 정의합니다.
- 채팅으로 설명하면 AI가 초안을 만들고, 드롭다운 빌더로 다듬습니다.
- 발행하면 이후 데이터가 쌓일 때마다 자동 재계산(compute-on-ingest)됩니다.
내보내기 · 이관
데이터(소스·조합·가공)를 원하는 폴더에 CSV·JSON·JSONL로 내보냅니다. 전체 설정(데이터+봇+연동+가공+조합+브라우저 로그인)은 하나의 `.nora-intake` 파일로 내보내 새 컴퓨터에서 “가져오기”로 복원합니다.
봇
봇은 액션 노드의 그래프입니다(이동·클릭·추출·for_each 등). 자연어나 이미지로 설계하고, 캔버스에서 노드를 손봅니다. 로그인 벽은 “로그인 브라우저”에 한 번 로그인해 세션을 재사용하는 방식으로 넘습니다.
다중 브라우저
설정 › 엔진에서 명명 브라우저를 여러 개 등록하고 각각 다른 계정으로 로그인합니다. 각 브라우저는 껐다 켜도 유지되는 고정 프로필입니다.
- 봇 툴바에서 봇을 브라우저 하나 또는 여러 개에 배정합니다.
- 여러 개를 고르면 같은 플로우가 각 창에서 동시에 돌고, for_each 행은 균등 분할됩니다(10개 = 약 10배).
- 서로 다른 봇도 각자 브라우저에서 병렬로 실행됩니다.
발행 · 버전
편집 중인 것은 드래프트, 발행하면 스케줄러가 도는 라이브 버전이 됩니다(반쯤 만든 편집이 프로덕션을 건드리지 않음). 모든 편집은 자동으로 버전 기록되어, 언제든 이전 버전으로 복원할 수 있습니다.
데이터 API
표준 봉투로 읽고 씁니다.
# read (raw · canonical · combination)
GET /v1/data?source=tiktok.post_metrics&where=views:gt:1000&order=record.views.desc
# write (the local store is a real DB)
POST /v1/data/:source # add a row
PATCH /v1/data/:source/:id # update fields
DELETE /v1/data/:source/:id # delete로컬은 열려 있고(localhost), 외부(터널)는 토큰이 필요합니다. 파일 경로·내보내기 엔드포인트는 이 PC에서만 동작합니다.
MCP (Claude Code · Codex)
MCP는 표준 프로토콜이라 하나의 서버가 모든 코딩 에이전트에서 그대로 동작합니다. Claude Code, Codex, Cursor 어디서든 같은 도구를 씁니다 — 등록 형식만 다릅니다.
핵심: 이 설정만 복사하면 Codex든 Claude Code든 됩니다. 설정 › MCP 탭에서 사용하는 에이전트 것만 복사해 붙여넣으세요(경로·토큰 자동 채움).
- Claude Code —
claude mcp add nora-intake -- node …/index.mjs - Codex — ~/.codex/config.toml 에
[mcp_servers.nora-intake] - Cursor / 기타 —
{ "mcpServers": { "nora-intake": … } }
도구는 앱 거의 전 범위를 덮습니다: 연동·수집·로컬 읽기/쓰기·조합·가공·봇 설계/실행·브라우저 관리·실행결과 확인·파일 내보내기·발행/버전 복원. 앱이 켜져 있어야 합니다.
릴레이 / 원격
공개 도메인(터널)을 켜면 데이터 API를 외부에서 읽을 수 있습니다. 이때는 토큰이 필수이고, 라이선스가 유효할 때만 응답합니다. 데이터는 사용자 PC를 떠나지 않으며, 원격 공유는 사용자가 켤 때만 열립니다.
자동 업데이트
앱은 코드 서명·공증·서명된 업데이터로 검증된 패치만 받아 설치합니다. 새 버전이 올라오면 자동으로 감지합니다.
FAQ
데이터가 외부로 나가나요?
아니요. 수집 데이터는 이 PC에만 저장됩니다. 릴레이를 켜서 직접 공유할 때만, 그것도 토큰으로 잠긴 채 나갑니다.
Codex와 Claude Code를 동시에 써도 되나요?
네. 같은 MCP 서버에 둘 다 등록하면 됩니다. 도구는 동일합니다.
개발 환경에서도 라이선스가 필요한가요?
아니요. 개발 빌드는 라이선스 없이 동작합니다.
더 궁금하면 앱의 설정 화면 각 탭에서 바로 확인할 수 있어요.