> ## Documentation Index
> Fetch the complete documentation index at: https://docs.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와 키 있는 것 리포트. |

## `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  (Agent 3개 사용)
  anthropic: ✗ MISSING     (Agent 1개 사용: 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는 다시 못 읽음)
# 그다음 목적지에 설정:
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) 설정되면 승인이 모델 스왑을 막음.
