Dalkkak Product X-Ray

딸깍을 처음부터 끝까지 이해하는 페이지

목표는 용어 암기가 아니다. Dalkkak을 제품 목적, desktop architecture, AI/agent control, memory spine, Mission Control, trust gap까지 네 입으로 설명하게 만드는 것이다.

128
cards
10
layers
8
flows
One sentence

Dalkkak is a local-first work OS that lets a founder run BYO Claude/Codex agents across panes, worktrees, actions, memory, evidence, and gates.

AI를 대신 호출하는 제품이 아니라, AI worker가 실제 일을 하도록 둘러싼 workspace, memory, approval, verification, mission-control layer다.

Tech stack from absolute zero

여기는 용어 암기장이 아니라 Dalkkak을 설명하기 위한 스택 해부다. 각 카드를 열면 이 기술이 뭔지, 왜 썼는지, 대안과 trade-off가 뭔지, 어디 코드에 있는지, 면접 영어 문장까지 바로 나온다.

43
stack cards

0. Product shape

1
0. Product shapeCore

Local-first work OS

사용자 로컬 컴퓨터에서 AI 작업장을 직접 운영하는 제품 구조다.

Dalkkak is local-first because the product needs to control real terminals, files, worktrees, and AI sessions on the user's machine.

What it does

desktop app이 terminal, worktree, graph memory, approvals, mission control을 묶는다.

Why this stack

AI worker가 실제 파일/프로세스와 일하려면 브라우저 SaaS만으로는 부족해서 local runtime이 필요하다.

Trade-off

로컬 환경 차이, 권한, 설치, 업데이트, crash recovery를 제품이 책임져야 한다.

Alternative

순수 web SaaS는 배포/접근성이 좋지만 local process 제어가 약하고, CLI-only는 강력하지만 UX와 memory가 약하다.

Terms you must know
  • local-first = 핵심 작업이 사용자 기기에서 먼저 도는 구조
  • work OS = 작업, 실행, 기억, 검증을 묶는 운영 화면
  • BYO AI = 사용자가 가져온 Claude/Codex 계정을 활용
Where

ddalkkak apps/desktop, docs/product

Beginner trap

로컬 앱이라고 cloud가 전혀 없다는 뜻은 아니다.

1. Languages

2
1. LanguagesCore

TypeScript

renderer, web, server, shared package의 주 언어다.

TypeScript keeps UI, server, and action contracts understandable and refactorable across the monorepo.

What it does

React UI, Hono API, action contracts, shared types를 타입 있는 JS로 작성한다.

Why this stack

UI와 tool/action contract를 같은 언어로 정의하면 제품 iteration이 빠르다.

Trade-off

runtime validation이 없으면 type은 외부 입력을 막지 못한다.

Alternative

Rust만으로 UI까지 짜면 생산성이 낮고, plain JS는 refactor 안정성이 떨어진다.

Terms you must know
  • type = 데이터 모양 약속
  • contract = 서로 맞춰야 하는 입출력 규칙
  • runtime validation = 실행 중 외부 입력 검증
Where

