From 31d156d7685c900598253f1b0c10df5b77f9a3ea Mon Sep 17 00:00:00 2001
From: Hikari
Date: Wed, 11 Mar 2026 11:40:21 -0700
Subject: [PATCH] feat: display per-agent model override in agent monitor tree
Parse the model field from Agent/Task tool input and surface it in the
agent monitor panel as a purple subtitle, so users can immediately see
which agents are running on a non-default model.
Closes #207
---
src-tauri/src/types.rs | 2 ++
src-tauri/src/wsl_bridge.rs | 10 ++++++++--
src/lib/components/AgentMonitorPanel.svelte | 7 +++++++
src/lib/stores/agents.test.ts | 16 ++++++++++++++++
src/lib/tauri.ts | 2 ++
src/lib/types/agents.ts | 2 ++
6 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/src-tauri/src/types.rs b/src-tauri/src/types.rs
index 8fa1a9e..93fcf27 100644
--- a/src-tauri/src/types.rs
+++ b/src-tauri/src/types.rs
@@ -292,6 +292,8 @@ pub struct AgentStartEvent {
pub conversation_id: Option,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_tool_use_id: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub model: Option,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
diff --git a/src-tauri/src/wsl_bridge.rs b/src-tauri/src/wsl_bridge.rs
index 7fffbda..38bacd3 100644
--- a/src-tauri/src/wsl_bridge.rs
+++ b/src-tauri/src/wsl_bridge.rs
@@ -1301,14 +1301,19 @@ fn process_json_line(
.and_then(|v| v.as_str())
.unwrap_or("unknown")
.to_string();
+ let model = input
+ .get("model")
+ .and_then(|v| v.as_str())
+ .filter(|s| !s.is_empty())
+ .map(|s| s.to_string());
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as u64;
tracing::debug!(
- "Emitting agent-start: id={}, desc={}, type={}, parent={:?}",
- id, description, subagent_type, parent_tool_use_id
+ "Emitting agent-start: id={}, desc={}, type={}, model={:?}, parent={:?}",
+ id, description, subagent_type, model, parent_tool_use_id
);
let _ = app.emit(
@@ -1318,6 +1323,7 @@ fn process_json_line(
agent_id: None, // Will be updated when SubagentStart hook is received
description,
subagent_type,
+ model,
started_at: now,
conversation_id: conversation_id.clone(),
parent_tool_use_id: parent_tool_use_id.clone(),
diff --git a/src/lib/components/AgentMonitorPanel.svelte b/src/lib/components/AgentMonitorPanel.svelte
index dd30635..db6eac6 100644
--- a/src/lib/components/AgentMonitorPanel.svelte
+++ b/src/lib/components/AgentMonitorPanel.svelte
@@ -309,6 +309,13 @@
{agent.description}
+
+ {#if agent.model}
+
+ ✦ {agent.model}
+
+ {/if}
+
{#if agent.status === "running"}
diff --git a/src/lib/stores/agents.test.ts b/src/lib/stores/agents.test.ts
index d9f5dd1..e6afa9e 100644
--- a/src/lib/stores/agents.test.ts
+++ b/src/lib/stores/agents.test.ts
@@ -43,6 +43,22 @@ describe("agents store", () => {
expect(agents[0]).toMatchObject(agent);
});
+ it("preserves model field when provided", () => {
+ const agent = createMockAgent({ model: "claude-opus-4-6" });
+ agentStore.addAgent(conversationId, agent);
+
+ const agents = get(getAgentsForConversation(conversationId));
+ expect(agents[0].model).toBe("claude-opus-4-6");
+ });
+
+ it("leaves model undefined when not provided", () => {
+ const agent = createMockAgent();
+ agentStore.addAgent(conversationId, agent);
+
+ const agents = get(getAgentsForConversation(conversationId));
+ expect(agents[0].model).toBeUndefined();
+ });
+
it("assigns a character name and avatar to added agents", () => {
const agent = createMockAgent();
agentStore.addAgent(conversationId, agent);
diff --git a/src/lib/tauri.ts b/src/lib/tauri.ts
index cb0c501..ad1f434 100644
--- a/src/lib/tauri.ts
+++ b/src/lib/tauri.ts
@@ -515,6 +515,7 @@ export async function initializeTauriListeners() {
agent_id,
description,
subagent_type,
+ model,
started_at,
conversation_id,
parent_tool_use_id,
@@ -526,6 +527,7 @@ export async function initializeTauriListeners() {
agentId: agent_id,
description,
subagentType: subagent_type,
+ model,
startedAt: started_at,
status: "running",
parentToolUseId: parent_tool_use_id,
diff --git a/src/lib/types/agents.ts b/src/lib/types/agents.ts
index 1803cbb..caf572c 100644
--- a/src/lib/types/agents.ts
+++ b/src/lib/types/agents.ts
@@ -6,6 +6,7 @@ export interface AgentInfo {
agentType?: string;
description: string;
subagentType: string;
+ model?: string;
startedAt: number;
endedAt?: number;
status: AgentStatus;
@@ -21,6 +22,7 @@ export interface AgentStartPayload {
agent_id?: string;
description: string;
subagent_type: string;
+ model?: string;
started_at: number;
conversation_id?: string;
parent_tool_use_id?: string;