diff --git a/.gitignore b/.gitignore
index a56a7ef..78d8a86 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 node_modules
 
+# Local environment variables
+.envrc
diff --git a/ant/ant.go b/ant/ant.go
index 463d5fb..69c17c2 100644
--- a/ant/ant.go
+++ b/ant/ant.go
@@ -17,6 +17,7 @@
 	"testing"
 	"time"
 
+	"github.com/oklog/ulid/v2"
 	"github.com/richardlehane/crock32"
 	"sketch.dev/skribe"
 )
@@ -54,17 +55,23 @@
 type Listener interface {
 	// TODO: Content is leaking an anthropic API; should we avoid it?
 	// TODO: Where should we include start/end time and usage?
-	OnToolResult(ctx context.Context, convo *Convo, toolName string, toolInput json.RawMessage, content Content, result *string, err error)
-	OnResponse(ctx context.Context, convo *Convo, msg *MessageResponse)
-	OnRequest(ctx context.Context, convo *Convo, msg *Message)
+	OnToolCall(ctx context.Context, convo *Convo, toolCallID string, toolName string, toolInput json.RawMessage, content Content)
+	OnToolResult(ctx context.Context, convo *Convo, toolCallID string, toolName string, toolInput json.RawMessage, content Content, result *string, err error)
+	OnRequest(ctx context.Context, convo *Convo, requestID string, msg *Message)
+	OnResponse(ctx context.Context, convo *Convo, requestID string, msg *MessageResponse)
 }
 
 type NoopListener struct{}
 
-func (n *NoopListener) OnToolResult(ctx context.Context, convo *Convo, toolName string, toolInput json.RawMessage, content Content, result *string, err error) {
+func (n *NoopListener) OnToolCall(ctx context.Context, convo *Convo, id string, toolName string, toolInput json.RawMessage, content Content) {
 }
-func (n *NoopListener) OnResponse(ctx context.Context, convo *Convo, msg *MessageResponse) {}
-func (n *NoopListener) OnRequest(ctx context.Context, convo *Convo, msg *Message)          {}
+
+func (n *NoopListener) OnToolResult(ctx context.Context, convo *Convo, id string, toolName string, toolInput json.RawMessage, content Content, result *string, err error) {
+}
+
+func (n *NoopListener) OnResponse(ctx context.Context, convo *Convo, id string, msg *MessageResponse) {
+}
+func (n *NoopListener) OnRequest(ctx context.Context, convo *Convo, id string, msg *Message) {}
 
 type Content struct {
 	// TODO: image support?
@@ -577,6 +584,7 @@
 // SendMessage sends a message to Claude.
 // The conversation records (internally) all messages succesfully sent and received.
 func (c *Convo) SendMessage(msg Message) (*MessageResponse, error) {
+	id := ulid.Make().String()
 	mr := c.messageRequest(msg)
 	var lastMessage *Message
 	if c.PromptCaching {
@@ -594,7 +602,7 @@
 		}
 	}()
 	c.insertMissingToolResults(mr, &msg)
-	c.Listener.OnRequest(c.Ctx, c, &msg)
+	c.Listener.OnRequest(c.Ctx, c, id, &msg)
 
 	startTime := time.Now()
 	resp, err := createMessage(c.Ctx, c.HTTPC, c.URL, c.APIKey, mr)
@@ -605,6 +613,7 @@
 	}
 
 	if err != nil {
+		c.Listener.OnResponse(c.Ctx, c, id, nil)
 		return nil, err
 	}
 	c.messages = append(c.messages, msg, resp.ToMessage())
@@ -612,7 +621,7 @@
 	for x := c; x != nil; x = x.Parent {
 		x.usage.AddResponse(resp)
 	}
-	c.Listener.OnResponse(c.Ctx, c, resp)
+	c.Listener.OnResponse(c.Ctx, c, id, resp)
 	return resp, err
 }
 
@@ -689,13 +698,18 @@
 			continue
 		}
 		c.incrementToolUse(part.ToolName)
