> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# 에이전트 버전 관리

에이전트 버전 관리를 사용하면 프로덕션 설정에 위험을 주지 않고 에이전트의 다양한 구성을 실험할 수 있습니다. 격리된 브랜치를 만들고, 변경 사항을 테스트하고, 트래픽 비율 배포를 통해 업데이트를 점진적으로 출시하세요.

> **Note**
>
> A/B 테스트를 실행하고 싶으신가요? 실제 트래픽을 대상으로 에이전트 변경 사항을 테스트하는 권장 워크플로는 [실험](/docs/ko/eleven-agents/operate/experiments)을 참조하세요.

## 개요

버전 관리 시스템은 다음을 제공합니다.

* 특정 시점의 에이전트 구성에 대한 **불변 스냅샷**
* 실제 운영 전 변경 사항을 테스트할 수 있는 **격리된 브랜치**
* 일정 비율의 사용자에게 변경 사항을 점진적으로 출시하는 **트래픽 분할**
* 모든 브랜치의 변경 사항을 다른 모든 브랜치로 가져오는 **병합**
* 최신 메인 브랜치 변경 사항을 브랜치로 가져오는 **리베이스**

> **Note**
>
> 에이전트에서 버전 관리를 활성화하면 비활성화할 수 없습니다. 기존 에이전트에서 버전 관리를 활성화하기 전에 이 점을 고려하세요.

## 핵심 개념

### 버전

버전은 특정 시점의 에이전트 구성을 담은 불변 스냅샷입니다. 각 버전에는 고유 ID(형식: `agtvrsn_xxxx`)가 있으며 다음을 포함합니다.

* `conversation_config` - 시스템 프롬프트, LLM 설정, 음성 구성, 도구, 지식 베이스
* `platform_settings` - 평가, 위젯, 데이터 수집, 안전 설정을 포함한 버전 관리 대상 하위 집합
* `workflow` - 노드와 엣지를 포함한 전체 워크플로 정의

버전 관리가 활성화된 에이전트의 변경 사항을 저장하면 버전이 자동으로 생성됩니다. 한번 생성된 버전은 수정할 수 없습니다.

### 브랜치

브랜치는 git 브랜치와 유사한 이름이 지정된 개발 라인입니다. 메인 브랜치에 다시 병합하기 전에 변경 사항을 격리된 환경에서 작업할 수 있습니다.

* 모든 버전 관리 에이전트에는 삭제하거나 아카이브할 수 없는 **메인** 브랜치가 있습니다.
* 메인뿐 아니라 기존 브랜치의 모든 버전에서 추가 브랜치를 생성할 수 있습니다.
* 브랜치는 다른 모든 브랜치로 병합할 수 있으며, 메인이 아닌 브랜치는 메인에 리베이스하여 최신 변경 사항을 가져올 수 있습니다.
* 각 브랜치에는 id (`agtbrch_xxxx`), 이름, 설명 및 버전 목록이 있습니다.
* 브랜치 이름에는 문자, 숫자, `() [] {} - / .`를 사용할 수 있습니다(최대 140자).

### 트래픽 배포

트래픽을 여러 브랜치에 비율별로 분할하여 점진적 출시와 A/B 테스트를 진행할 수 있습니다.

* 비율의 합은 항상 정확히 **100%** 여야 합니다.
* 트래픽 라우팅은 대화 ID를 기준으로 **결정론적**으로 이루어집니다(동일한 사용자는 항상 동일한 브랜치로 라우팅됨).
* 트래픽이 0%인 아카이브되지 않은 브랜치만 아카이브할 수 있습니다.

### 초안

저장하지 않은 변경 사항은 초안으로 저장되므로 즉시 새 버전을 만들지 않고도 변경 사항을 작업할 수 있습니다.

* 초안은 **사용자별, 브랜치별**로 관리됩니다(각 팀 구성원에게 자체 초안이 있음).
* 새 버전이 커밋되면 초안은 자동으로 삭제됩니다.
* 브랜치에 병합할 때도 초안은 삭제됩니다.

## 버전 관리 활성화

버전 관리는 선택 기능이며 명시적으로 활성화해야 합니다. 새 에이전트를 만들 때 또는 기존 에이전트에서 활성화할 수 있습니다.

> **Warning**
>
> 버전 관리를 활성화하면 비활성화할 수 없습니다. 이는 에이전트에 적용되는 영구적인 변경입니다.

### 에이전트 생성 시 활성화

#### 대시보드에서 활성화