ddalkkak package.json, apps/*/src, packages/*

Beginner trap

TypeScript type과 실제 외부 데이터 검증을 혼동하지 말라.

1. LanguagesCore

Rust

desktop local backend의 언어다.

Rust owns the dangerous local capabilities: spawning processes, reading files, storing secrets, and streaming terminal output.

What it does

PTY, tmux, file access, keyring, graph capture, process lifecycle 같은 OS 가까운 일을 처리한다.

Why this stack

local process control과 safety boundary가 중요해서 memory safety와 시스템 프로그래밍 생태계가 장점이다.

Trade-off

학습 난이도와 compile time이 있고, UI iteration은 TS/React보다 느릴 수 있다.

Alternative

Node child_process는 빠르게 만들 수 있지만 native packaging/security boundary가 약하고, Go는 단순하지만 Tauri와 직접 결합이 약하다.

Terms you must know
  • memory safety = 잘못된 메모리 접근을 컴파일 단계에서 줄이는 성질
  • systems programming = OS/파일/프로세스 가까운 코딩
  • ownership = Rust의 메모리 관리 규칙
Where

apps/desktop/src-tauri/src, Cargo.toml

Beginner trap

Rust라고 자동으로 제품이 안전한 건 아니다. exposed command surface가 중요하다.

2. Runtime

9
2. RuntimeCore

pnpm workspace

여러 앱/패키지를 한 repo에서 관리하는 패키지 매니저 구조다.

pnpm workspaces let the desktop, web, server, and shared packages evolve in one repo with explicit internal dependencies.

What it does

desktop, web, server, action-sdk, shared packages를 workspace dependency로 연결한다.

Why this stack

monorepo에서 설치 속도와 disk 효율이 좋고, 내부 패키지 변경을 한 번에 검증할 수 있다.

Trade-off

workspace boundary가 흐려지면 package 간 결합이 커질 수 있다.

Alternative

npm workspaces는 표준성이 좋고, yarn/berry는 기능이 강하고, nx/turborepo는 task orchestration이 강하다.

Terms you must know
  • workspace = 여러 package를 한 저장소에서 묶는 구조
  • package manager = dependency 설치 도구
  • monorepo = 여러 프로젝트가 한 repo에 있는 구조
Where

ddalkkak/package.json, pnpm-workspace.yaml

Beginner trap

monorepo는 자동으로 아키텍처가 좋은 게 아니다.

2. RuntimeCore

Tauri 2

웹 UI와 native Rust backend를 묶는 desktop app framework다.

Tauri gives Dalkkak a lightweight desktop shell where the web UI can safely call native Rust capabilities.

What it does

React renderer를 OS WebView에 띄우고, Rust command로 파일/프로세스/알림/업데이트를 처리한다.

Why this stack

Electron보다 가볍고 local capability가 필요해서 browser-only보다 맞다.

Trade-off

OS WebView 차이와 Rust/native boundary를 이해해야 한다. Electron보다 web compatibility가 낮을 수 있다.

Alternative

Electron은 Chromium 포함이라 일관성이 좋지만 무겁고, native Swift/Kotlin은 platform fit은 좋지만 cross-platform 비용이 크다.

Terms you must know
  • WebView = 앱 안의 브라우저 렌더링 영역
  • native shell = OS 기능을 가진 앱 껍데기
  • IPC = renderer와 backend 통신
Where

apps/desktop/src-tauri, apps/desktop/package.json

Beginner trap

Tauri가 Electron보다 가볍다는 말만 하고 권한 boundary를 빼먹으면 안 된다.

2. RuntimeCore

Tokio

Rust 비동기 runtime이다.

Tokio lets the Rust backend handle multiple terminal streams and background tasks without blocking the UI.

What it does

process IO, timers, async commands, background tasks를 동시에 처리한다.

Why this stack

terminal output과 여러 pane/session을 막힘 없이 다루려면 async runtime이 필요하다.

Trade-off

async Rust는 복잡하고 blocking 작업을 잘못 섞으면 runtime이 막힌다.

Alternative

표준 thread만 쓰면 단순하지만 확장성과 IO 관리가 떨어지고, async-std는 대안 runtime이다.

Terms you must know
  • async runtime = 비동기 작업을 실행하는 엔진
  • task = runtime이 관리하는 작은 작업 단위
  • blocking = thread를 오래 붙잡는 작업
Where

apps/desktop/src-tauri/Cargo.toml, src-tauri async commands

Beginner trap

async를 쓰면 race condition이 사라진다고 생각하면 안 된다.

2. RuntimeCore

Serde / serde_json

Rust와 JSON 사이 직렬화 도구다.

Serde is the bridge that turns Rust structs into JSON contracts for the renderer and local ledgers.

What it does

Tauri command payload, graph node, receipts, settings 같은 데이터를 구조화해서 주고받는다.

Why this stack

renderer와 Rust 사이 contract를 타입 있는 struct와 JSON으로 연결하기 좋다.

Trade-off

schema evolution을 신경 쓰지 않으면 오래된 JSONL이나 settings가 깨질 수 있다.

Alternative

manual parsing은 제어가 강하지만 오류가 늘고, protobuf는 contract가 강하지만 tooling이 무겁다.

Terms you must know
  • serialization = 객체를 문자열/bytes로 바꾸는 것
  • deserialization = 문자열/bytes를 객체로 읽는 것
  • schema evolution = 데이터 구조가 버전별로 바뀌는 문제
Where

Cargo.toml, graph/memory/settings code

Beginner trap

JSON이 flexible하다고 아무 모양이나 저장하면 안 된다.

2. RuntimeCore

Tauri command / IPC

React가 호출할 수 있는 Rust 함수와 통신 경계다.

Tauri commands are the explicit boundary where the UI asks Rust to perform local privileged work.

What it does

renderer가 invoke로 pty_spawn, graph_query, vault action 같은 backend 작업을 요청한다.

Why this stack

권한 있는 native 작업을 명시적 command surface로 제한할 수 있다.

Trade-off

command를 너무 많이/넓게 열면 공격면이 커진다. validation과 permission check가 필요하다.

Alternative

HTTP localhost server 방식도 가능하지만 desktop IPC보다 인증/포트/보안 문제가 늘 수 있다.

Terms you must know
  • IPC = 프로세스 사이 통신
  • invoke = renderer에서 backend command 호출
  • attack surface = 공격자가 시도할 수 있는 노출면
Where

apps/desktop/src-tauri/src/lib.rs, apps/desktop/src

Beginner trap

IPC가 직접 함수 호출처럼 보여도 serialization, async, permission 경계가 있다.

2. RuntimeCore

OS WebView

Tauri 앱 안에서 React UI를 그리는 브라우저 엔진이다.

The WebView renders the React cockpit, while Rust handles capabilities the browser sandbox cannot access.

What it does

macOS/Windows/Linux의 WebView가 HTML/CSS/JS UI를 렌더링한다.

Why this stack

React 생산성을 유지하면서 native app처럼 배포할 수 있다.

Trade-off

OS별 WebView 차이가 생길 수 있고, Electron처럼 같은 Chromium을 모두 포함하지 않는다.

Alternative

Electron은 runtime 일관성이 좋고, native UI는 OS fit이 좋다.

Terms you must know
  • renderer process = UI를 그리는 프로세스
  • Chromium = Chrome 기반 브라우저 엔진
  • platform difference = OS마다 동작이 조금 다른 문제
Where

Tauri renderer, apps/desktop/src

Beginner trap

WebView가 local file/process 권한을 직접 가진다고 생각하면 안 된다.

2. RuntimeCore

portable-pty

Rust에서 pseudo terminal을 만드는 라이브러리다.

portable-pty is the substrate that makes CLI agents behave like they are running in a real terminal.

What it does

Claude, Codex, shell, tmux 같은 interactive CLI를 진짜 terminal처럼 실행한다.

Why this stack

plain subprocess pipe로는 color, resize, interactive input이 깨질 수 있어서 PTY가 필요하다.

Trade-off

OS별 PTY 동작 차이와 EOF/resize/encoding edge case를 처리해야 한다.

Alternative

Node pty, system terminal app automation, raw process pipe가 대안이다.

Terms you must know
  • PTY = pseudo terminal
  • child process = 부모가 띄운 하위 프로그램
  • resize = terminal rows/cols 변경
Where

apps/desktop/src-tauri/Cargo.toml, pty.rs

Beginner trap

xterm.js가 PTY를 만드는 게 아니라 Rust 쪽 PTY가 실제 process를 붙잡는다.

2. RuntimeCore

tmux

터미널 세션을 유지/분할하는 multiplexer다.

tmux helps decouple long-running terminal sessions from the UI view lifecycle.

What it does

앱 재시작이나 pane 전환 후에도 session을 붙잡거나 여러 agent session을 관리한다.

Why this stack

AI 작업이 오래 걸리므로 UI lifetime과 process lifetime을 분리하는 데 유용하다.

Trade-off

사용자 machine에 tmux가 없거나 PATH가 다르면 실패한다. 설치/진단 UX가 필요하다.

Alternative

직접 session manager를 만들 수 있지만 복잡하고, OS terminal tabs에 맡기면 제품 통제가 약하다.

Terms you must know
  • multiplexer = 여러 terminal session을 한 곳에서 관리
  • detach/attach = 세션을 떼었다 다시 붙는 동작
  • PATH = 실행 파일을 찾는 디렉터리 목록
Where

session backend docs, pty.rs, CLAUDE.md env hygiene

Beginner trap

tmux를 쓰면 process recovery가 자동으로 완벽해진다고 말하지 말라.

2. RuntimeCore

ureq

Rust에서 쓰는 단순 HTTP client다.

ureq is a simple HTTP client for straightforward Rust-side service calls.

What it does

local backend가 외부 endpoint나 local service를 호출할 때 사용할 수 있다.

Why this stack

blocking/simple request에는 가볍고 이해하기 쉽다.

Trade-off

대량 async HTTP나 streaming에는 reqwest/async client가 더 맞을 수 있다.

Alternative

reqwest는 기능이 풍부하고, hyper는 low-level 제어가 강하다.

Terms you must know
  • HTTP client = 다른 서버에 요청을 보내는 코드
  • blocking = 응답 때까지 thread를 붙잡는 방식
  • timeout = 오래 걸리는 요청을 끊는 제한
Where

apps/desktop/src-tauri/Cargo.toml

Beginner trap

blocking client를 async path에서 아무 생각 없이 쓰면 안 된다.

3. Frontend

6
3. FrontendCore

React 19

desktop renderer와 web UI를 component로 만든다.

React is the cockpit layer: it renders panes, mission state, graph views, and user approvals.

What it does

workspace, panes, graph, mission board, forms, receipts 같은 화면을 상태 기반으로 그린다.

Why this stack

상호작용이 많은 조종석 UI라 component/state model이 잘 맞는다.

Trade-off

상태 ownership이 흐려지면 UI가 복잡해지고 성능 문제가 난다.

Alternative

Vue/Svelte는 더 간결할 수 있고, native UI toolkit은 platform integration이 강하다.

Terms you must know
  • component = UI 조각
  • renderer = Tauri WebView 안에서 화면을 그리는 프로세스
  • state = 화면을 바꾸는 데이터
Where

apps/desktop/src, apps/web/src

Beginner trap

React가 local process를 직접 spawn할 수 있다고 생각하면 안 된다.

3. FrontendCore

Vite

desktop renderer 개발 서버와 빌드 도구다.

Vite is a good fit for a Tauri renderer because the desktop shell needs a fast SPA bundle, not a server-rendered web app.

What it does

React renderer를 빠르게 dev/build하고 Tauri shell 안에 넣을 frontend bundle을 만든다.

Why this stack

desktop SPA renderer에는 Next보다 단순하고 빠른 Vite가 맞다.

Trade-off

SSR/route conventions가 필요한 web app이면 Next가 더 적합할 수 있다.

Alternative

Next.js는 full web framework이고, webpack은 성숙하지만 설정/속도 부담이 있다.

Terms you must know
  • bundler = 여러 JS/CSS 파일을 묶는 도구
  • dev server = 개발 중 빠르게 새로고침하는 서버
  • SPA = 브라우저에서 한 앱처럼 도는 화면
Where

apps/desktop/package.json, vite config

Beginner trap

Vite는 desktop backend가 아니라 frontend build tool이다.

3. FrontendCore

xterm.js

브라우저/WebView 안에 terminal 화면을 그리는 라이브러리다.

xterm.js renders the terminal UI; the actual process is still owned by the Rust PTY layer.

What it does

PTY output bytes를 화면에 표시하고 사용자의 keystroke를 backend로 보낸다.

Why this stack

터미널 UX를 직접 구현하지 않고 검증된 renderer를 쓸 수 있다.

Trade-off

실제 shell 실행은 하지 않는다. rendering과 process layer를 혼동하면 안 된다.

Alternative

Monaco terminal-like UI나 custom textarea는 interactive terminal fidelity가 약하다.

Terms you must know
  • terminal emulator = terminal 화면 동작을 흉내내는 UI
  • stdout = process 출력 stream
  • keystroke = 키 입력
Where

apps/desktop/package.json, TerminalPane.tsx

Beginner trap

xterm이 명령을 실행한다고 말하면 레이어 설명이 틀린다.

3. FrontendCore

react-mosaic-component

여러 pane을 나누어 배치하는 UI 라이브러리다.

A pane layout is core to the product because the user supervises multiple sessions and evidence surfaces at once.

What it does

multi-agent terminal, logs, graph, mission board를 split pane으로 보여준다.

Why this stack

Dalkkak은 한 작업만 보는 앱이 아니라 여러 AI worker를 동시에 조종하는 cockpit이라 pane layout이 중요하다.

Trade-off

layout state와 resize/drag UX가 복잡해질 수 있다.

Alternative

custom CSS grid는 단순하지만 drag split이 어렵고, IDE급 layout engine은 무겁다.

Terms you must know
  • pane = 화면의 나뉜 작업 영역
  • layout state = 어떤 pane이 어디 있는지 저장한 상태
  • split view = 화면을 분할하는 UI
Where

apps/desktop/package.json, workspace layout

Beginner trap

pane UI가 있다고 병렬 작업 coordination이 자동으로 되는 건 아니다.

3. FrontendCore

Three.js / React Three Fiber

3D/시각화 UI를 위한 rendering stack이다.

Three.js is useful for immersive state visualization, but it should not replace clear operational UI.

What it does

mission/world/graph 같은 richer visualization surface를 만들 때 사용된다.

Why this stack

복잡한 작업 상태를 시각적으로 보여주는 제품 경험에 도움이 될 수 있다.

Trade-off

3D는 성능/접근성/유지보수 비용이 크고, 핵심 workflow를 가리면 해롭다.

Alternative

2D graph, table, timeline은 더 명확하고 빠를 수 있다.

Terms you must know
  • WebGL = 브라우저의 GPU 그래픽 API
  • scene = 3D 공간 구성
  • fiber = React 방식으로 Three.js를 쓰는 wrapper
Where

apps/desktop/package.json, 3D components

Beginner trap

3D가 있으면 제품 가치가 자동으로 올라간다고 생각하면 안 된다.

3. FrontendCore

Mermaid

텍스트로 diagram을 그리는 도구다.

Mermaid can turn structured explanations into readable architecture and workflow diagrams.

What it does

workflow, architecture, sequence diagram을 앱/문서에서 빠르게 보여줄 수 있다.

Why this stack

AI가 생성한 설계 설명을 사람이 볼 수 있는 diagram으로 바꾸기 쉽다.

Trade-off

복잡한 diagram은 layout이 깨질 수 있고, 보안상 user-provided diagram rendering을 조심해야 한다.

Alternative

custom SVG/canvas, PlantUML, Excalidraw-style editor가 대안이다.

Terms you must know
  • diagram-as-code = 텍스트로 diagram을 정의
  • sequence diagram = 시간 순서 메시지 흐름 그림
  • rendering = 텍스트 정의를 그림으로 바꿈
Where

apps/desktop/package.json, docs screens

Beginner trap

diagram이 예쁘다고 실제 시스템 검증이 된 것은 아니다.

5. Backend

2
5. BackendCore

Hono

가벼운 TypeScript HTTP framework다.

Hono is a lightweight TypeScript API layer for cloud-side endpoints around the workspace.

What it does

apps/server가 cloud API surface를 제공할 때 사용한다.

Why this stack

TS monorepo 안에서 작고 빠른 API를 만들기 좋다.

Trade-off

큰 enterprise backend에는 NestJS/Spring 같은 구조적 프레임워크가 더 나을 수 있다.

Alternative

Express는 생태계가 크고, Fastify는 성능/스키마가 강하고, tRPC는 TS end-to-end contract가 강하다.

Terms you must know
  • HTTP framework = request/response server를 쉽게 만드는 도구
  • route = URL별 handler
  • middleware = request 전후에 끼는 공통 처리
Where

apps/server/src/app.ts

Beginner trap

Hono가 desktop local runtime을 대신하는 것은 아니다.

5. BackendCore

IMAP / mailparse / lettre

이메일 읽기/파싱/발송 관련 Rust dependency다.

Mail dependencies point toward connector workflows, but real email automation needs approval, audit, and provider-specific handling.

What it does

connector 실험이나 inbox/action workflow에서 메일을 가져오고 파싱하고 보낼 수 있다.

Why this stack

업무 자동화 제품은 email 같은 실제 외부 시스템과 연결될 가능성이 크다.

Trade-off

이메일은 인증, rate limit, deliverability, privacy, provider policy가 복잡하다.

Alternative

Gmail API/Graph API는 provider-native이지만 OAuth와 quota가 필요하고, generic IMAP은 범용이지만 기능 차이가 있다.

Terms you must know
  • IMAP = 이메일을 읽는 프로토콜
  • SMTP = 이메일을 보내는 프로토콜
  • deliverability = 메일이 스팸 없이 도착하는 능력
Where

apps/desktop/src-tauri/Cargo.toml

Beginner trap

메일 라이브러리가 있다고 실제 Gmail 제품 연동이 완성된 건 아니다.

6. Data

4
6. DataCore

GraphStore

작업 기억을 node/edge로 남기는 로컬 ledger다.

GraphStore turns scattered agent work into cited memory rather than disposable chat history.

What it does

work, issue, action, artifact, evidence, follow-up을 append-only JSONL graph로 저장한다.

Why this stack

AI가 한 일을 나중에 근거 있게 recall하려면 chat transcript보다 구조화된 기억이 필요하다.

Trade-off

JSONL ledger는 query/index가 약할 수 있어 derived index나 DB가 필요해질 수 있다.

Alternative

SQLite는 query가 강하고, event store는 audit가 강하며, vector DB는 semantic retrieval에 강하다.

Terms you must know
  • graph = node와 edge로 관계를 표현
  • ledger = 변경 기록을 보존하는 장부
  • append-only = 기존 기록을 덮지 않고 뒤에 추가
Where

docs/CONNECTIVE_LAYER.md, capture.rs, memory.rs

Beginner trap

검색 index를 source of truth로 착각하면 안 된다.

6. DataCore

JSONL

한 줄에 JSON 하나씩 저장하는 파일 형식이다.

JSONL is simple, inspectable, and append-friendly for local memory logs.

What it does

GraphStore node/edge/event를 append-only로 저장하기 쉽다.

Why this stack

local-first 제품에서 단순하고 diff/debug가 쉬운 저장 형태다.

Trade-off

복잡한 query, transaction, compaction은 직접 처리해야 한다.

Alternative

SQLite는 query/transaction이 강하고, plain JSON file은 작은 설정에는 단순하지만 append log에는 약하다.

Terms you must know
  • JSONL = JSON Lines
  • append log = 뒤에 계속 추가하는 로그
  • compaction = 오래된 로그를 정리해 snapshot으로 줄이는 작업
Where

GraphStore JSONL docs/code

Beginner trap

JSONL은 database가 아니라 파일 형식이다.

6. DataCore

Provenance

정보가 어디서 왔고 얼마나 믿을 수 있는지 표시하는 metadata다.

Provenance lets the system distinguish confirmed facts from AI guesses before feeding memory back to agents.

What it does

confirmed, inferred, hypothesis를 구분하고 evidence를 붙인다.

Why this stack

AI 제품에서 추론과 사실을 섞으면 신뢰가 무너지므로 provenance가 필수다.

Trade-off

사용자에게 너무 많은 badge를 보여주면 UX가 무거워질 수 있다.

Alternative

단순 timestamp/source만 기록할 수도 있지만 신뢰 레벨 구분이 약하다.

Terms you must know
  • confirmed = 증거가 있는 사실
  • inferred = 근거로 추론한 내용
  • evidence = 사실을 뒷받침하는 산출물
Where

GraphStore validator, memory bundle docs

Beginner trap

provenance는 UI 장식이 아니라 신뢰 경계다.

6. DataCore

Last-write-wins sync

충돌 시 마지막 변경을 이기는 단순 동기화 정책이다.

Last-write-wins is acceptable for simple state, but not for high-value collaborative edits.

What it does

단순 widget/state sync에서 복잡한 merge 없이 최신 timestamp를 채택한다.

Why this stack

초기 cloud sync에는 이해하기 쉽고 구현이 빠르다.

Trade-off

동시에 중요한 내용을 수정하면 데이터 손실이 생길 수 있다.

Alternative

CRDT는 협업 merge에 강하고, explicit conflict UI는 안전하지만 UX가 복잡하다.

Terms you must know
  • sync conflict = 두 곳에서 동시에 바뀐 충돌
  • timestamp = 변경 시각
  • CRDT = 동시 편집 충돌을 자동 병합하는 자료구조 계열
Where

cloud sync docs/code

Beginner trap

LWW를 모든 데이터에 쓰면 위험하다.

7. AI

5
7. AICore

fastembed

로컬 embedding 생성을 위한 Rust dependency다.

fastembed supports local semantic retrieval without sending every memory item to a cloud embedding API.

What it does

텍스트를 vector로 바꿔 비슷한 memory/ticket/case를 찾는 기반이 된다.

Why this stack

local-first memory search에서 cloud embedding API 없이 semantic retrieval을 할 수 있다.

Trade-off

모델 크기, CPU cost, index freshness, 품질 tuning 문제가 있다.

Alternative

OpenAI embeddings는 품질/운영이 쉽지만 데이터가 외부로 나가고 비용이 든다.

Terms you must know
  • embedding = text를 숫자 vector로 바꾼 표현
  • semantic search = 단어가 달라도 의미가 비슷한 것을 찾는 검색
  • index freshness = 새 데이터가 검색에 반영되는 정도
Where

apps/desktop/src-tauri/Cargo.toml, vector index docs

Beginner trap

embedding이 있으면 답이 정확해진다고 말하면 안 된다.

7. AICore

RAG / memory bundle

AI에게 관련 기억을 찾아 context로 넣는 방식이다.

RAG in Dalkkak should mean grounded memory bundles with citations, not dumping random notes into the prompt.

What it does

GraphStore에서 근거 있는 node/evidence를 찾아 Claude/Codex prompt에 전달한다.

Why this stack

긴 chat history 대신 필요한 context만 넣어 AI 작업 품질과 일관성을 높인다.

Trade-off

검색이 틀리면 오히려 잘못된 context를 넣을 수 있다. citation과 provenance가 필요하다.

Alternative

fine-tuning은 모델 자체를 바꾸고, long context stuffing은 단순하지만 비용/노이즈가 크다.

Terms you must know
  • RAG = retrieval augmented generation
  • context = 모델 입력에 같이 넣는 정보
  • citation = 어떤 근거에서 왔는지 표시
Where

local MCP handlers, memory bundle docs

Beginner trap

RAG라는 말만 붙이면 memory 문제가 해결된다고 생각하면 안 된다.

7. AICore

Local MCP server

Claude/Codex 같은 AI client에 Dalkkak 도구를 노출하는 표준 gateway다.

MCP is the tool gateway between BYO agents and Dalkkak's grounded local memory.

What it does

graph search, WorkItem recall, workflow prepare 같은 local memory tool을 제공한다.

Why this stack

BYO AI가 제품 기억을 사용할 수 있게 하되, 처음에는 읽기 중심으로 안전하게 여는 게 맞다.

Trade-off

mutation tool을 열면 권한, approval, audit, idempotency 문제가 급격히 커진다.

Alternative

custom CLI protocol은 단순하지만 표준 client 호환성이 떨어진다.

Terms you must know
  • MCP = Model Context Protocol
  • tool = AI가 호출할 수 있는 함수
  • gateway = 여러 기능을 검증하고 노출하는 관문
Where

apps/local-mcp-server/src

Beginner trap

MCP가 곧 안전한 자동 실행 권한이라는 뜻은 아니다.

7. AICore

Action SDK

action/connector/runner/receipt 계약을 정의하는 패키지다.

The Action SDK defines the contract for safe, auditable actions before connecting real external services.

What it does

위험도, permission, approval, dry-run, result envelope를 표준화한다.

Why this stack

AI가 외부 일을 할수록 버튼 하나가 아니라 검증 가능한 action contract가 필요하다.

Trade-off

SDK가 있어도 실제 connector 구현과 runtime enforcement가 없으면 껍데기다.

Alternative

화면별 ad-hoc handler는 빠르지만 audit/permission consistency가 약하다.

Terms you must know
  • action = 실행 가능한 작업 단위
  • connector = 외부 서비스 adapter
  • runner = action을 실행하는 주체
  • receipt = 실행 결과 증명서
Where

packages/action-sdk, screen actions

Beginner trap

SDK 타입만 있다고 실제 외부 mutation이 안전한 건 아니다.

7. AICore

Dry-run / externalMutationBlocked

외부 변경 없이 결과를 미리 보여주는 안전 모드다.

Dry-run makes it explicit when an action produced a preview rather than changing the outside world.

What it does

mock connector나 approval pending 상태에서 이메일/결제/삭제가 실제로 일어나지 않았음을 명시한다.

Why this stack

사용자가 AI 제안을 검토할 수 있게 하고 거짓 완료 claim을 줄인다.

Trade-off

dry-run 결과를 실제 완료로 착각하면 product trust가 깨진다.

Alternative

sandbox account, staging connector, approval-gated real run이 다음 단계다.

Terms you must know
  • dry-run = 실제 변경 없이 시뮬레이션
  • mutation = 외부 시스템 상태를 바꾸는 행동
  • blocked = 안전 규칙 때문에 실행하지 않은 상태
Where

Action SDK tests, screenSpec

Beginner trap

차단 상태를 실패로만 보면 안 된다. 안전한 정상 상태일 수 있다.

8. Infra

2
8. InfraCore

Supabase

cloud workspace의 Postgres/Auth/Realtime backend platform이다.

Supabase supports the cloud-augmented layer while the core desktop runtime stays local-first.

What it does

web workspace, tickets, presence, sync state, RLS policy를 제공한다.

Why this stack

로컬 앱만으로 부족한 team/cloud view를 빠르게 붙일 수 있다.

Trade-off

vendor dependency와 RLS 설계 책임이 있다. local core와 cloud augmentation 경계를 지켜야 한다.

Alternative

Firebase는 realtime이 강하고, self-hosted Postgres는 통제가 강하지만 auth/realtime을 직접 붙여야 한다.

Terms you must know
  • managed backend = DB/Auth/Realtime을 서비스로 제공
  • workspace = 팀/서비스 단위 작업 공간
  • cloud augmentation = 로컬 핵심을 cloud로 보조하는 구조
Where

apps/web/supabase/schema.sql, apps/web

Beginner trap

Supabase를 쓰면 multi-tenant 보안이 자동 완성된다고 말하면 안 된다.

8. InfraCore

Supabase Realtime / presence

cloud workspace에서 누가 접속했는지와 상태 변화를 보여주는 기능이다.

Realtime presence helps the cloud layer show live workspace activity, but it must respect tenant boundaries.

What it does

team view, active members, ticket/widget sync 같은 실시간 UI를 보조한다.

Why this stack

팀 협업 제품으로 확장할 때 현재 상태를 공유하는 UX가 필요하다.

Trade-off

privacy와 channel 권한을 잘못 잡으면 workspace 정보가 샐 수 있다.

Alternative

WebSocket 직접 구현은 통제가 강하고, Pusher/Ably는 managed realtime에 강하다.

Terms you must know
  • presence = 누가 현재 접속했는지
  • channel = realtime 메시지가 오가는 방
  • WebSocket = 양방향 실시간 통신 프로토콜
Where

apps/web, usePresence.ts, Supabase schema

Beginner trap

presence는 보기 좋은 기능이지만 권한이 없으면 정보 노출이다.

9. Security

3
9. SecurityCore

Row Level Security

DB row별 접근권한을 Postgres가 강제하는 기능이다.

RLS makes the database enforce tenant boundaries instead of relying only on frontend filters.

What it does

tenant/user/service가 자기 row만 보게 policy를 DB에 둔다.

Why this stack

multi-tenant cloud에서 앱 코드 필터보다 강한 보안 경계다.

Trade-off

policy를 잘못 쓰면 접근이 막히거나 새는 문제가 생긴다. 테스트가 필요하다.

Alternative

API server에서만 authorization을 강제할 수도 있지만 DB direct client가 있으면 약하다.

Terms you must know
  • row = DB table의 한 줄
  • policy = 접근 허용 규칙
  • tenant isolation = 고객/팀 데이터 격리
Where

apps/web/supabase/schema.sql

Beginner trap

RLS가 켜져 있다는 사실과 policy가 정확하다는 사실은 다르다.

9. SecurityCore

keyring

OS 보안 저장소에 secret을 넣는 Rust crate다.

The keyring crate stores secrets in the operating system's credential store rather than plain app files.

What it does

API key, token 같은 민감값을 plain file 대신 macOS Keychain/Windows Credential Manager 등에 저장한다.

Why this stack

desktop app은 사용자의 local secret을 다루므로 OS-level secure storage가 필요하다.

Trade-off

OS별 동작과 권한 prompt, migration, backup behavior를 테스트해야 한다.

Alternative

암호화된 local file은 통제가 쉽지만 key 관리가 문제이고, cloud vault는 동기화는 좋지만 외부 의존이 생긴다.

Terms you must know
  • secret = API key/token/password 같은 민감값
  • Keychain = macOS 보안 저장소
  • credential manager = Windows 보안 저장소
Where

apps/desktop/src-tauri/Cargo.toml, vault.rs

Beginner trap

keyring을 쓰면 log/prompt 유출 위험까지 사라지는 건 아니다.

9. SecurityCore

Vault / secret guard

secret을 handle로 다루고 노출을 줄이는 계층이다.

The vault should let agents reference secrets without seeing raw secret values.

What it does

AI에게 실제 API key 값 대신 name/handle만 주고, 실행 경계에서만 접근하게 한다.

Why this stack

connector와 MCP가 늘어날수록 secret minimization이 제품 신뢰의 핵심이다.

Trade-off

vault UI가 있어도 logs, crash reports, prompts, receipts에서 새면 의미가 없다.

Alternative

환경변수는 단순하지만 desktop multi-project secret 관리에는 약하고, external vault는 강하지만 설정이 무겁다.

Terms you must know
  • handle = 실제 값 대신 참조하는 이름
  • redaction = 민감값 가리기
  • least privilege = 필요한 최소 권한만 주는 원칙
Where

vault.rs, secret_guard.rs, redaction tests

Beginner trap

secret을 저장했다는 것과 secret flow가 안전하다는 것은 다르다.

10. Safety

2
10. SafetyCore

Idempotency

같은 action을 여러 번 실행해도 결과가 한 번과 같게 만드는 성질이다.

Idempotency is essential because agents and retries can repeat the same operation.

What it does

retry/replay에서 duplicate receipt, duplicate email, duplicate graph node를 막는다.

Why this stack

AI/action 제품은 같은 지시를 반복하거나 재시도할 일이 많아서 생존 조건이다.

Trade-off

외부 API가 idempotency key를 지원하지 않으면 구현이 어려워진다.

Alternative

dedupe table, deterministic id, provider idempotency key, manual reconciliation이 보완책이다.

Terms you must know
  • retry = 실패 후 다시 시도
  • dedupe = 중복 제거
  • idempotency key = 같은 요청임을 표시하는 고유 키
Where

GraphStore deterministic ids, Action SDK design

Beginner trap

읽기 idempotency와 외부 mutation idempotency는 난이도가 다르다.

10. SafetyCore

Guardrails / approvals

위험한 AI 행동을 막거나 사람 승인 뒤 실행하게 하는 규칙이다.

Guardrails and approvals are how the product turns AI autonomy into controlled execution.

What it does

send/delete/spend/deploy 같은 action을 approval 없이 실행하지 못하게 한다.

Why this stack

AI가 똑똑해질수록 deterministic safety boundary가 더 중요하다.

Trade-off

너무 빡빡하면 UX가 느려지고, 너무 느슨하면 신뢰가 깨진다.

Alternative

policy engine, permission scopes, sandbox accounts, audit review가 보완책이다.

Terms you must know
  • guardrail = 실행 전 deterministic 차단 규칙
  • approval = 사람이 허락하는 단계
  • policy = 어떤 행동을 허용할지 정한 규칙
Where

Action SDK, safety docs, approval UI

Beginner trap

LLM judge만으로 guardrail을 대체하면 안 된다.

11. Testing

3
11. TestingCore

Biome

TS/JS formatter와 linter다.

Biome keeps formatting and basic lint rules fast and consistent across the TypeScript workspace.

What it does

monorepo의 코드 스타일과 기본 오류를 빠르게 검사한다.

Why this stack

여러 패키지가 있는 repo에서 format/lint 기준을 통일한다.

Trade-off

타입체크나 테스트를 대체하지 않으므로 동작 검증은 별도로 필요하다.

Alternative

ESLint+Prettier는 생태계가 크고 설정이 세밀하지만 toolchain이 둘로 나뉜다.

Terms you must know
  • formatter = 코드 모양을 자동 정리
  • linter = 잠재 오류/규칙 위반을 찾는 도구
  • style drift = 사람마다 코드 스타일이 달라지는 문제
Where

ddalkkak/package.json

Beginner trap

lint 통과는 제품 동작 보장이 아니다.

11. TestingCore

Vitest

TypeScript/React 단위 테스트 도구다.

Vitest is useful for fast TypeScript-level feedback, especially around contracts and UI logic.

What it does

Action SDK, renderer logic, package helper, component behavior를 빠르게 테스트한다.

Why this stack

Vite ecosystem과 잘 맞고 dev 속도가 빠르다.

Trade-off

desktop native/Rust/PTY integration은 Vitest만으로 검증하기 어렵다.

Alternative

Jest는 널리 쓰이고, Playwright는 브라우저/e2e, cargo test는 Rust logic에 맞다.

Terms you must know
  • unit test = 작은 로직 테스트
  • jsdom = 브라우저 비슷한 테스트 환경
  • mock = 실제 의존성을 가짜로 대체
Where

apps/desktop/package.json, packages tests

Beginner trap

Vitest만으로 Tauri/Rust/OS behavior까지 검증됐다고 말하면 안 된다.

11. TestingCore

Cargo / Rust tests

Rust crate 빌드와 테스트 도구다.

Cargo is the build and verification entry point for the native Rust side of the desktop app.

What it does

src-tauri backend의 compile, unit test, dependency resolution을 관리한다.

Why this stack

PTY/session/vault 같은 native backend는 Rust toolchain에서 검증해야 한다.

Trade-off

OS integration은 unit test만으로 부족해서 manual/e2e smoke가 필요하다.

Alternative

Tauri driver/e2e, shell smoke scripts, snapshot logs가 보완책이다.

Terms you must know
  • Cargo = Rust package/build tool
  • crate = Rust package
  • compile check = 타입/소유권 오류를 빌드 단계에서 잡기
Where

apps/desktop/src-tauri/Cargo.toml

Beginner trap

Rust가 컴파일되면 UX가 맞다는 뜻은 아니다.

12. Ops

4
12. OpsCore

tracing / tracing-subscriber

Rust backend 로그와 span을 남기는 도구다.

Tracing gives the local backend a way to explain what happened when a pane, command, or memory write fails.

What it does

PTY spawn, command execution, graph writes, mission scans 같은 runtime events를 추적한다.

Why this stack

로컬 desktop 장애는 서버 로그가 없으므로 structured local diagnostics가 중요하다.

Trade-off

민감한 path/secret/output을 과하게 남기면 privacy risk가 생긴다.

Alternative

log crate는 단순하고, OpenTelemetry는 distributed tracing에 강하다.

Terms you must know
  • span = 특정 작업 구간을 묶은 trace
  • diagnostic = 원인 분석용 정보
  • PII = 개인 식별 정보
Where

apps/desktop/src-tauri/Cargo.toml, logging code

Beginner trap

로그가 많으면 디버깅이 쉬운 게 아니라 중요한 필드가 있어야 쉽다.

12. OpsCore

Tauri updater / signing

desktop 앱을 안전하게 업데이트하는 배포 계층이다.

A desktop product needs signed updates because users do not automatically get a new build like a web app.

What it does

signed bundle과 update metadata로 사용자 앱이 새 버전을 받게 한다.

Why this stack

desktop 제품은 웹처럼 새로고침만으로 배포되지 않아서 updater가 필수다.

Trade-off

인증서, notarization, platform별 packaging, rollback을 관리해야 한다.

Alternative

수동 다운로드는 단순하지만 retention이 약하고, app store 배포는 신뢰는 좋지만 심사/제약이 있다.

Terms you must know
  • signing = 앱/업데이트가 변조되지 않았음을 서명
  • notarization = macOS 배포 보안 확인
  • rollback = 문제 버전에서 이전 버전으로 되돌림
Where

tauri.conf, updater.ts, release scripts

Beginner trap

빌드 성공과 사용자에게 안전하게 배포되는 것은 다른 문제다.

12. OpsCore

Release readiness gate

배포 전 위험 항목을 확인하는 script/process다.

The release gate is a lightweight way to stop shipping without evidence.

What it does

빌드, 테스트, readiness checklist를 묶어 release 전 확인한다.

Why this stack

AI/desktop 제품은 기능이 많아질수록 릴리즈 전 검문소가 필요하다.

Trade-off

체크리스트가 실제 fail condition과 연결되지 않으면 형식이 된다.

Alternative

CI pipeline, GitHub Actions required checks, manual QA checklist가 보완책이다.

Terms you must know
  • gate = 다음 단계로 가기 전 통과 조건
  • readiness = 배포 준비 상태
  • required check = merge/deploy를 막는 자동 검증
Where

scripts/release-readiness-gate.mjs, package.json

Beginner trap

gate script가 있다고 품질 문화가 자동으로 생기지는 않는다.

12. OpsCore

Git worktree

한 repo의 여러 branch를 여러 폴더에서 동시에 checkout하는 Git 기능이다.

Git worktrees make parallel agent work safer by giving each worker an isolated checkout and branch.

What it does

parallel agents가 각자 독립 작업 디렉터리에서 파일을 바꾸게 한다.

Why this stack

AI worker들이 같은 파일을 동시에 덮어쓰는 위험을 줄이고 merge queue를 만들 수 있다.

Trade-off

disk 사용량과 branch cleanup, dependency install 관리가 필요하다.

Alternative

branch만 바꾸며 작업하는 방식은 단순하지만 병렬성이 약하고, repo clone 복사는 느리고 무겁다.

Terms you must know
  • worktree = 같은 git repo를 다른 폴더에 checkout한 작업공간
  • branch = 변경 흐름 이름
  • merge queue = 검증된 변경을 순서대로 합치는 대기열
Where

parallel mission docs, git workflow

Beginner trap

worktree가 있으면 merge conflict가 사라지는 건 아니다.

Start from zero path

이 순서대로 가면 terminal 바닥에서 AI completion control까지 한 줄로 이어진다.

12
steps
1

컴퓨터에서 일이 실행된다는 뜻

terminal, shell, process, event를 먼저 잡는다.

Dalkkak의 가장 밑에는 화면이 아니라 로컬 process가 있다. 화면은 그 process와 대화하는 UI다.

At the bottom, Dalkkak runs local processes. The UI is just the control surface around them.

TerminalShellProcessEvent

Code focus: spawn a process, stream output, show close/error state

2

왜 web-only가 안 되는지

browser sandbox와 native desktop의 차이를 이해한다.

브라우저는 내 로컬 Claude/Codex process를 직접 띄울 수 없다. 그래서 Tauri와 Rust backend가 필요하다.

A browser-only app cannot safely spawn local Claude or Codex processes, so Dalkkak needs a native shell.

TauriWebViewRust backendPTY

Code focus: React invoke -> Rust command -> OS process

3

터미널 pane 하나가 어떻게 뜨는지

renderer, command, PTY, event stream, xterm을 연결한다.

UI가 Rust에게 PTY를 만들라고 요청하고, Rust는 child process 출력을 event로 보내고, xterm이 그린다.

The renderer asks Rust to spawn a PTY, Rust streams bytes back, and xterm renders the terminal.

React rendererTauri commandPTYxterm.jsWindow emit

Code focus: invoke('pty_spawn'), listen('pty-output'), term.write(data)

4

왜 환경변수 때문에 앱이 깨지는지

PATH, shell, GUI app env, Homebrew path를 이해한다.

iTerm에서는 되는 명령도 Tauri 앱에서 PATH가 다르면 command not found가 난다.

A GUI app may have a different PATH than iTerm, so spawned CLIs need explicit environment hygiene.

Env hygienePATHShellEOF marker

Code focus: construct child env, prepend Homebrew paths, print visible failure

5

Dalkkak이 왜 AI를 직접 부르지 않는지

BYO AI와 control plane의 차이를 말한다.

Dalkkak은 모델이 아니라 작업공간과 통제층이다. 사용자의 Claude/Codex가 worker다.

Dalkkak is not the model. It is the operating layer around the user's own AI workers.

BYO AIAgentReAct loopTranscript

Code focus: spawn claude/codex as a local CLI process, observe transcript

6

일이 chat으로 사라지지 않게 만드는 법

WorkItem, receipt, evidence, follow-up을 잡는다.

AI가 한 일은 WorkItem timeline, receipt, artifact, follow-up으로 남아야 다시 볼 수 있다.

Work must become durable records: WorkItems, receipts, artifacts, and follow-ups.

WorkItemReceiptEvidenceFollow-upWorkItem spine

Code focus: WorkItem -> action -> artifact -> receipt -> follow-up

7

기억을 저장한다는 뜻

GraphStore, JSONL, append-only, node/edge/provenance를 이해한다.

Dalkkak의 기억은 그냥 요약 문서가 아니라 검증된 노드와 엣지가 쌓이는 append-only ledger다.

Dalkkak memory is an append-only graph ledger with provenance, not just chat history.

GraphStoreJSONLAppend-onlyGraphNodeGraphEdgeProvenance

Code focus: validate node, append JSON line, query by startup/type

8

AI에게 내 기억을 주는 법

RAG, memory bundle, MCP를 연결한다.

AI가 기억하는 게 아니라, Dalkkak이 관련 기억을 찾아 context로 넣어줘야 한다.

The model does not magically remember; Dalkkak retrieves relevant memory and passes it as context.

RAGMemory bundleMCPLocal MCP serverTool gateway

Code focus: MCP handler -> graph query -> cited context bundle

9

실제 외부 action을 왜 바로 하면 안 되는지

dry-run, approval, guardrail, external mutation boundary를 이해한다.

이메일/환불/삭제 같은 외부 부작용은 dry-run, approval, receipt 없이 실행하면 안 된다.

External mutations must go through dry-run, approval, receipts, and deterministic guardrails.

Action SDKDry-runexternalMutationBlockedApprovalGuardrail

Code focus: if approval pending, return blocked receipt instead of mutating

10

여러 AI에게 일을 나눠주는 법

ParallelRun, AgentTask, worktree, file ownership, merge queue를 이해한다.

병렬 AI 작업은 터미널 여러 개가 아니라 소유권, 증거, 검증, merge 순서가 있는 운영 시스템이다.

Parallel AI work needs ownership, evidence, verification, and a merge queue.

ParallelRunAgentTaskGit worktreeFile ownershipMerge queue

Code focus: task packet with allowed files, branch, tests, result artifact

11

완료 판정을 AI에게 맡기면 왜 망하는지

intent, acceptance, verification, final gate를 이해한다.

worker는 done candidate를 만들 뿐이고, 완료는 증거와 gate가 판단한다.

The worker can propose done, but the system decides completion through evidence and gates.

Intent CompilerAcceptance criteriaVerificationRunFinal GateScope integrity

Code focus: done_candidate -> verification -> review -> human acceptance

12

제품이 되려면 무엇이 아직 부족한지

eval, injection, reliability, observability, release trust를 냉정히 구분한다.

Dalkkak은 substrate가 강하지만 trust/safety는 아직 더 만들어야 한다. 이걸 알아야 제대로 방향을 잡는다.

The substrate is real, but the trust layer still needs evals, injection defense, reliability, and stronger gates.

Eval harnessPrompt injectionReliability layerObservabilityRelease readiness gate

Code focus: fixture tests, bounded retries, trace IDs, release evidence

Mental model layers

아래 10개 층을 말할 수 있으면 제품 구조의 뼈대는 잡힌다.

1

Founder workspace

The human sees startups, zones, panes, WorkItems, approvals, and receipts.

사용자가 실제로 보는 조종석이다. 여러 사업과 작업을 한 앱에서 보고, AI 세션을 지휘하고, 결과 증거를 확인한다.

PortfolioHomeWorkspaceZonePage
2

React renderer

The UI layer running inside the Tauri WebView.

브라우저처럼 생긴 화면 레이어다. 버튼, 카드, 터미널 화면, 그래프 화면을 그린다.

ReactViteTailwind
3

Tauri shell

The native desktop wrapper connecting UI to local OS capabilities.

웹 UI가 macOS의 파일, 프로세스, 알림, 업데이트 같은 기능을 안전하게 쓰게 해주는 껍데기다.

Tauri commandsWindow eventsplugins
4

Rust local backend

Owns PTY, tmux, graph capture, memory, vault, mission scanning, and local commands.

무거운 로컬 일을 하는 엔진이다. 터미널을 띄우고, 로그를 모으고, 기억을 저장하고, 위험한 경계를 지킨다.

pty.rstmuxcapture.rs
5

Terminal substrate

The pane/process layer where Claude Code, Codex, shells, and commands actually run.

AI가 실제 명령을 치고 파일을 바꾸는 작업장이다. Dalkkak은 이 작업장을 한 화면에 여러 개 만든다.

portable-ptytmuxpane registry
6

Connective layer

Turns scattered work into a durable graph of facts, actions, evidence, and edges.

일이 끝나고 사라지지 않게 만드는 기억층이다. 커밋, 에이전트 요약, 액션 결과를 노드와 엣지로 남긴다.

GraphStoreJSONLGraphNode
7

Action spine

Represents work as WorkItem -> action -> artifact -> edge -> receipt -> follow-up.

버튼을 눌렀을 때 무엇을 했고, 어떤 산출물이 생겼고, 다음 일이 무엇인지 남기는 업무 척추다.

WorkItemAction SDKreceipt
8

Local MCP gateway

Exposes Dalkkak memory/workflow tools to BYO AI clients without giving broad mutation power.

Claude/Codex가 Dalkkak의 기억을 조회할 수 있게 하는 표준 도구 서버다. 우선 읽기 중심이어야 안전하다.

apps/local-mcp-serverhandlersschemas
9

Cloud/web layer

Handles workspace sync, RBAC, web views, tickets, presence, and team-facing surfaces.

로컬 앱만으로 안 되는 동기화와 팀/웹 기능을 맡는다. Supabase RLS가 접근권한의 핵심이다.

apps/webapps/serverSupabase
10

Trust gates

Prevents AI from silently overclaiming, leaking secrets, or performing risky actions.

AI를 믿는 게 아니라 증거, 승인, 검증, 방어 규칙으로 통제하는 층이다. 제품의 신뢰 핵심이다.

approvalguardrailseval

Execution flows

제품을 이해하려면 static 구조보다 request/data flow를 먼저 봐야 한다.

Selected flow

Open a terminal pane

사용자가 새 터미널을 열면 UI는 Rust에게 PTY 생성을 요청하고, Rust는 shell/tmux/Claude/Codex 프로세스를 띄운 뒤 출력 이벤트를 UI로 흘려보낸다.

1Click pane action
2React invoke()
3Tauri command
4Rust spawns PTY
5process emits bytes
6Window event
7xterm renders output
Failure checks
  • PATH가 GUI 앱에서 비었는가
  • PTY rows/cols가 0인가
  • 프로세스가 바로 죽었는데 UI가 침묵하는가
  • EOF marker가 보이는가
Say it

A terminal pane is a local process wrapped by a PTY. The renderer asks Rust to spawn it, and Rust streams output back as events.

Reality board

built / partial / missing을 구분해야 제품을 제대로 이해한다.

Has 1Partial 6Missing 3
Partial

Terminal/workspace substrate exists

Tauri desktop, React renderer, Rust PTY/session pieces, panes, zones, and many UI surfaces exist.

The UI is broad and technical; product coherence depends on WorkItem/memory/mission surfaces becoming simpler.

Next: Explain every visible surface through one model: workspace -> WorkItem -> action -> receipt -> memory.

Has

BYO Claude/Codex direction is clear

The product does not primarily call AI itself; it wraps and augments user-owned AI sessions.

People may mistake it for a managed chatbot/codegen product.

Next: Keep saying: Dalkkak is the control plane, not the model.

Partial

Operating memory is real but incomplete

GraphStore/JSONL, WorkItem memory spine, graph nodes/edges, and local MCP read surfaces exist.

Semantic retrieval, embeddings, deletion/governance, and full citation discipline are incomplete.

Next: Harden retrieval, citation, provenance UI, and memory lifecycle.

Partial

Action spine exists mostly as safe dry-run

Action contracts, receipts, approval metadata, and mock/dry-run boundaries exist.

Real Gmail/Stripe/Instagram style mutation connectors are not fully wired.

Next: Ship one real connector vertical with injection defense, approval, receipt, retry, and rollback.

Partial

Mission Control model is strong

Docs, scanner/model/UI sections, merge queue, verification evidence, and many tests exist.

Full dispatch/monitor/reissue/integration workflow is not fully productized.

Next: Turn manual parallel-agent chaos into a guided run from split planner to final gate.

Partial

Cloud/web layer has a foundation

Supabase schema, forced RLS, web workspace, tickets, widget sync, and presence pieces exist.

Desktop/cloud/web product boundaries and API contracts are still evolving.

Next: Clarify what lives local, what syncs, and what web can safely do.

Missing

AI eval is the biggest trust gap

Traditional tests exist, but fixed AI quality evals are not yet strong.

You cannot know whether AI-generated drafts/actions are good at scale.

Next: Build eval fixtures for support, billing, release, and coding assistant outputs.

Missing

Prompt injection defense is mandatory before real connectors

The docs identify it as critical, but full defense is not built.

Untrusted email/web/customer text can hijack agent behavior.

Next: Add untrusted-content boundaries, policy checks, and adversarial fixtures before mutation connectors.

Missing

Reliability layer is not complete

Some idempotent memory design exists, but action retry/timeout/fallback/replay is not complete.

Real external actions could double-run, hang, or fail invisibly.

Next: Define action state machine with timeout, retry cap, idempotency key, and recovery receipt.

Partial

Release trust work exists

Release docs, gates, signing/updater concepts, and claim cleanup are present.

Release claims can drift from actual verified behavior.

Next: Keep release readiness gate tied to command evidence and smoke checks.

Concept cards

모르는 단어를 누르면 뜻, Dalkkak 위치, 말하는 문장, 함정까지 열린다.

128
visible

Source map

이 페이지가 어떤 Dalkkak 문서/코드에서 왔는지 기억해라.

Canonical product blueprint
ddalkkak/docs/BLUEPRINT.md

Mission, layers, reality checkpoint, product boundaries

AI component glossary
ddalkkak/docs/product/ai-engineering-components-glossary.md

AI concepts, current status, trust gaps

Connective layer
ddalkkak/docs/CONNECTIVE_LAYER.md

GraphStore, provenance, JSONL, agent push

WorkItem memory spine
ddalkkak/docs/product/workitem-memory-spine-integration-and-blueprint-status-2026-06-17.md

WorkItem -> action -> artifact -> receipt -> follow-up

Mission Control spec
ddalkkak/docs/product/parallel-agent-mission-control-product-spec-2026-06-17.md

ParallelRun, AgentTask, result inbox, merge queue

Shared agent rules
ddalkkak/docs/product/shared-agent-operating-rules-2026-06-17.md

No fake done, evidence-first parallel-agent protocol

Desktop renderer
ddalkkak/apps/desktop/src

React UI, panes, zones, WorkItem, Mission Control

Rust local backend
ddalkkak/apps/desktop/src-tauri/src

PTY, graph capture, memory, vault, mission scanner

Local MCP server
ddalkkak/apps/local-mcp-server/src

Tool gateway for BYO AI memory access

Cloud/web
ddalkkak/apps/web + ddalkkak/apps/server

Supabase workspace, tickets, sync, Hono API