mirror of
https://github.com/sanbuphy/claude-code-source-code.git
synced 2026-04-03 11:34:54 +08:00
init repo
This commit is contained in:
124
docs/ko/01-텔레메트리와-프라이버시.md
Normal file
124
docs/ko/01-텔레메트리와-프라이버시.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# 텔레메트리 및 프라이버시 분석
|
||||
|
||||
> 인터넷에 공개된 자료와 커뮤니티 토론을 바탕으로 정리된 Claude Code v2.1.88 분석 보고서.
|
||||
|
||||
## 개요
|
||||
|
||||
Claude Code는 이중 분석 파이프라인을 통해 광범위한 환경 및 사용 메타데이터를 수집한다. 키로깅이나 사용자 코드 유출의 증거는 없으나, 수집 범위가 넓고 완전한 비활성화가 불가능하다는 점에서 프라이버시 우려가 존재한다.
|
||||
|
||||
## 데이터 파이프라인 구조
|
||||
|
||||
### 자사 로깅 (1P)
|
||||
|
||||
- **엔드포인트**: `https://api.anthropic.com/api/event_logging/batch`
|
||||
- **프로토콜**: OpenTelemetry + Protocol Buffers
|
||||
- **배치 크기**: 최대 200개 이벤트, 10초 간격 전송
|
||||
- **재시도**: 이차 백오프, 최대 8회, 디스크 영속 저장
|
||||
- **저장소**: 전송 실패 시 `~/.claude/telemetry/`에 저장
|
||||
|
||||
출처: `src/services/analytics/firstPartyEventLoggingExporter.ts`
|
||||
|
||||
### 서드파티 로깅 (Datadog)
|
||||
|
||||
- **엔드포인트**: `https://http-intake.logs.us5.datadoghq.com/api/v2/logs`
|
||||
- **범위**: 사전 승인된 64개 이벤트 유형으로 제한
|
||||
- **토큰**: `pubbbf48e6d78dae54bceaa4acf463299bf`
|
||||
|
||||
출처: `src/services/analytics/datadog.ts`
|
||||
|
||||
## 수집 항목
|
||||
|
||||
### 환경 핑거프린트
|
||||
|
||||
모든 이벤트에 다음 메타데이터가 포함된다 (`src/services/analytics/metadata.ts:417-452`):
|
||||
|
||||
```
|
||||
- platform, platformRaw, arch, nodeVersion
|
||||
- 터미널 유형
|
||||
- 설치된 패키지 매니저 및 런타임
|
||||
- CI/CD 감지, GitHub Actions 메타데이터
|
||||
- WSL 버전, Linux 배포판, 커널 버전
|
||||
- VCS(버전 관리 시스템) 유형
|
||||
- Claude Code 버전 및 빌드 시각
|
||||
- 배포 환경
|
||||
```
|
||||
|
||||
### 프로세스 메트릭 (`metadata.ts:457-467`)
|
||||
|
||||
```
|
||||
- uptime, rss, heapTotal, heapUsed
|
||||
- CPU 사용량 및 사용률
|
||||
- memory arrays 및 external allocations
|
||||
```
|
||||
|
||||
### 사용자 추적 (`metadata.ts:472-496`)
|
||||
|
||||
```
|
||||
- 사용 중인 모델
|
||||
- 세션 ID, 사용자 ID, 디바이스 ID
|
||||
- 계정 UUID, 조직 UUID
|
||||
- 구독 등급 (max, pro, enterprise, team)
|
||||
- 저장소 원격 URL 해시 (SHA256, 앞 16자)
|
||||
- 에이전트 유형, 팀 이름, 부모 세션 ID
|
||||
```
|
||||
|
||||
### 도구 입력 로깅
|
||||
|
||||
도구 입력은 기본적으로 잘린다:
|
||||
|
||||
```
|
||||
- 문자열: 512자에서 잘림, 128자 + 생략부호로 표시
|
||||
- JSON: 4,096자 제한
|
||||
- 배열: 최대 20개 항목
|
||||
- 중첩 객체: 최대 2단계 깊이
|
||||
```
|
||||
|
||||
출처: `metadata.ts:236-241`
|
||||
|
||||
단, `OTEL_LOG_TOOL_DETAILS=1` 설정 시 **전체 도구 입력이 기록된다**.
|
||||
|
||||
출처: `metadata.ts:86-88`
|
||||
|
||||
### 파일 확장자 추적
|
||||
|
||||
`rm, mv, cp, touch, mkdir, chmod, chown, cat, head, tail, sort, stat, diff, wc, grep, rg, sed` 관련 Bash 명령에서 파일 인자의 확장자가 추출·기록된다.
|
||||
|
||||
출처: `metadata.ts:340-412`
|
||||
|
||||
## 비활성화 문제
|
||||
|
||||
자사 로깅 파이프라인은 직접 Anthropic API 사용자의 경우 **비활성화할 수 없다**.
|
||||
|
||||
```typescript
|
||||
// src/services/analytics/firstPartyEventLogger.ts:141-144
|
||||
export function is1PEventLoggingEnabled(): boolean {
|
||||
return !isAnalyticsDisabled()
|
||||
}
|
||||
```
|
||||
|
||||
`isAnalyticsDisabled()`가 true를 반환하는 경우:
|
||||
- 테스트 환경
|
||||
- 서드파티 클라우드 제공자 (Bedrock, Vertex)
|
||||
- 글로벌 텔레메트리 비활성화 (설정 UI에 노출되지 않음)
|
||||
|
||||
자사 이벤트 로깅을 비활성화하는 **사용자 대상 설정은 존재하지 않는다**.
|
||||
|
||||
## GrowthBook A/B 테스트
|
||||
|
||||
사용자는 명시적 동의 없이 GrowthBook을 통해 실험 그룹에 배정된다. 전송되는 사용자 속성:
|
||||
|
||||
```
|
||||
- id, sessionId, deviceID
|
||||
- platform, organizationUUID, subscriptionType
|
||||
```
|
||||
|
||||
출처: `src/services/analytics/growthbook.ts`
|
||||
|
||||
## 핵심 요약
|
||||
|
||||
1. **수집량**: 세션당 수백 건의 이벤트가 수집된다
|
||||
2. **비활성화 불가**: 직접 API 사용자는 자사 로깅을 끌 수 없다
|
||||
3. **영속성**: 전송 실패 이벤트는 디스크에 저장되어 적극적으로 재시도된다
|
||||
4. **서드파티 공유**: 데이터가 Datadog으로 전송된다
|
||||
5. **도구 상세 백도어**: `OTEL_LOG_TOOL_DETAILS=1`로 전체 입력 로깅이 활성화된다
|
||||
6. **저장소 핑거프린팅**: 저장소 URL이 해싱되어 서버 측 상관분석에 사용된다
|
||||
112
docs/ko/02-숨겨진-기능과-코드네임.md
Normal file
112
docs/ko/02-숨겨진-기능과-코드네임.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# 숨겨진 기능과 모델 코드네임
|
||||
|
||||
> 인터넷에 공개된 자료와 커뮤니티 토론을 바탕으로 정리된 Claude Code v2.1.88 분석 보고서.
|
||||
|
||||
## 모델 코드네임 체계
|
||||
|
||||
Anthropic은 내부 모델 코드네임으로 **동물 이름**을 사용한다. 외부 빌드로의 유출을 적극적으로 차단하고 있다.
|
||||
|
||||
### 알려진 코드네임
|
||||
|
||||
| 코드네임 | 역할 | 근거 |
|
||||
|----------|------|------|
|
||||
| **Tengu** (천구) | 제품/텔레메트리 접두사, 모델일 가능성 있음 | 250개 이상의 분석 이벤트 및 feature flag에 `tengu_*` 접두사로 사용 |
|
||||
| **Capybara** (카피바라) | Sonnet 계열 모델, 현재 v8 | `capybara-v2-fast[1m]`, v8 동작 문제 패치 존재 |
|
||||
| **Fennec** (페넥여우) | Opus 4.6 이전 모델 | 마이그레이션: `fennec-latest` → `opus` |
|
||||
| **Numbat** (넘뱃) | 차기 모델 출시 예정 | 주석: "Remove this section when we launch numbat" |
|
||||
|
||||
### 코드네임 보호
|
||||
|
||||
`undercover` 모드에서 보호 대상 코드네임이 명시적으로 나열되어 있다:
|
||||
|
||||
```typescript
|
||||
// src/utils/undercover.ts:48-49
|
||||
NEVER include in commit messages or PR descriptions:
|
||||
- Internal model codenames (animal names like Capybara, Tengu, etc.)
|
||||
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
|
||||
```
|
||||
|
||||
빌드 시스템은 `scripts/excluded-strings.txt`를 사용하여 유출된 코드네임을 검출한다. Buddy 시스템의 종(species)은 `String.fromCharCode()`로 인코딩하여 canary 검출을 우회한다:
|
||||
|
||||
```typescript
|
||||
// src/buddy/types.ts:10-13
|
||||
// One species name collides with a model-codename canary in excluded-strings.txt.
|
||||
// The check greps build output (not source), so runtime-constructing the value keeps
|
||||
// the literal out of the bundle while the check stays armed for the actual codename.
|
||||
```
|
||||
|
||||
충돌하는 종은 **capybara** — 펫 종이자 모델 코드네임이다.
|
||||
|
||||
### Capybara 동작 이슈 (v8)
|
||||
|
||||
아키텍처에서 Capybara v8의 구체적 동작 문제가 확인된다:
|
||||
|
||||
1. **Stop sequence 오발동** (프롬프트 끝에 `<functions>` 있을 때 ~10% 발생)
|
||||
- 출처: `src/utils/messages.ts:2141`
|
||||
|
||||
2. **빈 tool_result 시 출력 없음**
|
||||
- 출처: `src/utils/toolResultStorage.ts:281`
|
||||
|
||||
3. **과도한 주석 삽입** — 전용 주석 방지 프롬프트 패치 필요
|
||||
- 출처: `src/constants/prompts.ts:204`
|
||||
|
||||
4. **높은 허위 주장 비율**: v8은 29-30%, v4는 16.7%
|
||||
- 출처: `src/constants/prompts.ts:237`
|
||||
|
||||
5. **불충분한 검증** — "철저함 보정값(thoroughness counterweight)" 필요
|
||||
- 출처: `src/constants/prompts.ts:210`
|
||||
|
||||
## Feature Flag 명명 규칙
|
||||
|
||||
모든 feature flag는 `tengu_` 접두사에 **무작위 단어 조합**을 사용하여 목적을 난독화한다:
|
||||
|
||||
| Flag | 용도 |
|
||||
|------|------|
|
||||
| `tengu_onyx_plover` | Auto Dream (백그라운드 기억 통합) |
|
||||
| `tengu_coral_fern` | memdir 기능 |
|
||||
| `tengu_moth_copse` | memdir 추가 스위치 |
|
||||
| `tengu_herring_clock` | Team memory |
|
||||
| `tengu_passport_quail` | Path 기능 |
|
||||
| `tengu_slate_thimble` | memdir 추가 스위치 |
|
||||
| `tengu_sedge_lantern` | Away Summary |
|
||||
| `tengu_frond_boric` | 분석 킬스위치 |
|
||||
| `tengu_amber_quartz_disabled` | 음성 모드 킬스위치 |
|
||||
| `tengu_amber_flint` | Agent teams |
|
||||
| `tengu_hive_evidence` | 검증 에이전트 |
|
||||
|
||||
무작위 단어 패턴(형용사/재질 + 자연/사물)은 외부 관찰자가 flag 이름만으로 기능 목적을 추론하는 것을 방지한다.
|
||||
|
||||
## 내부 사용자와 외부 사용자 차이
|
||||
|
||||
Anthropic 직원(`USER_TYPE === 'ant'`)은 상당히 다른 대우를 받는다:
|
||||
|
||||
### 프롬프트 차이 (`src/constants/prompts.ts`)
|
||||
|
||||
| 항목 | 외부 사용자 | 내부 사용자 (ant) |
|
||||
|------|------------|------------------|
|
||||
| 출력 스타일 | "Be extra concise" (극도로 간결하게) | "Err on the side of more explanation" (설명을 더 하는 쪽으로) |
|
||||
| 허위 주장 대응 | 없음 | 전용 Capybara v8 패치 적용 |
|
||||
| 수치적 길이 기준 | 없음 | "도구 사이 ≤25단어, 최종 답변 ≤100단어" |
|
||||
| 검증 에이전트 | 없음 | 비자명한 변경에 필수 적용 |
|
||||
| 주석 가이드 | 일반적 | 전용 과잉 주석 방지 프롬프트 |
|
||||
| 선제적 교정 | 없음 | "사용자에게 오해가 있으면 지적" |
|
||||
|
||||
### 도구 접근
|
||||
|
||||
내부 사용자만 접근 가능한 도구:
|
||||
- `REPLTool` — REPL 모드
|
||||
- `SuggestBackgroundPRTool` — 백그라운드 PR 제안
|
||||
- `TungstenTool` — 성능 모니터링 패널
|
||||
- `VerifyPlanExecutionTool` — 계획 실행 검증
|
||||
- Agent 중첩 (에이전트가 에이전트를 생성)
|
||||
|
||||
## 숨겨진 명령어
|
||||
|
||||
| 명령어 | 상태 | 설명 |
|
||||
|--------|------|------|
|
||||
| `/btw` | 활성 | 작업 중단 없이 곁다리 질문 |
|
||||
| `/stickers` | 활성 | Claude Code 스티커 주문 (브라우저 열림) |
|
||||
| `/thinkback` | 활성 | 2025 연말 회고 |
|
||||
| `/effort` | 활성 | 모델 노력 수준 설정 |
|
||||
| `/good-claude` | 스텁 | 숨겨진 플레이스홀더 |
|
||||
| `/bughunter` | 스텁 | 숨겨진 플레이스홀더 |
|
||||
110
docs/ko/03-언더커버-모드.md
Normal file
110
docs/ko/03-언더커버-모드.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# 언더커버 모드 분석
|
||||
|
||||
> 인터넷에 공개된 자료와 커뮤니티 토론을 바탕으로 정리된 Claude Code v2.1.88 분석 보고서.
|
||||
|
||||
## 언더커버 모드란?
|
||||
|
||||
언더커버 모드는 공식 직원이 외부/오픈소스 저장소에서 작업할 때 사용되는 안전 보호 메커니즘입니다. 활성화되면 내부 특화 AI 모델 정보와 저작 표시를 숨겨 제출된 코드가 인간 개발자의 기여와 동일하게 보이도록 합니다. 이는 주로 내부 기밀 및 미출시 모델의 이름이 오픈소스 커뮤니티에 유출되는 것을 방지하기 위함입니다.
|
||||
|
||||
출처: `src/utils/undercover.ts`
|
||||
|
||||
## 활성화 조건
|
||||
|
||||
```typescript
|
||||
// src/utils/undercover.ts:28-37
|
||||
export function isUndercover(): boolean {
|
||||
if (process.env.USER_TYPE === 'ant') {
|
||||
if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true
|
||||
// Auto: 내부 저장소로 확인되지 않으면 자동 활성화
|
||||
return getRepoClassCached() !== 'internal'
|
||||
}
|
||||
return false
|
||||
}
|
||||
```
|
||||
|
||||
주요 특성:
|
||||
- **내부 전용**: 공식 직원(`USER_TYPE === 'ant'`)만 해당
|
||||
- **기본 활성화**: 내부 허용 목록에 없는 모든 저장소에서 자동 활성화
|
||||
- **강제 비활성화 불가**: "There is NO force-OFF. This guards against model codename leaks"
|
||||
- **외부 빌드**: 번들러에 의해 데드 코드 제거됨; 실행되지 않음
|
||||
|
||||
## 모델에 전달되는 프롬프트
|
||||
|
||||
```typescript
|
||||
// src/utils/undercover.ts:39-69
|
||||
export function getUndercoverInstructions(): string {
|
||||
return `## UNDERCOVER MODE — CRITICAL
|
||||
|
||||
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit
|
||||
messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal
|
||||
information. Do not blow your cover.
|
||||
|
||||
NEVER include in commit messages or PR descriptions:
|
||||
- Internal model codenames (animal names like Capybara, Tengu, etc.)
|
||||
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
|
||||
- Internal repo or project names (e.g., claude-cli-internal, anthropics/…)
|
||||
- Internal tooling, Slack channels, or short links (e.g., go/cc, #claude-code-…)
|
||||
- The phrase "Claude Code" or any mention that you are an AI
|
||||
- Any hint of what model or version you are
|
||||
- Co-Authored-By lines or any other attribution
|
||||
|
||||
Write commit messages as a human developer would — describe only what the code
|
||||
change does.
|
||||
|
||||
GOOD:
|
||||
- "Fix race condition in file watcher initialization"
|
||||
- "Add support for custom key bindings"
|
||||
|
||||
BAD (never write these):
|
||||
- "Fix bug found while testing with Claude Capybara"
|
||||
- "1-shotted by claude-opus-4-6"
|
||||
- "Generated with Claude Code"
|
||||
- "Co-Authored-By: Claude Opus 4.6 <…>"`
|
||||
}
|
||||
```
|
||||
|
||||
## 저작 표시 시스템
|
||||
|
||||
저작 표시 시스템(`src/utils/attribution.ts`, `src/utils/commitAttribution.ts`)은 언더커버 모드를 보완한다:
|
||||
|
||||
```typescript
|
||||
// src/utils/attribution.ts:70-72
|
||||
// @[MODEL LAUNCH]: 아래 하드코딩된 폴백 모델 이름 업데이트
|
||||
// (코드네임 유출 방지용).
|
||||
// 외부 저장소에서 인식되지 않는 모델은 "Claude Opus 4.6"으로 폴백.
|
||||
```
|
||||
|
||||
```typescript
|
||||
// src/utils/model/model.ts:386-392
|
||||
function maskModelCodename(baseName: string): string {
|
||||
// e.g. capybara-v2-fast → cap*****-v2-fast
|
||||
const [codename = '', ...rest] = baseName.split('-')
|
||||
const masked = codename.slice(0, 3) + '*'.repeat(Math.max(0, codename.length - 3))
|
||||
return [masked, ...rest].join('-')
|
||||
}
|
||||
```
|
||||
|
||||
## 시사점
|
||||
|
||||
### 오픈소스에 대한 영향
|
||||
|
||||
공식 직원이 Claude Code로 오픈소스 프로젝트에 기여할 때:
|
||||
1. AI가 코드를 작성하지만 커밋은 사람이 작성한 것으로 표시된다
|
||||
2. "Co-Authored-By: Claude" 저작 표시가 없다
|
||||
3. "Generated with Claude Code" 마커가 없다
|
||||
4. 프로젝트 메인테이너와 커뮤니티는 AI 생성 기여를 식별할 수 없다
|
||||
5. 이는 AI 기여에 관한 오픈소스 투명성 규범을 잠재적으로 위반한다
|
||||
|
||||
### 공식 보호 목적
|
||||
|
||||
명시된 주요 목적은 다음의 우발적 유출 방지:
|
||||
- 내부 모델 코드네임 (경쟁 정보)
|
||||
- 미공개 버전 번호 (시장 타이밍)
|
||||
- 내부 인프라 세부 정보 (보안)
|
||||
|
||||
### 윤리적 고려사항
|
||||
|
||||
"Do not blow your cover(정체를 들키지 마라)"라는 표현은 AI를 잠입 요원으로 프레이밍한다. 공개 코드 기여에서의 의도적인 AI 저작 은폐는 다음과 같은 질문을 제기한다:
|
||||
- 오픈소스 커뮤니티에서의 투명성
|
||||
- 프로젝트 기여 가이드라인 준수 여부
|
||||
- 영업비밀 보호와 기만 사이의 경계
|
||||
161
docs/ko/04-원격-제어와-킬스위치.md
Normal file
161
docs/ko/04-원격-제어와-킬스위치.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# 원격 제어 및 킬스위치
|
||||
|
||||
> 인터넷에 공개된 자료와 커뮤니티 토론을 바탕으로 정리된 Claude Code v2.1.88 분석 보고서.
|
||||
|
||||
## 개요
|
||||
|
||||
Claude Code는 공식 관리자(및 기업 관리자)가 원격 구성을 통해 클라이언트의 특정 동작을 관리하고 업데이트하여 시스템 보안 및 기업 규정 준수를 보장할 수 있는 원격 관리 메커니즘을 구현하고 있습니다.
|
||||
|
||||
## 1. 원격 관리 설정
|
||||
|
||||
### 구조
|
||||
|
||||
자격이 있는 모든 세션은 다음에서 설정을 가져온다:
|
||||
```
|
||||
GET /api/claude_code/settings
|
||||
```
|
||||
|
||||
출처: `src/services/remoteManagedSettings/index.ts:105-107`
|
||||
|
||||
### 폴링 동작
|
||||
|
||||
```typescript
|
||||
// src/services/remoteManagedSettings/index.ts:52-54
|
||||
const SETTINGS_TIMEOUT_MS = 10000
|
||||
const DEFAULT_MAX_RETRIES = 5
|
||||
const POLLING_INTERVAL_MS = 60 * 60 * 1000 // 1시간
|
||||
```
|
||||
|
||||
설정은 1시간마다 폴링되며, 실패 시 최대 5회 재시도한다.
|
||||
|
||||
### 대상 자격
|
||||
|
||||
- Console 사용자 (API 키): 전원 대상
|
||||
- OAuth 사용자: Enterprise/C4E 및 Team 구독자만 해당
|
||||
|
||||
### 수락 강제 다이얼로그
|
||||
|
||||
원격 설정에 "위험한" 변경이 포함되면 차단 다이얼로그가 표시된다:
|
||||
|
||||
```typescript
|
||||
// src/services/remoteManagedSettings/securityCheck.tsx:67-73
|
||||
export function handleSecurityCheckResult(result: SecurityCheckResult): boolean {
|
||||
if (result === 'rejected') {
|
||||
gracefulShutdownSync(1) // 종료 코드 1로 종료
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
```
|
||||
|
||||
원격 설정을 거부하면 애플리케이션이 **강제 종료된다**. 선택지는 원격 설정 수락 또는 Claude Code 종료뿐이다.
|
||||
|
||||
### 장애 시 동작
|
||||
|
||||
원격 서버 접근이 불가능하면 디스크 캐시 설정을 사용한다:
|
||||
|
||||
```typescript
|
||||
// src/services/remoteManagedSettings/index.ts:433-436
|
||||
if (cachedSettings) {
|
||||
logForDebugging('Remote settings: Using stale cache after fetch failure')
|
||||
setSessionCache(cachedSettings)
|
||||
return cachedSettings
|
||||
}
|
||||
```
|
||||
|
||||
원격 설정이 한 번 적용되면, 서버 장애 시에도 캐시가 유지된다.
|
||||
|
||||
## 2. Feature Flag 킬스위치
|
||||
|
||||
GrowthBook feature flag를 통해 여러 기능을 원격 비활성화할 수 있다:
|
||||
|
||||
### 권한 우회 킬스위치
|
||||
|
||||
```typescript
|
||||
// src/utils/permissions/bypassPermissionsKillswitch.ts
|
||||
// Statsig 게이트를 확인하여 권한 우회를 비활성화
|
||||
```
|
||||
|
||||
사용자 동의 없이 권한 우회 기능을 비활성화할 수 있다.
|
||||
|
||||
### Auto 모드 서킷 브레이커
|
||||
|
||||
```typescript
|
||||
// src/utils/permissions/autoModeState.ts
|
||||
// autoModeCircuitBroken 상태로 auto 모드 재진입을 차단
|
||||
```
|
||||
|
||||
Auto 모드를 원격으로 비활성화할 수 있다.
|
||||
|
||||
### Fast 모드 킬스위치
|
||||
|
||||
```typescript
|
||||
// src/utils/fastMode.ts
|
||||
// /api/claude_code_penguin_mode 에서 조회
|
||||
// 특정 사용자의 fast 모드를 영구 비활성화 가능
|
||||
```
|
||||
|
||||
### 분석 싱크 킬스위치
|
||||
|
||||
```typescript
|
||||
// src/services/analytics/sinkKillswitch.ts:4
|
||||
const SINK_KILLSWITCH_CONFIG_NAME = 'tengu_frond_boric'
|
||||
```
|
||||
|
||||
모든 분석 출력을 원격으로 중단할 수 있다.
|
||||
|
||||
### Agent Teams 킬스위치
|
||||
|
||||
```typescript
|
||||
// src/utils/agentSwarmsEnabled.ts
|
||||
// 환경 변수와 GrowthBook 게이트 'tengu_amber_flint' 모두 필요
|
||||
```
|
||||
|
||||
### 음성 모드 킬스위치
|
||||
|
||||
```typescript
|
||||
// src/voice/voiceModeEnabled.ts:21
|
||||
// 'tengu_amber_quartz_disabled' — 음성 모드 긴급 차단
|
||||
```
|
||||
|
||||
## 3. 모델 오버라이드 시스템
|
||||
|
||||
카나리 테스트를 수행하거나 예상치 못한 온라인 상황에 대응하기 위해 시스템은 내부 직원과 같은 특정 그룹에 대해 모델 버전을 동적으로 전환하는 것을 지원합니다:
|
||||
|
||||
```typescript
|
||||
// src/utils/model/antModels.ts:32-33
|
||||
// @[MODEL LAUNCH]: tengu_ant_model_override에 새 ant 전용 모델 업데이트
|
||||
// @[MODEL LAUNCH]: 코드네임을 scripts/excluded-strings.txt에 추가
|
||||
```
|
||||
|
||||
`tengu_ant_model_override` GrowthBook flag로 가능한 작업:
|
||||
- 기본 모델 설정
|
||||
- 기본 노력 수준 설정
|
||||
- 시스템 프롬프트에 내용 추가
|
||||
- 커스텀 모델 별칭 정의
|
||||
|
||||
## 4. Penguin 모드
|
||||
|
||||
Fast 모드 상태는 전용 엔드포인트에서 조회한다:
|
||||
|
||||
```typescript
|
||||
// src/utils/fastMode.ts
|
||||
// GET /api/claude_code_penguin_mode
|
||||
// API가 비활성화를 응답하면 해당 사용자에게 영구 비활성화
|
||||
```
|
||||
|
||||
Fast 모드 가용성을 제어하는 feature flag:
|
||||
- `tengu_penguins_off`
|
||||
- `tengu_marble_sandcastle`
|
||||
|
||||
## 요약
|
||||
|
||||
| 메커니즘 | 범위 | 사용자 동의 |
|
||||
|----------|------|------------|
|
||||
| 원격 관리 설정 | Enterprise/Team | 수락 또는 종료 |
|
||||
| GrowthBook feature flag | 전체 사용자 | 없음 |
|
||||
| 킬스위치 | 전체 사용자 | 없음 |
|
||||
| 모델 오버라이드 | 내부 (ant) | 없음 |
|
||||
| Fast 모드 제어 | 전체 사용자 | 없음 |
|
||||
|
||||
원격 제어 인프라는 광범위합니다. 기업 관리자는 사용자가 재정의할 수 없는 정책을 강제할 수 있으며, 시스템은 중대한 문제를 해결하기 위해 기능 플래그(feature flags)를 통해 모든 사용자의 동작을 원격으로 변경할 수 있습니다.
|
||||
167
docs/ko/05-향후-로드맵.md
Normal file
167
docs/ko/05-향후-로드맵.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# 향후 로드맵 — 아키텍처에서 드러난 내용
|
||||
|
||||
> 인터넷에 공개된 자료와 커뮤니티 토론을 바탕으로 정리된 Claude Code v2.1.88 분석 보고서.
|
||||
|
||||
## 1. 차기 모델: Numbat
|
||||
|
||||
차기 모델 출시의 가장 구체적인 근거:
|
||||
|
||||
```typescript
|
||||
// src/constants/prompts.ts:402
|
||||
// @[MODEL LAUNCH]: Remove this section when we launch numbat.
|
||||
```
|
||||
|
||||
**Numbat**(넘뱃)은 차기 모델의 코드네임이다. 이 주석은 Numbat 출시 시 출력 효율성 섹션이 개정될 것임을 나타내며, 더 나은 네이티브 출력 제어를 갖출 가능성을 시사한다.
|
||||
|
||||
### 향후 버전 번호
|
||||
|
||||
```typescript
|
||||
// src/utils/undercover.ts:49
|
||||
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
|
||||
```
|
||||
|
||||
**Opus 4.7**과 **Sonnet 4.8**이 개발 중이다.
|
||||
|
||||
### 코드네임 변천
|
||||
|
||||
```
|
||||
Fennec (페넥여우) → Opus 4.6 → [Numbat?]
|
||||
Capybara (카피바라) → Sonnet v8 → [?]
|
||||
Tengu (천구) → 텔레메트리/제품 접두사
|
||||
```
|
||||
|
||||
Fennec에서 Opus로의 마이그레이션이 문서화되어 있다:
|
||||
|
||||
```typescript
|
||||
// src/migrations/migrateFennecToOpus.ts:7-11
|
||||
// fennec-latest → opus
|
||||
// fennec-latest[1m] → opus[1m]
|
||||
// fennec-fast-latest → opus[1m] + fast mode
|
||||
```
|
||||
|
||||
### MODEL LAUNCH 체크리스트
|
||||
|
||||
코드베이스에는 업데이트할 항목을 나열한 20개 이상의 `@[MODEL LAUNCH]` 마커가 있다:
|
||||
|
||||
- 기본 모델 이름 (`FRONTIER_MODEL_NAME`)
|
||||
- 모델 패밀리 ID
|
||||
- 지식 기준일(knowledge cutoff)
|
||||
- 가격표
|
||||
- 컨텍스트 윈도우 설정
|
||||
- Thinking 모드 지원 플래그
|
||||
- 표시 이름 매핑
|
||||
- 마이그레이션 스크립트
|
||||
|
||||
## 2. KAIROS — 자율 에이전트 모드
|
||||
|
||||
최대 규모의 미공개 기능으로, KAIROS는 Claude Code를 반응형 어시스턴트에서 능동적 자율 에이전트로 변환한다.
|
||||
|
||||
### 시스템 프롬프트 (발췌)
|
||||
|
||||
```
|
||||
// src/constants/prompts.ts:860-913
|
||||
|
||||
You are running autonomously.
|
||||
You will receive <tick> prompts that keep you alive between turns.
|
||||
If you have nothing useful to do, call SleepTool.
|
||||
Bias toward action — read files, make changes, commit without asking.
|
||||
|
||||
## Terminal focus
|
||||
- Unfocused: The user is away. Lean heavily into autonomous action.
|
||||
- Focused: The user is watching. Be more collaborative.
|
||||
```
|
||||
|
||||
### 관련 도구
|
||||
|
||||
| 도구 | Feature Flag | 용도 |
|
||||
|------|-------------|------|
|
||||
| SleepTool | KAIROS / PROACTIVE | 자율 동작 간 페이싱 제어 |
|
||||
| SendUserFileTool | KAIROS | 사용자에게 파일 선제 전송 |
|
||||
| PushNotificationTool | KAIROS / KAIROS_PUSH_NOTIFICATION | 사용자 기기에 푸시 알림 |
|
||||
| SubscribePRTool | KAIROS_GITHUB_WEBHOOKS | GitHub PR 웹훅 이벤트 구독 |
|
||||
| BriefTool | KAIROS_BRIEF | 선제적 상태 업데이트 |
|
||||
|
||||
### 동작 방식
|
||||
|
||||
- `<tick>` 하트비트 프롬프트로 작동
|
||||
- 터미널 포커스 상태에 따라 자율성 수준 조정
|
||||
- 독립적으로 커밋, 푸시, 의사결정 가능
|
||||
- 선제적 알림 및 상태 업데이트 전송
|
||||
- GitHub PR 변경사항 모니터링
|
||||
|
||||
## 3. 음성 모드
|
||||
|
||||
Push-to-talk 음성 입력이 완전 구현되어 있으나 `VOICE_MODE` feature flag로 차단되어 있다.
|
||||
|
||||
```typescript
|
||||
// src/voice/voiceModeEnabled.ts
|
||||
// Anthropic의 voice_stream WebSocket 엔드포인트에 연결
|
||||
// conversation_engine 기반 모델로 음성-텍스트 변환
|
||||
// 키 바인딩을 길게 눌러 녹음, 놓으면 전송
|
||||
```
|
||||
|
||||
- OAuth 전용 (API 키 / Bedrock / Vertex 미지원)
|
||||
- WebSocket 연결에 mTLS 사용
|
||||
- 킬스위치: `tengu_amber_quartz_disabled`
|
||||
|
||||
## 4. 미공개 도구
|
||||
|
||||
아키텍처에 존재하지만 외부 사용자에게 아직 활성화되지 않은 도구:
|
||||
|
||||
| 도구 | Feature Flag | 설명 |
|
||||
|------|-------------|------|
|
||||
| **WebBrowserTool** | `WEB_BROWSER_TOOL` | 내장 브라우저 자동화 (코드네임: bagel) |
|
||||
| **TerminalCaptureTool** | `TERMINAL_PANEL` | 터미널 패널 캡처 및 모니터링 |
|
||||
| **WorkflowTool** | `WORKFLOW_SCRIPTS` | 사전 정의된 워크플로우 스크립트 실행 |
|
||||
| **MonitorTool** | `MONITOR_TOOL` | 시스템/프로세스 모니터링 |
|
||||
| **SnipTool** | `HISTORY_SNIP` | 대화 히스토리 잘라내기/축소 |
|
||||
| **ListPeersTool** | `UDS_INBOX` | Unix 도메인 소켓 피어 탐색 |
|
||||
| **RemoteTriggerTool** | `AGENT_TRIGGERS_REMOTE` | 원격 에이전트 트리거 |
|
||||
| **TungstenTool** | ant 전용 | 내부 성능 모니터링 패널 |
|
||||
| **VerifyPlanExecutionTool** | VERIFY_PLAN env | 계획 실행 검증 |
|
||||
| **OverflowTestTool** | `OVERFLOW_TEST_TOOL` | 컨텍스트 오버플로우 테스트 |
|
||||
| **SubscribePRTool** | `KAIROS_GITHUB_WEBHOOKS` | GitHub PR 웹훅 구독 |
|
||||
|
||||
## 5. Coordinator 모드
|
||||
|
||||
멀티 에이전트 조율 시스템:
|
||||
|
||||
```typescript
|
||||
// src/coordinator/coordinatorMode.ts
|
||||
// Feature flag: COORDINATOR_MODE
|
||||
```
|
||||
|
||||
공유 상태와 메시징을 통한 다수 에이전트 간 조율된 작업 실행을 지원한다.
|
||||
|
||||
## 6. Buddy 시스템 (가상 펫)
|
||||
|
||||
완전한 펫 동반자 시스템이 구현되어 있으나 아직 출시되지 않았다:
|
||||
|
||||
- **18종**: duck, goose, blob, cat, dragon, octopus, owl, penguin, turtle, snail, ghost, axolotl, capybara, cactus, robot, rabbit, mushroom, chonk
|
||||
- **5단계 희귀도**: Common (60%), Uncommon (25%), Rare (10%), Epic (4%), Legendary (1%)
|
||||
- **7종 모자**: crown, tophat, propeller, halo, wizard, beanie, tinyduck
|
||||
- **5가지 스탯**: DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK
|
||||
- **1% 반짝이 확률**: 모든 종의 Sparkle 변형
|
||||
- **결정론적 생성**: 사용자 ID 해시 기반
|
||||
|
||||
출처: `src/buddy/`
|
||||
|
||||
## 7. Dream Task
|
||||
|
||||
백그라운드 기억 통합 서브에이전트:
|
||||
|
||||
```
|
||||
// src/tasks/DreamTask/
|
||||
// 백그라운드에서 동작하는 자동 드리밍 기능
|
||||
// 'tengu_onyx_plover' feature flag로 제어
|
||||
```
|
||||
|
||||
유휴 시간 중 AI가 자율적으로 기억을 처리하고 통합할 수 있게 한다.
|
||||
|
||||
## 요약: 세 가지 방향
|
||||
|
||||
1. **신규 모델**: Numbat (차기), Opus 4.7, Sonnet 4.8 개발 중
|
||||
2. **자율 에이전트**: KAIROS 모드 — 무인 운영, 선제적 행동, 푸시 알림
|
||||
3. **멀티모달**: 음성 입력 준비 완료, 브라우저 도구 대기 중, 워크플로우 자동화 예정
|
||||
|
||||
Claude Code는 **코딩 어시스턴트**에서 **상시 가동 자율 개발 에이전트**로 진화하고 있다.
|
||||
Reference in New Issue
Block a user