대시보드에서 에이전트를 열고 **설정**으로 이동한 다음 버전 관리를 활성화하세요. 활성화하면 브랜치, 초안, 버전, 트래픽 배포를 관리할 수 있는 **버전 관리** 탭을 사용할 수 있습니다.

#### API를 통해 활성화

```python
from elevenlabs.client import ElevenLabs
from elevenlabs.types import *

client = ElevenLabs(api_key="your-api-key")

agent = client.conversational_ai.agents.create(
    conversation_config=ConversationalConfig(
        agent=AgentConfig(
            first_message="Hello! How can I help you today?",
            prompt={"prompt": "You are a helpful assistant."},
        )
    ),
    enable_versioning=True
)

print(f"Agent created with versioning: {agent.agent_id}")
```

```javascript
import { ElevenLabsClient } from '@elevenlabs/elevenlabs-js';

const client = new ElevenLabsClient({ apiKey: 'your-api-key' });

const agent = await client.conversationalAi.agents.create({
  conversationConfig: {
    agent: {
      firstMessage: 'Hello! How can I help you today?',
      prompt: {
        prompt: 'You are a helpful assistant.',
      },
    },
  },
  enableVersioning: true,
});

console.log(`Agent created with versioning: ${agent.agentId}`);
```

### 기존 에이전트에서 활성화

#### 대시보드에서 활성화

대시보드에서 에이전트를 열고 **설정**으로 이동한 다음 버전 관리를 켜세요.

#### API를 통해 활성화

```python
agent = client.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    enable_versioning_if_not_enabled=True
)
```

```javascript
const agent = await client.conversationalAi.agents.update('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  enableVersioningIfNotEnabled: true,
});
```

버전 관리를 활성화하면 현재 에이전트 구성을 포함하는 첫 번째 버전으로 초기 "메인" 브랜치가 생성됩니다.

## 브랜치 작업

### 브랜치 생성

브랜치는 메인뿐 아니라 모든 브랜치의 모든 버전에서 생성할 수 있습니다. 새 브랜치의 초기 버전에 적용될 구성 변경 사항을 선택적으로 포함할 수 있습니다.

```python
branch = client.conversational_ai.agents.branches.create(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    parent_version_id="agtvrsn_xxxx",
    name="experiment-v2",
    description="Testing new prompt and voice settings"
)

print(f"Created branch: {branch.created_branch_id}")
print(f"Initial version: {branch.created_version_id}")
```

```javascript
const branch = await client.conversationalAi.agents.branches.create('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  parentVersionId: 'agtvrsn_xxxx',
  name: 'experiment-v2',
  description: 'Testing new prompt and voice settings',
});

console.log(`Created branch: ${branch.createdBranchId}`);
console.log(`Initial version: ${branch.createdVersionId}`);

```

### 브랜치 목록 조회

```python
branches = client.conversational_ai.agents.branches.list(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6"
)

for branch in branches.branches:
print(f"{branch.name}: {branch.id}")

```

```javascript
const branches = await client.conversationalAi.agents.branches.list('agent_7101k5zvyjhmfg983brhmhkd98n6');

for (const branch of branches.branches) {
  console.log(`${branch.name}: ${branch.id}`);
}

```

### 브랜치 세부 정보 조회

```python
branch = client.conversational_ai.agents.branches.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)

print(f"Branch: {branch.name}")
print(f"Versions: {len(branch.versions)}")

```

```javascript
const branch = await client.conversationalAi.agents.branches.get('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx');

console.log(`Branch: ${branch.name}`);
console.log(`Versions: ${branch.versions.length}`);

```

## 변경 사항 커밋

버전 관리가 활성화된 에이전트를 업데이트할 때 `branch_id`를 지정하면 해당 브랜치에 새 버전을 생성합니다.

#### 대시보드에서 업데이트

에이전트의 **버전 관리** 탭을 열고 대상 브랜치로 전환한 다음, 구성을 수정하고 저장하여 새 버전을 만드세요.

#### CLI에서 업데이트

`--branch` 플래그를 전달하여 이름 또는 ID로 특정 브랜치에 푸시하세요. 브랜치는 이미 존재해야 합니다.

```bash
elevenlabs agents push --agent "<agent-name>" --branch "<branch-name>"
```

#### API를 통해 업데이트

```python
agent = client.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx",
    conversation_config=ConversationalConfig(
        agent=AgentConfig(
            prompt={"prompt": "You are a friendly customer support agent."},
        )
    )
)
```

```javascript
const agent = await client.conversationalAi.agents.update(
  'agent_7101k5zvyjhmfg983brhmhkd98n6',
  {
    conversationConfig: {
      agent: {
        prompt: {
          prompt: 'You are a friendly customer support agent.',
        },
      },
    },
  },
  { branchId: 'agtbrch_xxxx' }
);
```

