Claude-Flow v2.5.0-alpha.130 - SDK 통합 단계
핵심 및 높은 우선순위 기능을 포함한 업데이트된 구현 계획
상태: 1-2단계 완료, 3-8단계 계획됨 마지막 업데이트일: 2025-09-30
🎯 단계 개요
| 단계 | 우선순위 | 기능 | 성능 향상 | 상태 |
|---|---|---|---|---|
| 1 | 기반 | SDK 설정 | - | ✅ 완료 |
| 2 | 기반 | 재시도 마이그레이션 | 30% | ✅ 완료 |
| 3 | 🟡 HIGH | 메모리 → 세션 | 데이터 관리 | ⏳ 진행 중 |
| 4 | 🔴 CRITICAL | 세션 포크 + 실시간 제어 | 10-20x | 📋 준비 완료 |
| 5 | 🟡 HIGH | 훅 매처 + 권한 | 2-3x | 📋 준비 완료 |
| 6 | 🔴 CRITICAL | 인프로세스 MCP | 10-100x | 📋 준비 완료 |
| 7 | 🟢 MEDIUM | 네트워크 + DevTools | 보안 | 📋 계획됨 |
| 8 | 📚 DOC | 마이그레이션 + 문서 | - | 📋 계획됨 |
예상 총 성능 향상: 스웜 작업 최대 100-600배 속도 향상
Phase 1: 기반 설정 ✅ 완료
상태
- ✅ 완료: 모든 작업 종료
- 기간: 1주
- 코드 감소량: 56% (429라인 제거)
완료한 작업
- ✅ Claude Agent SDK 설치 (@anthropic-ai/sdk@0.65.0)
- ✅ SDK 구성 어댑터 생성 (
src/sdk/sdk-config.ts- 120라인) - ✅ 호환성 레이어 구축 (
src/sdk/compatibility-layer.ts- 180라인) - ✅ SDK 래퍼 클래스 설정
결과
- 검증 테스트: 10/10 통과 (100%)
- 하위 호환성: 100%
- 회귀: 0건
- 빌드: v2.5.0-alpha.130으로 성공적으로 재빌드
Phase 2: 재시도 메커니즘 마이그레이션 ✅ 완료
상태
- ✅ 완료: 모든 작업 종료
- 기간: 1주
- 성능: 재시도 작업 30% 향상
완료한 작업
- ✅ Claude client v2.5 리팩터링 (
src/api/claude-client-v2.5.ts- 328라인) - ✅ 커스텀 재시도 로직 200라인 이상 제거
- ✅ SDK 기반 작업 실행기 생성 (
src/swarm/executor-sdk.ts- 200라인) - ✅ SDK 오류 처리 구현
결과
- 기존 클라이언트: 757라인
- 신규 클라이언트: 328라인 (56% 감소)
- 재시도 로직: SDK에 위임(자동 지수 백오프)
- 성능: 재시도 작업 30% 가속
Phase 3: 메모리 시스템 → 세션 영속성 ⏳ 진행 중
우선순위
🟡 HIGH - 상태 관리를 위해 필수
기간
1-2주
개요
커스텀 메모리 관리자를 SDKMessage[] 이력을 사용하는 SDK 세션 영속성으로 교체하고 resumeSessionAt으로 복구합니다.
작업
- [ ] 세션 기반 메모리 아키텍처 설계
- [ ]
MemoryManagerSDK클래스 구현 - [ ] 스웜 상태를
SDKMessage형식으로 저장 - [ ] 체크포인트 복구에
resumeSessionAt사용 - [ ] 기존 메모리 데이터 마이그레이션
- [ ] 마이그레이션 테스트 생성
구현
// src/swarm/memory-manager-sdk.ts
export class MemoryManagerSDK {
private sessions: Map<string, SDKMessage[]> = new Map();
async saveSwarmState(swarmId: string, state: SwarmState): Promise<void> {
// 스웜 상태를 SDKMessage 형식으로 변환합니다
const messages: SDKMessage[] = [
{
type: 'system',
subtype: 'init',
uuid: randomUUID(),
session_id: swarmId,
tools: state.activeTools,
model: state.model,
// ... 스웜 메타데이터
},
...this.convertStateToMessages(state)
];
// 세션 기록으로 저장합니다
this.sessions.set(swarmId, messages);
}
async restoreSwarmState(
swarmId: string,
messageId?: string
): Promise<SwarmState> {
// SDK의 resumeSessionAt을 사용해 시점 복구를 수행합니다
const stream = query({
prompt: 'Restore swarm state from session history',
options: {
resume: swarmId,
resumeSessionAt: messageId // 선택 사항: 특정 메시지
}
});
// 복구된 세션에서 스웜 상태를 추출합니다
return this.extractSwarmState(stream);
}
private convertStateToMessages(state: SwarmState): SDKMessage[] {
// 에이전트, 작업, 결과를 SDKMessage 형식으로 변환합니다
return state.agents.map(agent => ({
type: 'assistant',
uuid: randomUUID(),
session_id: state.swarmId,
message: {
id: agent.id,
role: 'assistant',
content: JSON.stringify(agent.state)
},
parent_tool_use_id: null
}));
}
}
성공 기준
- ✅ 모든 스웜 상태를
SDKMessage[]로 저장 - ✅ 시점 복구 동작
- ✅ 이전 메모리 형식에서 마이그레이션 완료
- ✅ 마이그레이션 중 데이터 손실 없음
- ✅ 성능 향상이 측정됨
Phase 4: 세션 포크 & 실시간 제어 🔴 CRITICAL
우선순위
🔴 CRITICAL - 10-20x 성능 향상
기간
2-3주
개요
세션 포크로 병렬 에이전트 실행을 가능하게 하고 실시간 에이전트 제어 기능을 추가합니다.
기능
1️⃣ 세션 포크(에이전트 스폰 10-20배 가속)
// src/swarm/parallel-executor-sdk.ts
export class ParallelSwarmExecutor {
async spawnParallelAgents(task: Task, count: number): Promise<Agent[]> {
// 공유 컨텍스트로 기본 세션을 생성합니다
const baseSession = await this.createBaseSession(task);
// 병렬 실행을 위해 N개의 세션을 포크합니다
const agents = await Promise.all(
Array.from({ length: count }, async (_, index) => {
const stream = query({
prompt: this.getAgentPrompt(task, index),
options: {
resume: baseSession.id,
forkSession: true, // 핵심: 즉시 포크!
mcpServers: {
'claude-flow-swarm': claudeFlowSwarmServer
}
}
});
return this.monitorAgentStream(stream, index);
})
);
return agents;
}
}
성능: 에이전트 스폰 500-1000ms → 10-50ms (10-20배 가속)
2️⃣ Compact Boundary(자연스러운 체크포인트)
// src/verification/checkpoint-manager-sdk.ts
export class CheckpointManagerSDK {
async monitorForCheckpoints(swarmId: string): Promise<void> {
const stream = this.getSwarmStream(swarmId);
for await (const message of stream) {
if (message.type === 'system' && message.subtype === 'compact_boundary') {
// SDK가 컨텍스트를 자동 압축하므로 체크포인트로 활용합니다!
await this.createSwarmCheckpoint(swarmId, {
trigger: message.compact_metadata.trigger, // 'auto' | 'manual'
tokensBeforeCompact: message.compact_metadata.pre_tokens,
messageId: message.uuid,
timestamp: Date.now()
});
}
}
}
async restoreFromCompactBoundary(
swarmId: string,
checkpointId: string
): Promise<SwarmState> {
// resumeSessionAt으로 압축 경계 지점에서 복구합니다
const stream = query({
prompt: 'Restore swarm state',
options: {
resume: swarmId,
resumeSessionAt: checkpointId // 압축 경계 메시지를 가리킵니다
}
});
// 해당 시점으로 스웜 상태가 자동 복원됩니다!
return this.extractSwarmState(stream);
}
}
성능: 체크포인트 복구 = 즉시(SDK가 처리)
3️⃣ 실시간 쿼리 제어
// src/swarm/dynamic-agent-controller.ts
export class DynamicAgentController {
private activeStreams: Map<string, Query> = new Map();
async killRunawayAgent(agentId: string): Promise<void> {
const stream = this.activeStreams.get(agentId);
if (stream) {
// 즉시 실행을 중단합니다
await stream.interrupt();
console.log(`⚠️ Agent ${agentId} interrupted`);
}
}
async switchAgentModel(agentId: string, model: string): Promise<void> {
const stream = this.activeStreams.get(agentId);
if (stream) {
// 실행 중에 모델을 전환합니다(재시작 없음!)
await stream.setModel(model);
console.log(`🔄 Agent ${agentId} now using ${model}`);
}
}
async relaxPermissions(agentId: string): Promise<void> {
const stream = this.activeStreams.get(agentId);
if (stream) {
// 자동 승인 모드로 전환합니다
await stream.setPermissionMode('acceptEdits');
console.log(`🔓 Agent ${agentId} permissions relaxed`);
}
}
async tightenPermissions(agentId: string): Promise<void> {
const stream = this.activeStreams.get(agentId);
if (stream) {
// 수동 승인 모드로 전환합니다
await stream.setPermissionMode('default');
console.log(`🔒 Agent ${agentId} permissions tightened`);
}
}
}
기능: 재시작 없이 실시간 제어
작업
- [ ] 병렬 에이전트를 위한 세션 포크 구현
- [ ] Compact Boundary 모니터링 추가
- [ ] 실시간 쿼리 제어 매니저 생성
- [ ] 병렬 vs 순차 실행을 벤치마크
- [ ] 에이전트 중단 시 내고장성 테스트
- [ ] 신규 API 문서화
성공 기준
- ✅ 에이전트 스폰 시간: <50ms (기존 500-1000ms)
- ✅ 체크포인트 복구: 즉시(수동 처리 대비)
- ✅ 실시간 제어: 응답 시간 <100ms
- ✅ 10-20배 성능 향상 검증
- ✅ 기존 기능 회귀 없음
Phase 5: 훅 매처 & 4단계 권한 🟡 HIGH
우선순위
🟡 HIGH - 2-3x 성능 향상
기간
2주
개요
커스텀 훅을 SDK 네이티브 훅으로 교체하고 패턴 매칭과 4단계 권한 계층을 도입합니다.
기능
1️⃣ 훅 매처(2-3배 가속)
// src/services/hook-manager-sdk.ts
const hooks: Partial<Record<HookEvent, HookCallbackMatcher[]>> = {
PreToolUse: [
{
matcher: 'Bash\\(.*\\)', // 정규식: Bash 명령만 허용합니다
hooks: [async (input, toolUseID, { signal }) => {
// Bash에 대한 스웜 수준 거버넌스를 수행합니다
const allowed = await this.validateBashCommand(
input.tool_input.command
);
return {
decision: allowed ? 'approve' : 'block',
hookSpecificOutput: {
hookEventName: 'PreToolUse',
permissionDecision: allowed ? 'allow' : 'deny',
permissionDecisionReason: allowed
? 'Command approved by swarm policy'
: 'Dangerous command blocked'
}
};
}]
},
{
matcher: 'agent_spawn', // 에이전트 스폰만 대상으로 합니다
hooks: [async (input, toolUseID, { signal }) => {
// 스웜 조정을 위해 에이전트 스폰을 추적합니다
await this.recordAgentSpawn(input.tool_input);
return { continue: true };
}]
},
{
matcher: 'FileWrite\\(.*\\.env.*\\)', // .env 파일 쓰기를 차단합니다
hooks: [async (input) => {
return {
decision: 'block',
reason: 'Writing to .env files is not allowed'
};
}]
}
],
PostToolUse: [
{
matcher: 'memory_.*', // 모든 메모리 작업을 대상으로 합니다
hooks: [async (input, toolUseID, { signal }) => {
// 스웜 전체에 메모리 작업을 복제합니다
await this.replicateMemoryOperation(input);
return { continue: true };
}]
},
{
matcher: '.*', // 모든 작업(감사 로깅)
hooks: [async (input) => {
await this.logToolExecution(input);
return { continue: true };
}]
}
],
SessionEnd: [
{
hooks: [async (input, toolUseID, { signal }) => {
// 세션 종료 시 스웜 메트릭을 집계합니다
await this.aggregateSwarmMetrics(input.session_id);
return { continue: true };
}]
}
]
};
성능: 불필요한 훅을 건너뛰어 실행 속도가 2-3배 빨라집니다
2️⃣ 4단계 권한 계층
// src/security/swarm-permission-manager.ts
export class SwarmPermissionManager {
async configurePermissionHierarchy() {
// 1단계: 사용자 수준(~/.claude/settings.json)
// 가장 제한적인 규칙으로 모든 프로젝트에 적용됩니다
await this.updatePermissions({
type: 'addRules',
rules: [
{ toolName: 'Bash', ruleContent: 'rm -rf *' },
{ toolName: 'Bash', ruleContent: 'sudo *' },
{ toolName: 'FileWrite', ruleContent: '/etc/*' }
],
behavior: 'deny',
destination: 'userSettings'
});
// 2단계: 프로젝트 수준(.claude/settings.json)
// 프로젝트별 정책(git에 커밋)
await this.updatePermissions({
type: 'addRules',
rules: [
{ toolName: 'FileWrite', ruleContent: './src/*' },
{ toolName: 'FileRead', ruleContent: './src/*' },
{ toolName: 'Bash', ruleContent: 'npm *' }
],
behavior: 'allow',
destination: 'projectSettings'
});
// 3단계: 로컬 수준(.claude-local.json)
// 개발자 전용 재정의(gitignore 처리)
await this.updatePermissions({
type: 'addRules',
rules: [
{ toolName: 'Bash', ruleContent: 'npm install *' },
{ toolName: 'FileWrite', ruleContent: './.env.local' }
],
behavior: 'allow',
destination: 'localSettings'
});
// 4단계: 세션 수준
// 현재 세션에만 적용(스웜에 가장 관대한 설정)
await this.updatePermissions({
type: 'addRules',
rules: [
{ toolName: 'agent_spawn' },
{ toolName: 'swarm_init' },
{ toolName: 'task_orchestrate' }
],
behavior: 'allow',
destination: 'session'
});
}
async getEffectivePermission(toolName: string, input: any): Promise<PermissionBehavior> {
// 계층을 순서대로 검사합니다: 사용자 → 프로젝트 → 로컬 → 세션
// 첫 번째 'deny'가 우선하며, deny가 없으면 마지막 'allow'가 적용됩니다
const userPerm = await this.checkLevel('userSettings', toolName, input);
if (userPerm === 'deny') return 'deny';
const projectPerm = await this.checkLevel('projectSettings', toolName, input);
if (projectPerm === 'deny') return 'deny';
const localPerm = await this.checkLevel('localSettings', toolName, input);
if (localPerm === 'deny') return 'deny';
const sessionPerm = await this.checkLevel('session', toolName, input);
if (sessionPerm === 'allow') return 'allow';
// 기본값은 'ask'입니다
return 'ask';
}
}
기능: 4단계에서 세밀한 거버넌스를 제공합니다
작업
- [ ] 모든 커스텀 훅을 SDK 네이티브 훅으로 교체
- [ ] 훅 매처 패턴 구현
- [ ] 4단계 권한 계층 구성
- [ ] 기존 훅 로직 마이그레이션
- [ ] 권한 감사 로그 추가
- [ ] 훅 패턴 라이브러리 생성
성공 기준
- ✅ 훅 실행 오버헤드: -50%
- ✅ 권한 검사: <0.1ms (기존 1-2ms)
- ✅ 2-3배 성능 향상 검증
- ✅ 무단 도구 실행 0건
- ✅ 모든 계층에서 감사 추적 완비
Phase 6: 인프로세스 MCP 서버 🔴 GAME CHANGER
우선순위
🔴 CRITICAL - 10-100x 성능 향상
기간
2-3주
개요
stdio 기반 MCP 전송을 인프로세스 SDK 서버로 교체해 IPC 오버헤드를 제거합니다.
구현
// src/mcp/claude-flow-swarm-server.ts
import { createSdkMcpServer, tool } from '@anthropic-ai/claude-code/sdk';
import { z } from 'zod';
import { SwarmCoordinator } from '../swarm/coordinator';
import { SwarmMemory } from '../swarm/memory';
export const claudeFlowSwarmServer = createSdkMcpServer({
name: 'claude-flow-swarm',
version: '2.5.0-alpha.130',
tools: [
// 스웜 초기화
tool('swarm_init', 'Initialize multi-agent swarm', {
topology: z.enum(['mesh', 'hierarchical', 'ring', 'star']),
maxAgents: z.number().min(1).max(100),
strategy: z.enum(['balanced', 'specialized', 'adaptive']).optional()
}, async (args) => {
// 직접 함수 호출 - IPC 오버헤드 없음!
const swarm = await SwarmCoordinator.initialize(args);
return {
content: [{
type: 'text',
text: JSON.stringify(swarm.status)
}]
};
}),
// 에이전트 스폰 - <0.1ms 지연
tool('agent_spawn', 'Spawn specialized agent', {
type: z.enum(['researcher', 'coder', 'analyst', 'optimizer', 'coordinator']),
capabilities: z.array(z.string()).optional(),
swarmId: z.string().optional()
}, async (args) => {
// stdio 대비 <0.1ms!
const agent = await SwarmCoordinator.spawnAgent(args);
return {
content: [{
type: 'text',
text: JSON.stringify(agent)
}]
};
}),
// 작업 오케스트레이션 - 인프로세스
tool('task_orchestrate', 'Orchestrate task across swarm', {
task: z.string(),
strategy: z.enum(['parallel', 'sequential', 'adaptive']).optional(),
priority: z.enum(['low', 'medium', 'high', 'critical']).optional()
}, async (args) => {
const result = await SwarmCoordinator.orchestrateTask(args);
return {
content: [{
type: 'text',
text: JSON.stringify(result)
}]
};
}),
// 메모리 작업 - <1ms 지연
tool('memory_store', 'Store data in swarm memory', {
key: z.string(),
value: z.any(),
namespace: z.string().optional(),
ttl: z.number().optional()
}, async (args) => {
await SwarmMemory.store(args.key, args.value, {
namespace: args.namespace,
ttl: args.ttl
});
return {
content: [{ type: 'text', text: 'Stored successfully' }]
};
}),
tool('memory_retrieve', 'Retrieve data from swarm memory', {
key: z.string(),
namespace: z.string().optional()
}, async (args) => {
const value = await SwarmMemory.retrieve(args.key, args.namespace);
return {
content: [{
type: 'text',
text: JSON.stringify(value)
}]
};
}),
// ... IPC 오버헤드가 없는 40개 이상의 추가 도구
]
});
// 스웜 코디네이터에서 사용하는 예
export class SwarmCoordinator {
async initialize() {
const response = await query({
prompt: 'Initialize swarm with mesh topology and 5 agents',
options: {
mcpServers: {
'claude-flow-swarm': {
type: 'sdk', // 인프로세스!
name: 'claude-flow-swarm',
instance: claudeFlowSwarmServer.instance
}
}
}
});
// 응답을 파싱해 스웜을 구성합니다
return this.parseSwarmInitResponse(response);
}
}
MCP 상태 모니터링
// src/monitoring/mcp-health-monitor.ts
export class McpHealthMonitor {
async monitorSwarmServers(swarmId: string): Promise<void> {
const stream = this.activeStreams.get(swarmId);
if (!stream) return;
setInterval(async () => {
const status = await stream.mcpServerStatus();
for (const server of status) {
if (server.status === 'failed') {
console.error(`❌ MCP server ${server.name} failed`);
await this.handleServerFailure(swarmId, server);
} else if (server.status === 'needs-auth') {
console.warn(`⚠️ MCP server ${server.name} needs auth`);
await this.handleAuthRequired(swarmId, server);
} else if (server.status === 'connected') {
console.log(`✅ MCP server ${server.name} healthy`);
}
}
}, 5000); // 5초마다 확인합니다
}
private async handleServerFailure(
swarmId: string,
server: McpServerStatus
): Promise<void> {
// 복구를 시도합니다
console.log(`🔄 Attempting to restart ${server.name}...`);
await this.restartMcpServer(server.name);
// 스웜 코디네이터에 알립니다
await SwarmCoordinator.notifyServerFailure(swarmId, server);
}
}
작업
- [ ] 인프로세스
claude-flow-swarmMCP 서버 생성 - [ ] 40개 이상의 스웜 조정 도구 구현
- [ ] MCP 상태 모니터링 추가
- [ ] stdio 대비 인프로세스 성능 벤치마크
- [ ] stdio → SDK 전송 마이그레이션 가이드 작성
- [ ] 모든 통합 테스트 업데이트
성공 기준
- ✅ 도구 호출 지연: <0.1ms (기존 2-5ms)
- ✅ 메모리 작업: <1ms (기존 5-10ms)
- ✅ MCP 기반 에이전트 스폰: <10ms (기존 50-100ms)
- ✅ 10-100배 성능 향상 검증
- ✅ MCP 관련 실패 0건
- ✅ 사전 장애 감지(<5s)
Phase 7: 고급 기능 & 테스트 🟢 MEDIUM
우선순위
🟢 MEDIUM - 보안, 모니터링, 테스트
기간
2-3주
기능
- 네트워크 샌드박싱 - 에이전트별 네트워크 격리
- React DevTools - 실시간 스웜 시각화
- 종합 테스트 - 회귀 및 성능 테스트
참고
/ko-docs/SDK-ADVANCED-FEATURES-INTEGRATION.md전체 구현 문서
작업
- [ ] 네트워크 정책 매니저 구현
- [ ] React DevTools 대시보드 생성
- [ ] 종합 테스트 스위트 구축(커버리지 98% 이상)
- [ ] 성능 벤치마크 스위트
- [ ] 보안 감사
- [ ] 부하 테스트
Phase 8: 마이그레이션 & 문서화 📚
기간
1주
산출물
- 마이그레이션 스크립트:
scripts/migrate-to-v2.5.js - 변경점 정리:
BREAKING_CHANGES.md - 마이그레이션 가이드:
MIGRATION_GUIDE.md - API 문서 업데이트
- 성능 벤치마크 보고서
- 비디오 튜토리얼
🎯 성공 지표 요약
| 지표 | 단계 | 목표 | 예상 |
|---|---|---|---|
| 코드 감소율 | 1-2 | 50% | ✅ 56% |
| 검증 테스트 | 1-2 | 100% | ✅ 100% |
| 에이전트 스폰 시간 | 4 | <50ms | ⏳ 10-50ms |
| 도구 호출 지연 | 6 | <0.1ms | ⏳ <0.1ms |
| 훅 오버헤드 | 5 | -50% | ⏳ -50% |
| 전체 성능 | 전체 | +100x | ⏳ 100-600x |
📅 일정
| 단계 | 기간 | 시작 | 종료 | 상태 |
|---|---|---|---|---|
| 1 | 1주 | Week 1 | Week 1 | ✅ 완료 |
| 2 | 1주 | Week 1 | Week 2 | ✅ 완료 |
| 3 | 1-2주 | Week 2 | Week 3-4 | ⏳ 진행 중 |
| 4 | 2-3주 | Week 4 | Week 6 | 📋 준비 완료 |
| 5 | 2주 | Week 6 | Week 8 | 📋 준비 완료 |
| 6 | 2-3주 | Week 8 | Week 10 | 📋 준비 완료 |
| 7 | 2-3주 | Week 10 | Week 12 | 📋 계획됨 |
| 8 | 1주 | Week 12 | Week 13 | 📋 계획됨 |
총 기간: 약 13주(3개월) 목표 출시: 2026년 1분기
Claude-Flow v2.5.0-alpha.130의 핵심 및 높은 우선순위 기능이 반영된 단계 업데이트