본문으로 건너뛰기
5분 AI.
TRENDSHIFT DAILY #6 · 2026-10-27 재검토

cindy 딥다이브
— Claude Code·Codex를 한 앱에 묶은 로컬 에이전트 클라이언트

앱

빠른 판단

무엇
Claude Code·Codex·Pi를 하네스로 묶고 메모리·스케줄·컴퓨터 제어·다중 에이전트 협업을 얹은 오픈소스 데스크톱·모바일 에이전트 앱
이럴 때
Claude Code·Codex 구독을 한 앱에서 쓰며 반복 업무 예약, 브라우저·컴퓨터 제어, Lead/Worker 병렬 작업을 시도하거나 구조를 배울 때
입력
작업 지시, 로컬 프로젝트·파일, Claude Code/Codex 로그인 또는 API 키
결과
에이전트 세션 결과, 예약 실행, 컴퓨터·브라우저 조작
도입 전 확인
서버는 비공개이며 공식 빌드는 사용 통계와 heartbeat를 전송; 설치 시 실행 파일 자동 다운로드
Cindy는 내 컴퓨터에서 돌아가는 오픈소스 AI 에이전트 앱입니다. 직접 모델을 호출하는 대신 Claude Code · Codex · Pi라는 기존 코딩 에이전트를 “하네스(harness)”로 끼우고, 그 위에 메모리·스킬·스케줄러·브라우저/컴퓨터 제어·모바일 원격·다중 에이전트 협업(Orca)을 얹습니다. 이 문서는 Electron 데스크톱, Expo 모바일, 공유 패키지 34개로 이뤄진 17,045개 파일 모노레포를 소스 기준으로 해부합니다. 서버는 이 저장소에 없습니다. 규모 수치는 최초 분석 시점이며, 2026-10-26 개정은 아래 4절에 별도로 정리했습니다.

추가 검토 · 93deda05 · 2026-10-25

아래 본문의 파일 수·디렉터리 규모와 구조 설명은 최초 분석 cf789a5를 보존했습니다. 이후 93deda053aeb06008a15a084d465932dd82ae10a까지의 변경을 추가로 읽었습니다. 설치 조건과 공개 클라이언트·별도 서버의 구분은 같으며, 아래 변화는 소스 대조 결과로 실제 앱 실행 검증은 하지 않았습니다.

목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

makecindy/cindy · Apache-2.0 · 클라이언트 모노레포
ONE LINE

Claude Code와 Codex를 “엔진”으로 갈아 끼우면서, 기억·도구·일정은 앱이 계속 들고 있는 에이전트 데스크톱

README는 Cindy를 “바로 쓸 수 있는 오픈소스 AI 에이전트”라고 소개합니다. 소스를 읽으면 실제 구조가 더 분명해집니다. 모델 호출 루프를 처음부터 만든 것이 아니라, 이미 있는 코딩 에이전트(Claude Code SDK, Codex app-server, Pi)를 어댑터로 감싸고 그 바깥의 작업 환경을 전부 직접 만든 앱입니다.

