diff --git a/packages/ui/src/components/RunningDots.tsx b/packages/ui/src/components/RunningDots.tsx
index 801aef5a27..823dbd03fc 100644
--- a/packages/ui/src/components/RunningDots.tsx
+++ b/packages/ui/src/components/RunningDots.tsx
@@ -1,9 +1,9 @@
export function RunningDots() {
return (
-
-
-
+
+
+
);
}
diff --git a/packages/web-core/src/features/workspace-chat/ui/ConversationListContainer.tsx b/packages/web-core/src/features/workspace-chat/ui/ConversationListContainer.tsx
index 186d06043a..05d4d4dca9 100644
--- a/packages/web-core/src/features/workspace-chat/ui/ConversationListContainer.tsx
+++ b/packages/web-core/src/features/workspace-chat/ui/ConversationListContainer.tsx
@@ -10,7 +10,6 @@ import {
} from 'react';
import { useQueryClient } from '@tanstack/react-query';
import {
- CircleIcon,
SpinnerIcon,
TerminalWindowIcon,
WarningIcon,
@@ -58,6 +57,7 @@ import { ChatScriptPlaceholder } from '@vibe/ui/components/ChatScriptPlaceholder
import { ScriptFixerDialog } from '@/shared/dialogs/scripts/ScriptFixerDialog';
import { ChatForkBranches } from '@vibe/ui/components/ChatForkBranches';
import { Badge } from '@vibe/ui/components/Badge';
+import { RunningDots } from '@vibe/ui/components/RunningDots';
import { UnassignedCliSessions } from './UnassignedCliSessions';
import { shouldShowForeignWriterBanner } from '../model/foreignWriterBanner';
import { sessionsApi } from '@/shared/lib/api';
@@ -1041,12 +1041,8 @@ export const ConversationList = forwardRef<
variant="outline"
className="pointer-events-none gap-half border-border bg-primary/90 font-normal text-normal shadow-sm backdrop-blur-sm"
>
-
- {t('conversation.cliSessionActive')}
+
+ {t('conversation.cliAgentWorking')}
)}
diff --git a/packages/web-core/src/i18n/locales/en/common.json b/packages/web-core/src/i18n/locales/en/common.json
index d0ee2753ec..efabc6f4a5 100644
--- a/packages/web-core/src/i18n/locales/en/common.json
+++ b/packages/web-core/src/i18n/locales/en/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "The coding agent is running this task in chat. The terminal will take over with the same conversation as soon as it finishes — no need to repeat the prompt here.",
"agentRunningViewChat": "Watch progress in chat",
"setupRunningTitle": "Preparing the workspace",
- "setupRunningBody": "A setup script is running. The terminal will open with your prompt as soon as it finishes."
+ "setupRunningBody": "A setup script is running. The terminal will open with your prompt as soon as it finishes.",
+ "working": "Working…",
+ "idle": "Idle"
},
"loopAutomation": {
"label": "Keep going",
@@ -74,7 +76,7 @@
"thinking": "Thinking",
"assistant": "Claude",
"viaCli": "via CLI",
- "cliSessionActive": "CLI session active",
+ "cliAgentWorking": "Agent working…",
"foreignWriter": {
"message": "This conversation is being edited outside the app.",
"dismiss": "Dismiss outside-editor notice"
diff --git a/packages/web-core/src/i18n/locales/es/common.json b/packages/web-core/src/i18n/locales/es/common.json
index d638943539..9ce69d3c9a 100644
--- a/packages/web-core/src/i18n/locales/es/common.json
+++ b/packages/web-core/src/i18n/locales/es/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "El agente de código está ejecutando esta tarea en el chat. La terminal continuará con la misma conversación en cuanto termine — no hace falta repetir el prompt aquí.",
"agentRunningViewChat": "Ver progreso en el chat",
"setupRunningTitle": "Preparando el workspace",
- "setupRunningBody": "Se está ejecutando un script de configuración. La terminal se abrirá con tu prompt en cuanto termine."
+ "setupRunningBody": "Se está ejecutando un script de configuración. La terminal se abrirá con tu prompt en cuanto termine.",
+ "working": "Trabajando…",
+ "idle": "Inactivo"
},
"loopAutomation": {
"label": "Continuar",
@@ -82,7 +84,7 @@
"thinking": "Pensando",
"assistant": "Claude",
"viaCli": "vía CLI",
- "cliSessionActive": "Sesión CLI activa",
+ "cliAgentWorking": "Agente trabajando…",
"foreignWriter": {
"message": "Esta conversación se está editando fuera de la aplicación.",
"dismiss": "Cerrar aviso de edición externa"
diff --git a/packages/web-core/src/i18n/locales/fr/common.json b/packages/web-core/src/i18n/locales/fr/common.json
index befab22a1f..872d64d810 100644
--- a/packages/web-core/src/i18n/locales/fr/common.json
+++ b/packages/web-core/src/i18n/locales/fr/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "L'agent de code exécute cette tâche dans le chat. Le terminal reprendra la même conversation dès qu'il aura terminé — inutile de répéter le prompt ici.",
"agentRunningViewChat": "Suivre la progression dans le chat",
"setupRunningTitle": "Préparation de l'espace de travail",
- "setupRunningBody": "Un script d'installation est en cours d'exécution. Le terminal s'ouvrira avec votre prompt dès qu'il sera terminé."
+ "setupRunningBody": "Un script d'installation est en cours d'exécution. Le terminal s'ouvrira avec votre prompt dès qu'il sera terminé.",
+ "working": "En cours…",
+ "idle": "Inactif"
},
"loopAutomation": {
"label": "Continuer",
@@ -69,7 +71,7 @@
"thinking": "Réflexion",
"assistant": "Claude",
"viaCli": "via la CLI",
- "cliSessionActive": "Session CLI active",
+ "cliAgentWorking": "L’agent travaille…",
"foreignWriter": {
"message": "Cette conversation est en cours de modification en dehors de l'application.",
"dismiss": "Fermer l'avis de modification externe"
diff --git a/packages/web-core/src/i18n/locales/ja/common.json b/packages/web-core/src/i18n/locales/ja/common.json
index 06f59b3ea9..a6d19d0a56 100644
--- a/packages/web-core/src/i18n/locales/ja/common.json
+++ b/packages/web-core/src/i18n/locales/ja/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "コーディングエージェントがチャットでこのタスクを実行中です。完了するとターミナルが同じ会話を引き継ぎます — ここでプロンプトを繰り返す必要はありません。",
"agentRunningViewChat": "チャットで進捗を見る",
"setupRunningTitle": "ワークスペースを準備しています",
- "setupRunningBody": "セットアップスクリプトを実行中です。完了するとターミナルがプロンプトとともに開きます。"
+ "setupRunningBody": "セットアップスクリプトを実行中です。完了するとターミナルがプロンプトとともに開きます。",
+ "working": "作業中…",
+ "idle": "待機中"
},
"loopAutomation": {
"label": "継続",
@@ -82,7 +84,7 @@
"thinking": "思考中",
"assistant": "Claude",
"viaCli": "CLI 経由",
- "cliSessionActive": "CLI セッションがアクティブ",
+ "cliAgentWorking": "エージェントが作業中…",
"foreignWriter": {
"message": "この会話はアプリの外部で編集されています。",
"dismiss": "外部編集の通知を閉じる"
diff --git a/packages/web-core/src/i18n/locales/ko/common.json b/packages/web-core/src/i18n/locales/ko/common.json
index 25e24c7969..1452eb2319 100644
--- a/packages/web-core/src/i18n/locales/ko/common.json
+++ b/packages/web-core/src/i18n/locales/ko/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "코딩 에이전트가 채팅에서 이 작업을 실행 중입니다. 완료되면 터미널이 같은 대화를 이어받습니다 — 여기서 프롬프트를 반복할 필요가 없습니다.",
"agentRunningViewChat": "채팅에서 진행 상황 보기",
"setupRunningTitle": "워크스페이스를 준비하는 중",
- "setupRunningBody": "설정 스크립트가 실행 중입니다. 완료되면 터미널이 프롬프트와 함께 열립니다."
+ "setupRunningBody": "설정 스크립트가 실행 중입니다. 완료되면 터미널이 프롬프트와 함께 열립니다.",
+ "working": "작업 중…",
+ "idle": "대기 중"
},
"loopAutomation": {
"label": "계속하기",
@@ -82,7 +84,7 @@
"thinking": "생각 중",
"assistant": "Claude",
"viaCli": "CLI를 통해",
- "cliSessionActive": "CLI 세션 활성",
+ "cliAgentWorking": "에이전트가 작업 중…",
"foreignWriter": {
"message": "이 대화는 앱 외부에서 편집 중입니다.",
"dismiss": "외부 편집 알림 닫기"
diff --git a/packages/web-core/src/i18n/locales/zh-Hans/common.json b/packages/web-core/src/i18n/locales/zh-Hans/common.json
index 8429e4d685..5fc3ef1384 100644
--- a/packages/web-core/src/i18n/locales/zh-Hans/common.json
+++ b/packages/web-core/src/i18n/locales/zh-Hans/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "编码代理正在聊天中执行此任务。完成后终端将接管同一会话 — 无需在此重复提示。",
"agentRunningViewChat": "在聊天中查看进度",
"setupRunningTitle": "正在准备工作区",
- "setupRunningBody": "安装脚本正在运行。完成后终端将带着你的提示打开。"
+ "setupRunningBody": "安装脚本正在运行。完成后终端将带着你的提示打开。",
+ "working": "工作中…",
+ "idle": "空闲"
},
"loopAutomation": {
"label": "继续运行",
@@ -69,7 +71,7 @@
"thinking": "思考中",
"assistant": "Claude",
"viaCli": "通过 CLI",
- "cliSessionActive": "CLI 会话活跃",
+ "cliAgentWorking": "代理正在工作…",
"foreignWriter": {
"message": "此对话正在应用外进行编辑。",
"dismiss": "关闭外部编辑提示"
diff --git a/packages/web-core/src/i18n/locales/zh-Hant/common.json b/packages/web-core/src/i18n/locales/zh-Hant/common.json
index 94cd362ca9..933f4a8449 100644
--- a/packages/web-core/src/i18n/locales/zh-Hant/common.json
+++ b/packages/web-core/src/i18n/locales/zh-Hant/common.json
@@ -8,7 +8,9 @@
"agentRunningBody": "編碼代理正在聊天中執行此任務。完成後終端將接管同一會話 — 無需在此重複提示。",
"agentRunningViewChat": "在聊天中查看進度",
"setupRunningTitle": "正在準備工作區",
- "setupRunningBody": "安裝腳本正在執行。完成後終端將帶著你的提示開啟。"
+ "setupRunningBody": "安裝腳本正在執行。完成後終端將帶著你的提示開啟。",
+ "working": "工作中…",
+ "idle": "閒置"
},
"loopAutomation": {
"label": "繼續執行",
@@ -69,7 +71,7 @@
"thinking": "思考中",
"assistant": "Claude",
"viaCli": "透過 CLI",
- "cliSessionActive": "CLI 工作階段使用中",
+ "cliAgentWorking": "代理正在工作…",
"foreignWriter": {
"message": "此對話正在應用程式外進行編輯。",
"dismiss": "關閉外部編輯提示"
diff --git a/packages/web-core/src/pages/workspaces/CliMainPane.tsx b/packages/web-core/src/pages/workspaces/CliMainPane.tsx
index 94c3f7a2d4..bd10a30bdb 100644
--- a/packages/web-core/src/pages/workspaces/CliMainPane.tsx
+++ b/packages/web-core/src/pages/workspaces/CliMainPane.tsx
@@ -1,6 +1,10 @@
import { useEffect } from 'react';
import { useTranslation } from 'react-i18next';
-import { ChatsTeardropIcon, CircleNotchIcon } from '@phosphor-icons/react';
+import {
+ ChatsTeardropIcon,
+ CircleIcon,
+ CircleNotchIcon,
+} from '@phosphor-icons/react';
import { XTermInstance } from '@/shared/components/XTermInstance';
import { LoopAutomationControl } from '@/shared/components/LoopAutomationControl';
@@ -37,6 +41,13 @@ interface CliMainPaneProps {
* "claude is working in chat" and "preparing the workspace".
*/
codingAgentRunning?: boolean;
+ /**
+ * The CLI tmux `claude` pane is actively producing output right now (live
+ * `is_running`, executor excluded). Drives the header working/idle indicator
+ * — NOT the full-screen executor notice, so the live terminal stays visible
+ * while the agent works.
+ */
+ cliRunning?: boolean;
}
/**
@@ -55,6 +66,7 @@ export function CliMainPane({
sessionsReady = true,
executorRunning = false,
codingAgentRunning = false,
+ cliRunning = false,
}: CliMainPaneProps) {
const { t } = useTranslation('common');
const { closeTab } = useTerminal();
@@ -76,6 +88,36 @@ export function CliMainPane({
+ {sessionsReady && !executorRunning && (
+
+ {cliRunning ? (
+ <>
+
+
+ {t('cliMode.working')}
+
+ >
+ ) : (
+ <>
+
+
+ {t('cliMode.idle')}
+
+ >
+ )}
+
+ )}