← Docs hub

Schedule Milestone PRD and UX Spec

Schedule Milestone UX Flow

이 문서는 1차 마일스톤인 “사용자 설정값을 받아 고정청정 스케줄을 생성”하는 기능을 제품/UX/개발 공통 기준으로 정리한다.

1. 배경과 목표

1차 마일스톤은 사용자의 음성 입력을 Cloud LLM Server로 보내고, Cloud에서 Gemini STT로 텍스트화한 뒤, Schedule Agent가 멀티턴으로 필요한 slot을 채워 고정청정 스케줄 API를 호출하는 것이다.

핵심 목표:

2. 전제와 비범위

항목 기준
네트워크 Cloud 연결과 인터넷 연결 완료 상태를 가정
인입 조건 온디바이스에서 schedule 관련 기능으로 분류된 경우
STT Cloud에서 Gemini STT API 사용
멀티턴 온디바이스의 기존 Cloud 멀티턴 상태를 재사용
1차 실행 고정청정 스케줄 등록
비범위 오프라인 STT fallback, 모든 스케줄 adapter 동시 구현, proactive schedule suggestion

3. Schedule 기능 목록도 slot이다

고정청정만 보면 안 된다. 사용자가 “스케줄 등록해줘”라고 말하면 무엇을 스케줄할지부터 모를 수 있다. 따라서 schedule_function 자체가 첫 번째 핵심 slot이다.

slot 설명 예시
schedule_function 어떤 기능의 스케줄인지 고정청정, 이동청정, 웰컴, 웨이크업, 릴렉스, 공기질맵, 보안
operation 등록/수정/삭제/조회 등록, 바꿔줘, 지워줘, 확인해줘
repeat_days 반복 요일/날짜 매일, 평일, 주말, 토요일
start_time 시작 시각 오전 10시, 밤 8시 반
end_time 종료 시각 아침 7시까지
target_area 대상 공간 안방, 거실, 아이들 방
mode_options 기능별 옵션 풍량, 청정 모드, 보안 모드
enabled 활성화 여부 true

4. 1차 기능 범위

Must

기능 완료 기준
Cloud audio ingress on-device schedule gate를 통과한 음성을 Cloud가 받음
Gemini STT 음성에서 transcript 생성
Schedule Agent transcript와 slot_state를 병합
Missing slot follow-up 부족한 slot만 질문
Existing multiturn reuse 질문형 response로 기존 isCloudContinue/multiTurnBusy 흐름 유지
Fixed cleaning adapter 모든 필수 slot이 채워지면 고정청정 API payload 생성
Result confirmation schedule 생성 성공/실패 결과 반환

Should

기능 이유
기능별 slot registry 다른 schedule 기능 확장 기반
수정/삭제/조회 operation 분리 등록 성공 후 같은 구조 재사용
API adapter capability flag 아직 adapter 없는 schedule 기능을 안전하게 안내

Could

기능 이유
사용자 선호 반복값 memory 반복 schedule UX 단축
proactive schedule suggestion 장기 방향

5. UX 흐름

5.1 모든 slot이 있는 경우

사용자: 평일 밤 10시부터 아침 7시까지 안방 고정청정 예약해줘
Cloud: transcript 생성
Schedule Agent: schedule_function=fixed_cleaning, operation=create, repeat_days=weekday, start_time=22:00, end_time=07:00, target_area=안방
Cloud: fixed cleaning schedule API 호출
응답: 평일 밤 10시부터 아침 7시까지 안방 고정청정 스케줄을 등록했어요.

5.2 기능이 빠진 경우

사용자: 스케줄 등록해줘
시스템: 어떤 기능을 스케줄로 등록할까요? 고정청정, 이동청정, 웨이크업 중에서 선택할 수 있어요.
사용자: 고정청정
시스템: 언제 실행할까요?

5.3 시간이 빠진 경우

사용자: 안방 고정청정 매일 예약해줘
시스템: 몇 시부터 몇 시까지 실행할까요?
사용자: 밤 10시부터 아침 7시까지
시스템: 매일 밤 10시부터 아침 7시까지 안방 고정청정 스케줄을 등록했어요.

5.4 operation이 다른 경우

사용자: 내일 아침 고정청정 예약 지워줘
시스템: 어떤 고정청정 예약을 삭제할까요? 등록된 예약을 확인해드릴게요.

삭제/수정/조회는 1차 등록 구조가 안정화된 뒤 같은 slot registry와 workflow 상태를 재사용한다.

6. On-device와 Cloud 책임 분리

계층 책임
On-device Schedule Gate schedule 관련 기능으로 분류된 경우에만 Cloud schedule path 진입
On-device Multiturn 기존 isCloudContinue, multiTurnBusy, 질문형 response 흐름 재사용
Cloud STT Gemini STT로 transcript 생성
Cloud Schedule Workflow workflow_id, slot_state, missing_slots 유지
Schedule Agent slot 추출, 부족한 값 판단, 다음 질문 생성
Schedule Relay/API Adapter 필수 slot 완료 후 실제 API payload 변환
Schedule Server/DeviceAgent 스케줄 생성/수정/삭제/조회 실행

7. 응답 계약

slot 부족:

{
  "response": "몇 시부터 몇 시까지 실행할까요?",
  "there_is_question_mark": "true",
  "workflow_id": "sch_001",
  "schedule_workflow_status": "collecting_slots",
  "slot_state": {
    "collected_slots": {
      "schedule_function": "fixed_cleaning",
      "operation": "create",
      "target_area": "안방",
      "repeat_days": "daily"
    },
    "missing_slots": ["start_time", "end_time"]
  }
}

slot 완료:

{
  "response": "안방 고정청정 스케줄을 등록했어요.",
  "there_is_question_mark": "false",
  "workflow_id": "sch_001",
  "schedule_workflow_status": "completed",
  "result_kind": "success",
  "schedule_id": "schedule_123"
}

8. 수용 기준

기준 PASS 조건
Gate 비스케줄 발화가 schedule workflow로 들어오지 않음
STT Cloud에서 transcript가 생성되고 workflow에 저장됨
Slot filling 필수 slot이 없을 때 API를 호출하지 않음
Follow-up 질문형 response와 slot_state가 같이 내려감
Multiturn reuse on-device가 기존 Cloud 멀티턴 상태로 다음 음성을 Cloud에 보냄
API execution 고정청정 필수 slot 완료 후 relay/API 호출
Completion 생성 성공값을 받고 workflow 종료
Extension 다른 schedule 기능은 schedule_function과 adapter flag로 확장 가능

관련 문서

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date