지정된 브랜치에 새 버전이 자동으로 생성되며, 해당 브랜치에서 해당 사용자의 기존 초안은 삭제됩니다.

## 트래픽 배포

배포 엔드포인트를 사용해 브랜치 간에 트래픽을 분배하세요. 이를 통해 점진적 출시와 A/B 테스트를 진행할 수 있습니다.

```python
deployment = client.conversational_ai.agents.deployments.create(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    deployments=[
        {"branch_id": "agtbrch_main", "percentage": 90},
        {"branch_id": "agtbrch_xxxx", "percentage": 10}
    ]
)
```

```javascript
const deployment = await client.conversationalAi.agents.deployments.create('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  deployments: [
    { branchId: 'agtbrch_main', percentage: 90 },
    { branchId: 'agtbrch_xxxx', percentage: 10 },
  ],
});
```

> **Warning**
>
> 모든 비율의 합은 정확히 100%여야 합니다. 그렇지 않으면 배포에 실패합니다.

트래픽 라우팅은 대화 ID를 기준으로 결정론적으로 이루어지므로, 동일한 사용자가 세션 전반에 걸쳐 항상 동일한 브랜치에 도달합니다.

## 브랜치 병합

브랜치의 변경 사항에 만족하면 다른 브랜치에 병합하세요. 아카이브되지 않은 모든 브랜치는 메인뿐 아니라 다른 모든 아카이브되지 않은 브랜치에 병합할 수 있습니다.

> **Note**
>
> 병합 전에 브랜치의 변경 사항을 검토하거나, 쓰기 권한이 없는 브랜치에 변경 사항을 반영하려면 직접 병합하는 대신 [병합 제안](/docs/ko/eleven-agents/operate/merge-proposals)을 여세요.

```python
merge = client.conversational_ai.agents.branches.merge(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    source_branch_id="agtbrch_xxxx",
    target_branch_id="agtbrch_main",
    archive_source_branch=True,  # Default: true
    force=False  # Default: false
)
```

```javascript
const merge = await client.conversationalAi.agents.branches.merge('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx', {
  targetBranchId: 'agtbrch_main',
  archiveSourceBranch: true, // Default: true
  force: false, // Default: false
});
```

병합 시:

* 소스 브랜치의 구성을 사용해 대상 브랜치에 새 버전을 생성합니다.
* 선택적으로 소스 브랜치를 아카이브합니다(기본 동작).
* 소스 브랜치의 트래픽을 대상 브랜치로 자동 이전합니다.

> **Note**
>
> 소스 브랜치가 대상 브랜치에서 생성되었고 그 이후 새 커밋이 없으면 `no_new_changes_to_merge`와 함께 병합에 실패합니다. 이미 해당 대상에 병합된 경우에는 `branch_already_merged`와 함께 실패합니다.

### 병합 충돌 해결

분기된 이후 소스 브랜치와 대상 브랜치 모두에서 설정이 변경된 경우, 기본적으로 더 최근에 업데이트된 브랜치의 값이 유지됩니다. 타임스탬프와 관계없이 항상 소스 브랜치의 값을 사용하려면 `force=True`를 설정하세요.

커밋하기 전에 재정의될 수 있는 필드를 포함하여 병합 결과를 미리 확인하세요.

```python
preview = client.conversational_ai.agents.branches.preview_merge(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    source_branch_id="agtbrch_xxxx",
    target_branch_id="agtbrch_main",
    force=False
)

print(preview.overridden_fields)
print(preview.conflicts)
```

```javascript
const preview = await client.conversationalAi.agents.branches.previewMerge('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx', {
  targetBranchId: 'agtbrch_main',
  force: false,
});

console.log(preview.overriddenFields);
console.log(preview.conflicts);
```

## 브랜치를 메인에 리베이스

리베이스는 git rebase와 유사하게 메인 브랜치의 최신 변경 사항을 다른 브랜치로 가져옵니다. 이를 통해 브랜치 자체의 변경 사항을 아직 다시 병합하지 않고도 장기간 유지되는 브랜치를 메인과 최신 상태로 유지할 수 있습니다.

```python
client.conversational_ai.agents.branches.rebase(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)
```

```javascript
await client.conversationalAi.agents.branches.rebase('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx');
```

리베이스 시:

