diff --git a/README.md b/README.md
index 6ae0beb..19b08fc 100644
--- a/README.md
+++ b/README.md
@@ -1106,3 +1106,5 @@ MIT License
- 코워크/코드 탭의 사용자 메시지도 assistant 메시지와 같은 파일 경로 강조 렌더러를 쓰도록 바꿔, 폴더 하위 파일명이나 경로를 입력하면 채팅 본문에서 파란색으로 인식되게 맞췄다.
- 업데이트: 2026-04-05 22:29 (KST)
- AX Agent 채팅/코워크 프리셋을 선택할 때, 메시지도 입력도 없는 fresh conversation인데도 `새 대화`가 반복 생성되던 흐름을 보정했다. 이제 현재 대화가 이미 있으면 그 빈 대화에 프리셋만 적용하고, 실제 대화가 아예 없는 경우에만 새 대화를 만든다.
+- 업데이트: 2026-04-05 22:32 (KST)
+ - AX Agent 내부 설정 개발자 탭의 `워크플로우 시각화`, `전체 호출·토큰 합계 표시`, `감사 로그` 토글이 누르자마자 꺼지는 문제를 수정했다. 각 토글의 변경 이벤트를 연결해 즉시 저장되도록 보정했다.
diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md
index 20a7204..0710b3b 100644
--- a/docs/DEVELOPMENT.md
+++ b/docs/DEVELOPMENT.md
@@ -4865,3 +4865,6 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- 업데이트: 2026-04-05 22:29 (KST)
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `SelectTopic(...)`에서 fresh conversation이 이미 있는 경우에는 `StartNewConversation()`를 다시 호출하지 않도록 보정했다. 기존에는 메시지도 입력도 없는 빈 대화에서 프리셋만 눌러도 새 conversation이 계속 생성되어 좌측 목록에 `새 대화`가 누적될 수 있었다.
- 현재는 `_currentConversation` 존재 여부를 기준으로 빈 대화 재사용과 실제 신규 생성 경로를 분리해, 프리셋 클릭은 같은 새 대화 안에서 메타데이터만 갱신하도록 맞췄다.
+- 업데이트: 2026-04-05 22:32 (KST)
+ - [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `ChkOverlayWorkflowVisualizer`, `ChkOverlayShowTotalCallStats`, `ChkOverlayEnableAuditLog`에 `Checked/Unchecked` 이벤트를 연결했다.
+ - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)에 각 토글 전용 저장 handler를 추가해, 개발자 탭 옵션이 눌린 직후 오버레이 재동기화로 기본값으로 되돌아가던 문제를 해결했다.
diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml
index 20ff680..907ae20 100644
--- a/src/AxCopilot/Views/ChatWindow.xaml
+++ b/src/AxCopilot/Views/ChatWindow.xaml
@@ -4134,7 +4134,9 @@
+ Style="{StaticResource ToggleSwitch}"
+ Checked="ChkOverlayWorkflowVisualizer_Changed"
+ Unchecked="ChkOverlayWorkflowVisualizer_Changed"/>
@@ -4154,7 +4156,9 @@
+ Style="{StaticResource ToggleSwitch}"
+ Checked="ChkOverlayShowTotalCallStats_Changed"
+ Unchecked="ChkOverlayShowTotalCallStats_Changed"/>
@@ -4174,7 +4178,9 @@
+ Style="{StaticResource ToggleSwitch}"
+ Checked="ChkOverlayEnableAuditLog_Changed"
+ Unchecked="ChkOverlayEnableAuditLog_Changed"/>
diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs
index f3e3d56..2476770 100644
--- a/src/AxCopilot/Views/ChatWindow.xaml.cs
+++ b/src/AxCopilot/Views/ChatWindow.xaml.cs
@@ -15164,6 +15164,33 @@ public partial class ChatWindow : Window
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
}
+ private void ChkOverlayWorkflowVisualizer_Changed(object sender, RoutedEventArgs e)
+ {
+ if (_isOverlaySettingsSyncing || ChkOverlayWorkflowVisualizer == null)
+ return;
+
+ _settings.Settings.Llm.WorkflowVisualizer = ChkOverlayWorkflowVisualizer.IsChecked == true;
+ PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
+ }
+
+ private void ChkOverlayShowTotalCallStats_Changed(object sender, RoutedEventArgs e)
+ {
+ if (_isOverlaySettingsSyncing || ChkOverlayShowTotalCallStats == null)
+ return;
+
+ _settings.Settings.Llm.ShowTotalCallStats = ChkOverlayShowTotalCallStats.IsChecked == true;
+ PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
+ }
+
+ private void ChkOverlayEnableAuditLog_Changed(object sender, RoutedEventArgs e)
+ {
+ if (_isOverlaySettingsSyncing || ChkOverlayEnableAuditLog == null)
+ return;
+
+ _settings.Settings.Llm.EnableAuditLog = ChkOverlayEnableAuditLog.IsChecked == true;
+ PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
+ }
+
private void OverlayNav_Checked(object sender, RoutedEventArgs e)
{
if (sender is not RadioButton rb || rb.Tag is not string tag)