> ## Documentation Index
> Fetch the complete documentation index at: https://docs.platform.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# nora providers

> LLM provider API 키 관리 — 설정, 삭제, Flow 별 준비 체크.

Nora 가 Agent 를 여러 provider (OpenAI, Anthropic, Google 등) 모델에 대해 실행. 각 provider 가 워크스페이스별 API 키 필요. `providers` 가 그것들 관리 CLI.

## 명령

| 명령                            | 설명                                  |
| ----------------------------- | ----------------------------------- |
| `providers list`              | 모든 provider 와 키 있는지 인쇄.             |
| `providers set <provider>`    | Provider 용 API 키 저장.                |
| `providers delete <provider>` | 저장된 키 제거.                           |
| `providers check <flow-slug>` | Flow 가 필요한 provider vs. 키 있는 것 리포트. |

## `providers list`

```bash theme={null}
nora providers list
```

지원되는 모든 provider 와 상태 인쇄:

* `openai`: **configured** — 키 설정됨.
* `anthropic`: **not configured** — 키 없음.
* `google`: **configured**.

구조화 출력에 `--json` 추가.

## `providers set`

```bash theme={null}
# 인터랙티브 (마스킹)
nora providers set openai --stdin <<< "sk-..."

# 환경변수에서 (권장)
nora providers set openai --env OPENAI_API_KEY

# 리터럴 (셸 히스토리 경고)
nora providers set openai sk-...
```

플래그:

* `<provider>` (위치, 필수) — provider ID.
* `--stdin` — stdin 에서 키 읽기. 선호.
* `--env <var>` — 환경변수에서 읽기. CI 에 선호.
* 위치 키 — 리터럴. 최소 선호 (셸 히스토리에 착지).

저장된 키가 저장 시 암호화되고 API 로 절대 반환 안 됨 — CLI 가 다시 읽을 수 없음.

새 키로 `set` 재실행해 로테이션. 이전 키가 즉시 교체.

## `providers delete`

```bash theme={null}
nora providers delete openai
```

저장된 키 제거. 이 provider 모델 쓰는 어느 Flow 든 새 키 설정할 때까지 실패.

`--yes` 안 넘기면 확인 필요.

## `providers check`

```bash theme={null}
nora providers check support-agent
```

특정 Flow 에 리포트:

* Flow 의 Agent 블록이 참조하는 provider.
* 그중 키 설정된 것.
* 갭.

사전 배포 체크로 좋음 — "모델 바꿨는데 키 추가 잊음" 을 출시 전 잡음.

예 출력:

```
Flow: support-agent
  openai:    ✓ configured  (3 Agent 사용)
  anthropic: ✗ MISSING     (1 Agent 사용 — ag_secondary)
  google:    - 사용 안 함
```

스크립트 가능 출력에 `--json` 추가 — CI 가 이걸로 게이트 가능.

## 레시피

### 부트스트랩 스크립트에서 환경으로부터 키 설정

```bash theme={null}
nora providers set openai --env OPENAI_API_KEY
nora providers set anthropic --env ANTHROPIC_API_KEY
nora providers set google --env GOOGLE_API_KEY
```

워크스페이스 셋업 runbook 에 잘 맞음.

### CI: Flow 에 어느 provider 든 누락되면 실패

```bash theme={null}
if nora providers check support-agent --json | jq -e '.gaps | length > 0' > /dev/null; then
  echo "Provider 키 누락 — 배포 전 설정."
  exit 1
fi
```

### 유예 있는 키 로테이션

```bash theme={null}
# 새 키 설정 (덮어씀)
nora providers set openai --env OPENAI_API_KEY_NEW
```

로테이션이 원자적 — 새 키가 다음 호출부터 사용. 진행 중 실행이 이전 키에서 완료.

정상 확인으로 몇 분 걸쳐 auth 실패 관찰:

```bash theme={null}
sleep 300
nora traces list --status error --search "OpenAI" --limit 10
```

### 워크스페이스 간 키 마이그레이션

```bash theme={null}
# 소스에서 익스포트 (안전 볼트로, CLI 아님 — CLI 가 다시 못 읽음)
# 그 다음 목적지에 설정:
nora --workspace destination providers set openai --stdin < ~/.secrets/openai
```

키가 워크스페이스 스코프 — 각 워크스페이스가 자체 소유.

## Provider 와 비용

Provider 키가 Nora 관리 모델 티어 아니면 provider (OpenAI, Anthropic, ...) 가 직접 결제. Nora 플랫폼 자체 결제는 별개 — [`nora billing`](/ko/cli/billing) 참고.

비용 귀속에 워크스페이스별 키 사용: OpenAI 대시보드가 API 키별 지출 표시하므로 워크스페이스별 키가 팀별이나 환경별 비용 분할 가능.

## 관련

* [`nora agents update --set-model`](/ko/cli/agents) — Agent 에 모델 선택.
* [`nora billing`](/ko/cli/billing) — Nora 플랫폼 결제 (provider 결제 아님).
* [승인·배포](/ko/reliable/optimization/approve) — 설정되면 승인이 모델 스왑 게이트.
