From a0c1a051ed9025dee64ba7c9ac3b62adf39385ca Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 3 Jun 2025 20:54:58 +0000 Subject: [PATCH 01/14] feat: add claude_code_web in claude-code --- registry/coder/modules/claude-code/main.tf | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 1435a2f3..d4a13491 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -253,3 +253,12 @@ resource "coder_app" "claude_code" { order = var.order group = var.group } + +resource "coder_app" "claude_code_web" { + slug = "claude-code-web" + display_name = "Claude Code Web" + agent_id = var.agent_id + url = "http://localhost:3284/chat/embed" + icon = var.icon + subdomain = true +} From 1c99c57b6e62c529adbf45a67ac8229bd6f0f20b Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Tue, 3 Jun 2025 18:27:29 -0500 Subject: [PATCH 02/14] add agentapi --- registry/coder/modules/claude-code/main.tf | 38 ++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index d4a13491..86fa6cd7 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -131,6 +131,11 @@ 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-amd64More actions + 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} @@ -166,8 +171,22 @@ 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\"" + tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\""; exec bash'More actions + 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 +236,15 @@ 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/chat/embed" + icon = var.icon + subdomain = true +} + resource "coder_app" "claude_code" { slug = "claude-code" display_name = "Claude Code" @@ -229,6 +257,12 @@ 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" + tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server -- bash -c "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\""; 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 From 056f4b5a6853c4694c8fd6896deebf5bade9691a Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Tue, 3 Jun 2025 18:29:28 -0500 Subject: [PATCH 03/14] remove duplicate app --- registry/coder/modules/claude-code/main.tf | 9 --------- 1 file changed, 9 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 86fa6cd7..a4ac851e 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -287,12 +287,3 @@ resource "coder_app" "claude_code" { order = var.order group = var.group } - -resource "coder_app" "claude_code_web" { - slug = "claude-code-web" - display_name = "Claude Code Web" - agent_id = var.agent_id - url = "http://localhost:3284/chat/embed" - icon = var.icon - subdomain = true -} From 16892d806e5fe6c25c4eed77d796ff4b35ff86f2 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Tue, 3 Jun 2025 18:31:30 -0500 Subject: [PATCH 04/14] fix typo --- registry/coder/modules/claude-code/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index a4ac851e..9012009a 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -132,7 +132,7 @@ resource "coder_script" "claude_code" { fi # Hardcoded for now: install AgentAPI - wget https://github.com/coder/agentapi/releases/download/preview/agentapi-linux-amd64More actions + 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 From e340affe95ec41861ffd3dcc00f862f032dbfa88 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Tue, 3 Jun 2025 18:36:50 -0500 Subject: [PATCH 05/14] fix another typo --- registry/coder/modules/claude-code/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 9012009a..45a7f7ba 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -171,7 +171,7 @@ resource "coder_script" "claude_code" { export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 - tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\""; exec bash'More actions + tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\""; 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 From bd05d06a3b80ec127f2cf8be498ba8f1e5a42922 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Wed, 4 Jun 2025 13:19:05 +0200 Subject: [PATCH 06/14] change claude code web app url --- registry/coder/modules/claude-code/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 45a7f7ba..ae4ec412 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -240,7 +240,7 @@ resource "coder_app" "claude_code_web" { slug = "claude-code-web" display_name = "Claude Code Web" agent_id = var.agent_id - url = "http://localhost:3284/chat/embed" + url = "http://localhost:3284/" icon = var.icon subdomain = true } From d2b91ae1a80dd4443f59418c0431deb707ee3eeb Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Wed, 4 Jun 2025 14:32:27 +0200 Subject: [PATCH 07/14] adjust agentapi terminal width and height --- registry/coder/modules/claude-code/main.tf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index ae4ec412..83d31b41 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -171,7 +171,9 @@ resource "coder_script" "claude_code" { export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 - tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\""; exec bash' + # 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 56 --term-height 1425 -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\""; 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 @@ -260,7 +262,9 @@ resource "coder_app" "claude_code" { 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" - tmux new-session -d -s claude-code-agentapi -c ${var.folder} 'agentapi server -- bash -c "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\""; exec bash' + # 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 56 --term-height 1425 -- bash -c "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\""; exec bash' fi if tmux has-session -t claude-code 2>/dev/null; then From b5937c06a9603d8a589ad3405c0ea599419bb1e4 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Wed, 4 Jun 2025 15:41:33 +0200 Subject: [PATCH 08/14] adjust agentapi terminal width and height --- registry/coder/modules/claude-code/main.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 83d31b41..f941c68f 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -173,7 +173,7 @@ resource "coder_script" "claude_code" { # 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 56 --term-height 1425 -- bash -c "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\""; exec bash' + 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\" | tee -a \"$HOME/.claude-code.log\""; 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 @@ -264,7 +264,7 @@ resource "coder_app" "claude_code" { 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 56 --term-height 1425 -- bash -c "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\""; exec bash' + 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 | tee -a \"$HOME/.claude-code.log\""; exec bash' fi if tmux has-session -t claude-code 2>/dev/null; then From 7d64e7ea84ab5e0cf9165a559bd3c7754909f245 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Wed, 4 Jun 2025 17:53:07 +0200 Subject: [PATCH 09/14] use agentapi attach --- registry/coder/modules/claude-code/main.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index f941c68f..9980170b 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -272,7 +272,7 @@ resource "coder_app" "claude_code" { 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 @@ -280,7 +280,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} From c301da7e6b3d20f4c38801ea4b398cbef7e758b4 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Wed, 4 Jun 2025 19:03:41 +0200 Subject: [PATCH 10/14] remove tee pipes - they make claude ignore actual terminal width and render 80 char lines --- registry/coder/modules/claude-code/main.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 9980170b..9cdecb02 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -173,7 +173,7 @@ resource "coder_script" "claude_code" { # 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\" | tee -a \"$HOME/.claude-code.log\""; exec bash' + 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 @@ -264,7 +264,7 @@ resource "coder_app" "claude_code" { 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 | tee -a \"$HOME/.claude-code.log\""; exec bash' + 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 From eac3e55537318d2c406dfce05a8716c3f49aafdf Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Thu, 5 Jun 2025 18:26:37 +0200 Subject: [PATCH 11/14] add healthcheck to claude code web --- registry/coder/modules/claude-code/main.tf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 9cdecb02..4a9291ee 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -245,6 +245,11 @@ resource "coder_app" "claude_code_web" { url = "http://localhost:3284/" icon = var.icon subdomain = true + healthcheck { + url = "http://localhost:3284/status" + interval = 5 + threshold = 3 + } } resource "coder_app" "claude_code" { From 1551c17413f997fc62fe50fa6855de805642361d Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Thu, 5 Jun 2025 18:53:36 +0200 Subject: [PATCH 12/14] comment out the claude-code app temporarily --- registry/coder/modules/claude-code/main.tf | 88 +++++++++++----------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 4a9291ee..128990fc 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -252,47 +252,47 @@ resource "coder_app" "claude_code_web" { } } -resource "coder_app" "claude_code" { - slug = "claude-code" - display_name = "Claude Code" - agent_id = var.agent_id - command = <<-EOT - #!/bin/bash - set -e - - export LANG=en_US.UTF-8 - 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} "agentapi attach; exec bash" - fi - elif [ "${var.experiment_use_screen}" = "true" ]; then - if screen -list | grep -q "claude-code"; then - echo "Attaching to existing Claude Code screen session." | tee -a "$HOME/.claude-code.log" - 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 'agentapi attach; exec bash' - fi - else - cd ${var.folder} - claude - fi - EOT - icon = var.icon - order = var.order - group = var.group -} +# resource "coder_app" "claude_code" { +# slug = "claude-code" +# display_name = "Claude Code" +# agent_id = var.agent_id +# command = <<-EOT +# #!/bin/bash +# set -e + +# export LANG=en_US.UTF-8 +# 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} "agentapi attach; exec bash" +# fi +# elif [ "${var.experiment_use_screen}" = "true" ]; then +# if screen -list | grep -q "claude-code"; then +# echo "Attaching to existing Claude Code screen session." | tee -a "$HOME/.claude-code.log" +# 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 'agentapi attach; exec bash' +# fi +# else +# cd ${var.folder} +# claude +# fi +# EOT +# icon = var.icon +# order = var.order +# group = var.group +# } From 1469373a50a3dc1c80809fe5dc5d2146da4e5454 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Thu, 5 Jun 2025 18:56:48 +0200 Subject: [PATCH 13/14] uncomment the claude code app --- registry/coder/modules/claude-code/main.tf | 88 +++++++++++----------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 128990fc..4a9291ee 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -252,47 +252,47 @@ resource "coder_app" "claude_code_web" { } } -# resource "coder_app" "claude_code" { -# slug = "claude-code" -# display_name = "Claude Code" -# agent_id = var.agent_id -# command = <<-EOT -# #!/bin/bash -# set -e - -# export LANG=en_US.UTF-8 -# 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} "agentapi attach; exec bash" -# fi -# elif [ "${var.experiment_use_screen}" = "true" ]; then -# if screen -list | grep -q "claude-code"; then -# echo "Attaching to existing Claude Code screen session." | tee -a "$HOME/.claude-code.log" -# 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 'agentapi attach; exec bash' -# fi -# else -# cd ${var.folder} -# claude -# fi -# EOT -# icon = var.icon -# order = var.order -# group = var.group -# } +resource "coder_app" "claude_code" { + slug = "claude-code" + display_name = "Claude Code" + agent_id = var.agent_id + command = <<-EOT + #!/bin/bash + set -e + + export LANG=en_US.UTF-8 + 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} "agentapi attach; exec bash" + fi + elif [ "${var.experiment_use_screen}" = "true" ]; then + if screen -list | grep -q "claude-code"; then + echo "Attaching to existing Claude Code screen session." | tee -a "$HOME/.claude-code.log" + 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 'agentapi attach; exec bash' + fi + else + cd ${var.folder} + claude + fi + EOT + icon = var.icon + order = var.order + group = var.group +} From e950669f935f82756e3ad6142fb9c6cb6d8bf92e Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 17 Jun 2025 09:14:42 -0800 Subject: [PATCH 14/14] Use AgentAPI for additional Claude status reporting (#150) Is it OK to add the flag like this or do we need to check the cli version to determine whether the new flag is available? Or I could just throw in an `||` to run the command again without the flag if it fails. Blocked on adding AgentAPI to Claude. Will need to do the same for Goose. --- registry/coder/modules/claude-code/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 4a9291ee..73d9e102 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -138,7 +138,7 @@ resource "coder_script" "claude_code" { 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