항목확인한 내용
정체Electron 데스크톱 + Expo(React Native) 모바일 + 공유 패키지로 이뤄진 pnpm 모노레포 (pnpm-workspace.yaml: apps/*, packages/*)
라이선스Apache-2.0. 단 모델 가중치·프롬프트·상표 등은 별도 조건일 수 있다고 README가 명시
규모추적 파일 17,045개. .ts 10,864 · .tsx 2,115 · .js 1,447 · .json 645 · .sql 132 · .swift 92 (git ls-files 집계)
서버이 저장소에 없음. 클라이언트는 기본적으로 Cindy 공식 클라우드(config/endpoint.json)에 붙고, 로그인 없이 로컬 에이전트만 쓰는 “Skip Sign-In” 모드가 있음
최근 릴리스v0.1.115 (v0.1.114, v0.1.113 순)
먼저 알아둘 것
“완전 로컬”이 아닙니다

공식 빌드는 TapDB 사용 통계와, 로그인 중 온라인 heartbeat(계정 ID·플랫폼·버전)를 보냅니다. 채팅·파일 내용은 수집하지 않는다고 README가 밝히며, 소스 빌드는 initTapdb() 호출을 지워 끌 수 있습니다. 공식 서비스를 쓰면 모델 사용량이 Cindy 서버를 거칩니다.

2왜 주목받는가

트렌딩 이유와 경쟁 제품 대비 위치

TrendShift 큐에서 20위로 잡힌 레포입니다. 순위 자체는 모멘텀 점수라 이유를 단정할 수 없지만, 저장소에서 확인되는 차별점은 세 가지입니다.

POINT 1

하네스와 모델을 섞고, 작업 도중 바꾼다

README는 Claude Code와 Codex가 첫 지원 하네스이고 네이티브 하네스를 준비 중이라고 쓰며, 한 작업을 서로 다른 하네스 × 모델 조합이 계획·병렬 실행·리뷰하게 할 수 있다고 설명합니다. 코드에서는 AgentKind = 'claude-code' | 'codex' | 'pi' (packages/maker-scheduler/src/types.ts)가 이 축을 드러냅니다.

POINT 2

이미 결제한 구독을 그대로 쓴다

공식 Cindy 서비스 로그인, Claude Code / Codex Coding Plan 인증, 직접 API 키, 로컬 모델 네 가지 경로를 README가 나열합니다. 코딩 에이전트를 이미 쓰는 사람에게는 “이중 결제 없음”이 진입 장벽을 낮춥니다.

POINT 3

코딩 도구가 아니라 “일 시키는 앱”까지 확장

브라우저·컴퓨터(접근성 트리 기반)·안드로이드 제어 MCP, 크론 스케줄러, 메신저(IM) 연동, 모바일에서 데스크톱 원격 제어가 같은 저장소에 있습니다. 터미널 중심의 Claude Code·Codex 단독 사용과 달리 비개발 업무까지 한 앱 안에서 이어 붙이려는 방향입니다.

비슷한 도구와의 거리

비교 대상Cindy가 다른 점
Claude Code / Codex 단독둘 다 내부에서 감싸 쓰는 대상. Cindy는 그 위의 GUI·메모리·스케줄·원격 계층
일반 AI 채팅 앱로컬 파일·로그인된 앱·git worktree에 실제로 접근하는 에이전트 세션을 관리
멀티에이전트 프레임워크라이브러리가 아니라 완성된 데스크톱 앱. 다만 서버가 비공개라 전체를 자체 호스팅할 수는 없음

3기술 스택 전체 지도

루트·데스크톱·모바일 package.json 기준
영역사용 기술 (확인한 버전)
런타임Node.js ≥22.12 (.nvmrc 22.22.3), pnpm 10.33.2 (v11 미지원)
데스크톱Electron 42.11.12, React 19, Vite 6, Electron Forge, better-sqlite3 12 + Drizzle ORM 0.45
모바일Expo ~57.0.23, React Native 0.86.3, React 19.2.3, apps/mobile/modules의 Swift·네이티브 모듈 18개
에이전트 코어@anthropic-ai/claude-agent-sdk 0.3.292, @anthropic-ai/sdk 0.93.0, Codex app-server 프로토콜, Pi 하네스
도구 계층MCP 서버 묶음(packages/lizi-mcps), 브라우저 제어 런타임, OpenCLI 벤더 패키지
테스트Vitest 3, node --test 러너 자체 테스트, e2e 티어, 이름에 .test.가 들어간 파일 약 5,600개
보조 앱apps/cindy-headless — Electron 없이 같은 maker-core로 CLI/Harbor 벤치마크 실행

백엔드에 해당하는 것

서버는 별도 저장소입니다. 이 저장소에서 “백엔드”에 가까운 것은 두 가지입니다. 하나는 Electron main 프로세스(apps/desktop/src/main)로 DB, IPC, 에이전트 프로세스 관리, 스케줄러 호스트, 디바이스 링크를 맡습니다. 다른 하나는 요청 필드를 정리해 주는 anthropic-compat-proxy 같은 로컬 루프백 프록시입니다. 이 프록시는 Claude Code SDK가 비Anthropic 모델 게이트웨이와 대화할 때 Anthropic 전용 필드를 걷어냅니다.

프론트엔드

Electron renderer(src/renderer)와 Expo 앱(apps/mobile)이 각각 React로 작성됩니다. 디자인 토큰은 packages/design-tokens와 루트 DESIGN.md가 규정하고, CI에 하드코딩 색상 감사·디자인 근거 PR 검사 워크플로가 따로 있습니다.

인프라·배포

GitHub Actions 워크플로 4개(ci.yml, pr-code-review.yml, pr-design-basis.yml, pr-template-rules.yml), DCO 서명 검사, Dependabot이 있습니다. 데스크톱 빌드는 Electron Forge, 모바일은 EAS(eas.json)입니다.

4아키텍처 심화 분석

harness 어댑터 → 세션 → MCP 도구 → 호스트(Electron)

핵심은 packages/maker-core입니다. package.json 설명은 “agent abstractions, session orchestration, zero Electron deps”이고, index.ts 머리 주석이 “본 패키지는 Electron 의존이 없다. 모든 IO(safeStorage, userData, spawn 경로)는 host 층이 주입한다”고 못 박습니다. 그래서 같은 코어를 데스크톱과 cindy-headless가 함께 씁니다.

+-------------------------------------------------------------+ | apps/desktop (Electron) apps/mobile (Expo) | | renderer(React) <-IPC-> main 원격 제어 / 알림 | | maker-host / maker-ipc / localDb(SQLite+Drizzle) | | scheduler-host / im / device-link / mcp-integrations | +-----------------------------|-------------------------------+ | 의존성 주입 (IO, 경로, 저장소) +-----------------------------v-------------------------------+ | packages/maker-core (Electron 의존 0) | | Maker --> Session(3,632줄) --> BaseAgent | | | | | +----------------+----------------+ | | v v v | | claude-code/ codex/ pi/ | | (Agent SDK) (app-server 프로토콜) (JSON 라인 transport) | | memory/ (FTS) types/ interfaces/ | +-----------------------------|-------------------------------+ | MCP +-----------------------------v-------------------------------+ | packages/lizi-mcps : computer / android / browser / orca / | | memory / scheduler / contacts / docs / ssh / slack / wechat| +-------------------------------------------------------------+

1. 하네스 추상화: BaseAgent

agents/base-agent.ts는 Claude Code·Codex 등을 통일하는 추상 클래스입니다. 주석의 설계 요점은 두 가지입니다. 지원하지 않는 기능은 기본적으로 NotSupportedError를 던지고, 하위 클래스가 capabilities에 맞춰 덮어씁니다. 의존성은 주입받되 사용 방식은 하위 클래스가 정합니다. 즉 “하네스마다 되는 일이 다르다”를 숨기지 않고 능력 표로 드러내는 방식입니다.

권한 모드도 이 차이를 그대로 반영합니다.

// packages/maker-core/src/types/common.ts
export type PermissionMode =
  | 'ask' | 'default' | 'acceptEdits'
  | 'plan' | 'auto' | 'bypassPermissions';
// 주석: Claude Code는 전체 집합, Codex는 ask / auto / bypassPermissions 부분집합.
//       나머지는 NotSupportedError

2. 세션 오케스트레이션

session.ts(3,632줄)와 maker.ts(1,832줄)가 세션 생명주기를 맡고, 테스트가 파일명으로 쪼개져 있어 다루는 문제를 알 수 있습니다: session.tool-loop, session.turn-stall, session.vision-bridge, session.async-user-questions, session-send-outcome. 데스크톱 쪽에는 AgentInputCoordinator가 “전송·큐잉·끼어들기·중지 후 계속” 입력 트랜잭션을 소유한다고 docs/dev-rules/repo-map.md가 적습니다.

3. 도구는 MCP로 노출

packages/lizi-mcps/src에 인프로세스 MCP 서버들이 있습니다. computer/tools.ts는 get_accessibility_tree, launch_app, click, type_text, press_key, hotkey, scroll, start_recording, replay_trajectory 등을 정의합니다. 화면 픽셀 추측이 아니라 접근성 트리와 창 상태(get_window_state, verify_state)를 기준으로 조작하는 구성입니다. android/는 폰 제어, orca/는 아래 협업 도구입니다.

4. Orca: Lead와 Worker

docs/dev-rules/orca-team-architecture.md가 권위 문서입니다. Lead 세션이 작업을 쪼개 배정하고 검수하며, Worker는 일회성 서브에이전트가 아니라 자기 모델·도구 호출 흐름·컨텍스트·기록을 가진 완전한 세션입니다. 로컬 Claude Code·Codex·Pi가 Lead나 Worker가 될 수 있고, SSH 원격 세션과 device-link 피어도 지원한다고 적혀 있습니다. lizi-mcps/src/orca/server.ts에는 get_workspace_info, worker_status, read_worker 같은 도구가 있는데, 설명문이 “정상 폴링에 쓰지 말라, Worker가 끝나면 알아서 알려준다”고 경고합니다. 상태를 계속 묻는 루프가 아니라 완료 통지로 움직이게 설계했다는 증거입니다.

5. 스케줄러와 메모리

maker-scheduler는 ScheduleKind = 'cron'만 정의하고 실행 모드는 'agent' | 'script'입니다. 실행 단계에 queued(대기 전용)를 두면서 동시 실행 한도에서 제외한 이유가 주석에 남아 있습니다. 2026-07-29 사고로 대기 중인 하트비트 4개가 모든 슬롯을 차지해 다른 작업이 3.5시간 멈췄다는 기록입니다. 메모리는 maker-core/src/memory(manager.ts, fts.ts, scope-resolver.ts)가 범위(scope)를 해석하고 전문 검색(FTS)을 제공합니다.

6. 모델 계층

packages/model-providers는 catalog.ts, byok.ts, localModelCatalog.ts, modelAccessValidator.ts 등으로 공식·직접 키·로컬 모델 목록과 가격·추론 단계 메타데이터를 층층이 합칩니다. responses-chat-bridge, anthropic-responses-bridge, responses-anthropic-bridge 같은 변환 패키지는 서로 다른 API 형식을 이어 붙이는 용도로 보입니다(이름과 구조에서 추정한 부분입니다).

2026-10-26 개정: 플러그인 하네스 브리지와 채팅 캐시

이번에는 커밋 abcc0e42b4013f0f58de312a94a3c1807b6e4467까지의 변경 중 실행 경계·이력 저장·시작 인증을 중심으로 읽었습니다. 아래의 큰 디렉터리별 파일 수는 초판 관측값이며 현재 개수로 다시 센 값이 아닙니다.

수동 압축은 별도 백그라운드 압축기를 만드는 기능이 아닙니다. 브리지 문서는 10초 뒤 결과를 모르는 경우 unknown을 반환하고 다른 requestId로 자동 재시도하지 않도록 합니다. 위 동작은 코드와 문서 대조이며 앱 실행·로그인·모델 호출은 검증하지 않았습니다.

2026-10-27 개정: 최종 응답 전달과 저장 모델 복구

현재 82d44ec3eedb923e268ae963114a09849ee62655에서는 Telegram 최종 응답이 긴 rate limit 대기에 막혀 작업 종료까지 지연되던 경로를 바꿨습니다. telegramTurnCarrier.ts는 진행 전송 대기·최종 분할·정리를 포함해 클라이언트 처리에 120초 상한을 둡니다. 기한이 지나면 기존 carrier를 닫고 false를 반환해 서버의 기존 발송 경로로 책임을 돌립니다. 제한 시간을 억지로 줄여 재요청하는 방식이 아니며, 늦은 실패 회신이나 진행 업데이트가 옛 메시지를 다시 보내지 않게 합니다.

봇의 저장된 모델 선택을 다시 승인하는 과정도 버전으로 기록합니다. updateBotProfile()은 acceptSavedModelSelectionVersion이 현재 버전과 맞는지 확인하고, 동일한 선택을 다시 승인해도 DB 버전을 올릴 수 있습니다. 다른 기기에서 설정이 바뀐 상태를 오래된 화면이 덮지 않도록 하는 조건입니다.

createBotModelRouteApplier()는 선택을 대기열에 넣었다는 사실만으로 복구 표시를 지우지 않습니다. 하네스 전환 대기와 같은 하네스 내 runtime 변경 대기를 모두 확인하고, 실제 적용 완료 뒤 정리합니다. 대응 단위 테스트는 대기 중 취소·재시도와 적용 완료 후 표시 제거를 다룹니다. 이 문서에서는 테스트 소스를 읽었고 앱·모델·Telegram 전송은 실행하지 않았습니다.

5디렉토리 구조 해부

git ls-files 기준 상위 디렉터리별 파일 수
cindy/
├─ apps/
│  ├─ desktop/            9,936개  Electron 클라이언트 (main / renderer / preload / shared)
│  ├─ mobile/             2,381개  Expo 앱 + modules/ 네이티브 모듈
│  ├─ cindy-headless/        82개  CLI·Harbor 어댑터 (Electron 없이 maker-core 사용)
│  └─ android-platform-tools-bin/   윈도우 패키징용 (바이너리는 커밋하지 않음)
├─ packages/              (34개)
│  ├─ opencli-vendor/     1,443개  OpenCLI 레시피 벤더링 (jackwener/opencli)
│  ├─ browser-control-runtime/ 412  브라우저 제어
│  ├─ maker-core/           405   에이전트 코어
│  ├─ lizi-mcps/            397   MCP 서버 묶음
│  ├─ maker-shared/         240   공용 타입·판정
│  ├─ device-link/          132   기기 간 링크 프로토콜
│  ├─ lizi-im/ · model-providers/ · model-compat/ · voice-input-core/ ...
├─ docs/                  dev-rules(46) · product-rules(37) · design-rules(32) · legal ...
├─ config/                endpoint.json (공식 서비스 엔드포인트)
├─ scripts/               ensure-agent-binaries.mjs, test-workspaces.mjs ...
├─ tools/                 claude / codex-package / ripgrep / pi 바이너리 갱신 스크립트
└─ AGENTS.md · CLAUDE.md · DESIGN.md · CONTRIBUTING*.md · SECURITY*.md

데스크톱 main 프로세스 안쪽

디렉터리 (apps/desktop/src/main)파일 수맡은 일
maker-ipc596렌더러와의 IPC, 입력 코디네이터, 권한 변경, 중단 복구
maker-host440maker-core에 주입할 IO(저장소·경로·프로세스)
cindy-brain408카드, 슬롯, 게이트웨이 준비도 등 에이전트 부가 기능
localDb289SQLite + Drizzle, 세션 중단 판정
im209메신저 연동
device-link180모바일·원격 기기 링크
cindy-make154소스에서 실행 환경을 준비하는 흐름
mcp-integrations125MCP 통합

이 폴더 이름만으로 정확한 책임을 단정하기는 어렵습니다. 위 “맡은 일”은 문서(repo-map.md)에서 확인되거나 파일명에서 읽은 것이며, 확인하려면 각 폴더의 __tests__를 보는 편이 빠릅니다.

규칙 문서가 코드만큼 중요하다

루트 AGENTS.md는 Codex와 Claude Code가 함께 쓰는 정본이고 CLAUDE.md는 @AGENTS.md 한 줄만 둡니다. 수정 범위별로 읽어야 할 문서를 표로 연결하고(예: Desktop 변경 → docs/dev-rules/desktop-development.md), 모델 카탈로그·자격증명 저장·미디어 프로토콜처럼 사고가 나기 쉬운 영역은 “수정 전 반드시 읽을 것”으로 지정합니다. 에이전트가 코드를 고치는 저장소의 모범적인 운영 사례입니다.

6학습 포인트 (기술별)

이 레포에서 배울 수 있는 것
주제어디를 보면 되나배울 점
어댑터로 이질적 에이전트 통일maker-core/src/agents/base-agent.ts, agents/codex/app-server/능력 표(capabilities)와 NotSupportedError로 “못 하는 일”을 명시하는 설계
코어/호스트 분리maker-core/src/index.ts 머리 주석, docs/dev-rules/architecture-invariants.md패키지는 renderer·main을 import하지 않고 IO를 주입받는다는 의존 방향 규칙
MCP 도구 설계lizi-mcps/src/computer/tools.ts, snapshotGuard.test.ts접근성 트리 + 상태 검증(verify_state)으로 컴퓨터 조작의 신뢰도를 올리는 법
다중 에이전트 통지 모델lizi-mcps/src/orca/server.ts, orca-team-architecture.md폴링 대신 완료 통지, Worker를 완전한 세션으로 다루는 구조
스케줄러 동시성maker-scheduler/src/types.ts대기 상태를 동시 실행 한도에서 빼는 이유(실사고 주석)
멀티 프로바이더 모델 카탈로그packages/model-providers/src, docs/dev-rules/model-catalog-maintenance.md서버 정본·클라이언트 오프라인 사본·현지 오버라이드를 겹쳐 쓰는 방식
벤더링과 출처 고정packages/opencli-vendor/UPSTREAM.json상위 커밋 SHA와 파일별 SHA-256, 제외 목록(selection.json)을 남기는 외부 코드 편입법
바이너리 공급망scripts/ensure-agent-binaries.mjs, tools/*/latest.json실행 파일은 git에 넣지 않고 고정 버전으로 내려받아 검증
GOOD PRACTICE
AGENTS.md를 “목차”로 쓰기

루트 AGENTS.md는 모든 규칙을 담지 않고 수정 범위별 문서 링크 표만 둡니다. 모듈 전용 규칙은 apps/desktop/AGENTS.md 같은 중첩 파일에 두고, 반복 가능한 사고는 dev-rules 문서로 뺍니다. 에이전트 컨텍스트를 아끼면서 필요한 규칙을 놓치지 않게 하는 구조입니다.

이 저장소를 읽는 가장 좋은 순서는 UI가 아니라 maker-core의 타입(types/)과 BaseAgent이고, 그 다음 Orca 문서입니다. 나머지는 이 뼈대에 붙은 기능이기 때문입니다.

7하드웨어 / 시스템 요구사항

사용자 설치와 소스 빌드는 요구 조건이 다릅니다
구분조건
일반 사용cindy.app/download에서 설치. 지원 OS 전체 목록은 이 저장소만으로 확인하지 못함. 리눅스는 docs/linux.md가 Ubuntu, Arch Linux, Omarchy(Hyprland) x86_64 설치와 앱 내 업데이트를 안내
소스 빌드Node.js 22.x, pnpm 10.x(11 미지원), Git LFS
패키징 타깃pnpm supportedArchitectures가 win32·darwin·linux × x64·arm64(glibc)를 선언
메모리CI가 데스크톱 전체 타입체크에 --max-old-space-size=8192(8GB 힙)를 지정. 주석에 4GB를 넘겼다고 적혀 있어 로컬 전체 타입체크는 16GB급 메모리가 필요할 것으로 추정
네이티브 빌드onlyBuiltDependencies: better-sqlite3, electron, node-pty, sharp, esbuild, @parcel/watcher 등
계정공식 서비스 기능은 Cindy 계정 필요. Skip Sign-In이면 로컬 에이전트만 사용, 서버 의존 기능 불가
모바일Expo/React Native 개발 환경과 시뮬레이터. 모바일 실기기 배포는 EAS 설정에 의존
주의
postinstall이 바이너리를 내려받습니다

pnpm install의 postinstall은 ensure-agent-binaries.mjs --best-effort로 Claude Code·Codex·ripgrep·Pi 실행 파일을 플랫폼에 맞게 내려받습니다(실패해도 경고만). 스크립트 안에 CDN 폴백이 있고 디렉터리형 배포물은 매니페스트로 검증합니다. 신뢰하지 않는 환경에서는 XDT_SKIP_AGENT_BIN_INSTALL=1(CI가 쓰는 설정)을 먼저 지정하는 편이 안전합니다.

8직접 해볼 수 있는 실습 과제

난이도별 5개 · 코드 읽기 위주

실습 1 · 구조 지도 그리기 입문

클론 후 아무것도 실행하지 않고 파일 수만 세어 보세요.

git clone https://github.com/makecindy/cindy.git
cd cindy
git ls-files | awk -F/ '{print $1"/"$2}' | sort | uniq -c | sort -rn | head
sed -n 1,60p docs/dev-rules/repo-map.md

위 5절의 표와 같은 순위가 나오는지 확인하고, repo-map.md의 “사용자 행동 → 코드 위치” 표에서 관심 있는 행동 하나를 골라 파일을 열어 보세요.

실습 2 · 능력 표 비교 초급

packages/maker-core/src/types/capabilities.ts와 agents/claude-code, agents/codex를 열어 두 하네스가 지원하는 기능을 표로 정리합니다. 권한 모드가 Claude Code는 6가지, Codex는 3가지인 이유를 코드에서 찾아 보세요.

실습 3 · mock 모드로 UI 띄우기 중급

계정 없이 화면만 보려면 문서(docs/dev-rules/ui-mock-data.md)가 안내하는 모의 실행이 있습니다.

pnpm install            # postinstall이 바이너리 내려받음 (위 경고 참고)
pnpm restart:desktop:remote -- --mock

로그인·서버·정식 데이터를 건드리지 않는 별도 샌드박스(ui-mock)에서 열린다고 문서에 적혀 있습니다. 설치 단계에서 외부 다운로드가 일어나므로 격리된 환경에서 시도하세요. 이 문서 작성자는 실제로 실행해 보지 않았습니다.

실습 4 · MCP 도구 하나 추적 중급

lizi-mcps/src/computer/tools.ts에서 click 도구의 스키마, 실행 함수, 실패 시 복구(recovery.ts), 결과 변환(result.ts)을 따라가며 입력 → 검증 → 실행 → 결과의 흐름을 직접 그려 보세요. snapshotGuard.test.ts가 어떤 실수를 막는지도 읽어 봅니다.

실습 5 · 작은 하네스 어댑터 스케치 고급

BaseAgent를 참고해 “메시지를 보내면 이벤트 스트림을 돌려주는” 인터페이스를 직접 설계해 보세요(개인 프로젝트로, 저장소를 수정할 필요는 없습니다).

interface MiniAgent {
  capabilities: { plan: boolean; resume: boolean };
  send(msg: string): AsyncIterable<AgentEvent>;
  setPermission(mode: 'ask' | 'auto'): void; // 미지원이면 NotSupportedError
}

그다음 types/events.ts의 이벤트 종류와 비교해 무엇이 빠졌는지 찾습니다.

9관련 기술 심화 학습 로드맵

4주 계획
주차목표할 일
1주차구조 파악README, AGENTS.md, repo-map, architecture-invariants 읽기. packages 34개 역할 표 만들기
2주차에이전트 코어BaseAgent, session.ts의 turn 흐름, Codex app-server와 Claude Agent SDK 연동 비교
3주차도구와 협업MCP 서버(computer·orca·memory), Orca 문서의 “행동 계약”과 “함정과 불변식” 읽기
4주차운영 품질CI 워크플로, DCO, 마이그레이션 규칙(database-and-migrations.md), 로그 업로드 정제(log-upload-and-redaction.md)

함께 보면 좋은 외부 주제: MCP 명세, Electron 보안 모델(contextIsolation, IPC 경계), Drizzle ORM 마이그레이션, Expo 개발 빌드.

10핵심 키워드 사전

처음 나오는 용어
TERM
하네스 (harness)
Cindy가 안쪽에서 구동하는 코딩 에이전트 실행체. 현재 Claude Code, Codex, Pi.
TERM
maker-core
Electron 의존이 없는 에이전트·세션 코어 패키지. 데스크톱과 headless가 공유.
TERM
host 층
코어가 필요로 하는 IO(저장소, 경로, 프로세스 생성)를 주입하는 쪽. 데스크톱의 maker-host.
TERM
Orca
Lead 세션이 여러 Worker 세션에 일을 나눠 맡기는 협업 기능.
TERM
lizi-mcps
컴퓨터·안드로이드·브라우저·메모리·스케줄러 등을 MCP 도구로 노출하는 패키지.
TERM
device-link
기기 간 연결 프로토콜. 모바일에서 데스크톱 세션을 제어하거나 작업을 공유할 때 사용.
TERM
OpenCLI
여러 사이트·앱의 명령을 레시피로 묶은 외부 프로젝트. 상위 1,223개 명령 중 Cindy 기본 목록은 1,065개.
TERM
DCO
커밋마다 git commit -s로 서명하는 기여 증명. CLA는 없음.
TERM
BYOK
Bring Your Own Key. 사용자가 직접 API 키를 연결하는 방식.

11참고 링크

개정 근거: 플러그인 브리지 계약 · 캐시 트랜잭션 · 인증 시작 게이트.

이번 개정 근거: 최종 전송 기한 · 모델 적용·복구 표시 · 설정 버전 검증.