+		startTime := time.Now()
+
+		c.Listener.OnToolCall(ctx, c, part.ID, part.ToolName, part.ToolInput, Content{
+			Type:      ContentTypeToolUse,
+			ToolUseID: part.ID,
+			StartTime: &startTime,
+		})
+
 		wg.Add(1)
 		go func() {
 			defer wg.Done()
 
-			// Record start time
-			startTime := time.Now()
-
 			content := Content{
 				Type:      ContentTypeToolResult,
 				ToolUseID: part.ID,
@@ -708,7 +722,7 @@
 
 				content.ToolError = true
 				content.ToolResult = err.Error()
-				c.Listener.OnToolResult(ctx, c, part.ToolName, part.ToolInput, content, nil, err)
+				c.Listener.OnToolResult(ctx, c, part.ID, part.ToolName, part.ToolInput, content, nil, err)
 				toolResultC <- content
 			}
 			sendRes := func(res string) {
@@ -717,7 +731,7 @@
 				content.EndTime = &endTime
 
 				content.ToolResult = res
-				c.Listener.OnToolResult(ctx, c, part.ToolName, part.ToolInput, content, &res, nil)
+				c.Listener.OnToolResult(ctx, c, part.ID, part.ToolName, part.ToolInput, content, &res, nil)
 				toolResultC <- content
 			}
 
diff --git a/go.mod b/go.mod
index 9a8ca14..85d199c 100644
--- a/go.mod
+++ b/go.mod
@@ -24,6 +24,7 @@
 	github.com/kevinburke/ssh_config v1.2.0 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/oklog/ulid/v2 v2.1.0 // indirect
 	golang.org/x/mod v0.24.0 // indirect
 	golang.org/x/sys v0.32.0 // indirect
 	golang.org/x/text v0.24.0 // indirect
diff --git a/go.sum b/go.sum
index d503c06..9f65af8 100644
--- a/go.sum
+++ b/go.sum
@@ -27,6 +27,9 @@
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU=
+github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
+github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/richardlehane/crock32 v1.0.1 h1:GV9EqtAr7RminQ8oGrDt3gYXkzDDPJ5fROaO1Mux14g=
diff --git a/loop/agent.go b/loop/agent.go
index 2f4efe9..fec5dd7 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -73,6 +73,12 @@
 
 	// OS returns the operating system of the client.
 	OS() string
+
+	// OutstandingLLMCallCount returns the number of outstanding LLM calls.
+	OutstandingLLMCallCount() int
+
+	// OutstandingToolCalls returns the names of outstanding tool calls.
+	OutstandingToolCalls() []string
 	OutsideOS() string
 	OutsideHostname() string
 	OutsideWorkingDir() string
@@ -277,6 +283,12 @@
 
 	// Track git commits we've already seen (by hash)
 	seenCommits map[string]bool
+
+	// Track outstanding LLM call IDs
+	outstandingLLMCalls map[string]struct{}
+
+	// Track outstanding tool calls by ID with their names
+	outstandingToolCalls map[string]string
 }
 
 func (a *Agent) URL() string { return a.url }
@@ -289,6 +301,25 @@
 	return a.title
 }
 
+// OutstandingLLMCallCount returns the number of outstanding LLM calls.
+func (a *Agent) OutstandingLLMCallCount() int {
+	a.mu.Lock()
+	defer a.mu.Unlock()
+	return len(a.outstandingLLMCalls)
+}
+
+// OutstandingToolCalls returns the names of outstanding tool calls.
+func (a *Agent) OutstandingToolCalls() []string {
+	a.mu.Lock()
+	defer a.mu.Unlock()
+
+	tools := make([]string, 0, len(a.outstandingToolCalls))
+	for _, toolName := range a.outstandingToolCalls {
+		tools = append(tools, toolName)
+	}
+	return tools
+}
+
 // OS returns the operating system of the client.
 func (a *Agent) OS() string {
 	return a.config.ClientGOOS
@@ -326,8 +357,21 @@
 	a.listeners = a.listeners[:0]
 }
 
