Dayflow/Dayflow/AnalyticsEventDictionary.md
This document lists manual events, properties, and code locations. All events respect opt-in and are PII-free. Durations and sizes are bucketed.
screen_viewed with screenapp_version, build_number, os_version, device_model, locale, time_zoneanalytics_opt_in, onboarding_status, current_llm_provider, recording_enabled, install_ts (set once)cold_start: boolfrom_version: string, to_version: stringsession_hours: number, cpu_current_pct_bucket?: 0-5%|5-20%|20-50%|50-100%|100-150%|150-200%|>200%, cpu_avg_pct_bucket?: 0-5%|5-20%|20-50%|50-100%|100-150%|150-200%|>200%, cpu_peak_pct_bucket?: 0-5%|5-20%|20-50%|50-100%|100-150%|150-200%|>200%, cpu_sample_count?: int, cpu_sampler_interval_s?: int, current_tab?: timeline|daily|weekly|dashboard|journal|bug_report|settings, timeline_mode?: day|weekcpu_current_pct_bucket: 0-5%|5-20%|20-50%|50-100%|100-150%|150-200%|>200%, cpu_hour_peak_pct_bucket: 0-5%|5-20%|20-50%|50-100%|100-150%|150-200%|>200%, cpu_threshold_pct: number, cpu_sampler_interval_s: intscreen: stringstep: intro_video|role_selection|referral|preferences|llm_selection|llm_setup|categories|category_colors|screen_recording|completionprovider: chatgpt_claude|gemini|ollama, local_engine?: ollama|lmstudio|customprovider: gemini, error_code?: enum|stringprovider: chatgpt_claude, tool: codex|claude, setup_step: test, duration_ms?: int, exit_code?: int, failure_reason?: auth_error|nonzero_exit_no_stderr|nonzero_exit_with_stderr|empty_response|unexpected_output|cli_not_found|execution_error, error_code?: int, error_domain?: stringlast_step: stringtitle: stringenabled: boolfrom: string, to: stringprovider: gemini|ollama|dayflowtab: timeline|daily|weekly|dashboard|journal|bug_report|settingsdate_bucket: yyyy-MM-ddfrom_mode: day|week, to_mode: day|week, selected_day: yyyy-MM-ddmethod: prev|next|picker, timeline_mode: day|week, from_day: yyyy-MM-dd, to_day: yyyy-MM-ddactivity_type: string, duration_bucket: string, has_video: booltimeline_mode: day|week, timeline_day?: yyyy-MM-dd, week_start?: yyyy-MM-dd, week_end?: yyyy-MM-dd, activity_count: intquestion: string, conversation_id: uuid, is_new_conversation: bool, message_index: int, provider: gemini|codex|claude, chat_runtime: gemini_function_calling|chat_cliconversation_id: uuid, message_id: uuid, message_index: int, provider: gemini|codex|claude, chat_runtime: gemini_function_calling|chat_cli, assistant_message_length: int, assistant_has_chart: bool, assistant_message_preview: stringconversation_id: uuid, message_id: uuid, message_index: int, provider: gemini|codex|claude, chat_runtime: gemini_function_calling|chat_cli, thumb_direction: up|down, assistant_message_length: int, assistant_has_chart: bool, assistant_message_preview: string, share_logs_default: boolprovider: gemini|codex|claude, chat_runtime: gemini_function_calling|chat_cli, thumb_direction: up|down, share_logs_default: bool, share_logs_enabled: bool, feedback_message_length: int, feedback_message?: string; when share_logs_enabled=true, also include conversation_id: uuid, message_id: uuid, message_index: int, assistant_message_length: int, assistant_has_chart: bool, assistant_message_preview: stringsource: activity_card|unknown, duration_bucket: stringspeed: stringfrom_s_bucket: string, to_s_bucket: stringwatch_time_bucket: string, completion_pct_bucket: stringenabled: bool, reason: auto|unknown|onboarding|deeplink|menu_bar|main_app|user_menu_bar|user_main_app|timer_expired|wake_from_sleepsource: menu_bar|main_app|deeplink, pause_type: 15_mins|30_mins|1_hour|indefinitesource: user_menu_bar|user_main_app|timer_expired|wake_from_sleep, was_timed: bool, original_pause_type: 15_mins|30_mins|1_hour|indefinite|unknownaction: resume_recordingaction: start_recordingstop_reason: user|system_sleep|lock|screensavercode: int, retryable: booloutcome: restarted|gave_upduration_bucket: string, resolution_bucket: stringprovider: gemini|ollama|dayflow|chat_cli|unknownprovider: string, model: string, latency_ms_bucket: <500ms|0.5-1.5s|>=1.5s, outcome: success|error, error_code?: int