diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf
index 1435a2f3..73d9e102 100644
--- a/registry/coder/modules/claude-code/main.tf
+++ b/registry/coder/modules/claude-code/main.tf
@@ -131,9 +131,14 @@ resource "coder_script" "claude_code" {
       npm install -g @anthropic-ai/claude-code@${var.claude_code_version}
     fi
 
+    # Hardcoded for now: install AgentAPI
+    wget https://github.com/coder/agentapi/releases/download/preview/agentapi-linux-amd64
+    chmod +x agentapi-linux-amd64
+    sudo mv agentapi-linux-amd64 /usr/local/bin/agentapi
+
     if [ "${var.experiment_report_tasks}" = "true" ]; then
       echo "Configuring Claude Code to report tasks via Coder MCP..."
-      coder exp mcp configure claude-code ${var.folder}
+      coder exp mcp configure claude-code ${var.folder} --ai-agentapi-url http://localhost:3284
     fi
 
     # Run post-install script if provided
@@ -166,8 +171,24 @@ resource "coder_script" "claude_code" {
       export LANG=en_US.UTF-8
       export LC_ALL=en_US.UTF-8
 
-      # Create a new tmux session in detached mode
-      tmux new-session -d -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""
+      # use low width to fit in the tasks UI sidebar. height is adjusted to ~match the default 80k (80x1000) characters
+      # visible in the terminal screen.
+      tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server --term-width 67 --term-height 1190 -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""; exec bash'
+      echo "Waiting for agentapi server to start on port 3284..."
+      for i in $(seq 1 15); do
+        if lsof -i :3284 | grep -q 'LISTEN'; then
+          echo "agentapi server started on port 3284."
+          break
+        fi
+        echo "Waiting... ($i/15)"
+        sleep 1
+      done
+      if ! lsof -i :3284 | grep -q 'LISTEN'; then
+        echo "Error: agentapi server did not start on port 3284 after 15 seconds."
+        exit 1
+      fi
+      tmux new-session -d -s claude-code -c ${var.folder} "agentapi attach"
+
 
     fi
 
@@ -217,6 +238,20 @@ resource "coder_script" "claude_code" {
   run_on_start = true
 }
 
+resource "coder_app" "claude_code_web" {
+  slug         = "claude-code-web"
+  display_name = "Claude Code Web"
+  agent_id     = var.agent_id
+  url          = "http://localhost:3284/"
+  icon         = var.icon
+  subdomain    = true
+  healthcheck {
+    url      = "http://localhost:3284/status"
+    interval = 5
+    threshold = 3
+  }
+}
+
 resource "coder_app" "claude_code" {
   slug         = "claude-code"
   display_name = "Claude Code"
@@ -229,12 +264,20 @@ resource "coder_app" "claude_code" {
     export LC_ALL=en_US.UTF-8
 
     if [ "${var.experiment_use_tmux}" = "true" ]; then
+
+      if ! tmux has-session -t claude-code-agentapi 2>/dev/null; then
+        echo "Starting a new Claude Code agentapi tmux session." | tee -a "$HOME/.claude-code.log"
+        # use low width to fit in the tasks UI sidebar. height is adjusted to ~match the default 80k (80x1000) characters
+        # visible in the terminal screen.
+        tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server --term-width 67 --term-height 1190 -- bash -c "claude --dangerously-skip-permissions"; exec bash'
+      fi
+
       if tmux has-session -t claude-code 2>/dev/null; then
         echo "Attaching to existing Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
         tmux attach-session -t claude-code
       else
         echo "Starting a new Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
-        tmux new-session -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\"; exec bash"
+        tmux new-session -s claude-code -c ${var.folder} "agentapi attach; exec bash"
       fi
     elif [ "${var.experiment_use_screen}" = "true" ]; then
       if screen -list | grep -q "claude-code"; then
@@ -242,7 +285,7 @@ resource "coder_app" "claude_code" {
         screen -xRR claude-code
       else
         echo "Starting a new Claude Code screen session." | tee -a "$HOME/.claude-code.log"
-        screen -S claude-code bash -c 'claude --dangerously-skip-permissions | tee -a "$HOME/.claude-code.log"; exec bash'
+        screen -S claude-code bash -c 'agentapi attach; exec bash'
       fi
     else
       cd ${var.folder}