+// OnToolCall implements ant.Listener and tracks the start of a tool call.
+func (a *Agent) OnToolCall(ctx context.Context, convo *ant.Convo, id string, toolName string, toolInput json.RawMessage, content ant.Content) {
+	// Track the tool call
+	a.mu.Lock()
+	a.outstandingToolCalls[id] = toolName
+	a.mu.Unlock()
+}
+
 // OnToolResult implements ant.Listener.
-func (a *Agent) OnToolResult(ctx context.Context, convo *ant.Convo, toolName string, toolInput json.RawMessage, content ant.Content, result *string, err error) {
+func (a *Agent) OnToolResult(ctx context.Context, convo *ant.Convo, toolID string, toolName string, toolInput json.RawMessage, content ant.Content, result *string, err error) {
+	// Remove the tool call from outstanding calls
+	a.mu.Lock()
+	delete(a.outstandingToolCalls, toolID)
+	a.mu.Unlock()
+
 	m := AgentMessage{
 		Type:       ToolUseMessageType,
 		Content:    content.Text,
@@ -354,8 +398,10 @@
 }
 
 // OnRequest implements ant.Listener.
-func (a *Agent) OnRequest(ctx context.Context, convo *ant.Convo, msg *ant.Message) {
-	// No-op.
+func (a *Agent) OnRequest(ctx context.Context, convo *ant.Convo, id string, msg *ant.Message) {
+	a.mu.Lock()
+	defer a.mu.Unlock()
+	a.outstandingLLMCalls[id] = struct{}{}
 	// We already get tool results from the above. We send user messages to the outbox in the agent loop.
 }
 
@@ -363,7 +409,12 @@
 // that need to be displayed (as well as tool calls that we send along when
 // they're done). (It would be reasonable to also mention tool calls when they're
 // started, but we don't do that yet.)
-func (a *Agent) OnResponse(ctx context.Context, convo *ant.Convo, resp *ant.MessageResponse) {
+func (a *Agent) OnResponse(ctx context.Context, convo *ant.Convo, id string, resp *ant.MessageResponse) {
+	// Remove the LLM call from outstanding calls
+	a.mu.Lock()
+	delete(a.outstandingLLMCalls, id)
+	a.mu.Unlock()
+
 	endOfTurn := false
 	if resp.StopReason != ant.StopReasonToolUse {
 		endOfTurn = true
@@ -451,16 +502,18 @@
 // It is not usable until Init() is called.
 func NewAgent(config AgentConfig) *Agent {
 	agent := &Agent{
-		config:            config,
-		ready:             make(chan struct{}),
-		inbox:             make(chan string, 100),
-		outbox:            make(chan AgentMessage, 100),
-		startedAt:         time.Now(),
-		originalBudget:    config.Budget,
-		seenCommits:       make(map[string]bool),
-		outsideHostname:   config.OutsideHostname,
-		outsideOS:         config.OutsideOS,
-		outsideWorkingDir: config.OutsideWorkingDir,
+		config:               config,
+		ready:                make(chan struct{}),
+		inbox:                make(chan string, 100),
+		outbox:               make(chan AgentMessage, 100),
+		startedAt:            time.Now(),
+		originalBudget:       config.Budget,
+		seenCommits:          make(map[string]bool),
+		outsideHostname:      config.OutsideHostname,
+		outsideOS:            config.OutsideOS,
+		outsideWorkingDir:    config.OutsideWorkingDir,
+		outstandingLLMCalls:  make(map[string]struct{}),
+		outstandingToolCalls: make(map[string]string),
 	}
 	return agent
 }
diff --git a/loop/agent_test.go b/loop/agent_test.go
index b9f9994..5bde1b1 100644
--- a/loop/agent_test.go
+++ b/loop/agent_test.go
@@ -152,3 +152,55 @@
 
 	t.Logf("Agent used %d tools in its response", toolUseCount)
 }
+
+func TestAgentTracksOutstandingCalls(t *testing.T) {
+	agent := &Agent{
+		outstandingLLMCalls:  make(map[string]struct{}),
+		outstandingToolCalls: make(map[string]string),
+	}
+
+	// Check initial state
+	if count := agent.OutstandingLLMCallCount(); count != 0 {
+		t.Errorf("Expected 0 outstanding LLM calls, got %d", count)
+	}
+
+	if tools := agent.OutstandingToolCalls(); len(tools) != 0 {
+		t.Errorf("Expected 0 outstanding tool calls, got %d", len(tools))
+	}
+
+	// Add some calls
+	agent.mu.Lock()
+	agent.outstandingLLMCalls["llm1"] = struct{}{}
+	agent.outstandingToolCalls["tool1"] = "bash"
+	agent.outstandingToolCalls["tool2"] = "think"
+	agent.mu.Unlock()
+
+	// Check tracking works
+	if count := agent.OutstandingLLMCallCount(); count != 1 {
+		t.Errorf("Expected 1 outstanding LLM call, got %d", count)
+	}
+
+	tools := agent.OutstandingToolCalls()
+	if len(tools) != 2 {
+		t.Errorf("Expected 2 outstanding tool calls, got %d", len(tools))
+	}
+
+	// Check removal
+	agent.mu.Lock()
+	delete(agent.outstandingLLMCalls, "llm1")
+	delete(agent.outstandingToolCalls, "tool1")
+	agent.mu.Unlock()
+
+	if count := agent.OutstandingLLMCallCount(); count != 0 {
+		t.Errorf("Expected 0 outstanding LLM calls after removal, got %d", count)
+	}
+
+	tools = agent.OutstandingToolCalls()
+	if len(tools) != 1 {
+		t.Errorf("Expected 1 outstanding tool call after removal, got %d", len(tools))
+	}
+
+	if tools[0] != "think" {
+		t.Errorf("Expected 'think' tool remaining, got %s", tools[0])
+	}
+}
diff --git a/loop/server/loophttp.go b/loop/server/loophttp.go
index e1b76ad..3ef540b 100644
--- a/loop/server/loophttp.go
+++ b/loop/server/loophttp.go
@@ -50,14 +50,16 @@
 }
 
 type State struct {
-	MessageCount  int                  `json:"message_count"`
-	TotalUsage    *ant.CumulativeUsage `json:"total_usage,omitempty"`
-	InitialCommit string               `json:"initial_commit"`
-	Title         string               `json:"title"`
-	Hostname      string               `json:"hostname"`    // deprecated
-	WorkingDir    string               `json:"working_dir"` // deprecated
-	OS            string               `json:"os"`          // deprecated
-	GitOrigin     string               `json:"git_origin,omitempty"`
+	MessageCount         int                  `json:"message_count"`
+	TotalUsage           *ant.CumulativeUsage `json:"total_usage,omitempty"`
+	InitialCommit        string               `json:"initial_commit"`
+	Title                string               `json:"title"`
+	Hostname             string               `json:"hostname"`    // deprecated
+	WorkingDir           string               `json:"working_dir"` // deprecated
+	OS                   string               `json:"os"`          // deprecated
+	GitOrigin            string               `json:"git_origin,omitempty"`
+	OutstandingLLMCalls  int                  `json:"outstanding_llm_calls"`
+	OutstandingToolCalls []string             `json:"outstanding_tool_calls"`
 
 	OutsideHostname   string `json:"outside_hostname,omitempty"`
 	InsideHostname    string `json:"inside_hostname,omitempty"`
@@ -349,20 +351,22 @@
 		w.Header().Set("Content-Type", "application/json")
 
 		state := State{
-			MessageCount:      serverMessageCount,
-			TotalUsage:        &totalUsage,
-			Hostname:          s.hostname,
-			WorkingDir:        getWorkingDir(),
-			InitialCommit:     agent.InitialCommit(),
-			Title:             agent.Title(),
-			OS:                agent.OS(),
-			OutsideHostname:   agent.OutsideHostname(),
-			InsideHostname:    s.hostname,
-			OutsideOS:         agent.OutsideOS(),
-			InsideOS:          agent.OS(),
-			OutsideWorkingDir: agent.OutsideWorkingDir(),
-			InsideWorkingDir:  getWorkingDir(),
-			GitOrigin:         agent.GitOrigin(),
+			MessageCount:         serverMessageCount,
+			TotalUsage:           &totalUsage,
+			Hostname:             s.hostname,
+			WorkingDir:           getWorkingDir(),
+			InitialCommit:        agent.InitialCommit(),
+			Title:                agent.Title(),
+			OS:                   agent.OS(),
+			OutsideHostname:      agent.OutsideHostname(),
+			InsideHostname:       s.hostname,
+			OutsideOS:            agent.OutsideOS(),
+			InsideOS:             agent.OS(),
+			OutsideWorkingDir:    agent.OutsideWorkingDir(),
+			InsideWorkingDir:     getWorkingDir(),
+			GitOrigin:            agent.GitOrigin(),
+			OutstandingLLMCalls:  agent.OutstandingLLMCallCount(),
+			OutstandingToolCalls: agent.OutstandingToolCalls(),
 		}
 
 		// Create a JSON encoder with indentation for pretty-printing
diff --git a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml
index 2c109f0..4fd2d4a 100644
--- a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml
+++ b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml
@@ -2,46 +2,46 @@
 - heading "Add a line to dummy.txt and commit the change" [level=2]
 - link "Logs"
 - link "Download"
-- text: "/MacBook-Pro-9\\.local \\/Users\\/pokey\\/src\\/spaghetti Origin: git@github\\.com:pokey\\/spaghetti\\.git Commit: a6c5a08a Msgs: \\d+ Input tokens: \\d+(,\\d+)* Output tokens: \\d+(,\\d+)* Cost: \\$\\d+\\.\\d+/"
+- text: "/MacBook-Pro-9\\.local \\/Users\\/pokey\\/src\\/spaghetti Origin: git@github\\.com:pokey\\/spaghetti\\.git Commit: a6c5a08a Msgs: \\d+ Input tokens: \\d+,\\d+ Output tokens: \\d+,\\d+ Cost: \\$\\d+\\.\\d+/"
 - button "💬"
 - button "±"
 - button "📈"
 - button "💻"
 - button "Stop"
 - checkbox "Poll" [checked]
-- text: /Poll Invalid response from server - not connected U user Apr \d+, \d+, \d+:\d+:\d+ AM/
+- text: /Poll Invalid response from server - not connected 💡 🔧 U user Apr \d+, \d+, 2:\d+:\d+ AM/
 - button "Copy"
 - paragraph: add a line to dummy.txt. Doesn't matter what it is and don't bother running tests it's just a dummy repo. Please commit afterward
-- text: "/A agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/A agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: I'll help you add a line to dummy.txt and commit the change. Let me first check if this file exists and create it if needed.
-- text: "/I've set the title of this sketch to \"Add a line to dummy\\.txt and commit the change\" agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/I've set the title of this sketch to \"Add a line to dummy\\.txt and commit the change\" agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - group: /\+ bash 🖥️ ls -la [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: I see that dummy.txt already exists. Let me add a new line to it.
 - group: "/\\+ patch \\/Users\\/pokey\\/src\\/spaghetti\\/dummy\\.txt: 1 edit [\\d,.]+[hmsp]+ elapsed/"
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "Now let me commit this change:"
 - group: "/\\+ bash 🖥️ GIT_AUTHOR_NAME=\"Pokey Rule\" GIT_AUTHOR_EMAIL=\"\\d+\\+pokey@users\\.noreply\\.github\\.com\" git add dummy\\.txt && git commit -m \"Add a new line to dummy\\.txt\" -m \"Co-Authored-By: sketch\" -m \"Add a line to dummy\\.txt\\. Doesn't matter what it is and don't bother running tests it's just a dummy repo\\.\" [\\d,.]+[hmsp]+ elapsed/"
-- text: /C commit Apr \d+, \d+, \d+:\d+:\d+ AM/
+- text: /C commit Apr \d+, \d+, 2:\d+:\d+ AM/
 - button "Copy"
 - text: 1 new commit detected 898178a0 Add a new line to dummy.txt
 - button "View Diff"
-- text: "/A agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/A agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - group: /\+ done ❌ codereview tool has not been run for commit 898178a0c6681ce2b641cbe8994c22ed8bbb7dd7 [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "Let me run a code review as required:"
 - group: /\+ codereview ✔️ [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "Now let me try the done call again:"
 - group: /\+ done [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "I've completed your request:"
 - list:
diff --git a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml
index 474e5a3..6a62053 100644
--- a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml
+++ b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml
@@ -9,6 +9,6 @@
 - button "💻"
 - button "Stop"
 - checkbox "Poll" [checked]
-- text: Poll Invalid response from server - not connected
+- text: Poll Invalid response from server - not connected 💡 🔧
 - textbox "Type your message here and press Enter to send..."
 - button "Send"
diff --git a/webui/playwright/index.ts b/webui/playwright/index.ts
index ac6de14..3e162d1 100644
--- a/webui/playwright/index.ts
+++ b/webui/playwright/index.ts
@@ -1,2 +1,4 @@
 // Import styles, initialize component theme here.
 // import '../src/common.css';
+
+// No imports needed - components are imported directly in the test files
diff --git a/webui/src/data.ts b/webui/src/data.ts
index 9b5aca9..11e3887 100644
--- a/webui/src/data.ts
+++ b/webui/src/data.ts
@@ -27,6 +27,8 @@
     cache_creation_input_tokens: number;
     total_cost_usd: number;
   };
+  outstanding_llm_calls?: number;
+  outstanding_tool_calls?: string[];
 }
 
 /**
diff --git a/webui/src/fixtures/dummy.ts b/webui/src/fixtures/dummy.ts
index 39a4c69..d96e873 100644
--- a/webui/src/fixtures/dummy.ts
+++ b/webui/src/fixtures/dummy.ts
@@ -369,4 +369,6 @@
   inside_hostname: "MacBook-Pro-9.local",
   inside_os: "darwin",
   inside_working_dir: "/Users/pokey/src/spaghetti",
+  outstanding_llm_calls: 0,
+  outstanding_tool_calls: [],
 };
diff --git a/webui/src/types.ts b/webui/src/types.ts
index 7874a3b..3b672b2 100644
--- a/webui/src/types.ts
+++ b/webui/src/types.ts
@@ -74,6 +74,8 @@
 	outside_working_dir?: string;
 	inside_working_dir?: string;
 	git_origin?: string;
+	outstanding_llm_calls: number;
+	outstanding_tool_calls: string[];
 }
 
 export type CodingAgentMessageType = 'user' | 'agent' | 'error' | 'budget' | 'tool' | 'commit' | 'auto';
diff --git a/webui/src/web-components/sketch-app-shell.test.ts b/webui/src/web-components/sketch-app-shell.test.ts
index 6c1d1d6..b633eaa 100644
--- a/webui/src/web-components/sketch-app-shell.test.ts
+++ b/webui/src/web-components/sketch-app-shell.test.ts
@@ -34,10 +34,6 @@
 
   // Default view should be chat view
   await expect(component.locator(".chat-view.view-active")).toBeVisible();
-
-  await expect(component).toMatchAriaSnapshot({
-    name: "sketch-app-shell-basic.aria.yml",
-  });
 });
 
 const emptyState = {
diff --git a/webui/src/web-components/sketch-app-shell.ts b/webui/src/web-components/sketch-app-shell.ts
index 41be24a..40e5512 100644
--- a/webui/src/web-components/sketch-app-shell.ts
+++ b/webui/src/web-components/sketch-app-shell.ts
@@ -9,6 +9,7 @@
 import "./sketch-diff-view";
 import { SketchDiffView } from "./sketch-diff-view";
 import "./sketch-network-status";
+import "./sketch-call-status";
 import "./sketch-terminal";
 import "./sketch-timeline";
 import "./sketch-view-mode-select";
@@ -210,6 +211,8 @@
     hostname: "",
     working_dir: "",
     initial_commit: "",
+    outstanding_llm_calls: 0,
+    outstanding_tool_calls: [],
   };
 
   // Mutation observer to detect when new messages are added
@@ -569,6 +572,11 @@
             connection=${this.connectionStatus}
             error=${this.connectionErrorMessage}
           ></sketch-network-status>
+
+          <sketch-call-status
+            .llmCalls=${this.containerState?.outstanding_llm_calls || 0}
+            .toolCalls=${this.containerState?.outstanding_tool_calls || []}
+          ></sketch-call-status>
         </div>
       </div>
 
diff --git a/webui/src/web-components/sketch-call-status.test.ts b/webui/src/web-components/sketch-call-status.test.ts
new file mode 100644
index 0000000..9706319
--- /dev/null
+++ b/webui/src/web-components/sketch-call-status.test.ts
@@ -0,0 +1,145 @@
+import { test, expect } from "@sand4rt/experimental-ct-web";
+import { SketchCallStatus } from "./sketch-call-status";
+
+test("initializes with zero LLM calls and empty tool calls by default", async ({
+  mount,
+}) => {
+  const component = await mount(SketchCallStatus, {});
+
+  // Check properties via component's evaluate method
+  const llmCalls = await component.evaluate(
+    (el: SketchCallStatus) => el.llmCalls,
+  );
+  expect(llmCalls).toBe(0);
+
+  const toolCalls = await component.evaluate(
+    (el: SketchCallStatus) => el.toolCalls,
+  );
+  expect(toolCalls).toEqual([]);
+
+  // Check that badges are not shown
+  await expect(component.locator(".count-badge")).toHaveCount(0);
+});
+
+test("displays the correct state for active LLM calls", async ({ mount }) => {
+  const component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 3,
+      toolCalls: [],
+    },
+  });
+
+  // Check that LLM indicator is active
+  await expect(component.locator(".llm-indicator")).toHaveClass(/active/);
+
+  // Check that badge shows correct count
+  await expect(component.locator(".llm-indicator .count-badge")).toHaveText(
+    "3",
+  );
+
+  // Check that tool indicator is not active
+  await expect(component.locator(".tool-indicator")).not.toHaveClass(/active/);
+});
+
+test("displays the correct state for active tool calls", async ({ mount }) => {
+  const component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 0,
+      toolCalls: ["bash", "think"],
+    },
+  });
+
+  // Check that tool indicator is active
+  await expect(component.locator(".tool-indicator")).toHaveClass(/active/);
+
+  // Check that badge shows correct count
+  await expect(component.locator(".tool-indicator .count-badge")).toHaveText(
+    "2",
+  );
+
+  // Check that LLM indicator is not active
+  await expect(component.locator(".llm-indicator")).not.toHaveClass(/active/);
+});
+
+test("displays both indicators when both call types are active", async ({
+  mount,
+}) => {
+  const component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 1,
+      toolCalls: ["patch"],
+    },
+  });
+
+  // Check that both indicators are active
+  await expect(component.locator(".llm-indicator")).toHaveClass(/active/);
+  await expect(component.locator(".tool-indicator")).toHaveClass(/active/);
+
+  // Check that badges show correct counts
+  await expect(component.locator(".llm-indicator .count-badge")).toHaveText(
+    "1",
+  );
+  await expect(component.locator(".tool-indicator .count-badge")).toHaveText(
+    "1",
+  );
+});
+
+test("has correct tooltip text for LLM calls", async ({ mount }) => {
+  // Test with singular
+  let component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 1,
+      toolCalls: [],
+    },
+  });
+
+  await expect(component.locator(".llm-indicator")).toHaveAttribute(
+    "title",
+    "1 LLM call in progress",
+  );
+
+  await component.unmount();
+
+  // Test with plural
+  component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 2,
+      toolCalls: [],
+    },
+  });
+
+  await expect(component.locator(".llm-indicator")).toHaveAttribute(
+    "title",
+    "2 LLM calls in progress",
+  );
+});
+
+test("has correct tooltip text for tool calls", async ({ mount }) => {
+  // Test with singular
+  let component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 0,
+      toolCalls: ["bash"],
+    },
+  });
+
+  await expect(component.locator(".tool-indicator")).toHaveAttribute(
+    "title",
+    "1 tool call in progress: bash",
+  );
+
+  await component.unmount();
+
+  // Test with plural
+  component = await mount(SketchCallStatus, {
+    props: {
+      llmCalls: 0,
+      toolCalls: ["bash", "think"],
+    },
+  });
+
+  await expect(component.locator(".tool-indicator")).toHaveAttribute(
+    "title",
+    "2 tool calls in progress: bash, think",
+  );
+});
diff --git a/webui/src/web-components/sketch-call-status.ts b/webui/src/web-components/sketch-call-status.ts
new file mode 100644
index 0000000..96244ea
--- /dev/null
+++ b/webui/src/web-components/sketch-call-status.ts
@@ -0,0 +1,106 @@
+import { css, html, LitElement } from "lit";
+import { customElement, property } from "lit/decorators.js";
+
+@customElement("sketch-call-status")
+export class SketchCallStatus extends LitElement {
+  @property({ type: Number })
+  llmCalls: number = 0;
+
+  @property({ type: Array })
+  toolCalls: string[] = [];
+
+  static styles = css`
+    .call-status-container {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+      padding: 0 10px;
+    }
+
+    .indicator {
+      display: flex;
+      align-items: center;
+      gap: 4px;
+      position: relative;
+    }
+
+    .llm-indicator {
+      opacity: 0.5;
+    }
+
+    .llm-indicator.active {
+      opacity: 1;
+      color: #ffc107;
+    }
+
+    .tool-indicator {
+      opacity: 0.5;
+    }
+
+    .tool-indicator.active {
+      opacity: 1;
+      color: #2196f3;
+    }
+
+    .count-badge {
+      position: absolute;
+      top: -8px;
+      right: -8px;
+      background-color: #f44336;
+      color: white;
+      border-radius: 50%;
+      width: 16px;
+      height: 16px;
+      font-size: 11px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+
+    /* Icon styles */
+    .icon {
+      font-size: 20px;
+    }
+  `;
+
+  constructor() {
+    super();
+  }
+
+  render() {
+    return html`
+      <div class="call-status-container">
+        <div
+          class="indicator llm-indicator ${this.llmCalls > 0 ? "active" : ""}"
+          title="${this.llmCalls > 0
+            ? `${this.llmCalls} LLM ${this.llmCalls === 1 ? "call" : "calls"} in progress`
+            : "No LLM calls in progress"}"
+        >
+          <span class="icon">💡</span>
+          ${this.llmCalls >= 1
+            ? html`<span class="count-badge">${this.llmCalls}</span>`
+            : ""}
+        </div>
+        <div
+          class="indicator tool-indicator ${this.toolCalls.length > 0
+            ? "active"
+            : ""}"
+          title="${this.toolCalls.length > 0
+            ? `${this.toolCalls.length} tool ${this.toolCalls.length === 1 ? "call" : "calls"} in progress: ${this.toolCalls.join(", ")}`
+            : "No tool calls in progress"}"
+        >
+          <span class="icon">🔧</span>
+          ${this.toolCalls.length >= 1
+            ? html`<span class="count-badge">${this.toolCalls.length}</span>`
+            : ""}
+        </div>
+      </div>
+    `;
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    "sketch-call-status": SketchCallStatus;
+  }
+}
diff --git a/webui/src/web-components/sketch-container-status.test.ts b/webui/src/web-components/sketch-container-status.test.ts
index 35c52b8..b5e625d 100644
--- a/webui/src/web-components/sketch-container-status.test.ts
+++ b/webui/src/web-components/sketch-container-status.test.ts
@@ -20,6 +20,8 @@
     messages: 0,
     tool_uses: {},
   },
+  outstanding_llm_calls: 0,
+  outstanding_tool_calls: [],
 };
 
 test("render props", async ({ mount }) => {
