webui: display context window size in info box
diff --git a/loop/agent.go b/loop/agent.go
index 82d823e..82c3268 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -159,6 +159,9 @@
 
 	// GetPorts returns the cached list of open TCP ports
 	GetPorts() []portlist.Port
+
+	// TokenContextWindow returns the TokenContextWindow size of the model the agent is using.
+	TokenContextWindow() int
 }
 
 type CodingAgentMessageType string
@@ -468,6 +471,11 @@
 	outstandingToolCalls map[string]string
 }
 
+// TokenContextWindow implements CodingAgent.
+func (a *Agent) TokenContextWindow() int {
+	return a.config.Service.TokenContextWindow()
+}
+
 // NewIterator implements CodingAgent.
 func (a *Agent) NewIterator(ctx context.Context, nextMessageIdx int) MessageIterator {
 	a.mu.Lock()
diff --git a/loop/server/loophttp.go b/loop/server/loophttp.go
index c72fe50..550760c 100644
--- a/loop/server/loophttp.go
+++ b/loop/server/loophttp.go
@@ -103,6 +103,7 @@
 	DiffLinesAdded       int                           `json:"diff_lines_added"`                // Lines added from sketch-base to HEAD
 	DiffLinesRemoved     int                           `json:"diff_lines_removed"`              // Lines removed from sketch-base to HEAD
 	OpenPorts            []Port                        `json:"open_ports,omitempty"`            // Currently open TCP ports
+	TokenContextWindow   int                           `json:"token_context_window,omitempty"`
 }
 
 // Port represents an open TCP port
@@ -1293,6 +1294,7 @@
 		DiffLinesAdded:       diffAdded,
 		DiffLinesRemoved:     diffRemoved,
 		OpenPorts:            s.getOpenPorts(),
+		TokenContextWindow:   s.agent.TokenContextWindow(),
 	}
 }
 
diff --git a/loop/server/loophttp_test.go b/loop/server/loophttp_test.go
index cd97b12..c6d4b6b 100644
--- a/loop/server/loophttp_test.go
+++ b/loop/server/loophttp_test.go
@@ -36,6 +36,11 @@
 	skabandAddr              string
 }
 
+// TokenContextWindow implements loop.CodingAgent.
+func (m *mockAgent) TokenContextWindow() int {
+	return 200000
+}
+
 func (m *mockAgent) NewIterator(ctx context.Context, nextMessageIdx int) loop.MessageIterator {
 	m.mu.RLock()
 	// Send existing messages that should be available immediately
diff --git a/webui/src/types.ts b/webui/src/types.ts
index 585a591..967a1d7 100644
--- a/webui/src/types.ts
+++ b/webui/src/types.ts
@@ -102,6 +102,7 @@
 	diff_lines_added: number;
 	diff_lines_removed: number;
 	open_ports?: Port[] | null;
+	token_context_window?: number;
 }
 
 export interface TodoItem {
diff --git a/webui/src/web-components/sketch-container-status.ts b/webui/src/web-components/sketch-container-status.ts
index be76eed..2bd9935 100644
--- a/webui/src/web-components/sketch-container-status.ts
+++ b/webui/src/web-components/sketch-container-status.ts
@@ -736,14 +736,14 @@
             </div>
             <div class="flex items-center whitespace-nowrap mr-2.5 text-xs">
               <span class="text-xs text-gray-600 mr-1 font-medium"
-                >Context size:</span
+                >Context Window:</span
               >
               <span id="contextWindow" class="text-xs font-semibold break-all"
                 >${formatNumber(
                   (this.latestUsage?.input_tokens || 0) +
                     (this.latestUsage?.cache_read_input_tokens || 0) +
                     (this.latestUsage?.cache_creation_input_tokens || 0),
-                )}</span
+                )}/${formatNumber(this.state?.token_context_window || 0)}</span
               >
             </div>
             <div class="flex items-center whitespace-nowrap mr-2.5 text-xs">