* 메인의 최신 변경 사항을 포함하는 새 버전을 브랜치에 생성합니다.
* 브랜치 자체의 변경 사항을 유지합니다. 브랜치와 메인 모두에서 설정을 수정한 경우 브랜치의 값이 항상 유지됩니다.
* 브랜치에 이미 메인의 모든 변경 사항이 포함되어 있으면 `branch_already_up_to_date`와 함께 실패합니다.

> **Note**
>
> 메인이 아닌 브랜치만 메인에 리베이스할 수 있습니다. 메인 브랜치 자체를 리베이스하면 `cannot_rebase_main` 오류가 반환됩니다.

커밋하기 전에 리베이스 결과를 미리 확인하세요.

```python
preview = client.conversational_ai.agents.branches.preview_rebase(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)

print(preview.overridden_fields)
```

```javascript
const preview = await client.conversationalAi.agents.branches.previewRebase('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx');

console.log(preview.overriddenFields);
```

## 브랜치 아카이브

더 이상 필요하지 않은 브랜치를 아카이브하세요. 브랜치 목록을 체계적으로 관리하는 데 도움이 됩니다.

```python
client.conversational_ai.agents.branches.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx",
    archived=True
)
```

```javascript
await client.conversationalAi.agents.branches.update('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx', {
  archived: true,
});
```

> **Warning**
>
> 트래픽이 할당된 브랜치는 아카이브할 수 없습니다. 아카이브하기 전에 모든 트래픽을 제거하세요.

`archived=False`를 설정하면 아카이브된 브랜치를 복원할 수 있습니다.

## 버전 관리 에이전트 복제

에이전트를 복제하면 메인 브랜치뿐 아니라 소스 에이전트의 아카이브되지 않은 모든 브랜치를 복사한 새 에이전트가 생성됩니다.

```python
duplicate = client.conversational_ai.agents.duplicate(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    name="Copy of my agent"
)

print(duplicate.agent_id)
```

```javascript
const duplicate = await client.conversationalAi.agents.duplicate('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  name: 'Copy of my agent',
});

console.log(duplicate.agentId);
```

복제된 에이전트에서:

