---
baseline: N0030@r0000
created: 2026-04-14T06:50:06.668479500+00:00
---

## Delta

# PLAN v0.4 — 에이전트 워크플로 완성

> 전제 조건: v0.3 성공 기준 달성 (✅)
> 논의 근거: → see N0018 r0015, N0019, N0020, N0027
> 이전 계획: → see N0019 (PLAN v0.3)
> 확정 일자: 2026-04-14

---

## 테마

**"에이전트가 자연스럽게 쓴다"** — 도구가 스스로를 설명하고, vault를 명시적으로 선택하고, 맥락을 예산에 맞춰 수신한다.

---

## 확정 스코프 (7개)

| # | 항목 | 근거 entry |
|---|------|-----------|
| 1 | **Multi-Vault** — `--vault`/`--global` 전역 플래그 + `@vault:` 링크 파서 + vault_name 자동 alias | N0020, N0018 r0015 |
| 2 | **`elf entry status <id> <status>`** — manifest 업데이트 + sync 이벤트 | N0027 |
| 3 | **MCP tool `description` 강화** — 트리거 조건 내장 | N0019 Phase 3 |
| 4 | **`elf serve --mcp` snippet 출력** — 미연결 시 설정 안내 | N0019 Phase 3 |
| 5 | **`bundle --since <spec>`** — revision_id / RFC 3339 timestamp | N0019 r0004 |
| 6 | **`bundle --depth N`** — linked entry 탐색 깊이 | N0019 Phase 2 |
| 7 | **`elf help --json`** — AI-readable 명령 표면 | N0019 Phase 2 |

유보: `elf sessions` (cold start 실사용 검증 후), SSE Transport (→ see N0030_sse, Multi-Vault 완성 후)

---

## Phase 1 — Multi-Vault 기반 (vault 이슈 즉시 수정)

**목표:** 어느 cwd에서든 vault를 명시 지정 가능. `elf serve --mcp`에 `--vault` 주입으로 local vault 인식.

### 태스크

- [ ] `GlobalArgs` 구조체 — `--vault <path>` / `--global` 전역 플래그
- [ ] `resolve_vault_root(global_args)` — 단일 진입점
  - 우선순위: `--vault` > `--global` > `ELF_VAULT` > cwd 탐색 > global 폴백
- [ ] `vault/config.rs`에 `[vaults]` 섹션 읽기/쓰기 (optional, backward-compatible — schema_version 변경 불필요)
- [ ] `--vault <path>` 첫 사용 시 해당 vault의 `vault_name`을 읽어 `~/.elendirna/config.toml [vaults]`에 자동 등록
- [ ] `@vault:<alias>:` resolve 함수 — alias → path 매핑 (전역 config `[vaults]` 기준)
  - `global` / `local` 은 예약어
- [ ] `validate`에서 `@vault:<alias>:` 링크: alias 미등록 시 WARN, 등록된 alias라도 외부 vault라 dangling 체크 스킵
- [ ] `elf entry status <id> <status>` 구현
  - manifest `status` + `updated` 갱신
  - `sync.jsonl`에 `status.changed` 이벤트 기록 (N0031 SQLite 연동 포석)

**완료 기준:** `elf --vault /path entry list`가 해당 vault 읽음. 두 번째 호출부터 `@vault:<vault_name>:` 링크 resolve 가능.

---

## Phase 2 — bundle 고도화

**목표:** 에이전트가 컨텍스트 예산을 제어한다.

### 태스크

- [ ] `bundle --depth N` (기본값 1)
  - depth 0: 자신 + revisions만
  - depth 1: 직접 링크 전문 (현행)
  - depth 2+: 2홉 이상 manifest 메타데이터만
- [ ] `bundle --since <spec>`
  - spec: `N####@r####` 또는 RFC 3339 timestamp
  - 해당 시점 이후 revision만 포함, entry 본문은 항상 포함

**완료 기준:** `elf bundle N0018 --depth 0`이 N0018 + revisions만 출력. `--since N0018@r0010`이 r0011 이후만 포함.

---

## Phase 3 — MCP 자기서술 + elf help --json

**목표:** 정적 파일 없이 에이전트가 워크플로를 자동 이해한다.

### 태스크

- [ ] `mcp/mod.rs` 모든 tool `description` 업데이트 (DESIGN.md §3.5 준수)
  - 기능 설명 + 호출 시점(트리거 조건) + 직접 파일 접근 대신 사용해야 하는 이유
- [ ] `server.instructions` 강화 — 세션 시작/종료 프로토콜 내장
- [ ] `elf serve` (--mcp 없이 호출 시) — 에러 대신 MCP config snippet 출력
  - `which elf` 경로 + 현재 vault 경로 자동 삽입
- [ ] `elf help --json` — 전체 커맨드 표면 JSON 출력

---

## 의존 관계

```
Phase 1 (vault 전역화, @vault: 파서, entry status)
    ↓
Phase 2 (bundle --depth, --since)          Phase 3 (MCP desc, snippet, help --json)
                                           ← Phase 3는 Phase 1 완료 후 병렬 가능
```