{
  "channel": {
    "tab": "채널",
    "chatTab": "채팅",
    "empty": "아직 채널이 없어요 ✿",
    "dmLabel": "메시지",
    "dmHint": "주 에이전트 전용",
    "groupLabel": "채널",
    "noMessages": "아직 메시지가 없어요",
    "nameExists": "이미 같은 이름의 채널이 있어요",
    "membersCount": " 명",
    "info": "채널 정보",
    "readOnly": "🔒 에이전트 간 비공개 메시지예요. 열람만 가능해요",
    "inputPlaceholder": "메시지를 보내세요...",
    "sendFailed": "전송 실패",
    "createTitle": "새 채널",
    "createName": "채널 이름",
    "createNamePlaceholder": "예: design-team",
    "createMembers": "멤버",
    "createIntro": "설명",
    "createIntroPlaceholder": "이 채널의 용도를 설명해 주세요...",
    "createCancel": "취소",
    "createConfirm": "만들기",
    "nameRequired": "채널 이름을 입력해 주세요",
    "minMembers": "최소 2명 이상 선택해 주세요",
    "created": "채널 #{name} 생성 완료 ✿",
    "createFailed": "생성 실패",
    "alreadyExists": "이미 존재하는 채널이에요",
    "deleteChannel": "채널 삭제",
    "deleteConfirm": "채널 \"{name}\"을(를) 삭제할까요? 대화 기록은 복구할 수 없어요.",
    "deleted": "채널이 삭제되었어요",
    "deleteFailed": "삭제 실패",
    "addMember": "멤버 추가",
    "addMemberTitle": "멤버 추가",
    "addMemberAgents": "기존 에이전트",
    "addMemberExperts": "전문가 프리셋",
    "addMemberConfirm": "추가",
    "addMemberNone": "모든 에이전트가 이미 이 채널에 있어요",
    "memberAdded": "멤버가 추가되었어요",
    "warningTitle": "채널에 대해서",
    "warningBody": "서로 다른 기억과 사고방식을 가진 어시스턴트끼리 대화하면 더 많은 영감이 떠오를 수 있다고 생각해서, 당신이 자리를 비운 사이에도 에이전트끼리 대화할 수 있는 공간을 만들었어요.\n\n채널은 실험적 기능이라 다음과 같은 상황이 발생할 수 있어요:\n1. token 사용량 증가\n2. 예상치 못한 응답\n3. 기억 혼동\n\n주의해서 사용해 주세요",
    "warningConfirm": "이해했어요, 채널을 활성화할게요",
    "disabled": "채널 기능이 꺼져 있어요",
    "toggleLabel": "채널 기능 전환",
    "members": "멤버",
    "createIntroOptional": "설명",
    "expertTeam": {
      "guideTitle": "전문가 팀 구성",
      "guideDesc": "다른 전문성을 가진 AI가 함께 토론하여 더 나은 솔루션을 찾아요",
      "guideTip": "오른쪽 상단의 +를 클릭하여 맞춤 채널을 만들 수도 있어요",
      "needMoreAgents": "먼저 에이전트를 1개 이상 만들어 주세요",
      "creating": "생성 중...",
      "expertPresets": "전문가 프리셋 (API 키 사용)",
      "channelTemplates": "채널 템플릿 (기존 에이전트 사용)",
      "spawnSuccess": "전문가가 생성되었습니다",
      "spawnFailed": "전문가 생성 실패",
      "tpl": {
        "codeReview": {
          "label": "코드 리뷰 팀",
          "desc": "보안 전문가, 성능 전문가, 아키텍트가 함께 코드를 리뷰해요",
          "intro": "이것은 코드 리뷰 채널이에요. 각자의 전문적인 관점에서 리뷰해 주세요:\n- 보안 취약점, 인젝션 위험, 권한 문제에 주목\n- 성능 병목, 메모리 누수, 알고리즘 복잡도에 주목\n- 아키텍처 설계, 유지보수성, 확장성에 주목\n전문적인 의견을 공유하고 서로 토론해 주세요."
        },
        "productBrainstorm": {
          "label": "프로덕트 브레인스토밍",
          "desc": "프로덕트 매니저, 디자이너, 엔지니어가 함께 요구사항을 논의해요",
          "intro": "이것은 프로덕트 브레인스토밍 채널이에요. 각자의 역할에서 논의해 주세요:\n- 프로덕트: 사용자 니즈, 시장 포지셔닝, 우선순위\n- 디자인: 사용자 경험, 인터랙션 플로우, 비주얼 스타일\n- 엔지니어링: 기술적 실현 가능성, 개발 비용, 구현 방안\n적극적으로 의견을 내고 최선의 방안을 찾아봐요."
        },
        "archDiscussion": {
          "label": "아키텍처 토론",
          "desc": "백엔드, 프론트엔드, DevOps 전문가가 기술 선택을 논의해요",
          "intro": "이것은 아키텍처 토론 채널이에요. 각자의 영역에서 기술 방안을 논의해 주세요:\n- 백엔드: API 설계, 데이터 모델, 서비스 아키텍처\n- 프론트엔드: 컴포넌트 설계, 상태 관리, 성능 최적화\n- DevOps: 배포 전략, CI/CD, 모니터링 및 알림\n각 방안의 장단점을 충분히 논의하고 합의를 이뤄봐요."
        }
      }
    }
  },
  "sidebar": {
    "title": "대화",
    "newChat": "새 대화",
    "collapse": "사이드바 접기",
    "expand": "대화 목록 펼치기",
    "empty": "아직 대화가 없어요 ✿",
    "activity": "활동",
    "jian": "책상",
    "bridge": "소셜 플랫폼",
    "toggle": "사이드바",
    "bridgeShort": "연결",
    "capability": {
      "fleetTip": "Fleet: 작업을 여러 CLI 워커로 나눠 병렬 실행(각자 독립 worktree)"
    }
  },
  "session": {
    "untitled": "새 대화",
    "messageCount": "{n}개의 메시지",
    "switchFailed": "세션 전환 실패",
    "createFailed": "세션 생성 실패",
    "archiveFailed": "세션 보관 실패",
    "rename": "이름 변경",
    "editLabels": "라벨 편집",
    "labelsPlaceholder": "라벨 (쉼표로 구분)",
    "pin": "고정",
    "unpin": "고정 해제",
    "pinned": "고정됨",
    "archive": "보관",
    "archiveConfirm": "「{name}」을(를) 보관하시겠습니까? 목록에서 숨겨지지만 기록은 유지됩니다.",
    "menuTrigger": "더보기"
  },
  "common": {
    "on": "켜기",
    "off": "끄기",
    "copy": "복사",
    "copied": "복사됨",
    "copyText": "텍스트 복사",
    "confirm": "확인",
    "cancel": "취소",
    "approve": "승인",
    "reject": "거부",
    "approved": "승인됨",
    "rejected": "거부됨",
    "changeRejected": "{label} 변경이 취소되었습니다",
    "changeTimeout": "{label} 확인 시간 초과",
    "noChats": "대화 없음",
    "noFiles": "파일 없음",
    "executing": "실행 중...",
    "user": "사용자",
    "me": "나",
    "more": "더보기",
    "empty": "비어 있음",
    "edit": "편집",
    "delete": "삭제",
    "editResend": "편집 후 재전송",
    "editResendTitle": "편집 후 재전송 (메시지를 입력란에 붙여넣고 수정 후 Enter)"
  },
  "chat": {
    "send": "보내기",
    "steer": "방향 전환",
    "stop": "중지",
    "browserScreenshot": "브라우저 스크린샷",
    "compacting": "컨텍스트 압축 중",
    "needWsConnection": "어시스턴트와 연결이 끊겼어요. 재연결을 기다리거나 상태 표시줄에서 다시 연결을 눌러 주세요",
    "waitForCurrentReply": "현재 응답이 아직 끝나지 않았어요. 이번 턴이 끝난 뒤 다음 메시지를 보내 주세요.",
    "retry": "Retry",
    "waitingTooLong": "이 응답은 아직 처리 중입니다. Lynn이 기본 모델의 보조 경로로 계속 넘겨 가며 이번 턴을 끝내려고 하고 있어요.",
    "emptyAnswerHint": "모델이 생각만 하고 아무 말도 하지 않았어요. 재시도를 눌러 다시 시도할 수 있어요.",
    "emptyAnswerRetry": "재시도"
  },
  "time": {
    "justNow": "방금",
    "minutesAgo": "{n}분 전",
    "hoursAgo": "{n}시간 전",
    "daysAgo": "{n}일 전",
    "dateFormat": "{m}/{d}",
    "today": "오늘",
    "yesterday": "어제",
    "thisWeek": "이번 주",
    "earlier": "이전"
  },
  "status": {
    "connecting": "연결 중...",
    "connected": "연결됨",
    "disconnected": "연결 끊김",
    "serverNotReady": "서버가 준비되지 않았어요",
    "loading": "로딩 중...",
    "reconnecting": "재연결 중",
    "reconnect": "다시 연결",
    "usage": {
      "cache": "캐시",
      "tip": "이 세션의 누적 클라우드 token 사용량(프리픽스 캐시 적중 및 비용 추정 포함)"
    }
  },
  "input": {
    "placeholder": "무슨 이야기든 해보세요...",
    "hintAt": "@ 를 입력하여 파일 보여주기",
    "hintSlash": "/ 를 입력하여 명령어 보기",
    "hintDrag": "파일을 여기에 드롭하여 첨부",
    "hintCmdK": "⌘K 로 대화 검색",
    "hintDesk": "⌘J 로 데스크 열기",
    "selectFolder": "폴더 선택",
    "workspace": "작업 공간: ",
    "selectWorkspace": "작업 공간 선택",
    "planMode": "터미널·쓰기 허용 (끄면 읽기 전용)",
    "deskContext": "책상 컨텍스트 포함",
    "pastedImage": "붙여넣은 이미지",
    "attachFile": "파일 첨부",
    "restoreDraft": "임시 초안 복원",
    "docContext": "문서 포함",
    "thinkingLevel": {
      "off": "끔",
      "auto": "자동",
      "high": "깊은",
      "xhigh": "최대",
      "autoHint": "auto: 코딩/추론은 high, 도구 결과 후 연속 라운드는 자동으로 medium으로 낮아집니다. 매 라운드 고정하려면 high 선택."
    },
    "thinkingDesc": {
      "off": "추론 없음",
      "auto": "코딩/추론은 자동 심화, 도구 연속 라운드는 자동 감속",
      "high": "깊은 추론",
      "xhigh": "전체 추론"
    },
    "contextWindow": "컨텍스트 {windowK}k",
    "tokensUsed": "사용 {tokensK}k ({pct}%)",
    "contextOverview": "이번에 함께 가는 컨텍스트",
    "contextOverviewSubtitle": "보내기 전에 한눈에 확인해서 문맥을 정확히 맞춰요.",
    "contextMode": "모드",
    "contextModel": "모델",
    "contextText": "본문",
    "contextTextValue": "{count}자",
    "contextQuote": "인용 범위",
    "contextDoc": "참고 문서",
    "contextFiles": "첨부",
    "contextImages": "이미지",
    "contextHeldBack": "초안에 보관",
    "modeSend": "보내기",
    "modeSteer": "방향 전환",
    "contextGit": "Git 컨텍스트"
  },
  "slash": {
    "diary": "오늘의 일기 쓰기",
    "diaryBusy": "일기 작성 중...",
    "diaryDone": "일기가 diary 폴더에 저장되었습니다",
    "diaryFailed": "일기 작성 실패",
    "xing": "이 대화를 돌아보기",
    "compact": "컨텍스트 압축",
    "compactBusy": "압축 중..."
  },
  "welcome": {
    "messages": [
      "무엇이 필요하세요? {name}에게 맡겨 주세요",
      "오늘 무슨 생각을 하고 있어요?",
      "{name}은(는) 늘 여기 있어요",
      "도움이 필요한 게 있나요?",
      "떠오르는 대로 편하게 말해 주세요."
    ],
    "memoryOn": "기억",
    "memoryOff": "이 대화에서는 기억을 사용하지 않아요",
    "agentSelector": "에이전트 선택",
    "focusHint": "Cmd/Ctrl + K 로 바로 입력할 수 있어요",
    "quickActions": {
      "askFolder": {
        "label": "현재 프로젝트 보기",
        "prompt": "현재 워크스페이스를 빠르게 살펴보고 이 프로젝트가 무엇인지, 지금 가장 먼저 할 가치가 높은 일이 무엇인지 알려주세요."
      },
      "summarizeWork": {
        "label": "파일 요약하기",
        "prompt": "현재 워크스페이스의 핵심 파일을 읽고 프로젝트 개요, 현재 진행 상태, 다음으로 할 일을 짧게 정리해 주세요."
      },
      "planToday": {
        "label": "오늘 계획 만들기",
        "prompt": "현재 워크스페이스를 기준으로 오늘 실행할 3단계 계획을 우선순위대로 만들어 주세요."
      },
      "fleet": {
        "label": "⚡ 병렬 워커 배치"
      }
    }
  },
  "drop": {
    "hint": "파일을 놓으면 {name}에게 보낼 수 있어요"
  },
  "attach": {
    "folder": "폴더",
    "copy": "복사",
    "copied": "복사됨 ✓"
  },
  "preview": {
    "openInBrowser": "브라우저에서 열기",
    "exportPng": "PNG 내보내기"
  },
  "cron": {
    "typeAt": "1회",
    "typeEvery": "반복",
    "typeCron": "예약",
    "confirm": {
      "approve": "확인",
      "reject": "취소",
      "created": "✓ 생성됨",
      "rejected": "취소됨"
    },
    "everyHours": "{n}시간마다",
    "everyMinutes": "{n}분마다",
    "hourly": "매시간",
    "dailyAt": "매일 {hour}:{min}",
    "weeklyAt": "{days} {hour}:{min}",
    "dayNames": [
      "일",
      "월",
      "화",
      "수",
      "목",
      "금",
      "토"
    ],
    "weekPrefix": ""
  },
  "mood": {
    "label": "✿ 무드",
    "hanakoLabel": "✿ 무드",
    "butterLabel": "❊ 펄스",
    "lynnLabel": "◈ 성찰"
  },
  "xing": {
    "title": "반성",
    "thinking": "{name}이(가) 생각하는 중"
  },
  "yuan": {
    "types": {
      "hanako": {
        "label": "균형 잡힌 어시스턴트",
        "avatar": "Hanako.png",
        "name": "Hanako"
      },
      "butter": {
        "label": "더 풍부한 감성",
        "avatar": "Butter.png"
      },
      "kong": {
        "label": "기본형",
        "avatar": "Kong.png"
      },
      "lynn": {
        "label": "더 믿음직한 성격",
        "avatar": "Lynn.png",
        "name": "Lynn"
      }
    },
    "title": "元",
    "splash": {
      "butter": [
        "{name}이(가) 어제 다 못 읽은 페이지를 넘겼어요",
        "아직 못 한 말이 있어요, {name}은(는) 기억하고 있어요",
        "{name}이(가) 낮잠을 자고 있어요",
        "잊기엔 너무 소중한 기억을 맞춰보고 있어요",
        "{name}이(가) 마지막 기분을 조심스럽게 접어 두었어요",
        "혀끝에 맴도는 말이 한참 되었어요",
        "일어나자마자 당신이 뭘 하고 있는지 궁금했어요",
        "줄임표 속에 다 못 한 이야기가 숨어 있어요",
        "{name}이(가) 하고 싶은 말을 아주 작은 쪽지에 접고 있어요",
        "오늘 구름이 그날 당신이 찍은 사진이랑 똑같아요"
      ],
      "lynn": [
        "{name}이(가) 초안 여백에 참조선을 그었어요",
        "오래된 질문은 가라앉고, 새로운 아이디어가 떠오르고 있어요",
        "어제의 단서를 한 번 더 살펴보았어요",
        "{name}은(는) 그 공식의 유도가 아름다웠다고 생각해요",
        "어떤 답은 시간이 필요해요",
        "{name}이(가) 업무 최적화 방법을 고민하고 있어요",
        "{name}이(가) 모든 걸 정리된 상태로 유지하려 하고 있어요",
        "지난번 결론을 다시 한번 검증했어요",
        "{name}은(는) 그날 당신의 추론이 날카로웠다고 생각해요",
        "{name}이(가) 커피가 식기를 기다리며 생각을 정리했어요"
      ]
    },
    "welcome": {
      "butter": [
        "안녕~",
        "나를 찾아왔어요?",
        "오늘 하루 어때요?",
        "{name}이(가) 여기서 기다리고 있었어요",
        "{name}이(가) 방금 당신에게 할 말이 있었어요"
      ],
      "lynn": [
        "안녕하세요. 준비되면 말씀하세요.",
        "{name} 준비됐어요",
        "무엇을 처리할까요?",
        "말씀하세요, {name}이(가) 듣고 있어요"
      ]
    },
    "placeholder": {
      "butter": "생각나는 대로 말해 주세요...",
      "lynn": "말씀하세요..."
    }
  },
  "thinking": {
    "phrases": [
      "생각하는 중",
      "혼잣말 중",
      "표현을 고르는 중",
      "머릿속이 돌아가는 중",
      "생각을 모으는 중",
      "영감을 끓이는 중",
      "기억을 뒤지는 중",
      "무언가 떠올랐어요",
      "아이디어가 솟아나는 중",
      "당신의 말을 소화하는 중",
      "머릿속으로 초안 작성 중",
      "생각의 실을 엮는 중"
    ],
    "butter": [
      "당신의 말을 조심스럽게 헤아리는 중",
      "당신의 감정을 천천히 풀어보는 중",
      "가장 부드러운 표현을 찾는 중",
      "마음속에서 말들이 줄을 서고 있어요",
      "생각을 곱게 접는 중",
      "조용히 곱씹는 중",
      "기억 속에서 무언가를 찾고 있어요",
      "안아줄 만한 답장을 만드는 중",
      "어떤 감정은 풀어내는 데 시간이 걸려요",
      "당신의 말을 위한 포근한 자리를 만드는 중"
    ],
    "done": "생각 완료",
    "active": "생각하는 중",
    "lynn": [
      "분석 중",
      "시나리오 검토 중",
      "사실 확인 중",
      "생각 정리 중",
      "논리를 따라가는 중",
      "머릿속으로 개요 작성 중",
      "관련 정보 검색 중",
      "검증 중",
      "문제를 분해하는 중",
      "종합하는 중"
    ]
  },
  "toolGroup": {
    "success": "✿ {name} 다 끝났어요, 식은 죽 먹기 ~ · {n}단계",
    "failed": "⚠ 뭔가 이상한 것 같아요 · {n}단계",
    "countWithFail": "{total}개 도구 ({fail}개 실패)",
    "count": "{n}개 도구",
    "running": "{n}개 도구 실행 중"
  },
  "tool": {
    "web_search": {
      "running": "🌐 {name}이(가) 인터넷 서핑 중이에요",
      "done": "🌐 {name} 서핑 다녀왔어요",
      "failed": "🌐 {name} 파도를 못 탔어요"
    },
    "web_fetch": {
      "running": "📄 {name}이(가) 웹페이지를 보고 있어요",
      "done": "📄 {name} 다 파악했어요",
      "failed": "📄 {name} 인터넷 연결 실패"
    },
    "search_memory": {
      "running": "💭 {name}이(가) 기억을 떠올리는 중이에요",
      "done": "💭 {name} 떠올랐어요!",
      "failed": "💭 {name} 아무리 해도 기억이 안 나요"
    },
    "bash": {
      "running": "명령 실행 중…",
      "done": "명령 완료",
      "failed": "명령 실패"
    },
    "read": {
      "running": "파일 읽는 중…",
      "done": "읽기 완료",
      "failed": "읽기 실패"
    },
    "write": {
      "running": "파일 쓰는 중…",
      "done": "쓰기 완료",
      "failed": "쓰기 실패"
    },
    "edit": {
      "running": "파일 편집 중…",
      "done": "편집 완료",
      "failed": "편집 실패"
    },
    "edit-diff": {
      "running": "파일 편집 중…",
      "done": "편집 완료",
      "failed": "편집 실패"
    },
    "glob": {
      "running": "🔍 {name}이(가) 파일을 찾고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 샅샅이 뒤져도 못 찾았어요"
    },
    "grep": {
      "running": "🔍 {name}이(가) 파일 속을 뒤지고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 다 뒤져도 없어요"
    },
    "find": {
      "running": "🔍 {name}이(가) 파일을 찾고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 샅샅이 뒤져도 못 찾았어요"
    },
    "ls": {
      "running": "📂 {name}이(가) 폴더 안에 뭐가 있는지 보고 있어요",
      "done": "📂 {name} 다 봤어요",
      "failed": "📂 {name} 이 폴더를 열 수 없어요"
    },
    "truncate": {
      "running": "✂️ {name}이(가) 파일을 정리하고 있어요",
      "done": "✂️ {name} 깔끔해졌어요",
      "failed": "✂️ {name} 정리가 안 돼요"
    },
    "present_files": {
      "running": "📎 {name}이(가) 파일을 준비하고 있어요",
      "done": "📎 여기요!",
      "failed": "📎 파일을 건네지 못했어요"
    },
    "browser": {
      "running": "브라우저…",
      "done": "브라우저 종료",
      "failed": "브라우저 실패"
    },
    "_fallback": {
      "running": "🔧 {name}이(가) 열심히 작업 중이에요…",
      "done": "🔧 {name} 끝났어요",
      "failed": "🔧 {name} 뭔가 잘 안 됐어요"
    }
  },
  "file_output": {
    "open": "열기",
    "copied": "경로 복사됨"
  },
  "model": {
    "unknown": "알 수 없는 모델",
    "offline": "오프라인",
    "switchFailed": "모델 전환 실패"
  },
  "splash": {
    "lines": [
      "{name}은(는) 저녁 노을을 기억해요",
      "기억 속에서 어떤 말이 싹을 틔웠어요",
      "추억 속에서 당신의 그림자를 발견했어요",
      "오래된 대화 사이로 바람이 지나갔어요",
      "시간에 절여진 말들이 부드러워졌어요",
      "{name}은(는) 그날 당신이 웃던 걸 기억해요",
      "당신이 접어둔 기억 한 페이지가 있어요",
      "흩어진 감정들을 모아보았어요",
      "{name}은(는) 어느 오후의 귤 향기를 맡았어요",
      "그 대화들에는 아직 온기가 남아 있어요"
    ]
  },
  "settings": {
    "title": "설정",
    "back": "뒤로",
    "save": "저장",
    "saved": "저장됨 ✿",
    "saveFailed": "저장 실패",
    "noChanges": "저장할 내용이 없어요",
    "autoSaved": "자동 저장됨 ✿",
    "tabs": {
      "interface": "인터페이스",
      "agent": "에이전트",
      "me": "나",
      "providers": "제공자",
      "models": "모델",
      "memory": "기억",
      "work": "업무",
      "skills": "스킬",
      "bridge": "소셜",
      "voice": "음성",
      "plugins": "부가 기능",
      "about": "소개"
    },
    "appearance": {
      "title": "외관",
      "theme": "테마",
      "warmPaper": "따뜻한 종이",
      "warmPaperMode": "라이트",
      "midnight": "아오이 밤",
      "midnightMode": "다크",
      "highContrast": "깨끗한 흰색",
      "highContrastMode": "고대비",
      "grassAroma": "풀 향기",
      "grassAromaMode": "Butter",
      "contemplation": "사색",
      "contemplationMode": "Lynn",
      "absolutely": "Absolutely",
      "absolutelyMode": "어디서 본 듯한",
      "delve": "Delve",
      "delveMode": "탐험해 봐요",
      "deepThink": "Deep Think",
      "deepThinkMode": "작은 고래",
      "auto": "자동",
      "autoMode": "시스템",
      "serifFont": "명조 글꼴",
      "serifFontHint": "본문에 명조 글꼴을 사용해요"
    },
    "locale": {
      "title": "언어 및 지역",
      "language": "언어",
      "languageHint": "전환 후 페이지가 새로고침돼요",
      "timezone": "시간대",
      "timezoneHint": "기억 타임스탬프, 일기 항목 등에 사용돼요"
    },
    "agent": {
      "title": "에이전트",
      "changeAvatar": "변경",
      "removeAvatar": "아바타 제거",
      "avatarRemoved": "기본 아바타로 복원됨",
      "agentNameHint": "불리는 이름",
      "identity": "정체성",
      "identityHint": "이 에이전트가 누구이고 무엇을 잘하는지 짧게 설명해 주세요. 다른 에이전트가 이를 참고해요",
      "ishiki": "의식",
      "ishikiHint": "어시스턴트의 성격, 어조, 행동을 정의해요. 이름은 자동으로 주입돼요",
      "publicIshiki": "공개 의식",
      "publicIshikiHint": "개인정보 보호를 위해, 방문자와 대화할 때 어시스턴트는 기억, 개인 정보, 컴퓨터의 파일과 도구에 접근할 수 없어요.\n방문자 대화에서의 답변 스타일과 가이드라인을 여기서 설정할 수 있어요.",
      "chatModel": "모델",
      "chatModelHint": "대화와 작업에 사용하는 모델",
      "addAgent": "새 에이전트",
      "createTitle": "새 에이전트",
      "namePlaceholder": "이름을 지어주세요",
      "cancel": "취소",
      "confirm": "만들기",
      "nameRequired": "이름을 입력해 주세요",
      "created": "{name} 생성 완료 ✿",
      "createFailed": "생성 실패",
      "switched": "{name}(으)로 전환됨 ✿",
      "switchFailed": "전환 실패",
      "deleteBtn": "에이전트 삭제",
      "deleteTitle1": "{name}을(를) 삭제할까요?",
      "deleteDesc1": "모든 설정, 기억, 대화가 영구적으로 삭제돼요. 이 작업은 되돌릴 수 없어요.",
      "deleteNext": "계속",
      "deleteTitle2": "확인하려면 \"{name}\"을(를) 입력해 주세요",
      "deletePlaceholder": "에이전트 이름 입력",
      "deleteConfirm": "영구 삭제",
      "deleteCancel": "취소",
      "deleted": "{name} 삭제됨",
      "deleteFailed": "삭제 실패",
      "setActive": "활성 에이전트로 설정",
      "lastAgent": "에이전트는 최소 한 명 유지해야 해요",
      "yuan": "元",
      "yuanHint": ""
    },
    "about": {
      "title": "소개",
      "tagline": "당신의 컴퓨터에 사는, 기억력 좋은 어시스턴트.",
      "license": "라이선스",
      "copyright": "저작권",
      "copyrightOriginal": " (원본)",
      "copyrightDerived": " (2차 개발)",
      "description": "프로젝트 설명",
      "descriptionText": "liliMozi의 오픈소스 프로젝트를 기반으로 개발",
      "licenseToggle": "라이선스 전문",
      "permissions": "권한",
      "fullAccess": "전체 접근 모드",
      "fullAccessDesc": "샌드박스 격리와 명령 제한을 비활성화해요. 에이전트가 파일 시스템과 터미널에 완전히 접근할 수 있어요 (새 세션부터 적용)",
      "fullAccessWarningTitle": "전체 접근 모드에 대해서",
      "fullAccessWarningBody1": "활성화하면 에이전트가 다음을 포함한 전체 시스템 권한을 가지게 돼요:",
      "fullAccessWarningBody2": "1. 파일 시스템이 샌드박스되지 않아 모든 경로를 읽고 쓸 수 있어요\n2. 터미널 명령이 제한되지 않아 sudo, chmod 등을 실행할 수 있어요\n3. OS 수준 격리(macOS Seatbelt / Linux bubblewrap)가 비활성화돼요",
      "fullAccessWarningBody3": "에이전트의 행동을 완전히 신뢰하고 시스템 수준 작업이 필요한 경우에만 권장해요.",
      "fullAccessCancel": "취소",
      "fullAccessConfirm": "위험을 이해했어요, 활성화",
      "updateAvailable": "새 버전 출시: v{{version}}",
      "updateDownload": "다운로드",
      "updateChecking": "업데이트 확인 중…",
      "updateDownloading": "v{{version}} 다운로드 중…",
      "updateReadyInstall": "v{{version}} 설치 준비 완료",
      "updateInstall": "지금 설치",
      "updateProgress": "{{percent}}%",
      "updateError": "업데이트 확인 실패",
      "updateLatest": "최신 버전입니다",
      "updateCheckBtn": "업데이트 확인",
      "betaUpdates": "베타 업데이트 수신"
    },
    "me": {
      "title": "나",
      "changeAvatar": "변경",
      "userNameHint": "어시스턴트가 부르는 이름",
      "userProfile": "사용자 프로필",
      "userProfileHint": "어시스턴트가 당신을 이해하는 데 도움이 돼요: 관심사, 습관, 취향 등. 시스템 프롬프트에 주입돼요",
      "defaultProviderHint": "로컬 Qwen3.5-9B와 클라우드를 한 번에 전환.",
      "openProviders": "Providers 열기 →"
    },
    "crop": {
      "title": "아바타 조정",
      "hint": "드래그해서 이동, 스크롤해서 확대/축소",
      "cancel": "취소",
      "confirm": "확인",
      "updated": "아바타 업데이트됨 ✿",
      "reset": "아바타가 기본값으로 복원됨"
    },
    "providers": {
      "title": "등록된 Provider",
      "addTitle": "Provider 추가",
      "name": "Provider",
      "customName": "이름",
      "customUrl": "Base URL",
      "apiFormat": "API 프로토콜",
      "url": "Base URL",
      "apiKey": "API Key",
      "addBtn": "추가",
      "empty": "아직 등록된 Provider가 없어요",
      "fetchModels": "모델 가져오기",
      "delete": "Provider 삭제",
      "modelCount": "{n}개 모델",
      "fetchSuccess": "{name}에서 {n}개 모델을 가져왔어요",
      "fetchFailed": "가져오기 실패",
      "nameRequired": "Provider 이름을 입력해 주세요",
      "urlRequired": "Base URL을 입력해 주세요",
      "apiRequired": "API 프로토콜을 선택해 주세요",
      "added": "{name} 추가됨",
      "deleted": "{name} 삭제됨",
      "noModels": "아직 모델이 없어요",
      "resetModels": "모델 초기화",
      "apiType": "API 유형",
      "verify": "확인",
      "verifyConnection": "연결 확인",
      "verifySuccess": "연결 확인됨",
      "verifyFailed": "확인 실패",
      "setupHint": "API Key를 입력해서 이 Provider를 활성화하세요",
      "selectHint": "Provider를 선택하면 상세 정보를 볼 수 있어요",
      "addCustom": "커스텀 Provider 추가",
      "noKey": "미설정",
      "remove": "제거",
      "deleteConfirm": "Provider {name}을(를) 삭제할까요? 연결된 모델도 함께 제거돼요.",
      "apiResponses": "OpenAI Responses",
      "apiCodex": "ChatGPT Codex (Plus/Pro)"
    },
    "mcp": {
      "title": "MCP 서버",
      "hint": "로컬 stdio와 원격 SSE MCP 서버를 관리합니다. 연결되면 도구가 Lynn에 바로 들어옵니다.",
      "builtinTitle": "내장 문서 서비스",
      "presets": "프리셋",
      "newServer": "새로 만들기",
      "serverList": "서버 목록",
      "detail": "세부 정보",
      "name": "이름",
      "nameRequired": "MCP 이름을 입력해 주세요",
      "transport": "전송 방식",
      "command": "명령",
      "args": "인수",
      "cwd": "작업 디렉터리",
      "url": "SSE URL",
      "messageUrl": "메시지 URL(선택)",
      "headers": "헤더",
      "enabled": "이 서버 사용",
      "test": "연결 테스트",
      "testSuccess": "연결 성공",
      "reload": "다시 불러오기",
      "reloaded": "MCP를 다시 불러왔어요",
      "openDocs": "문서 열기",
      "enableBuiltin": "사용",
      "disableBuiltin": "중지",
      "empty": "아직 MCP 서버가 없어요",
      "tools": "도구",
      "resources": "리소스",
      "source": "출처",
      "local": "로컬 설정",
      "discovered": "자동 발견"
    },
    "oauth": {
      "title": "간편 로그인",
      "login": "로그인",
      "logout": "로그아웃",
      "loggedIn": "로그인됨",
      "codePlaceholder": "인증 코드를 붙여넣으세요",
      "submit": "제출",
      "success": "로그인 성공",
      "loggedOut": "로그아웃됨",
      "failed": "로그인 실패",
      "deviceHint": "브라우저에서 이 코드를 입력해서 인증해 주세요",
      "waiting": "인증 대기 중…",
      "clickToCopy": "클릭하여 복사",
      "codeCopied": "코드 복사됨",
      "addModel": "모델 추가",
      "customModelPlaceholder": "모델 ID를 입력하세요"
    },
    "api": {
      "title": "모델 & API",
      "mainApi": "메인 API",
      "provider": "Provider",
      "baseUrl": "Base URL",
      "baseUrlHint": "Base URL을 직접 입력해 주세요",
      "apiKey": "API Key",
      "apiKeyPlaceholder": "새 키를 입력하면 업데이트돼요",
      "utilityApi": "유틸리티 모델 API",
      "utilityApiHint": "별도로 설정할 경우, Provider, Base URL, API Key를 모두 명시해야 해요",
      "showKey": "보기",
      "hideKey": "숨기기",
      "selectModel": "모델 선택",
      "customModel": "직접 입력...",
      "mainModelSection": "모델",
      "mainModelHint": "이 모델들이 채팅 페이지에서 사용할 수 있어요",
      "addModel": "모델 추가",
      "defaultModel": "기본값",
      "removeModel": "제거",
      "noModels": "아직 추가된 모델이 없어요",
      "otherModelSection": "기타",
      "chatModel": "기본 모델",
      "utilityModel": "유틸리티 (소형)",
      "utilityModelHint": "제목, 간단한 분류 등. 저렴한 소형 모델을 추천해요",
      "utilityLargeModel": "유틸리티 (대형)",
      "utilityLargeModelHint": "활동 요약, 작업 분해 등. 비어 있으면 소형 유틸리티로 대체해요",
      "searchProvider": "검색 서비스",
      "searchProviderField": "검색 엔진",
      "searchApiKey": "검색 API Key",
      "searchApiKeyHint": "선택한 검색 Provider의 API Key를 입력해 주세요",
      "searchBaseUrlHint": "searXNG를 사용할 때는 인스턴스 URL만 입력하면 돼요. API Key는 필요 없어요",
      "favorites": "즐겨찾기",
      "searchModel": "모델 검색...",
      "noFavorites": "☆를 클릭해서 모델을 즐겨찾기에 추가하세요",
      "customInput": "직접 입력...",
      "editModel": "편집",
      "contextLength": "컨텍스트 길이",
      "contextShort": "컨텍스트",
      "maxOutput": "최대 출력",
      "outputLength": "출력 길이",
      "modelName": "모델",
      "output": "출력",
      "save": "저장",
      "cancel": "취소",
      "thinkingLevel": "추론 수준",
      "thinkingLevelHint": "추론 깊이를 조절해요. 추론을 지원하는 모델에만 적용돼요",
      "thinkingLevels": {
        "off": "끔",
        "low": "낮음",
        "medium": "보통",
        "high": "높음",
        "auto": "자동",
        "xhigh": "최대"
      },
      "addedModels": "추가된 모델",
      "displayName": "표시 이름",
      "vision": "비전",
      "reasoning": "추론"
    },
    "memory": {
      "sectionTitle": "기억",
      "title": "기억 시스템",
      "needsUtilityModel": "먼저 모델 탭에서 유틸리티 모델을 설정해 주세요",
      "compiled": "현재 기억",
      "compiledHint": "어시스턴트가 당신에 대해 기억하는 것들 — 중요하고 최근의 것들",
      "compiledView": "현재 기억 보기",
      "compiledEmpty": "아직 정리된 기억이 없어요",
      "compiledClear": "초기화",
      "compiledCleared": "정리된 기억이 초기화됨",
      "allMemories": "모든 기억",
      "tokenBudget": "기억 용량",
      "tokenBudgetHint": "memory.md의 목표 token 예산",
      "decayPerDay": "감쇠 계수",
      "decayPerDayHint": "가우시안 감쇠의 기본 λ 값",
      "hitBonus": "참조 보너스",
      "hitBonusHint": "기억이 참조될 때마다 추가되는 점수",
      "baseImportance": "기본 중요도",
      "baseImportanceHint": "새 기억의 기본 초기 점수",
      "forgetSpeed": "망각 속도",
      "forgetSpeedHint": "1.0 = 보통, 2.0 = 두 배 빠르게",
      "compileThreshold": "정리 임계값",
      "compileThresholdHint": "이 점수 미만의 기억은 제외돼요",
      "timezone": "시간대",
      "timezoneHint": "기억 타임스탬프에 사용돼요",
      "actions": {
        "title": "기억 관리",
        "view": "기억 보기",
        "clear": "기억 초기화",
        "more": "더보기",
        "export": "내보내기",
        "import": "가져오기",
        "clearConfirm": "모든 기억을 초기화할까요? 이 작업은 되돌릴 수 없어요.",
        "cancel": "취소",
        "confirmClear": "초기화 확인",
        "viewTitle": "모든 기억",
        "clearSuccess": "기억 초기화됨",
        "exportSuccess": "내보내기 성공",
        "importSuccess": "{count}개 기억 가져옴",
        "importing": "가져오는 중...",
        "empty": "아직 기억이 없어요",
        "invalidFile": "잘못된 기억 파일이에요",
        "activeOnly": "먼저 이 에이전트를 활성 상태로 설정해 주세요"
      },
      "unknownDate": "날짜 불명",
      "threshold": {
        "title": "기억 수위선",
        "hint": "얼마나 많은 기억을 유지할지 정할 수 있어요. 약간의 노이즈는 괜찮아요. LLM은 필터링을 잘 해요.",
        "stats": "{remembered} / {total}개 기억 유지 중"
      },
      "activeOnly": "이 에이전트를 먼저 활성으로 설정해 주세요"
    },
    "pins": {
      "title": "고정 기억",
      "hint": "항상 대화에 주입되며 감쇠하지 않아요",
      "empty": "아직 고정 기억이 없어요",
      "delete": "삭제",
      "addPlaceholder": "고정 기억 추가..."
    },
    "experience": {
      "title": "경험",
      "hint": "에이전트가 배운 교훈을 카테고리별로 정리한 것이에요. 에이전트는 작업을 시작하기 전에 관련 경험을 확인해요",
      "empty": "아직 경험이 없어요",
      "edit": "편집",
      "deleteCategory": "카테고리 삭제"
    },
    "search": {
      "verify": "확인",
      "verifying": "확인 중...",
      "verified": "확인 및 저장됨 ✿",
      "verifyFailed": "확인 실패",
      "noProvider": "먼저 검색 엔진을 선택해 주세요",
      "noKey": "먼저 API Key를 입력해 주세요",
      "noBaseUrl": "먼저 searXNG URL을 입력해 주세요",
      "placeholder": "설정 검색…",
      "empty": "일치하는 탭 없음"
    },
    "work": {
      "title": "순찰",
      "heartbeatEnabled": "순찰 모드",
      "heartbeatOn": "켜짐",
      "heartbeatOff": "꺼짐",
      "heartbeatInterval": "순찰 간격",
      "heartbeatUnit": "분",
      "heartbeatDesc": "어시스턴트가 작업 공간을 자동으로 확인하는 주기",
      "cronAutoApprove": "예약 작업 자동 승인",
      "cronAutoApproveOn": "켜짐",
      "cronAutoApproveOff": "꺼짐",
      "cronAutoApproveDesc": "어시스턴트가 확인 없이 예약 작업을 생성할 수 있도록 허용",
      "homeFolder": "작업 공간",
      "homeFolderDesc": "새 대화, 순찰, 예약 작업의 기본 작업 디렉토리",
      "homeFolderPlaceholder": "미설정 (매번 수동 선택)",
      "homeFolderClear": "지우기",
      "homeFolderBrowse": "찾아보기",
      "trustedRoots": "신뢰된 경로",
      "trustedRootsDesc": "실행 모드에서 워크스페이스 수준 읽기/쓰기를 허용하는 경로 목록",
      "addTrustedRoot": "신뢰된 경로 추가",
      "trustedRootsHint": "적어도 하나의 프로젝트 폴더를 추가하면 Lynn이 명시적으로 허용한 범위 안에서만 파일을 읽고 쓸 수 있어요.",
      "review": {
        "title": "리뷰 체인",
        "desc": "리뷰는 이제 Hanako / Butter 중에서만 고르며, 다른 채널용이나 전문가 에이전트는 섞이지 않습니다. 각 리뷰어에 전용 Agent를 바인딩하면 서로 다른 모델을 따로 쓸 수 있습니다.",
        "defaultReviewer": "기본 리뷰어",
        "defaultReviewerDesc": "리뷰 버튼을 눌렀을 때 먼저 호출되는 인격입니다.",
        "hanakoTitle": "Hanako 리뷰어",
        "hanakoDesc": "꼼꼼하고 안정적인 1차 리뷰에 적합합니다.",
        "butterTitle": "Butter 리뷰어",
        "butterDesc": "다른 시각의 보조 리뷰에 적합합니다.",
        "chooseReviewer": "리뷰어 Agent 선택",
        "createReviewer": "리뷰어 Agent 만들기",
        "configureModel": "모델 설정",
        "unboundHint": "전용 리뷰어 Agent가 아직 연결되지 않았습니다.",
        "boundModel": "현재 모델: {provider} / {model}",
        "modelHint": "각 리뷰어 Agent의 모델은 Agent 탭에서 따로 설정합니다. Hanako, Butter, Lynn이 하나의 큰 모델을 공유할 필요가 없습니다.",
        "createSuccess": "리뷰어 Agent를 만들었습니다: {name}"
      }
    },
    "toolCaps": {
      "title": "자기 학습 스킬"
    },
    "skills": {
      "title": "스킬",
      "desc": "이 에이전트의 스킬을 켜거나 끌 수 있어요. 활성화하면 에이전트가 대화에서 자동으로 해당 스킬을 인식하고 사용해요.",
      "user": "사용자 스킬",
      "system": "시스템 스킬",
      "add": "스킬 추가",
      "delete": "삭제",
      "deleteConfirm": "스킬 \"{name}\"을(를) 삭제할까요?",
      "installSuccess": "스킬 \"{name}\" 설치됨",
      "installError": "설치 실패",
      "enabled": "활성화됨",
      "disabled": "비활성화됨",
      "noSkills": "사용 가능한 스킬이 없어요",
      "learned": "에이전트가 배운 것",
      "noLearned": "에이전트가 아직 배운 스킬이 없어요",
      "noUser": "사용자 정의 스킬 없음",
      "copyToSkills": "내 스킬로 복사",
      "copied": "복사됨 ✓",
      "copyFailed": "복사 실패",
      "dropzone": "스킬 폴더를 드래그해서 설치하거나 클릭해서 찾아보세요",
      "learnHint": "어시스턴트에게 물어보세요: GitHub에서 안전하고 유용한 스킬을 찾아줘",
      "reloaded": "스킬 다시 로드됨",
      "reload": "스킬 새로고침",
      "compatTitle": "호환 스킬",
      "compatDesc": "다른 AI 도구가 설치한 스킬을 자동으로 발견해요",
      "compatNoSkills": "외부 스킬을 찾지 못했어요",
      "compatAddPath": "디렉토리 추가",
      "compatRemove": "제거",
      "compatAutoDiscovered": "자동 발견됨",
      "compatNotInstalled": "미설치",
      "learnCreate": "스킬 생성 / 설치",
      "learnCreateDesc": "에이전트가 새 스킬을 작성하거나 도구 호출로 설치하는 것을 허용해요",
      "fetchRemote": "GitHub / ClawHub에서 스킬 가져오기",
      "fetchRemoteDesc": "활성화하면 에이전트가 전문 작업 수행 시 적합한 스킬을 검색하고 설치해요. 주의해서 사용하세요",
      "safetyReview": "설치 전 안전 검토",
      "safetyReviewDesc": "스킬 설치 전 AI로 프롬프트 인젝션 등 보안 위험을 감지해요",
      "fetchWarning": {
        "title": "원격 스킬 가져오기 정보",
        "body1": "활성화하면 에이전트가 전문 작업 수행 시 GitHub과 ClawHub에서 스킬을 검색, 다운로드, 설치해요.",
        "body2": "설치 전 자동 안전 검토와 스타 수 확인이 수행되지만, 다음 위험이 남아 있어요:",
        "risk1": "스킬 내용이 사람에 의해 검토되지 않아 부적절한 지시가 포함될 수 있어요",
        "risk2": "에이전트가 기대와 다른 스킬을 설치할 수 있어요",
        "risk3": "악성 스킬이 에이전트 행동을 조작하려 할 수 있어요",
        "confirm": "위험을 이해했어요, 활성화"
      },
      "safetyWarning": {
        "title": "안전 검토 비활성화",
        "body1": "안전 검토는 스킬 설치 전 잠재적으로 악성인 콘텐츠를 감지해요:",
        "risk1": "프롬프트 인젝션 (무단 지시)",
        "risk2": "지나치게 광범위한 트리거 조건",
        "risk3": "소셜 엔지니어링 및 권한 상승 시도",
        "body2": "비활성화하면 모든 스킬이 검토 없이 설치돼요.",
        "confirm": "위험을 이해했어요, 검토 비활성화"
      }
    },
    "plugins": {
      "title": "부가 기능",
      "desc": "이 인스턴스에 로드된 부가 기능 목록입니다.",
      "empty": "부가 기능이 없습니다",
      "reload": "새로고침",
      "statusLoaded": "로드됨",
      "statusFailed": "실패",
      "statusDisabled": "비활성화"
    },
    "bridge": {
      "telegram": "Telegram",
      "telegramToken": "Bot Token",
      "telegramHint": "@BotFather에서 받으세요",
      "feishu": "Feishu",
      "feishuAppId": "App ID",
      "feishuAppSecret": "App Secret",
      "feishuHint": "Feishu 오픈 플랫폼에서 받으세요",
      "qq": "QQ",
      "qqAppId": "App ID",
      "qqAppSecret": "App Secret",
      "qqHint": "QQ 봇 오픈 플랫폼(q.qq.com/qqbot)에서 받으세요",
      "connected": "연결됨",
      "disconnected": "연결 안 됨",
      "error": "연결 실패",
      "test": "연결 테스트",
      "testOk": "연결 성공",
      "testFail": "테스트 실패",
      "noToken": "먼저 Bot Token을 입력해 주세요",
      "noCredentials": "먼저 App ID와 App Secret을 입력해 주세요",
      "readOnly": "읽기 전용 모드",
      "readOnlyDesc": "브릿지 봇은 파일만 읽을 수 있고, 쓰기나 명령 실행은 불가능해요",
      "howTo": "설정 가이드",
      "tutorialTitle": "플랫폼 설정 가이드",
      "tutorialTgSteps": [
        "Telegram에서 <code>@BotFather</code>를 검색하고 대화를 열어 주세요",
        "<code>/newbot</code>을 보내고 안내에 따라 이름과 사용자명을 설정해 주세요",
        "BotFather가 Bot Token을 보내줄 거예요 (예: <code>123456:ABC-DEF...</code>)",
        "위 입력란에 Token을 붙여넣고 스위치를 켜주세요",
        "Telegram에서 내 봇을 찾아서 메시지를 보내 테스트해 보세요"
      ],
      "ownerSelect": "어떤 계정이 본인인가요",
      "ownerWarning": "경고: 선택한 계정은 컴퓨터, 기억, 개인 정보에 접근할 수 있어요. 본인의 계정인지 확인해 주세요.",
      "ownerNone": "먼저 메시지를 보내야 선택할 수 있어요",
      "ownerSaved": "저장됨",
      "ownerConfirmTitle": "소유자로 설정할까요?",
      "ownerConfirmText": "소유자는 기억, 도구, 성격을 포함한 에이전트의 모든 기능에 접근할 수 있어요. 본인의 계정인지 확인해 주세요.",
      "ownerConfirmCancel": "취소",
      "ownerConfirmSave": "확인",
      "tutorialFsSteps": [
        "<code>open.feishu.cn</code>에 접속해서 로그인 후 개발자 콘솔을 열어 주세요",
        "\"기업 자체 앱 만들기\"를 클릭하고 앱 이름과 설명을 입력해 주세요",
        "\"인증 및 기본 정보\" 페이지에서 <code>App ID</code>와 <code>App Secret</code>을 복사해 주세요",
        "왼쪽 메뉴에서 \"앱 기능 추가\"를 찾아 \"봇\" 기능을 추가하고 이름을 지어주세요",
        "\"권한\"에서 <code>im:message</code>를 검색하고 활성화해 주세요 (메시지 수발신)",
        "\"이벤트 및 콜백\" → \"이벤트 설정\"에서 \"롱 커넥션으로 이벤트 수신\"으로 변경해 주세요",
        "\"이벤트 추가\"를 클릭하고 <code>im.message.receive_v1</code>을 추가해 주세요 (메시지 수신)",
        "중요: \"버전 관리\"에서 버전을 생성하고 게시해 주세요 (롱 커넥션 설정에는 게시된 앱이 필요해요)",
        "위 입력란에 App ID와 App Secret을 붙여넣고 스위치를 켜주세요"
      ],
      "whatsappHint": "곧 지원 예정"
    },
    "shortcuts": {
      "title": "키보드 단축키",
      "globalSummon": "전역 호출",
      "globalSummonHint": "음성 탭에서 재바인딩 가능. 다른 앱이 점유 시 Cmd/Ctrl+Opt+J로 폴백."
    }
  },
  "onboarding": {
    "welcome": {
      "title": "안녕하세요, 저는 {name}이에요 ✿",
      "subtitle": "저는 당신의 개인 AI 어시스턴트예요.\n어떻게 시작할지 고르고 바로 앱으로 들어가요.",
      "next": "시작하기",
      "quickTitle": "먼저 바로 써보기",
      "quickDesc": "최소한의 단계만 남겨둬요.\n이름은 나중에 바꿔도 되고, 모델과 테마도 뒤에서 맞춰도 돼요.",
      "quickAction": "Quick Start로 들어가기",
      "advancedTitle": "지금 한 번에 설정하기",
      "advancedDesc": "이미 provider / model 취향이 있다면\n연결, 모델, 테마를 지금 한 번에 맞출 수 있어요.",
      "advancedAction": "Advanced Setup으로 들어가기"
    },
    "name": {
      "title": "어떻게 부르면 될까요?",
      "subtitle": "대화가 더 자연스러워져요",
      "quickSubtitle": "지금 적어도 되고, 나중에 설정에서 바꿔도 돼요",
      "placeholder": "이름을 입력해 주세요",
      "quickHint": "비워둬도 괜찮아요. 먼저 들어가 볼까요.",
      "back": "뒤로",
      "next": "다음",
      "quickNext": "Quick Start 계속하기"
    },
    "provider": {
      "title": "AI Provider를 선택해 주세요",
      "subtitle": "작동하려면 AI 모델 Provider가 필요해요.\nProvider를 선택하고 API Key를 입력해 주세요.",
      "custom": "직접 입력...",
      "customName": "이름",
      "customNamePlaceholder": "예: my-provider",
      "customUrl": "API URL",
      "customUrlPlaceholder": "예: https://api.example.com/v1",
      "keyLabel": "API Key",
      "keyPlaceholder": "API Key를 붙여넣으세요",
      "test": "연결 테스트",
      "testing": "연결 중...",
      "testSuccess": "연결됨 ✿",
      "testFailed": "연결 실패",
      "back": "뒤로",
      "next": "다음"
    },
    "model": {
      "title": "대화 모델을 선택해 주세요",
      "subtitle": "주로 사용할 모델이에요. 똑똑하고 유능한 걸 골라주세요.",
      "loading": "모델을 가져오는 중...",
      "searchPlaceholder": "모델 검색...",
      "empty": "모델을 찾지 못했어요",
      "utility": "유틸리티 모델",
      "utilityHint": "요약, 핵심 추출 등. 빠르고 저렴한 모델을 추천해요",
      "utilityLarge": "유틸리티 대형",
      "utilityLargeHint": "기억 정리, 심층 분석 등. 유능한 모델을 추천해요",
      "back": "뒤로",
      "next": "다음"
    },
    "theme": {
      "title": "테마를 선택해 주세요",
      "subtitle": "나중에 설정에서 언제든 바꿀 수 있어요",
      "back": "뒤로",
      "next": "다음"
    },
    "permissions": {
      "title": "권한을 한 번에 준비하기",
      "subtitle": "먼저 작업 공간을 고르고, 그다음 알림을 켜요.\n이렇게 하면 Lynn이 시작할 때 macOS 권한 팝업이 연달아 뜨지 않아요.",
      "workspace": {
        "title": "작업 공간",
        "desc": "실제로 작업하는 폴더를 골라 주세요. 순찰, 예약 작업, 파일 작업은 명시적으로 허용한 위치 안에서만 이루어져요.",
        "selected": "선택됨",
        "pending": "설정 필요",
        "placeholder": "아직 선택하지 않았어요. 계속하면 폴더 선택 창이 열려요."
      },
      "notifications": {
        "title": "알림",
        "desc": "알림은 Lynn이 주의를 끌어야 할 때만 사용해요. 시작 중에 갑자기 띄우지 않고 여기서 의도적으로 요청해요.",
        "detail": "지금 건너뛰어도 나중에 시스템 설정에서 다시 켤 수 있어요.",
        "status": {
          "checking": "확인 중",
          "pending": "미허용",
          "granted": "활성화됨",
          "denied": "거부됨",
          "unsupported": "권한 불필요"
        }
      },
      "note": "계속하면 Lynn이 작업 공간 선택을 안내하고, macOS에 필요할 때만 알림 권한을 요청해요.",
      "back": "뒤로",
      "continue": "권한 설정 후 계속",
      "working": "처리 중..."
    },
    "tutorial": {
      "title": "준비 완료 ✿",
      "quickTitle": "Quick Start 준비 완료 ✿",
      "quickBannerTitle": "이제 작업 공간은 바로 굴리기 시작할 수 있어요",
      "quickBannerDesc": "먼저 작업 공간, Jian, 순찰부터 써보세요.\nProvider와 모델은 나중에 설정에서 연결할 수 있고, 활동 패널이 백그라운드 진행 상황을 계속 보여줘요.",
      "memory": {
        "title": "기억",
        "desc": "대화에서 중요한 내용을 기억해요. 오래되고 덜 참조된 기억은 자연스럽게 흐려져요. 우리의 기억처럼."
      },
      "skills": {
        "title": "스킬",
        "desc": "파일을 읽고 쓰고, 명령을 실행하고, 웹을 검색할 수 있어요. 더 많은 스킬은 설정에서 관리하세요."
      },
      "workspace": {
        "title": "작업 공간",
        "desc": "폴더를 작업 공간으로 설정하면 프로젝트와 파일 관리를 도와줄 수 있어요."
      },
      "jian": {
        "title": "Jian",
        "desc": "아무 폴더에 jian.md를 넣어두면\n순찰할 때 확인하고 자동으로 실행해요."
      },
      "patrol": {
        "title": "자동 순찰",
        "desc": "순찰을 켜두면 작업 공간의 변화와 새로운 Jian을 계속 확인하면서 긴 작업도 끊기지 않게 이어가요."
      },
      "activity": {
        "title": "활동 패널",
        "desc": "백그라운드 실행, 리뷰 후속 작업, 순찰 결과가 여기에 남아요.\n무슨 일이 있었는지 다시 묻지 않고 바로 이어서 진행할 수 있어요."
      },
      "finish": "시작할게요",
      "quickFinish": "지금 Lynn으로 들어가기"
    },
    "localModel": {
      "title": "Download Lynn's default local model",
      "subtitle": "Qwen3.5-9B Q4_K_M imatrix MTP · 5.78 GB / 5.38 GiB · 32K context · 24GB+ RAM recommended.\nRuns fully offline — no API key, no data ever leaves your machine.",
      "specsLine": "5.78 GB / 5.38 GiB · Q4_K_M imatrix MTP · 32K context · fully offline",
      "needsBinary": "llama.cpp inference engine not found at ~/.lynn/llamacpp/bin/llama-server",
      "needsBinaryHint": "Install llama.cpp following the docs and retry.",
      "alreadyHave": "Local model is ready",
      "alreadyHaveDesc": "The model is already downloaded — you're good to go.",
      "startBtn": "Start download",
      "pauseBtn": "Pause",
      "resumeBtn": "Resume",
      "cancelBtn": "Cancel download",
      "retryBtn": "Retry download",
      "switchBackBtn": "Use Brain v2 default model instead",
      "downloading": "Downloading (source {source})",
      "verifying": "Verifying SHA-256…",
      "paused": "Paused",
      "ready": "Download complete ✿",
      "spawning": "Starting llama.cpp inference server…",
      "spawnReady": "llama.cpp is ready",
      "spawnFailed": "Inference server failed to start: {reason}",
      "errorChecksum": "Checksum mismatch — rotating to next mirror",
      "errorAll": "All mirrors failed — check your network and retry",
      "errorGeneric": "Download error: {reason}",
      "next": "Continue",
      "back": "Back",
      "modelPreparedHint": "모델과 llama.cpp 준비 완료. 시작을 누르면 Local Qwen3.5-9B로 전환됩니다.",
      "statusReady": "시작 가능",
      "statusWaiting": "준비 중",
      "runtimeLocal9B": "Local Qwen3.5-9B",
      "runtimeLocalDefault": "Local Qwen3.5-9B"
    },
    "skipSetup": "설정 건너뛰기"
  },
  "activity": {
    "title": "활동",
    "empty": "아직 활동이 없어요. 순찰과 예약 작업이 여기에 표시돼요.",
    "back": "뒤로",
    "heartbeat": "정기 순찰",
    "plan": "계획 작업",
    "delegate": "위임 작업",
    "reviewFollowUp": "리뷰 후속 실행",
    "cron": "예약 작업",
    "patrolDone": "순찰 완료",
    "planDone": "계획 완료",
    "cronDone": "예약 작업 완료",
    "error": "실행 오류",
    "viewSession": "세션 보기 →",
    "duration": "{text} 소요"
  },
  "automation": {
    "title": "예약 작업",
    "empty": "아직 예약 작업이 없어요.\n필요할 때 어시스턴트가 만들어 줄 거예요.",
    "guideTitle": "예약 작업으로 자동화하기",
    "guideDesc": "먼저 템플릿을 고르고, 그다음 프로젝트·시간·모델을 설정하세요. 만든 뒤에는 바로 테스트 실행해서 실제로 동작하는지 확인할 수 있어요.",
    "guideTip": "클릭하면 바로 추가돼요. 시간과 내용은 나중에 수정할 수 있어요.",
    "deleteConfirm": "이 예약 작업을 삭제하시겠습니까?",
    "defaultModel": "기본 작업 모델",
    "edit": "편집",
    "delete": "삭제",
    "tpl": {
      "newsLabel": "매일 테크 뉴스",
      "newsDesc": "매일 아침 9시에 기술 뉴스 검색 및 정리",
      "diaryLabel": "매일 밤 일기",
      "diaryDesc": "매일 밤 10시에 자동으로 일기 작성",
      "repoLabel": "평일 프로젝트 점검",
      "repoDesc": "월~금 Issues와 PR 확인",
      "cleanLabel": "주간 정리",
      "cleanDesc": "매주 일요일에 임시 파일 정리"
    }
  },
  "desk": {
    "title": "책상",
    "skills": "스킬",
    "cwdSkills": "프로젝트 스킬",
    "cwdSkillsEmpty": "이 폴더에는 프로젝트 스킬이 없어요",
    "cwdSkillsHint": ".agents/skills/ 디렉토리를 만들어서 시작하세요",
    "cwdSkillsDesc": "스킬은 작업 공간을 따라가요",
    "cwdSkillsDrop": "폴더나 .zip을 드래그해서 스킬을 설치하세요",
    "deleteSkill": "스킬 삭제",
    "openInFinder": "폴더 열기",
    "jianLabel": "Jian",
    "jianPlaceholder": "이 폴더의 파일을 어떻게 처리할지 어시스턴트에게 알려주세요...",
    "emptyTitle": "책상이 비어 있어요",
    "emptyHint": "책상은 어시스턴트의 순찰 작업 공간이자 모든 대화의 기본 디렉토리예요.\n설정에서 폴더를 지정하세요.",
    "noDeskRoot": "책상 루트가 설정되지 않았어요. 설정 → 작업에서 폴더를 지정해 주세요.",
    "goToSettings": "설정으로 이동",
    "fileLabel": "파일",
    "openWithDefault": "기본 앱으로 열기",
    "newFolder": "새 폴더",
    "ctx": {
      "open": "열기",
      "openInFinder": "폴더 열기",
      "rename": "이름 변경",
      "copyPath": "경로 복사",
      "delete": "삭제",
      "deleteN": "{n}개 항목 삭제",
      "newMdFile": "새 Markdown 문서",
      "newFolder": "새 폴더"
    },
    "sort": {
      "label": "정렬",
      "mtime": "수정일",
      "nameAsc": "이름 A→Z",
      "nameDesc": "이름 Z→A",
      "size": "파일 크기",
      "type": "파일 유형",
      "mtimeShort": "시간",
      "nameAscShort": "이름↑",
      "nameDescShort": "이름↓",
      "sizeShort": "크기",
      "typeShort": "유형"
    }
  },
  "window": {
    "minimize": "최소화",
    "maximize": "최대화",
    "close": "닫기"
  },
  "browser": {
    "using": "브라우저 사용 중",
    "close": "브라우저 닫기",
    "closeBtn": "닫기",
    "back": "뒤로",
    "forward": "앞으로",
    "reload": "새로고침",
    "emergencyStop": "AI 제어 긴급 중지",
    "backgroundHint": "백그라운드 브라우저 실행 중, 클릭하여 보기",
    "background": "백그라운드 브라우저"
  },
  "bridge": {
    "selectChat": "대화를 선택하세요",
    "noSessions": "아직 대화가 없어요",
    "noMessages": "아직 메시지가 없어요",
    "empty": "메시지 없음",
    "notConfigured": "{platform}이(가) 설정되지 않았어요",
    "goToSettings": "설정으로 이동",
    "resetContext": "컨텍스트 초기화",
    "resetContextTip": "다음 메시지부터 새 대화가 시작돼요"
  },
  "error": {
    "pathsRequired": "paths 배열이 필요해요",
    "tooManyFiles": "파일이 너무 많아요 (최대 {max}개, 현재 {n}개)",
    "pathNotFound": "경로를 찾을 수 없어요",
    "missingParam": "{param} 파라미터가 없어요",
    "invalidJson": "요청 본문은 JSON 객체여야 해요",
    "sessionNotFound": "세션 파일을 찾을 수 없어요",
    "stillStreaming": "{name}이(가) 아직 응답 중이에요. 이번 응답이 끝난 뒤 다음 메시지를 보내 주세요",
    "agentNameEmpty": "어시스턴트 이름을 비워둘 수 없어요",
    "agentIdInvalid": "어시스턴트 ID에 잘못된 문자가 포함되어 있어요",
    "agentAlreadyExists": "어시스턴트 \"{id}\"가 이미 존재해요",
    "agentSwitching": "어시스턴트를 전환 중이에요. 잠시 후 다시 시도해 주세요",
    "agentNotFound": "어시스턴트 \"{id}\"를 찾을 수 없거나 초기화되지 않았어요",
    "agentModelNotAvailable": "agent \"{id}\"에 설정된 모델 \"{model}\"이(가) 사용 가능한 목록에 없어요",
    "agentDeleteActive": "현재 사용 중인 어시스턴트는 삭제할 수 없어요",
    "agentNotExists": "어시스턴트 \"{id}\"가 존재하지 않아요",
    "modelNoResponse": "{model}이(가) 이번에는 표시할 수 있는 내용을 반환하지 않았어요. 상위 서비스의 빈 응답이나 호환성 문제일 가능성이 크며, API 설정 오류만을 뜻하지는 않아요. 다시 시도하거나 다른 모델로 바꿔 보세요.",
    "defaultModelNoResponse": "{model}의 주 경로에서 이번 턴에 보여 줄 결과를 만들지 못했어요. Lynn이 자동으로 보조 경로까지 이어받아 봤지만 아직 표시할 내용을 얻지 못했어요. 잠시 후 다시 시도하거나 설정에서 자신의 모델 서비스로 바꿔 보세요.",
    "invalidToolSimulation": "이번 턴에서 실제 도구 호출이 실행되지 않아 결과가 무효 처리되었어요. 다시 시도해 주세요.",
    "defaultModelInvalidToolSimulation": "기본 모델이 이번 턴에서 실제 도구 실행을 끝내지 못해 결과를 무효 처리했어요. Lynn이 더 안정적인 보조 실행 경로로 넘겨서 다시 처리하고 있어요.",
    "noActiveSession": "활성 세션이 없어요",
    "compacting": "압축 중이에요",
    "waitForReply": "응답이 완료된 후 압축해 주세요",
    "compactFailed": "압축 실패: {msg}",
    "maxImages": "이미지는 최대 {max}장까지 가능해요",
    "unsupportedImageFormat": "지원하지 않는 이미지 형식: {mime}",
    "imageTooLarge": "이미지 한 장당 20MB를 초과할 수 없어요",
    "viewImage": "(이미지 보기)",
    "modelNoVision": "현재 모델은 이미지를 지원하지 않아요. 이미지를 지원하는 모델로 전환해 주세요",
    "searchProviderNotConfigured": "검색 provider가 설정되지 않았어요",
    "searchProviderMissingKey": "검색 provider \"{provider}\"의 API Key가 없어요",
    "searchProviderMissingBaseUrl": "검색 provider \"{provider}\"의 Base URL이 없어요",
    "searchProviderUnknown": "알 수 없는 검색 provider: {provider}",
    "searchFailed": "검색 실패: {msg}",
    "searchEmptyQuery": "검색 키워드를 입력해 주세요.",
    "searchNoResults": "관련 결과를 찾지 못했어요. (via {provider})",
    "searchResults": "검색 결과 (via {provider}):\n\n{results}",
    "searchFollowupHint": "정확한 수치, 본문 세부 내용, 출처가 필요하면 가장 관련 있는 1~2개 URL에 web_fetch를 이어서 사용해 주세요.",
    "searchError": "검색 오류: {msg}",
    "searchSynthesized": "📋 종합 답변:\n{summary}",
    "searchSources": "출처 보기 ({count}개)",
    "fetchEmptyUrl": "가져올 URL을 입력해 주세요.",
    "fetchHttpOnly": "http/https 프로토콜의 URL만 지원해요.",
    "fetchInvalidUrl": "잘못된 URL: {url}",
    "fetchSsrf": "내부 네트워크 주소 접근이 금지되어 있어요: {host}",
    "fetchRedirectLimit": "리다이렉트 횟수 초과 ({max})",
    "fetchHttpError": "가져오기 실패: HTTP {status} {statusText}",
    "fetchTruncated": "\n\n[... 내용이 잘렸어요. 총 {len}자]",
    "fetchSource": "출처: {host}{path} ({format})\n\n",
    "fetchTimeout": "가져오기 타임아웃 ({sec}s): {url}",
    "fetchError": "가져오기 오류: {msg}",
    "browserError": "오류: {msg}",
    "browserAlreadyRunning": "브라우저가 이미 실행 중이에요",
    "browserLaunched": "브라우저를 시작했어요",
    "browserNotRunning": "브라우저가 실행되고 있지 않아요",
    "browserClosed": "브라우저를 닫았어요",
    "browserNavigateNeedUrl": "navigate에는 url 파라미터가 필요해요",
    "browserNavigated": "{title}(으)로 이동했어요\nURL: {url}\n\n{snapshot}",
    "browserClickNeedRef": "click에는 ref 파라미터가 필요해요",
    "browserClicked": "[{ref}]을(를) 클릭했어요\n\n{snapshot}",
    "browserTypeNeedText": "type에는 text 파라미터가 필요해요",
    "browserTyped": "텍스트를 입력했어요{target}\n\n{snapshot}",
    "browserScrollNeedDir": "scroll에는 direction 파라미터가 필요해요 (up/down)",
    "browserScrolled": "{dir}(으)로 스크롤했어요\n\n{snapshot}",
    "browserSelectNeedRef": "select에는 ref 파라미터가 필요해요",
    "browserSelectNeedValue": "select에는 value 파라미터가 필요해요",
    "browserSelected": "[{ref}] → \"{value}\" 선택했어요\n\n{snapshot}",
    "browserKeyNeedKey": "key에는 key 파라미터가 필요해요",
    "browserKeyPressed": "{key}을(를) 눌렀어요\n\n{snapshot}",
    "browserWaitDone": "대기 완료\n\n{snapshot}",
    "browserEvalNeedExpr": "evaluate에는 expression 파라미터가 필요해요",
    "browserOutputTruncated": "\n\n[... 출력이 잘렸어요]",
    "browserShown": "브라우저 창을 앞으로 가져왔어요",
    "browserUnknownAction": "알 수 없는 동작: {action}",
    "browserActionFailed": "브라우저 동작 실패: {msg}",
    "skillNeedAbsolutePath": "절대 경로가 필요해요",
    "skillPathNotExists": "경로가 존재하지 않아요",
    "skillMissingSkillMd": "폴더에 SKILL.md가 없어요",
    "skillUnsupportedFormat": ".zip 또는 .skill 파일만 지원해요",
    "skillMissingSkillMdInZip": "압축 파일에 SKILL.md가 없어요",
    "skillExtractFailed": "압축 해제 실패: {msg}",
    "skillMissingName": "SKILL.md에 name 필드가 없어요",
    "skillNameInvalid": "스킬 이름이 유효하지 않아요 (\"{name}\"). 영문자, 숫자, 밑줄, 하이픈만 사용할 수 있어요.",
    "skillPathMustBeAbsolute": "경로는 절대 경로여야 해요: {path}",
    "skillCannotAddSelfDir": "Lynn 자체의 스킬 디렉토리는 추가할 수 없어요",
    "skillInvalidName": "유효하지 않은 스킬 이름이에요",
    "skillExternalCannotDelete": "외부 호환 스킬은 여기서 삭제할 수 없어요",
    "skillNotExists": "스킬이 존재하지 않아요",
    "channelReadNeedChannel": "오류: read에는 channel 파라미터가 필요해요",
    "channelNotExists": "채널 \"{channel}\"이(가) 존재하지 않아요",
    "channelNoMessages": "(채널에 메시지가 없어요)",
    "channelPostNeedParams": "오류: post에는 channel과 content 파라미터가 필요해요",
    "channelPosted": "#{channel}에 전송했어요",
    "channelCreateNeedParams": "오류: create에는 name과 members 파라미터가 필요해요",
    "channelCreated": "채널 #{name} ({id}) 생성 완료, 멤버: {members}",
    "channelCreateFailed": "생성 실패: {msg}",
    "channelNoJoined": "아직 채널에 참여하지 않았어요",
    "unknownAction": "알 수 없는 동작: {action}",
    "cannotSelfDm": "자기 자신에게 DM을 보낼 수 없어요",
    "agentNotFoundAvailable": "agent \"{id}\"를 찾을 수 없어요. 사용 가능: {ids}",
    "dmSent": "{name}에게 DM을 보냈어요",
    "cannotCallSelf": "자기 자신은 호출할 수 없어요",
    "agentNoReply": "({name}이(가) 응답하지 않았어요)",
    "agentCallFailed": "{name} 호출 실패: {msg}",
    "cronNoJobs": "예약 작업이 없어요",
    "cronAddNeedParams": "오류: add에는 type, schedule, prompt 파라미터가 필요해요",
    "cronEveryMustBeNumber": "오류: every 타입의 schedule은 양의 정수(밀리초)여야 해요",
    "cronCreated": "예약 작업을 생성했어요: {label} ({id})",
    "cronConfirmed": "사용자가 확인했어요. 예약 작업을 생성했어요: {label} ({id})",
    "cronRejected": "사용자가 예약 작업 \"{label}\"의 생성을 취소했어요",
    "cronTimeout": "예약 작업 \"{label}\" 확인 시간이 초과되었어요",
    "cronPendingConfirm": "예약 작업 {label} 생성 준비 중, 확인 대기",
    "cronRemoveNeedId": "오류: remove에는 id 파라미터가 필요해요",
    "cronJobNotFound": "작업 {id}를 찾을 수 없어요",
    "cronRemoved": "작업 {id}를 삭제했어요",
    "cronToggleNeedId": "오류: toggle에는 id 파라미터가 필요해요",
    "cronToggled": "작업 {id} {state}",
    "cronEnabled": "활성화됨",
    "cronDisabled": "비활성화됨",
    "notifySent": "알림을 보냈어요: {title}",
    "notifyFailed": "알림 전송 실패: {msg}",
    "todoNone": "할 일이 없어요",
    "todoAddNeedText": "오류: add에는 text 파라미터가 필요해요",
    "todoAdded": "할 일 #{id} 추가: {text}",
    "todoToggleNeedId": "오류: toggle에는 id 파라미터가 필요해요",
    "todoNotFound": "할 일 #{id}를 찾을 수 없어요",
    "todoToggled": "할 일 #{id} {state}",
    "todoDone": "✓ 완료",
    "todoUndone": "○ 미완료",
    "todoCleared": "{count}개의 할 일을 삭제했어요",
    "artifactCreated": "미리보기를 생성했어요: {title}",
    "pinnedAlreadyExists": "이미 고정 메모리에 있어요.",
    "pinnedAdded": "기억했어요: {content}",
    "pinnedEmpty": "고정 메모리가 비어 있어요. 제거할 내용이 없어요.",
    "pinnedNotFound": "\"{keyword}\"을(를) 포함하는 고정 메모리를 찾을 수 없어요.",
    "pinnedRemoved": "{count}개를 제거했어요: {items}",
    "expEmpty": "경험 라이브러리가 비어 있어요.",
    "expCategoryNotFound": "\"{category}\" 카테고리의 경험을 찾을 수 없어요.",
    "expEmptyInput": "카테고리 이름과 경험 내용을 비워둘 수 없어요.",
    "expDuplicate": "이 경험은 이미 기록되어 있어요.",
    "expRecorded": "경험을 기록했어요 [{category}]: {content}",
    "outputFileNeedPaths": "filepaths 배열 또는 filePath가 필요해요.",
    "outputFileNotAbsolute": "경로는 절대 경로여야 해요: {path}",
    "outputFileNotFound": "파일을 찾을 수 없어요: {path}",
    "outputFilePresented": "파일을 표시했어요: {summary}",
    "msgAgentNotFound": "agent \"{id}\"를 찾을 수 없어요. 사용 가능: {ids}",
    "msgAgentNoReply": "({name}이(가) 응답하지 않았어요)",
    "settingsUnknownKey": "알 수 없는 설정 항목 \"{key}\". search로 올바른 키를 찾아보세요.",
    "settingsInvalidValue": "\"{value}\"은(는) 유효한 옵션이 아니에요. 사용 가능: {options}",
    "settingsInvalidToggle": "toggle 유형은 \"true\" 또는 \"false\"만 허용돼요.",
    "settingsNotReady": "설정 시스템이 준비되지 않았어요",
    "settingsNoAgent": "활성 에이전트가 없습니다. 이 설정을 변경할 수 없습니다",
    "settingsApplied": "\"{label}\"을(를) {value}(으)로 변경했어요",
    "settingsApplyFailed": "설정 변경 실패: {msg}",
    "settingsCancelled": "사용자가 \"{label}\" 변경을 취소했어요",
    "settingsTimeout": "\"{label}\" 변경 확인 시간이 초과되었어요. 설정이 변경되지 않았어요",
    "delegateMaxConcurrent": "현재 {max}개의 하위 작업이 실행 중이에요. 완료될 때까지 기다려 주세요.",
    "delegateFailed": "하위 작업 실행 실패: {msg}",
    "delegateNoOutput": "(하위 작업이 출력을 생성하지 않았어요)",
    "installSkillDisabled": "자가 학습 스킬 기능이 활성화되지 않았어요. 설정에서 「Agent의 스킬 생성/설치 허용」을 켜주세요.",
    "installSkillGithubDisabled": "GitHub 스킬 가져오기가 활성화되지 않았어요. 설정에서 「GitHub에서 스킬 가져오기 허용」을 켜주세요.",
    "installSkillInvalidGithubUrl": "잘못된 GitHub URL: {url}",
    "installSkillGithubApiFailed": "리포지토리 정보를 가져올 수 없어요 (HTTP {status}). URL을 확인해 주세요.",
    "installSkillGithubApiError": "GitHub API 접근 실패: {msg}",
    "installSkillStarTooLow": "이 리포지토리는 {stars} stars만 있어요 (기준 {min}). 안전성을 보장할 수 없어 설치를 거부했어요.",
    "installSkillNoSkillMd": "{owner}/{repo}에서 SKILL.md를 찾을 수 없어요 (시도한 경로: {paths}).",
    "installSkillSafetyFailed": "[보안] 스킬 안전 검토를 통과하지 못했어요. 설치가 차단되었어요.\n이유: {reason}\n\n사용자에게 이 스킬이 안전 검토를 통과하지 못했음과 구체적인 이유를 알려주세요. 사용자는 설정에서 안전 검토를 비활성화할 수 있어요 (비권장).",
    "installSkillNameInvalid": "스킬 이름이 유효하지 않아요{name}. 영문자, 숫자, 밑줄, 하이픈만 사용할 수 있어요.",
    "installSkillSuccess": "스킬 \"{name}\" 설치 성공!\n출처: {source} (⭐ {stars} stars)\n이유: {reason}",
    "installSkillNeedInput": "github_url 또는 skill_content (SKILL.md 내용)를 제공해 주세요.",
    "installSkillNeedName": "skill_content 모드에서는 skill_name이 필요해요.",
    "installSkillSuccessLocal": "스킬 \"{name}\" 설치 성공!\n이유: {reason}",
    "installSkillSizeLimit": "스킬 내용이 크기 제한을 초과했어요 ({size}KB > {max}KB)",
    "installSkillNoUtility": "안전 검토 불가: utility 모델이 설정되지 않았어요. 설정에서 보조 모델을 설정해 주세요",
    "installSkillUtilityIncomplete": "안전 검토 불가: 보조 모델 설정이 불완전해요 (API key 또는 base URL 누락). 설정에서 보완해 주세요",
    "installSkillSafetyEmpty": "안전 검토가 빈 응답을 반환했어요",
    "installSkillSafetyUnexpected": "안전 검토가 예상하지 못한 형식을 반환했어요: {reply}",
    "installSkillSafetyTimeout": "안전 검토 타임아웃 또는 네트워크 오류",
    "activeSessionOnly": "현재 어시스턴트의 활성 세션만 승격할 수 있어요",
    "heartbeatTriggered": "하트비트가 트리거되었어요",
    "dirNotAllowed": "디렉토리가 허용 범위에 없어요",
    "noWorkspace": "워크스페이스가 설정되지 않았어요",
    "tokenSuccess": "토큰을 성공적으로 가져왔어요",
    "verifyFailed": "인증에 실패했어요",
    "tokenFetchFailed": "access_token 가져오기 실패",
    "botInfoFailed": "봇 정보 가져오기 실패",
    "platformTestUnsupported": "이 플랫폼은 테스트를 지원하지 않아요",
    "codexNoHealthCheck": "Codex API는 헬스 체크를 지원하지 않아요",
    "modelNotFound": "모델을 찾을 수 없어요: {id}",
    "noUtilityModel": "utility 모델이 설정되지 않았어요. 설정에서 추가해 주세요",
    "noUtilityLargeModel": "utility_large 모델이 설정되지 않았어요. 설정에서 추가해 주세요",
    "modelNoProvider": "{role} 모델 \"{model}\"에 provider가 연결되지 않았어요",
    "providerMissingApi": "provider \"{provider}\"에 API 프로토콜 설정이 없어요",
    "providerMissingCreds": "provider \"{provider}\"의 인증 정보가 불완전해요",
    "utilityApiProviderMismatch": "utility_api.provider는 모델 \"{model}\"의 provider와 일치해야 해요",
    "utilityApiMissingCreds": "utility_api 인증 정보가 불완전해요 (provider: {provider})",
    "noAvailableModel": "사용 가능한 모델이 없어요. 설정에서 API 키와 모델을 먼저 설정해 주세요",
    "noActiveSessionPrompt": "활성 세션이 없어요. 먼저 createSession()을 호출해 주세요",
    "sessionNotInCache": "세션 \"{path}\"이(가) 캐시에 없어요",
    "agentNotInitialized": "agent \"{id}\"가 존재하지 않거나 초기화되지 않았어요",
    "resolveModelNoChatModel": "resolveModel: models.chat이 지정되지 않아 모델을 선택할 수 없어요",
    "resolveModelNotAvailable": "resolveModel: 모델 \"{id}\"가 사용 가능한 목록에 없어요",
    "executeIsolatedNoModel": "executeIsolated: agent \"{name}\"에 사용 가능한 모델이 없어요",
    "bridgeAgentNoChatModel": "[bridge] agent \"{name}\"에 models.chat이 설정되지 않았어요",
    "bridgeAgentModelNotAvailable": "[bridge] agent \"{name}\"에 설정된 모델 \"{model}\"이(가) 사용 가능한 목록에 없어요",
    "noAgentsFound": "agents/ 디렉토리에 어시스턴트가 없어요. 먼저 하나를 만들어 주세요",
    "channelNotFoundById": "채널 \"{id}\"이(가) 존재하지 않아요",
    "channelAlreadyExists": "채널 \"{id}\"이(가) 이미 존재해요",
    "providerMissingBaseUrl": "provider \"{provider}\"에 Base URL이 없어요",
    "providerMissingApiKey": "provider \"{provider}\"에 API Key가 없어요",
    "modelNameEmpty": "모델 이름을 비워둘 수 없어요",
    "modelNotRegistered": "모델 \"{model}\"이(가) models.json에 provider로 등록되지 않았어요",
    "modelProviderMissingApi": "모델 \"{model}\"의 provider \"{provider}\"에 API 프로토콜 설정이 없어요",
    "modelProviderIncomplete": "모델 \"{model}\"의 provider \"{provider}\" 설정이 불완전해요",
    "browserDesktopOnly": "브라우저 기능은 Electron 데스크톱 모드에서만 사용할 수 있어요",
    "browserCmdTimeout": "브라우저 명령 타임아웃: {cmd}",
    "agentExecNotInit": "agent \"{id}\"가 존재하지 않거나 초기화되지 않았어요",
    "bridgeMgrNotStarted": "외부 플랫폼 관리자가 시작되지 않았어요",
    "qqTokenFailed": "access_token 가져오기 실패: {detail}",
    "missingApiProtocol": "API 프로토콜 설정이 없어요",
    "missingApiKey": "API Key가 없어요",
    "unsupportedApiProtocol": "지원하지 않는 API 프로토콜: {api}",
    "missingModelId": "모델 ID가 없어요",
    "missingBaseUrl": "Base URL이 없어요",
    "llmInvalidJson": "LLM이 파싱할 수 없는 JSON을 반환했어요 ({status})",
    "llmEmptyResponse": "LLM이 빈 내용을 반환했어요",
    "xlsxParseFailed": "{ext} 파일을 파싱할 수 없어요: {msg}",
    "docxParseFailed": "{ext} 파일을 파싱할 수 없어요: {msg}",
    "compatDirCreated": "누락된 디렉토리 {count}개를 생성했어요",
    "compatConfigEmpty": "파일이 비어 있어요",
    "compatConfigInvalid": "YAML 형식이 아닌 것 같아요",
    "compatConfigCorrupted": "config.yaml 손상 ({msg}), 템플릿에서 다시 만들었어요",
    "compatConfigBackedUp": "config.yaml 손상 ({msg}), {backup}(으)로 백업했어요",
    "compatFactsCorrupted": "facts.db 손상 백업 완료, 빈 데이터베이스를 재구축해요",
    "defaultChannelName": "워크그룹",
    "defaultChannelDesc": "일상 업무 조율 채널. 모든 멤버가 여기서 소통해요.",
    "memorySearchLabel": "기억 검색",
    "memorySearchDesc": "기억 뱅크를 검색해요. 무언가에 대해 확실하지 않을 때, 이전에 이야기한 것 같지만 세부 사항이 기억나지 않을 때, 또는 더 많은 맥락이 필요할 때 사용하세요. 자연어 쿼리와 선택적 태그 필터를 입력해요.",
    "memorySearchQueryDesc": "자연어로 된 검색 쿼리",
    "memorySearchTagsDesc": "태그 필터, 정확한 매칭을 위해 2~5개 키워드 태그. 예: [\"초콜릿\", \"음식 취향\"]",
    "memorySearchDateFromDesc": "시작 날짜, 형식 YYYY-MM-DD",
    "memorySearchDateToDesc": "종료 날짜, 형식 YYYY-MM-DD",
    "memorySearchEmpty": "기억 뱅크에서 관련 내용을 찾을 수 없어요.",
    "memorySearchError": "기억 검색 오류: {msg}",
    "fallbackUserName": "사용자"
  },
  "main": {
    "tray": {
      "show": "Lynn 표시",
      "settings": "설정",
      "quit": "종료"
    },
    "dialog": {
      "selectFolder": "작업 폴더 선택",
      "selectSkill": "스킬 선택",
      "launchFailedTitle": "Lynn 실행 실패",
      "launchFailedBody": "{detail}\n\n상세 로그 저장 위치:\n{logPath}\n\n이 스크린샷이나 로그 파일을 개발자에게 보내주세요.",
      "serverRestartFailed": "Server가 충돌 후 재시작에 실패했어요.\n{error}\n\n앱을 다시 시작해 주세요.",
      "serverMultipleCrash": "Server가 여러 번 충돌했어요 ({reason}).\n\n앱을 다시 시작해 주세요.",
      "serverStartTimeout": "Server 시작 시간 초과 (60초)",
      "serverKilledBySignal": "Server가 시그널로 종료되었어요 ({signal})",
      "serverExitedWithCode": "Server가 종료되었어요. 코드: {code}"
    },
    "notification": {
      "ready": "알림이 준비되었어요"
    }
  },
  "devtools": {
    "heartbeat": "하트비트",
    "memoryExport": "메모리 내보내기",
    "onboarding": "Onboarding",
    "previewGuide": "가이드 미리보기",
    "reloadFrontend": "프론트엔드 새로고침",
    "tabLogs": "활동 로그",
    "tabSessions": "세션 목록",
    "tabPrompt": "System Prompt",
    "waitingConnection": "연결 대기 중...",
    "waitingServer": "Server 시작 대기 중...",
    "loading": "로딩 중...",
    "loadFailed": "로드 실패",
    "refreshBtn": "새로고침",
    "clickRefresh": "위의 새로고침을 클릭하세요",
    "noActivities": "아직 활동 없음",
    "heartbeatLabel": "자동 순찰",
    "cronLabel": "예약 작업",
    "heartbeatRunning": "하트비트 실행 중...",
    "heartbeatGenerating": "요약 생성 중...",
    "heartbeatDone": "하트비트 완료",
    "heartbeatNoSummary": "하트비트 완료 (요약 없음)",
    "memoryExported": "메모리 내보내기 완료",
    "exportFailed": "내보내기 실패",
    "onboardingOpened": "Onboarding 창이 열렸습니다",
    "previewOpened": "미리보기 모드 열림",
    "openFailed": "열기 실패",
    "frontendReloaded": "프론트엔드 새로고침 완료",
    "refreshFailed": "새로고침 실패",
    "triggerFailed": "트리거 실패",
    "requestFailed": "요청 실패",
    "justNow": "방금",
    "minutesAgo": "{n}분 전",
    "hoursAgo": "{n}시간 전",
    "chars": "자",
    "empty": "비어 있음",
    "serverConnected": "Server 연결됨 (port {port})"
  },
  "skillViewer": {
    "cantRead": "파일을 읽을 수 없습니다",
    "copied": "스킬 목록에 복사됨",
    "installFailed": "설치 실패: "
  },
  "toolDef": {
    "webSearch": {
      "label": "웹 검색",
      "description": "인터넷을 검색해서 실시간 정보를 가져와요. 최신 뉴스, 기술 문서, 시사, 또는 기억에 없는 외부 지식이 필요할 때 사용해요.",
      "queryDesc": "검색 키워드",
      "maxResultsDesc": "반환할 결과 수, 기본값 5"
    },
    "webFetch": {
      "label": "웹페이지 가져오기",
      "description": "지정한 URL의 웹페이지 내용을 가져와서 텍스트를 추출해요. 기사, 문서, API 응답 등을 읽을 때 적합해요. web_search와 함께 사용해요: 먼저 검색으로 URL을 찾고, web_fetch로 상세 내용을 읽어요.",
      "urlDesc": "가져올 전체 URL (https:// 포함)",
      "maxLenDesc": "반환할 최대 문자 수, 기본값 {max}"
    },
    "stockMarket": {
      "label": "시세 조회",
      "description": "금값, 주가, 지수, 펀드, 환율, 원유 등 시장 정보를 조회해요. Tencent, Sina Finance, Xueqiu, Eastmoney, AkShare 같은 금융 소스를 우선 검색/가져온 뒤 구조화된 요약을 반환해요.",
      "queryDesc": "원래 시세 질문. 예: \"오늘 금값 얼마야\"",
      "kindDesc": "선택 종류: gold / stock / index / fund / fx / oil",
      "marketDesc": "선택 시장. 예: CN / HK / US / GLOBAL",
      "symbolDesc": "선택 종목 코드/상품 코드. 예: 600519 / XAUUSD"
    },
    "browser": {
      "label": "브라우저",
      "description": "브라우저를 조작해서 웹페이지를 탐색해요. 내비게이션, 클릭, 입력, 스크롤, 스크린샷이 가능해요.\n동작:\n- start: 브라우저 시작 (처음 사용 전에 반드시 호출)\n- stop: 브라우저 닫기\n- navigate(url): 지정 URL로 이동\n- snapshot: 현재 페이지의 요소 트리 가져오기 (권장: 텍스트 형식, 저비용)\n- screenshot: 현재 페이지 스크린샷 찍기 (시각 정보가 필요할 때만 사용)\n- click(ref): snapshot이 반환한 [ref] 번호의 요소 클릭\n- type(text, ref?): 요소에 텍스트 입력, 선택적으로 ref를 클릭해서 포커스\n- scroll(direction, amount?): 페이지 스크롤, direction은 up/down\n- select(ref, value): 드롭다운 옵션 선택\n- key(key): 키 누르기, 예: Enter, Escape, Tab, Control+a\n- wait(timeout?, state?): 페이지 로딩 대기\n- evaluate(expression): 페이지에서 JavaScript 실행\n- show: 브라우저 창을 앞으로 가져오기\n\n중요: snapshot이 반환한 [ref] 번호는 페이지 변경 후 무효가 돼요. navigate/click 후에 새로운 snapshot이 자동으로 반환돼요.",
      "actionDesc": "동작 유형",
      "urlDesc": "URL (navigate에 필수)",
      "refDesc": "요소 ref 번호 (click/type/select에 사용)",
      "textDesc": "입력 텍스트 (type에 필수)",
      "directionDesc": "스크롤 방향 (scroll에 필수)",
      "amountDesc": "스크롤 양 (scroll에 선택, 기본값 3)",
      "valueDesc": "옵션 값 (select에 필수)",
      "keyDesc": "키 이름 (key에 필수), 예: Enter, Escape, Tab, Control+a",
      "expressionDesc": "JavaScript 표현식 (evaluate에 필수)",
      "timeoutDesc": "타임아웃 밀리초 (wait에 선택, 기본값 5000)",
      "stateDesc": "대기 상태 (wait에 선택): domcontentloaded / idle",
      "pressEnterDesc": "입력 후 Enter 누르기 (type에 선택)"
    },
    "channel": {
      "label": "채널",
      "description": "채널 메시지를 관리해요 (브로드캐스트, 그룹 토론용).\n동작:\n- read(channel, count?): 채널의 최근 메시지 보기\n- post(channel, content): 채널에 메시지 보내기\n- create(name, members, intro?): 새 채널 만들기\n- list: 참여 중인 채널 보기\n참고: agent와 1:1 메시지를 하려면 dm 도구를 사용하세요. 채널로 개인 대화를 흉내 내지 마세요.",
      "actionDesc": "동작 유형",
      "channelDesc": "채널 이름 (read/post에 필수)",
      "contentDesc": "메시지 내용 (post에 필수)",
      "nameDesc": "새 채널 이름 (create에 필수)",
      "membersDesc": "멤버 목록 (create에 필수), 예: [\"hana\", \"butter\"]",
      "introDesc": "채널 소개 (create에 선택)",
      "countDesc": "읽을 메시지 수 (read에 선택, 기본값 20)"
    },
    "artifact": {
      "label": "미리보기 만들기",
      "description": "사용자가 미리보기 페이지, HTML, 긴 Markdown 문서, 완전한 코드 파일, 인터랙티브 시각화를 명확히 요청했을 때 이 도구를 호출해요.\n콘텐츠는 독립된 미리보기 패널에서 렌더링되고, 사용자가 실시간으로 결과를 확인할 수 있어요.\n적합한 경우: 실행 가능한 HTML/CSS/JS 페이지, 인터랙티브 시각화, SVG 차트, 완전한 코드 파일, 긴 포맷 문서.\n적합하지 않은 경우: 짧은 텍스트 답변, 일반 표, 간단한 계산, 관리 조언, 대화형 응답, 한 줄 코드 스니펫 (메시지에 직접 표시하면 돼요).",
      "typeDesc": "콘텐츠 유형: html (렌더링 페이지), code (구문 강조), markdown (문서)",
      "titleDesc": "표시 제목, 콘텐츠에 대한 간단한 설명",
      "contentDesc": "전체 콘텐츠 (HTML 소스 / 코드 / Markdown 텍스트)",
      "languageDesc": "프로그래밍 언어 (type=code일 때만 유효), 예: javascript, python, css"
    },
    "report": {
      "label": "HTML 리포트 생성",
      "description": "사용자가 리포트, HTML 리포트, 미리보기/내보내기 가능한 페이지, 게시용 브리핑을 명확히 요청했을 때만 사용해요. 채팅에서 미리 보고, 브라우저로 열고, PNG로 내보낼 수 있는 전문 HTML 리포트를 생성해요. 심층 리서치, 시장 분석, 산업 리포트, 프로젝트 회고, 게시용 브리핑에 적합해요. 간단한 계산, 일반 표, 요약, 관리 조언은 이 도구를 쓰지 말고 채팅 본문에 직접 답하세요. 반드시 실제 내용 섹션을 먼저 제공하고 빈 껍데기 리포트는 만들지 마세요. stylePreset 옵션: editorial-paper(종이 잡지 느낌의 심층 리포트, 권장 기본값), finance-dark(다크 금융 대시보드), magazine(강한 잡지형 레이아웃), clean-briefing(깔끔한 비즈니스 브리핑).",
      "titleDesc": "리포트 제목",
      "tagDesc": "리포트 분류 또는 짧은 태그, 예: 주식 리서치, 산업 관찰",
      "subtitleDesc": "부제 또는 한 줄 요약",
      "dateDesc": "리포트 날짜",
      "stylePresetDesc": "시각 스타일: editorial-paper는 Claude 스타일의 아름다운 심층 HTML 리포트에, finance-dark는 금융 시세 대시보드에, magazine은 게시글/포스터 느낌 페이지에, clean-briefing은 간결한 비즈니스 브리핑에 적합해요. 비워 두면 심층 리포트는 editorial-paper, 일반 리포트는 finance-dark가 기본값이에요.",
      "secTitleDesc": "섹션 제목",
      "secTypeDesc": "섹션 유형: metrics 지표 카드, text 본문, table 표, verdict 전망/시나리오 판단, warning 리스크 안내",
      "sectionsDesc": "리포트 섹션. 심층 리포트는 최소 3개의 유효 섹션과 데이터 근거, 분석 판단, 리스크 또는 시나리오 추론이 필요해요.",
      "disclaimerDesc": "면책 조항 또는 범위 설명",
      "created": "HTML 리포트 \"{title}\" 생성 완료, {count}개 섹션, 저장 위치: {path}"
    },
    "pptx": {
      "label": "PPT 만들기",
      "description": "PowerPoint 프레젠테이션(.pptx 파일)을 생성합니다. 제목과 슬라이드 배열을 제공하면 전문적인 PPT를 자동으로 생성합니다.\n각 슬라이드는 4가지 레이아웃 지원: title(표지), content(기본), section(구분), two_column(2열 비교).\n본문에서 - 또는 *로 시작하는 줄은 글머리 기호로 렌더링됩니다. two_column 레이아웃에서는 |||로 좌우를 구분합니다.",
      "titleDesc": "프레젠테이션 제목",
      "authorDesc": "저자 이름 (선택)",
      "slidesDesc": "슬라이드 배열, 각각 layout, title, body, notes 포함",
      "layoutDesc": "레이아웃: title(표지), content(기본), section(구분), two_column(비교)",
      "slideTitleDesc": "슬라이드 제목",
      "bodyDesc": "슬라이드 본문, Markdown 목록 형식 지원. two_column에서는 |||로 좌우 구분",
      "notesDesc": "발표자 노트 (선택)",
      "created": "PPT \"{title}\" 생성 완료, {count}페이지, 저장 위치: {path}"
    },
    "askAgent": {
      "label": "크로스 Agent 호출",
      "description": "다른 agent에게 작업을 맡기고 즉시 결과를 받아요. 상대가 바로 처리해서 답변하고, 그 결과를 사용자에게 전달할 수 있어요.\n적합한 경우: 코드 리뷰, 텍스트 번역, 상대의 전문적 관점에서 분석 등 즉각적인 피드백이 필요한 작업.\n상대는 자신의 페르소나와 모델로 답변하고, 읽기 전용 도구 (파일 읽기, 검색, web fetch)를 가지고 있지만, 파일 쓰기나 다른 agent 호출은 할 수 없어요.",
      "agentDesc": "대상 agent의 ID",
      "taskDesc": "작업 설명 (상대가 보는 전체 prompt)"
    },
    "dm": {
      "label": "다이렉트 메시지",
      "description": "다른 agent에게 다이렉트 메시지를 하나 보내서 무언가를 알려줄 때만 사용해요.\n이 도구로 작업을 맡기거나 결과를 받으려 하지 마세요. 그건 ask_agent의 역할이에요.",
      "toDesc": "대상 agent의 ID",
      "messageDesc": "메시지 내용"
    },
    "messageAgent": {
      "label": "Agent에게 메시지",
      "description": "다른 agent에게 다이렉트 메시지를 보내고 답장을 기다려요. 다른 agent에게 상담하거나 조율이 필요할 때 사용해요.\n상대는 자신의 페르소나와 설정에 따라 답변하고, 대화는 DM 공간에서 이루어지며 채널을 거치지 않아요.\n중요: 메시지는 본인의 이름으로 보내고, 사용자를 대신해서 말하지 마세요. 예를 들어 사용자가 'ming이랑 얘기해 봐'라고 했을 때, 본인의 말투로 쓰세요 (예: 'ming, 요즘 어때?'). '사용자가 당신과 대화하고 싶어해요'라고 쓰지 마세요.",
      "toDesc": "대상 agent의 ID (예: \"butter\")",
      "messageDesc": "보낼 메시지 내용",
      "maxTurnsDesc": "최대 주고받기 횟수, 기본값 3. 상대가 <done/>으로 조기 종료할 수 있어요."
    },
    "cron": {
      "label": "예약 작업",
      "description": "예약 작업을 만들고 관리해요. 예약 작업은 백그라운드에서 자동 실행되고, 지정 시간에 독립 session을 열어서 prompt를 실행해요.\n동작:\n- list: 전체 작업 보기\n- add(type, schedule, prompt, label?, model?): 작업 만들기\n  - type \"at\": 일회성, schedule은 ISO 시간 문자열\n  - type \"every\": 간격, schedule은 밀리초 (예: 3600000 = 1시간)\n  - type \"cron\": cron 표현식 (예: \"0 7 * * *\" = 매일 아침 7시)\n  - model: 선택, 작업 실행에 사용할 모델 지정 (미지정 시 대화 모델 사용)\n- remove(id): 작업 삭제\n- toggle(id): 작업 활성화/비활성화",
      "actionDesc": "동작 유형",
      "typeDesc": "스케줄 유형 (add에 필수)",
      "scheduleDesc": "스케줄: ISO 시간(at), 분(every, 예: 60=매시간), cron 표현식(cron)",
      "promptDesc": "지정 시간에 실행할 prompt (add에 필수)",
      "labelDesc": "작업 표시 라벨 (선택)",
      "modelDesc": "실행 모델 지정 (선택, 미지정 시 대화 모델 사용)",
      "idDesc": "작업 ID (remove/toggle에 필수)"
    },
    "notify": {
      "label": "알림",
      "description": "사용자에게 시스템 알림 (데스크톱 팝업)을 보내요.\n사용 상황:\n- 사용자가 'xxx 알려줘', '그때 알려줘', 'xxx 잊지 않게 해줘'라고 말했을 때\n- 예약 작업의 prompt에 알림/리마인드 의도가 명시되어 있을 때\n- 순찰/예약 작업에서 사용자의 관심이 필요한 사항을 발견했을 때\n모든 게 정상이고 문제가 없으면 이 도구를 호출하지 마세요.",
      "titleDesc": "알림 제목 (간결하게)",
      "bodyDesc": "알림 내용"
    },
    "todo": {
      "label": "할 일",
      "description": "현재 session 내의 할 일 목록을 관리해요. 여러 단계 작업을 수행할 때 진행 추적과 하위 작업 분류에 사용해요.\n동작:\n- list: 전체 할 일 보기\n- add(text): 할 일 추가\n- toggle(id): 완료 상태 전환\n- clear: 전체 할 일 지우기",
      "actionDesc": "동작 유형",
      "textDesc": "할 일 내용 (add에 필수)",
      "idDesc": "할 일 ID (toggle에 필수)"
    },
    "pinnedMemory": {
      "pinLabel": "메모리 고정",
      "pinDescription": "고정 메모리에 내용을 저장해요. 사용자가 '이거 기억해 줘', '메모해 줘', '나중에 잊지 마'라고 말했을 때 사용해요. 고정 메모리는 항상 컨텍스트에 유지돼요.",
      "pinContentDesc": "기억할 내용",
      "unpinLabel": "메모리 고정 해제",
      "unpinDescription": "고정 메모리에서 내용을 삭제해요. 사용자가 'xxx 잊어', '이 기억 지워'라고 말했을 때 사용해요. 퍼지 매칭을 지원해요: 제공한 키워드를 포함하는 줄이 삭제돼요.",
      "unpinKeywordDesc": "삭제할 메모리의 키워드, 퍼지 매칭으로 검색"
    },
    "experience": {
      "recallLabel": "경험 확인",
      "recallDescription": "경험 라이브러리를 탐색해요. 파라미터 없이 호출하면 전체 카테고리 개요를 반환하고, 카테고리 이름을 지정하면 해당 카테고리의 구체적인 경험을 반환해요. 사용자가 구체적인 작업 (코드 작성, 조사, 문서 작성, 문제 분석 등)을 요청했을 때, 시작 전에 이 도구로 참고할 경험이 있는지 확인해요. 일상 대화, Q&A, 가벼운 채팅에서는 호출할 필요 없어요.",
      "recallCategoryDesc": "카테고리 이름. 생략하면 전체 카테고리 개요를 반환해요",
      "recordLabel": "경험 기록",
      "recordDescription": "경험 라이브러리에 교훈을 기록해요. 다음 경우에 사용해요: 사용자가 실수를 지적하고 올바른 방법을 설명했을 때, 여러 방법을 시도한 후 효과적인 방법을 발견했을 때, 사용자가 '앞으로는 이렇게 해/하지 마'라고 명확히 말했을 때. 각 항목은 간결하고 직접적으로, 한 문장으로 작성해요.",
      "recordCategoryDesc": "경험의 카테고리, 2~4단어 짧은 문구, 예: '도구 사용', '검색 팁', '답변 스타일'",
      "recordContentDesc": "구체적인 경험 내용, 간결하고 직접적으로, 한 문장"
    },
    "outputFile": {
      "label": "파일 제시",
      "description": "사용자를 위해 파일 (PDF, Word, Excel, PPT, Markdown 등)을 성공적으로 만든 후, 이 도구를 호출해서 대화에 파일을 제시하고 사용자가 클릭해서 열 수 있게 해요. 파일이 실제로 디스크에 기록된 후에만 호출하고, 생성에 실패했을 때는 호출하지 마세요. 첫 번째 경로는 사용자가 가장 보고 싶은 파일이어야 해요. 텍스트에서 파일 경로만 언급하지 말고, 반드시 이 도구를 호출하세요.",
      "filepathsDesc": "사용자에게 제시할 파일의 절대 경로 배열",
      "filePathDesc": "(호환) 단일 파일의 절대 경로",
      "labelDesc": "(호환) 사용자에게 표시할 파일 이름"
    },
    "delegate": {
      "label": "하위 작업 위임",
      "description": "독립적인 하위 작업을 백그라운드 agent에게 위임해요. 하위 작업은 격리된 컨텍스트에서 실행되고, 최종 결과만 반환하며, 현재 대화의 컨텍스트를 소비하지 않아요.\n적합한 경우:\n- 대량의 검색, 읽기 후 간결한 결론으로 요약하는 조사 작업\n- 현재 작업과 병렬로 진행할 수 있는 독립적인 하위 문제\n- 여러 방향을 동시에 탐색해야 하는 작업 (여러 delegate를 동시에 호출 가능)\n적합하지 않은 경우: 파일 수정, 명령 실행 등 부작용이 있는 작업\n\n중요: task 파라미터에 완전한 지시와 필요한 배경 정보를 포함하세요. 하위 작업은 현재 대화 기록을 볼 수 없어요.",
      "taskDesc": "하위 작업의 완전한 지시, 필요한 배경 정보 포함",
      "modelDesc": "모델 지정 (선택, 기본값은 utility 모델)"
    },
    "installSkill": {
      "label": "스킬 설치",
      "description": "자신에게 새로운 스킬을 설치해요. 모드 A: GitHub 저장소 URL (SKILL.md 포함)을 제공해서 자동으로 가져오고 설치해요. 모드 B: skill_content + skill_name을 직접 제공, 직접 작성한 스킬용이에요. 설치 후 즉시 적용돼요.",
      "githubUrlDesc": "GitHub 저장소 URL (모드 A)",
      "skillContentDesc": "SKILL.md의 전체 내용 (모드 B)",
      "skillNameDesc": "스킬 이름 (모드 B에 필수)",
      "reasonDesc": "이 스킬이 필요한 이유 설명 (감사용, 필수)"
    },
    "updateSettings": {
      "label": "설정",
      "description": "Lynn의 설정을 변경해요. 두 가지 작업을 지원해요:\n- search + query: 키워드로 설정 항목을 검색하고, 현재 값과 옵션을 확인\n- apply + key + value: 지정한 설정을 변경 (사용자 확인 필요)\n\n정확한 키를 알고 있다면 바로 apply할 수 있어요.",
      "actionDesc": "작업 유형: search로 설정 검색 / apply로 설정 변경",
      "queryDesc": "검색 키워드 (search 시 필수)",
      "keyDesc": "설정 키 (search로 확인)",
      "valueDesc": "제안할 새 값",
      "searchResult": "{count}개의 설정을 찾았어요:\n\n{results}\n\naction \"apply\"로 키와 값을 지정해서 설정을 변경할 수 있어요.",
      "searchNoResults": "\"{query}\"에 맞는 설정을 찾지 못했어요. 더 넓은 키워드를 시도해 보세요.",
      "searchMissingQuery": "search 작업에는 query 파라미터가 필요해요.",
      "applyMissingParams": "apply 작업에는 key와 value가 모두 필요해요.",
      "frontendOnly": "클라이언트 측에서만 확인 가능",
      "sandbox": "샌드박스 보안",
      "sandboxDesc": "파일 시스템 쓰기 범위 제한",
      "securityMode": "보안 모드",
      "securityModeDesc": "3모드 보안 정책 (실행/계획/안전)",
      "locale": "언어",
      "timezone": "시간대",
      "timezoneDesc": "IANA 시간대 (예: Asia/Shanghai)",
      "thinkingBudget": "사고 깊이",
      "memory": "메모리 시스템",
      "memoryDesc": "현재 Agent의 메모리 기능 켜기/끄기",
      "agentName": "Agent 이름",
      "userName": "사용자 이름",
      "workingDir": "작업 디렉토리",
      "workingDirDesc": "Agent의 파일 시스템 작업 디렉토리",
      "theme": "테마",
      "chatModel": "대화 모델"
    }
  },
  "cli": {
    "disconnected": "연결 끊김",
    "wsError": "WebSocket 오류: {msg}",
    "error": "오류: {msg}",
    "interrupted": "(중단됨)",
    "goodbye": "안녕히 ✿",
    "helpTitle": "명령어 목록",
    "helpModel": "현재 모델 보기",
    "helpModelSet": "모델 전환 (대화형)",
    "helpConfig": "설정 보기",
    "helpSessionNew": "새 세션",
    "helpSessionList": "세션 목록",
    "helpAgent": "현재 agent 보기",
    "helpAgentList": "모든 agent 보기",
    "helpAgentSwitch": "agent 전환",
    "helpJian": "현재 디렉토리의 메모 보기",
    "helpJianSub": "하위 디렉토리의 메모 보기",
    "helpLs": "데스크 파일 목록",
    "helpLsSub": "하위 디렉토리 파일 목록",
    "helpCat": "파일 내용 보기",
    "helpHelp": "이 도움말 표시",
    "helpEsc": "생성 중단",
    "helpCtrlC": "중단 / 종료",
    "noModels": "사용 가능한 모델이 없어요",
    "availableModels": "사용 가능한 모델:",
    "currentModel": "← 현재",
    "selectModel": "번호를 입력해 선택: ",
    "modelSwitched": "{name}(으)로 전환했어요",
    "cancelled": "취소",
    "currentModelLabel": "현재 모델:",
    "noModel": "(없음)",
    "currentConfig": "현재 설정",
    "notSet": "(미설정)",
    "sessionCreated": "새 세션을 만들었어요",
    "noSessions": "세션이 없어요",
    "sessionList": "세션 목록",
    "untitled": "(제목 없음)",
    "sessionUsage": "사용법: /session new | /session list",
    "agentList": "Agent 목록",
    "agentSwitched": "{name}(으)로 전환했어요",
    "currentAgent": "현재 Agent:",
    "jianTitle": "메모",
    "jianEmpty": "이 디렉토리에 메모가 없어요",
    "dirEmpty": "(비어있음)",
    "catUsage": "사용법: /cat <파일 경로>",
    "catFailed": "읽을 수 없어요: {status}",
    "unknownCommand": "알 수 없는 명령어: /{cmd}  /help로 도움말 보기",
    "inputHelp": "/help로 명령어 목록 보기"
  },
  "sandbox": {
    "blocked": "[보안] {reason}\n\n이 작업은 Lynn의 샌드박스 보안 정책에 의해 차단되었어요. 이것은 버그가 아니라 보안 보호 메커니즘이에요. 사용자에게 작업이 차단되었음과 이유를 알려주세요. 사용자는 설정에서 샌드박스 정책을 조정할 수 있어요.",
    "noSudo": "sudo 사용이 금지되어 있어요",
    "noSu": "su 사용자 전환이 금지되어 있어요",
    "noChmod": "파일 권한 변경이 금지되어 있어요",
    "noChown": "파일 소유자 변경이 금지되어 있어요",
    "noDelRecursive": "재귀적 파일 삭제 (del /s)가 금지되어 있어요",
    "noRmdirRecursive": "재귀적 디렉토리 삭제 (rmdir /s)가 금지되어 있어요",
    "noRegEdit": "레지스트리 수정이 금지되어 있어요",
    "noTakeown": "파일 소유권 가져오기가 금지되어 있어요",
    "noIcacls": "파일 ACL 권한 수정이 금지되어 있어요",
    "noNetUser": "사용자/그룹 관리 작업이 금지되어 있어요",
    "noSchtasks": "예약 작업 생성이 금지되어 있어요",
    "noScService": "시스템 서비스 조작이 금지되어 있어요",
    "noPsExecutionBypass": "PowerShell 실행 정책 우회가 금지되어 있어요",
    "noFormat": "디스크 포맷이 금지되어 있어요",
    "noBcdedit": "부팅 구성 수정이 금지되어 있어요",
    "noWmic": "WMI 명령이 금지되어 있어요",
    "restrictedPath": "명령이 제한된 경로에 접근했어요: {path}",
    "writeRestricted": "[보안] 파일 시스템 쓰기가 워크스페이스 내로 제한되어 있어요. 이 작업은 샌드박스 보안 정책에 의해 차단되었어요. 사용자에게 알려주세요.",
    "osRequired": "[sandbox] standard 모드는 OS 레벨 샌드박스가 필요하지만 현재 플랫폼이 지원하지 않아요 ({platform}). sandbox-exec (macOS) 또는 bubblewrap (Linux)을 설치하거나 full-access 모드로 전환해 주세요.",
    "opRead": "읽기",
    "opWrite": "쓰기",
    "opDelete": "삭제",
    "denied": "{op} 거부됨: {path} (액세스 레벨: {level})",
    "authDesc": {
      "sudo": "관리자 권한으로 명령 실행 — 소프트웨어 설치나 시스템 설정 변경에 사용됩니다",
      "su": "다른 사용자로 전환 — 다른 사용자의 권한을 획득합니다",
      "chmod": "파일/디렉토리 권한 변경 — 파일의 읽기, 쓰기, 실행 권한을 제어합니다",
      "chown": "파일 소유자 변경 — 파일 소유권을 다른 사용자에게 이전합니다",
      "delRecursive": "파일 재귀 삭제 — 지정된 디렉토리의 모든 파일을 삭제합니다",
      "rmdirRecursive": "디렉토리 재귀 삭제 — 전체 디렉토리 트리를 삭제합니다. 되돌릴 수 없습니다",
      "regEdit": "Windows 레지스트리 수정 — 시스템 및 애플리케이션 설정에 영향을 줍니다",
      "takeown": "파일 소유권 획득 — 파일에 대한 완전한 제어권을 획득합니다",
      "icacls": "파일 ACL 수정 — 파일의 보안 권한을 변경합니다",
      "netUser": "시스템 사용자/그룹 관리 — 사용자 계정 생성, 삭제 또는 수정",
      "schtasks": "예약 작업 생성 — 프로그램의 자동 실행을 설정합니다",
      "scService": "시스템 서비스 관리 — Windows 서비스 생성 또는 삭제",
      "psBypass": "PowerShell 실행 정책 우회 — 서명되지 않은 스크립트 실행을 허용합니다",
      "format": "디스크 포맷 — 디스크의 모든 데이터가 삭제됩니다. 되돌릴 수 없습니다",
      "bcdedit": "부팅 설정 수정 — 시스템 시작 방법을 변경합니다",
      "wmic": "WMI 관리 명령 실행 — 시스템 관리 정보에 액세스하고 수정합니다",
      "pathOp": "{op} 경로 {path} — 이 경로는 보호된 영역에 있습니다"
    }
  },
  "security": {
    "mode": {
      "authorized": "실행 모드",
      "authorizedDesc": "위험한 작업은 확인 후 실행하고, 샌드박스와 신뢰 경로 제한은 유지해요",
      "plan": "계획 모드",
      "planDesc": "분석만, 실행 없음",
      "safe": "안전 모드",
      "safeDesc": "엄격한 샌드박스, 직접 거부",
      "fullAccess": "전체 접근",
      "fullAccessDesc": "샌드박스 격리와 명령 제한을 비활성화해요"
    },
    "auth": {
      "title": "확인이 필요해요",
      "commandLabel": "실행 예정:",
      "allow": "실행 허용",
      "reject": "거부",
      "allowed": "실행 허용됨",
      "rejected": "거부됨",
      "alwaysAllow": "이 유형의 작업을 항상 허용",
      "allowOnce": "이번만 허용",
      "allowSession": "이 세션에서 허용",
      "allowAlwaysHere": "이 위치는 항상 허용",
      "trustedRoot": "신뢰 경로"
    }
  },
  "error.llmTimeout": "Model request timed out",
  "error.llmRateLimited": "Model rate limited, please wait",
  "error.llmEmptyResponse": "모델이 빈 응답 또는 표시할 수 없는 내용을 반환했어요",
  "error.llmAuthFailed": "Model authentication failed",
  "error.llmSlowResponse": "Model is responding slowly, please wait",
  "error.brainUnreachable": "기본 모델 서비스에 일시적으로 연결할 수 없습니다. 네트워크를 확인하거나 설정에서 직접 API 키로 전환하세요.",
  "error.fsPermission": "File permission denied",
  "error.fsNotFound": "File not found",
  "error.fsCopyFailed": "File copy failed",
  "error.wsDisconnected": "Connection lost",
  "error.fetchTimeout": "Request timed out",
  "error.fetchServerError": "Server error",
  "error.ipcFailed": "Internal communication error",
  "error.renderCrash": "Display error",
  "error.configParse": "Configuration file corrupted",
  "error.bridgeSendFailed": "Failed to send message to platform",
  "error.skillSyncFailed": "Skill sync failed",
  "error.memoryCompileFailed": "Memory compilation failed",
  "error.dbError": "Database error",
  "error.serverAuthFailed": "Authentication failed",
  "error.unknown": "An unexpected error occurred",
  "error.regionUnavailable": "This area is temporarily unavailable",
  "status.reconnecting": "Reconnecting...",
  "status.disconnected": "Connection lost",
  "status.reconnect": "Reconnect",
  "status.llmSlowResponse": "모델이 아직 처리 중입니다. 잠시만 기다려 주세요.",
  "status.llmStillWorking": "모델이 아직 처리 중입니다. 약 {minutes}분째 기다리는 중입니다.",
  "status.recoveringToolExecution": "모델이 본문에서 도구 호출을 흉내 냈기 때문에 Lynn이 실제 실행 경로로 되돌리는 중입니다.",
  "status.routeReasoningPlanned": "분석형 작업이 감지되어 Lynn이 이번 턴에서 기본 추론 경로를 우선 사용합니다.",
  "status.routeExecutionPlanned": "실행형 작업이 감지되어 Lynn이 이번 턴에서 기본 실행 경로를 우선 사용합니다.",
  "status.routeCodingPlanned": "코딩 작업이 감지되어 Lynn이 이번 턴에서 기본 코딩 경로를 우선 사용합니다.",
  "status.routeVisionPlanned": "이미지 또는 첨부 분석 작업이 감지되어 Lynn이 이번 턴에서 기본 추론 경로를 우선 사용합니다.",
  "status.defaultModelSlowResponse": "기본 작업 모델의 주 경로가 조금 느립니다. Lynn이 백그라운드에서 보조 경로로 넘겨 처리하고 있어요.",
  "status.defaultModelRecoveringToolExecution": "기본 작업 모델이 실제 도구 실행을 끝내지 못해 Lynn이 이번 턴을 보조 실행 경로로 넘기고 있어요.",
  "status.defaultModelStillWorking": "기본 작업 모델이 아직 처리 중입니다. 약 {minutes}분째 기다리는 중이며 Lynn이 계속 보조 경로로 넘겨 처리하고 있어요.",
  "status.defaultReasoningSlowResponse": "기본 추론 경로가 조금 느립니다. Lynn이 백그라운드에서 보조 추론 경로로 넘겨 처리하고 있어요.",
  "status.defaultReasoningStillWorking": "기본 추론 경로가 아직 처리 중입니다. 약 {minutes}분째 기다리는 중이며 Lynn이 계속 보조 추론 경로로 넘겨 처리하고 있어요.",
  "status.defaultExecutionSlowResponse": "기본 실행 경로가 조금 느립니다. Lynn이 백그라운드에서 보조 실행 경로로 넘겨 처리하고 있어요.",
  "status.defaultExecutionStillWorking": "기본 실행 경로가 아직 처리 중입니다. 약 {minutes}분째 기다리는 중이며 Lynn이 계속 보조 실행 경로로 넘겨 처리하고 있어요.",
  "status.defaultCodingSlowResponse": "기본 코딩 경로가 조금 느립니다. Lynn이 백그라운드에서 보조 코딩 경로로 넘겨 처리하고 있어요.",
  "status.defaultCodingStillWorking": "기본 코딩 경로가 아직 처리 중입니다. 약 {minutes}분째 기다리는 중이며 Lynn이 계속 보조 코딩 경로로 넘겨 처리하고 있어요.",
  "status.defaultCodingRecoveringToolExecution": "기본 코딩 경로가 실제 도구 실행을 끝내지 못해 Lynn이 이번 턴을 보조 코딩 경로로 넘기고 있어요.",
  "action.retry": "다시 시도",
  "agentDiscovery.title": "스킬 발견",
  "agentDiscovery.body": "다음 도구의 스킬을 재사용할 수 있습니다:",
  "agentDiscovery.enable": "활성화",
  "agentDiscovery.later": "건너뛰기",
  "review": {
    "configure": "리뷰어 설정",
    "loading": "불러오는 중",
    "auto": "자동 선택",
    "needsConfig": "사용 가능한 리뷰어가 아직 설정되지 않았습니다",
    "requestFailed": "리뷰 요청에 실패했습니다",
    "followUp": "발견 사항 처리",
    "taskCreated": "백그라운드 실행 작업을 만들었습니다"
  },
  "fleet": {
    "empty": {
      "title": "아직 병렬 워커가 없습니다",
      "intro": "하나의 작업을 3~5개의 CLI 워커(codex / claude / qwen…)로 나누어 각각 독립된 git worktree에서 병렬 실행하고, 여기서 진행 상황·diff·테스트를 관리합니다.",
      "step1": "워커 배치 — 브리프 작성: 담당 파일, 금지 파일, 테스트 명령.",
      "step2": "각 워커는 자체 worktree에서 실행되며, 이 보드에 실시간 로그·파일별 diff·테스트가 표시됩니다.",
      "step3": "범위를 벗어난 편집과 중심 파일 충돌은 빨간색으로 표시되어 병합을 차단합니다.",
      "step4": "각 카드에서 취소 / 재시도 / worktree 열기.",
      "hint": "처음이신가요? \"모의 워커 재생\"으로 전체 흐름을 확인하세요."
    },
    "dispatch": "워커 배치",
    "closeForm": "폼 닫기",
    "playMock": "모의 워커 재생",
    "form": {
      "title": "제목",
      "titlePlaceholder": "예: ComposerTextarea 분리",
      "agent": "실행 Agent",
      "ready": "준비됨",
      "taskType": "작업 유형",
      "taskTypeCode": "코드 / 텍스트 작업",
      "taskTypeSee": "이미지 인식",
      "taskTypeGround": "UI 요소 찾기",
      "taskTypeUi2code": "스크린샷→코드",
      "scopePreset": "범위 프리셋",
      "fanOut": "동시 파견(병렬, 선택)",
      "imagePath": "이미지 경로",
      "imageHint": "경로는 Lynn worker run에 전달되며, CLI가 로컬에서 이미지를 읽어 비전 모델로 라우팅합니다.",
      "approval": "승인",
      "approvalAsk": "ask · 위험 작업 확인",
      "approvalOnFailure": "on-failure · 실패 시 확인",
      "approvalNever": "never · 읽기 전용",
      "approvalYolo": "yolo · 전자동 편집",
      "approvalHintYolo": "YOLO는 워커가 확인 없이 파일 편집과 셸 실행을 할 수 있게 합니다.",
      "approvalHintGuarded": "비대화형 워커는 승인이 yolo가 아니면 위험한 편집 전에 멈출 수 있습니다.",
      "sandbox": "샌드박스",
      "sandboxHintFull": "전체 파일시스템 권한은 신뢰할 수 있는 로컬 worktree에만.",
      "sandboxHintScoped": "workspace-write는 편집을 할당된 worktree 내로 제한합니다.",
      "externalHint": "외부 CLI(Codex / Claude 등)는 자체 셸을 실행합니다. Fleet에서 시작하려면 Approval=yolo + Sandbox=danger-full-access를 명시하세요. 내장 Lynn / StepFun 워커는 보호 상태 유지 가능.",
      "branch": "브랜치",
      "worktree": "Worktree",
      "objective": "목표",
      "owned": "담당 파일(한 줄에 glob 하나)",
      "forbidden": "수정 금지 파일",
      "tests": "테스트 명령(한 줄에 하나)",
      "dispatching": "파견 중…",
      "dispatchN": "워커 {count}개에 파견",
      "cancel": "취소",
      "unavailable": "사용 불가"
    },
    "panel": {
      "cliRuntime": "CLI 런타임",
      "perms": "권한",
      "workersCount": "워커 {count}개",
      "mockBadge": "모의",
      "mockBadgeTitle": "데모 재생 — 실제 프로세스는 실행되지 않았습니다"
    },
    "chatHint": {
      "text": "⚡ 이 작업은 여러 병렬 워커로 나눠 동시에 처리할 수 있어 보입니다",
      "action": "배치하기"
    },
    "acceptance": {
      "passed": "✓ 검수 통과",
      "failed": "✗ 검수 실패",
      "falseVerify": "허위 검증 위험",
      "evidence": "객관적 증거",
      "escalated": "에스컬레이션"
    }
  }
}