* 메인 브랜치는 소스 에이전트 메인 브랜치의 최신 버전에서 생성됩니다.
* 아카이브되지 않은 다른 각 브랜치는 동일한 이름과 설명으로 다시 생성되며, 해당 브랜치의 최신 버전에서 시작합니다.
* 버전 기록은 복사되지 않으므로 각 브랜치는 단일 버전으로 시작합니다.
* 아카이브된 브랜치와 초안은 복사되지 않습니다.
* 트래픽 배포는 복사되지 않으므로 다른 브랜치에 [트래픽을 배포](#deploying-traffic)하기 전까지 모든 트래픽은 메인 브랜치로 이동합니다.

복제본의 브랜치 및 버전 ID는 새로 생성되므로, 소스 에이전트 ID에 대한 참조를 업데이트하세요.

## 특정 버전 조회

특정 버전 또는 브랜치 팁 상태의 에이전트를 조회할 수 있습니다.

### 특정 버전의 에이전트 가져오기

```python
agent = client.conversational_ai.agents.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    version_id="agtvrsn_xxxx"
)
```

```javascript
const agent = await client.conversationalAi.agents.get('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  versionId: 'agtvrsn_xxxx',
});
```

### 브랜치 팁의 에이전트 가져오기

```python
agent = client.conversational_ai.agents.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)
```

```javascript
const agent = await client.conversationalAi.agents.get('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  branchId: 'agtbrch_xxxx',
});
```

### 초안 변경 사항 포함

```python
agent = client.conversational_ai.agents.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx",
    include_draft=True
)
```

```javascript
const agent = await client.conversationalAi.agents.get('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  branchId: 'agtbrch_xxxx',
  includeDraft: true,
});
```

## 설정 참조

### 버전 관리 설정

다음 설정은 버전과 브랜치마다 다를 수 있습니다.

| 카테고리             | 설정                                                                                                                                                                                        |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **대화 구성**        | 시스템 프롬프트, 에이전트 성격, LLM 선택 및 파라미터, 음성 설정(TTS 모델, 음성 ID), 도구 구성, 지식 베이스, 첫 메시지, 언어 설정, 턴 감지, 중단 설정                                                                                          |
| **버전 관리 플랫폼 설정** | `evaluation` - 평가 기준, `widget` - 위젯 모양 및 동작, `data_collection` - 구조화된 데이터 추출, `overrides` - 대화 시작 재정의, `workspace_overrides` - 웹훅 구성, `testing` - 테스트 구성, `safety` - 가드레일(IVC/non-IVC 설정) |
| **워크플로**         | 전체 워크플로 정의(노드 및 엣지)                                                                                                                                                                       |

### 에이전트별 설정

다음 설정은 버전이 아닌 에이전트에 속하므로 모든 브랜치에서 공유됩니다.

| 설정                                      | 설명                               |
| --------------------------------------- | -------------------------------- |
| `name`, `tags`                          | 에이전트 이름 및 태그                     |
| `auth`                                  | 인증 설정 및 허용 목록                    |
| `call_limits`                           | 동시성 및 일일 한도                      |
| `queueing_config`                       | 동시성 한도를 초과한 발신자를 위한 대기열 및 홀드 오디오 |
| `privacy`                               | 보존 설정, 무보존 모드 및 사용자 메모리          |
| `analysis_llm`                          | 통화 후 분석에 사용되는 LLM                |
| `topic_discovery`, `sentiment_analysis` | 에이전트 수준 분석 설정                    |
| `simulation_library`                    | 시뮬레이션 라이브러리 설정                   |
| `alerting`                              | 알림 웹훅 및 모니터 임계값                  |
| `ban`                                   | 차단 상태(관리자 전용)                    |

> **Warning**
>
> 에이전트별 설정은 메인 브랜치에서만 변경할 수 있습니다. 다른 브랜치에서는 대시보드에 읽기 전용으로 표시되며, 메인이 아닌 브랜치에 버전을 게시하면 해당 변경 사항은 삭제됩니다. 이후 브랜치를 메인에 병합해도 적용되지 않습니다. 변경하려면 메인 브랜치로 전환하세요. այնտեղ 게시하면 변경 사항이 모든 브랜치에 적용됩니다.

## 모범 사례

#### 브랜치 생성 전 테스트 만들기

새 브랜치를 만들기 전에 예상 동작을 포착하는 [자동화된 테스트](/docs/ko/eleven-agents/customization/agent-testing)를 설정하세요. 이렇게 하면 기준선을 마련하고 실험을 반복하는 동안 회귀를 조기에 발견하는 데 도움이 됩니다.

#### 설명적인 브랜치 이름 사용

실험의 목적을 명확하게 전달하는 브랜치 이름을 선택하세요. 쉽게 참조할 수 있도록 기능 이름, 가설 또는 티켓 번호를 포함하세요(예: `feature/new-greeting-flow` 또는 `experiment/shorter-responses`).

#### 브랜치 목적 문서화

브랜치 설명 필드를 사용해 테스트하는 가설, 성공을 정의하는 지표, 종속성 또는 고려 사항을 설명하세요. 그러면 팀 구성원이 진행 중인 실험을 이해하는 데 도움이 됩니다.

#### 진행 중인 작업에는 초안 사용

변경 사항을 반복하는 동안 초안을 자주 저장하세요. 불필요한 버전을 만들지 않고 작업 내용을 보존할 수 있습니다. 테스트하거나 배포할 준비가 되었을 때만 커밋하세요.

#### 작은 트래픽 비율로 시작

새 브랜치를 배포할 때는 트래픽의 5\~10%부터 시작하세요. 문제가 발생했을 때 노출을 제한하면서도 의미 있는 데이터를 얻을 수 있습니다.

#### 트래픽을 늘리기 전 주요 지표 모니터링

[분석 대시보드](/docs/ko/eleven-agents/dashboard)를 사용해 브랜치 성능을 비교하세요. 통화 완료율, 평균 대화 시간, 성공 평가 점수 및 도구 실행률을 확인하세요. 지표가 메인 브랜치 기준선에 도달하거나 이를 초과할 때만 트래픽을 늘리세요.

#### 트래픽 점진적으로 늘리기

확신이 커짐에 따라 트래픽을 단계적으로 확장하세요(10% → 25% → 50% → 100%). 이 접근 방식은 각 단계에서 성능을 검증하면서 위험을 최소화합니다.

#### 브랜치를 단기간 유지

구성 드리프트를 방지하기 위해 성공한 실험은 즉시 병합하세요. 더 오래 열어 두어야 하는 브랜치는 주기적으로 메인에 리베이스하여 너무 멀어져 병합이 어려워지지 않도록 하세요.

## 다음 단계

#### [실험](/docs/ko/eleven-agents/operate/experiments)

브랜치와 트래픽 배포를 사용해 A/B 테스트 실행

#### [테스트](/docs/ko/eleven-agents/customization/agent-testing)

에이전트 버전을 위한 자동화된 테스트 설정

#### [분석](/docs/ko/eleven-agents/dashboard)

여러 브랜치 전반의 성능 모니터링

#### [CLI](/docs/ko/eleven-agents/operate/cli)

명령줄에서 버전 관리