> ## 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 vars

> Flow 레벨 변수 — `{{name}}` 플레이스홀더 선언, 업데이트, 제거.

Flow 변수는 Flow 가 선언하는 이름 있는 입력. 블록이 `{{name}}` 으로 보간. 런타임 호출자가 값 설정 (API 페이로드, 채팅 UI, 스케줄 통해). 변수가 입력 선언할 한 곳과 보간할 한 곳 제공.

## 명령

| 명령                        | 설명                              |
| ------------------------- | ------------------------------- |
| `vars list`               | 활성 Flow 의 선언된 변수 나열.            |
| `vars set <name> [flags]` | 변수 추가 또는 업데이트 (기존에 shallow 병합). |
| `vars delete <name>`      | 변수 제거.                          |

변수 이름이 위치 인자, 예: `topic`, `customer_email`.

## `vars list`

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

선언된 모든 변수 인쇄, 로우당 하나: 이름, 타입, 소스, 필수, 기본.

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

## `vars set`

```bash theme={null}
nora vars set customer_email --source form --type string --required
```

### 플래그

| 플래그                      | 값                                                | 목적                                |
| ------------------------ | ------------------------------------------------ | --------------------------------- |
| `--source`               | `form`, `body_path`, `fixed`                     | 런타임에 값 오는 곳.                      |
| `--type`                 | `string`, `number`, `boolean`, `object`, `array` | 타입 강제 + 검증.                       |
| `--label <text>`         |                                                  | 사람 대상 라벨 (채팅 폼).                  |
| `--description <text>`   |                                                  | 한 줄 힌트.                           |
| `--path <a.b.c>`         |                                                  | `body_path` 소스: 트리거 본문의 JSONPath. |
| `--fixed-value <v>`      |                                                  | `fixed` 소스: 하드코딩 값.               |
| `--default-value <json>` |                                                  | 없을 때 기본. JSON 리터럴.                |
| `--required`             |                                                  | 설정 안 되면 실행 실패.                    |

넘긴 플래그만 기존 변수 업데이트 — set 은 shallow 병합이지 replace 가 아님. 필드 리셋은 변수 삭제·재생성.

### 소스 설명

* **`form`** — 채팅 트리거의 폼 UI 에 표면화. 사용자가 채움.
* **`body_path`** — 요청 본문의 JSON 경로에서 추출 (웹훅과 API 트리거). `--path` 로 지정.
* **`fixed`** — 하드코딩. 매 실행 같은 값. 상수와 기능 플래그에 유용.

## `vars delete`

```bash theme={null}
nora vars delete customer_email
```

선언 제거. `{{customer_email}}` 참조하는 블록이 런타임에 실패 — 먼저 감사.

## 흔한 레시피

### 필수 사용자 입력 선언

```bash theme={null}
nora vars set topic \
  --source form \
  --type string \
  --label "What topic?" \
  --description "한 단어 주제 (예: 'billing')" \
  --required
```

채팅 트리거 폼에 필수 필드로 표시.

### 웹훅 본문에서 추출

웹훅이 `{ "customer": { "email": "..." } }` 를 POST 하면:

```bash theme={null}
nora vars set customer_email \
  --source body_path \
  --path customer.email \
  --type string \
  --required
```

블록이 `{{customer_email}}` 보간하고 추출된 값 봄.

### 기능 플래그 스위치

```bash theme={null}
nora vars set enable_experimental_prompt \
  --source fixed \
  --type boolean \
  --fixed-value false \
  --description "assistant 프롬프트의 variant B 활성 토글"
```

준비되면 다른 `vars set --fixed-value true` 로 뒤집기. 블록 편집 없음, 재배포 없음 (설정 스코프 변경이 즉시 라이브).

### 벌크 스냅샷·복원

`vars list --json` 이 구조화되므로 vars 를 git 에 지속하고 다른 워크스페이스에 재적용 가능:

```bash theme={null}
# 익스포트
nora vars list --json > vars.json

# 다른 워크스페이스에 재적용 (각각 루프)
jq -c '.[]' vars.json | while read v; do
  name=$(echo "$v" | jq -r '.name')
  # 구조화 필드를 --set-* 플래그로 다시 번역
  # (벌크는 보통 API 로 스크립트 더 쉬움)
done
```

사소하지 않은 벌크 마이그레이션은 `flows snapshot`/`apply` 가 변수도 옮김.

## 변수가 나타나는 곳

* **블록 콘텐츠** — 텍스트 필드가 `{{name}}` 보간 수용하는 어디든.
* **트리거 입력** — 웹훅 `input_path` 가 변수로 매핑; API 트리거가 수용.
* **채팅 폼 UI** — `--source form` 변수가 실행 시작에 필드로 렌더.
* **스케줄 트리거** — `--source fixed` 값이 모든 스케줄 실행에 baked in.

## 변수와 버전 스코프

변수가 Flow 에 속함 (draft + published 함께). 변수 이름 변경은 Draft 편집 — 라이브 되려면 배포. `--fixed-value` 변경은 재배포 없이 즉시 효과.
