From dd96e8c74bece95dc755b4c2c29a25984889770c Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 28 Nov 2025 21:22:06 +0530 Subject: [PATCH 01/44] feat: conditional agentapi --- registry/coder/modules/claude-code/main.tf | 1 + 1 file changed, 1 insertion(+) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index a994d9cbe..f8e7c6b79 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -336,6 +336,7 @@ module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" + count = report_tasks ? 1 : 0 agent_id = var.agent_id web_app_slug = local.app_slug web_app_order = var.order From c5d83570bce5ff28acdc849c8994c8d3891b9545 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 28 Nov 2025 21:24:27 +0530 Subject: [PATCH 02/44] wip --- 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 f8e7c6b79..e68bd5960 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -336,7 +336,7 @@ module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" - count = report_tasks ? 1 : 0 + count = var.report_tasks ? 1 : 0 agent_id = var.agent_id web_app_slug = local.app_slug web_app_order = var.order From 2c0057520378a611a5cfbaf98ba529d55723ddc3 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 28 Nov 2025 21:34:11 +0530 Subject: [PATCH 03/44] wip --- 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 e68bd5960..5c8455d8b 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -403,5 +403,5 @@ module "agentapi" { } output "task_app_id" { - value = module.agentapi.task_app_id + value = try(module.agentapi[0].task_app_id, null) } From a91c8845cbd3c15fe45e4d5b68be645bc8354658 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Wed, 3 Dec 2025 16:49:08 +0530 Subject: [PATCH 04/44] wip --- registry/coder/modules/claude-code/main.tf | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 5c8455d8b..f88857dac 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -252,6 +252,12 @@ variable "compile_boundary_from_source" { default = false } +variable "cli_command" { + type = string + description = "The command to run for the Claude Code CLI app when tasks are disabled." + default = "claude" +} + resource "coder_env" "claude_code_md_path" { count = var.claude_md_path == "" ? 0 : 1 @@ -332,6 +338,67 @@ locals { ) } +resource "coder_script" "install_agent" { + + count = var.report_tasks ? 1 : 0 + + agent_id = var.agent_id + display_name = "Install agent" + run_on_start = true + script = <<-EOT + #!/bin/bash + set -o errexit + set -o pipefail + + echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh + echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh + + chmod +x /tmp/install.sh + ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ + ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ + ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ + ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ + ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ + /tmp/install.sh + EOT +} + +resource "coder_app" "agent_cli" { + + count = (var.report_tasks && var.cli_app) ? 1 : 0 + + + agent_id = var.agent_id + slug = local.app_slug + display_name = var.cli_app_display_name + + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT + ARG_MODEL='${var.model}' \ + ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ + ARG_CONTINUE='${var.continue}' \ + ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ + ARG_PERMISSION_MODE='${var.permission_mode}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ + ARG_BOUNDARY_VERSION='${var.boundary_version}' \ + ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ + ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ + ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ + ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ + ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ + ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ + ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ + ARG_CODER_HOST='${local.coder_host}' \ + /tmp/start.sh + EOT +} + + module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" From f3bfa9cc8daf0232678951d6bb02d8ca542bb107 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Wed, 3 Dec 2025 16:49:30 +0530 Subject: [PATCH 05/44] wip --- 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 f88857dac..aa78875d0 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -340,7 +340,7 @@ locals { resource "coder_script" "install_agent" { - count = var.report_tasks ? 1 : 0 + count = !var.report_tasks ? 1 : 0 agent_id = var.agent_id display_name = "Install agent" @@ -368,7 +368,7 @@ resource "coder_script" "install_agent" { resource "coder_app" "agent_cli" { - count = (var.report_tasks && var.cli_app) ? 1 : 0 + count = (!var.report_tasks && var.cli_app) ? 1 : 0 agent_id = var.agent_id From 0d03fa4e580d998c8998d88f64e268a3bb6e95b2 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Wed, 3 Dec 2025 18:34:46 +0530 Subject: [PATCH 06/44] wip --- registry/coder/modules/claude-code/main.tf | 3 +- .../modules/claude-code/scripts/start.sh | 39 +++++++++++-------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index aa78875d0..fee1e8c41 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -255,7 +255,7 @@ variable "compile_boundary_from_source" { variable "cli_command" { type = string description = "The command to run for the Claude Code CLI app when tasks are disabled." - default = "claude" + default = "" } resource "coder_env" "claude_code_md_path" { @@ -345,6 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true + log_path = "${path.module}/install.log" script = <<-EOT #!/bin/bash set -o errexit diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 59983b9e8..85058b128 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -1,9 +1,5 @@ #!/bin/bash -if [ -f "$HOME/.bashrc" ]; then - source "$HOME"/.bashrc -fi - # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail @@ -58,6 +54,11 @@ bash "/tmp/remove-last-session-id.sh" "$(pwd)" 2> /dev/null session_cleanup_exit_code=$? set -e +CORE_COMMAND=() +if [[ "${ARG_REPORT_TASKS}" == "true" ]]; then + CORE_COMMAND+=(agentapi server --type claude --term-width 67 --term-height 1190 --) +fi + case $session_cleanup_exit_code in 0) CAN_CONTINUE_CONVERSATION=true @@ -186,8 +187,8 @@ function start_agentapi() { ARGS+=(--session-id "$TASK_SESSION_ID") fi fi - if [ -n "$ARG_AI_PROMPT" ]; then - if [ "$ARG_REPORT_TASKS" = "true" ]; then + if [[ -n "${ARG_AI_PROMPT}" ]]; then + if [[ "${ARG_REPORT_TASKS}" = "true" ]]; then ARGS+=(--dangerously-skip-permissions -- "$ARG_AI_PROMPT") else if [ "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" = "true" ]; then @@ -218,31 +219,35 @@ function start_agentapi() { BOUNDARY_ARGS+=(--allow "domain=anthropic.com" --allow "domain=registry.npmjs.org" --allow "domain=sentry.io" --allow "domain=claude.ai" --allow "domain=$ARG_CODER_HOST") # Add any additional allowed URLs from the variable - if [ -n "$ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS" ]; then - IFS='|' read -ra ADDITIONAL_URLS <<< "$ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS" + if [[ -n "${ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS}" ]]; then + IFS='|' read -ra ADDITIONAL_URLS <<< "${ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS}" for url in "${ADDITIONAL_URLS[@]}"; do # Quote the URL to preserve spaces within the allow rule - BOUNDARY_ARGS+=(--allow "$url") + BOUNDARY_ARGS+=(--allow "${url}") done fi # Set HTTP Proxy port used by Boundary - BOUNDARY_ARGS+=(--proxy-port "$ARG_BOUNDARY_PROXY_PORT") + BOUNDARY_ARGS+=(--proxy-port "${ARG_BOUNDARY_PROXY_PORT}") # Set log level for boundary - BOUNDARY_ARGS+=(--log-level "$ARG_BOUNDARY_LOG_LEVEL") + BOUNDARY_ARGS+=(--log-level "${ARG_BOUNDARY_LOG_LEVEL}") - if [ "${ARG_ENABLE_BOUNDARY_PPROF:-false}" = "true" ]; then + if [[ "${ARG_ENABLE_BOUNDARY_PPROF:-false}" = "true" ]]; then # Enable boundary pprof server on specified port BOUNDARY_ARGS+=(--pprof) - BOUNDARY_ARGS+=(--pprof-port "$ARG_BOUNDARY_PPROF_PORT") + BOUNDARY_ARGS+=(--pprof-port "${ARG_BOUNDARY_PPROF_PORT}") fi - agentapi server --type claude --term-width 67 --term-height 1190 -- \ - boundary-run "${BOUNDARY_ARGS[@]}" -- \ - claude "${ARGS[@]}" +# if [[ "${ARG_REPORT_TASKS}" == "true" ]]; then +# boundary-run "${BOUNDARY_ARGS[@]}" -- \ +# claude "${ARGS[@]}" +# else + "${CORE_COMMAND[@]}" boundary-run "${BOUNDARY_ARGS[@]}" -- \ + claude "${ARGS[@]}" +# fi else - agentapi server --type claude --term-width 67 --term-height 1190 -- claude "${ARGS[@]}" + "${CORE_COMMAND[@]}" claude "${ARGS[@]}" fi } From 05c572456165dafba54bc6a876915b3d2aec99ba Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Wed, 3 Dec 2025 18:43:25 +0530 Subject: [PATCH 07/44] wip --- 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 fee1e8c41..d526d3ba3 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "${path.module}/install.log" + log_path = "${local.module_dir_name}/install.log" script = <<-EOT #!/bin/bash set -o errexit From 65a73a87082d5cc15b794298c361ff4959ca1d8c Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Wed, 3 Dec 2025 21:32:47 +0530 Subject: [PATCH 08/44] wip --- registry/coder/modules/claude-code/main.tf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index d526d3ba3..df9bc7e62 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,8 +345,8 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "${local.module_dir_name}/install.log" - script = <<-EOT + # log_path = "${local.module_dir_name}/install.log" + script = < Date: Thu, 4 Dec 2025 08:17:07 +0530 Subject: [PATCH 09/44] wip --- registry/coder/modules/claude-code/main.tf | 212 ++++++++++----------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index df9bc7e62..bbceab95d 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -367,109 +367,109 @@ resource "coder_script" "install_agent" { EOF } -resource "coder_app" "agent_cli" { - - count = (!var.report_tasks && var.cli_app) ? 1 : 0 - - - agent_id = var.agent_id - slug = local.app_slug - display_name = var.cli_app_display_name - - command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT -} - - -module "agentapi" { - source = "registry.coder.com/coder/agentapi/coder" - version = "2.0.0" - - count = var.report_tasks ? 1 : 0 - agent_id = var.agent_id - web_app_slug = local.app_slug - web_app_order = var.order - web_app_group = var.group - web_app_icon = var.icon - web_app_display_name = var.web_app_display_name - folder = local.workdir - cli_app = var.cli_app - cli_app_slug = var.cli_app ? "${local.app_slug}-cli" : null - cli_app_display_name = var.cli_app ? var.cli_app_display_name : null - agentapi_subdomain = var.subdomain - module_dir_name = local.module_dir_name - install_agentapi = var.install_agentapi - agentapi_version = var.agentapi_version - pre_install_script = var.pre_install_script - post_install_script = var.post_install_script - start_script = <<-EOT - #!/bin/bash - set -o errexit - set -o pipefail - echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh - echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" - chmod +x /tmp/start.sh - chmod +x /tmp/remove-last-session-id.sh - - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT - - install_script = <<-EOT - #!/bin/bash - set -o errexit - set -o pipefail - - echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh - chmod +x /tmp/install.sh - ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ - ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ - ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ - ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ - ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ - /tmp/install.sh - EOT -} - -output "task_app_id" { - value = try(module.agentapi[0].task_app_id, null) -} +# resource "coder_app" "agent_cli" { +# +# count = (!var.report_tasks && var.cli_app) ? 1 : 0 +# +# +# agent_id = var.agent_id +# slug = local.app_slug +# display_name = var.cli_app_display_name +# +# command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT +# ARG_MODEL='${var.model}' \ +# ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ +# ARG_CONTINUE='${var.continue}' \ +# ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ +# ARG_PERMISSION_MODE='${var.permission_mode}' \ +# ARG_WORKDIR='${local.workdir}' \ +# ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ +# ARG_REPORT_TASKS='${var.report_tasks}' \ +# ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ +# ARG_BOUNDARY_VERSION='${var.boundary_version}' \ +# ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ +# ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ +# ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ +# ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ +# ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ +# ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ +# ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ +# ARG_CODER_HOST='${local.coder_host}' \ +# /tmp/start.sh +# EOT +# } +# +# +# module "agentapi" { +# source = "registry.coder.com/coder/agentapi/coder" +# version = "2.0.0" +# +# count = var.report_tasks ? 1 : 0 +# agent_id = var.agent_id +# web_app_slug = local.app_slug +# web_app_order = var.order +# web_app_group = var.group +# web_app_icon = var.icon +# web_app_display_name = var.web_app_display_name +# folder = local.workdir +# cli_app = var.cli_app +# cli_app_slug = var.cli_app ? "${local.app_slug}-cli" : null +# cli_app_display_name = var.cli_app ? var.cli_app_display_name : null +# agentapi_subdomain = var.subdomain +# module_dir_name = local.module_dir_name +# install_agentapi = var.install_agentapi +# agentapi_version = var.agentapi_version +# pre_install_script = var.pre_install_script +# post_install_script = var.post_install_script +# start_script = <<-EOT +# #!/bin/bash +# set -o errexit +# set -o pipefail +# echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh +# echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" +# chmod +x /tmp/start.sh +# chmod +x /tmp/remove-last-session-id.sh +# +# ARG_MODEL='${var.model}' \ +# ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ +# ARG_CONTINUE='${var.continue}' \ +# ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ +# ARG_PERMISSION_MODE='${var.permission_mode}' \ +# ARG_WORKDIR='${local.workdir}' \ +# ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ +# ARG_REPORT_TASKS='${var.report_tasks}' \ +# ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ +# ARG_BOUNDARY_VERSION='${var.boundary_version}' \ +# ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ +# ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ +# ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ +# ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ +# ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ +# ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ +# ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ +# ARG_CODER_HOST='${local.coder_host}' \ +# /tmp/start.sh +# EOT +# +# install_script = <<-EOT +# #!/bin/bash +# set -o errexit +# set -o pipefail +# +# echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh +# chmod +x /tmp/install.sh +# ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ +# ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ +# ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ +# ARG_REPORT_TASKS='${var.report_tasks}' \ +# ARG_WORKDIR='${local.workdir}' \ +# ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ +# ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ +# ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ +# /tmp/install.sh +# EOT +# } +# +# output "task_app_id" { +# value = try(module.agentapi[0].task_app_id, null) +# } From bdc8aea37f1f29ef66fa9e1bac7a0c22303c93d3 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Thu, 4 Dec 2025 08:27:15 +0530 Subject: [PATCH 10/44] wip --- registry/coder/modules/claude-code/main.tf | 146 ++++++++++----------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index bbceab95d..8f21ee9cd 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -400,76 +400,76 @@ EOF # } # # -# module "agentapi" { -# source = "registry.coder.com/coder/agentapi/coder" -# version = "2.0.0" -# -# count = var.report_tasks ? 1 : 0 -# agent_id = var.agent_id -# web_app_slug = local.app_slug -# web_app_order = var.order -# web_app_group = var.group -# web_app_icon = var.icon -# web_app_display_name = var.web_app_display_name -# folder = local.workdir -# cli_app = var.cli_app -# cli_app_slug = var.cli_app ? "${local.app_slug}-cli" : null -# cli_app_display_name = var.cli_app ? var.cli_app_display_name : null -# agentapi_subdomain = var.subdomain -# module_dir_name = local.module_dir_name -# install_agentapi = var.install_agentapi -# agentapi_version = var.agentapi_version -# pre_install_script = var.pre_install_script -# post_install_script = var.post_install_script -# start_script = <<-EOT -# #!/bin/bash -# set -o errexit -# set -o pipefail -# echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh -# echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" -# chmod +x /tmp/start.sh -# chmod +x /tmp/remove-last-session-id.sh -# -# ARG_MODEL='${var.model}' \ -# ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ -# ARG_CONTINUE='${var.continue}' \ -# ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ -# ARG_PERMISSION_MODE='${var.permission_mode}' \ -# ARG_WORKDIR='${local.workdir}' \ -# ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ -# ARG_REPORT_TASKS='${var.report_tasks}' \ -# ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ -# ARG_BOUNDARY_VERSION='${var.boundary_version}' \ -# ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ -# ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ -# ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ -# ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ -# ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ -# ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ -# ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ -# ARG_CODER_HOST='${local.coder_host}' \ -# /tmp/start.sh -# EOT -# -# install_script = <<-EOT -# #!/bin/bash -# set -o errexit -# set -o pipefail -# -# echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh -# chmod +x /tmp/install.sh -# ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ -# ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ -# ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ -# ARG_REPORT_TASKS='${var.report_tasks}' \ -# ARG_WORKDIR='${local.workdir}' \ -# ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ -# ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ -# ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ -# /tmp/install.sh -# EOT -# } -# -# output "task_app_id" { -# value = try(module.agentapi[0].task_app_id, null) -# } +module "agentapi" { + source = "registry.coder.com/coder/agentapi/coder" + version = "2.0.0" + + count = var.report_tasks ? 1 : 0 + agent_id = var.agent_id + web_app_slug = local.app_slug + web_app_order = var.order + web_app_group = var.group + web_app_icon = var.icon + web_app_display_name = var.web_app_display_name + folder = local.workdir + cli_app = var.cli_app + cli_app_slug = var.cli_app ? "${local.app_slug}-cli" : null + cli_app_display_name = var.cli_app ? var.cli_app_display_name : null + agentapi_subdomain = var.subdomain + module_dir_name = local.module_dir_name + install_agentapi = var.install_agentapi + agentapi_version = var.agentapi_version + pre_install_script = var.pre_install_script + post_install_script = var.post_install_script + start_script = <<-EOT + #!/bin/bash + set -o errexit + set -o pipefail + echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh + echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" + chmod +x /tmp/start.sh + chmod +x /tmp/remove-last-session-id.sh + + ARG_MODEL='${var.model}' \ + ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ + ARG_CONTINUE='${var.continue}' \ + ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ + ARG_PERMISSION_MODE='${var.permission_mode}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ + ARG_BOUNDARY_VERSION='${var.boundary_version}' \ + ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ + ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ + ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ + ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ + ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ + ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ + ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ + ARG_CODER_HOST='${local.coder_host}' \ + /tmp/start.sh + EOT + + install_script = <<-EOT + #!/bin/bash + set -o errexit + set -o pipefail + + echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh + chmod +x /tmp/install.sh + ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ + ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ + ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ + ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ + ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ + /tmp/install.sh + EOT +} + +output "task_app_id" { + value = try(module.agentapi[0].task_app_id, null) +} From 50eb191eaa5cc109ef6ecc08efef25acd874f08e Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Thu, 4 Dec 2025 21:29:50 +0530 Subject: [PATCH 11/44] wip --- registry/coder/modules/claude-code/main.tf | 66 +++++++++++----------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 8f21ee9cd..df9bc7e62 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -367,39 +367,39 @@ resource "coder_script" "install_agent" { EOF } -# resource "coder_app" "agent_cli" { -# -# count = (!var.report_tasks && var.cli_app) ? 1 : 0 -# -# -# agent_id = var.agent_id -# slug = local.app_slug -# display_name = var.cli_app_display_name -# -# command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT -# ARG_MODEL='${var.model}' \ -# ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ -# ARG_CONTINUE='${var.continue}' \ -# ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ -# ARG_PERMISSION_MODE='${var.permission_mode}' \ -# ARG_WORKDIR='${local.workdir}' \ -# ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ -# ARG_REPORT_TASKS='${var.report_tasks}' \ -# ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ -# ARG_BOUNDARY_VERSION='${var.boundary_version}' \ -# ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ -# ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ -# ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ -# ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ -# ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ -# ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ -# ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ -# ARG_CODER_HOST='${local.coder_host}' \ -# /tmp/start.sh -# EOT -# } -# -# +resource "coder_app" "agent_cli" { + + count = (!var.report_tasks && var.cli_app) ? 1 : 0 + + + agent_id = var.agent_id + slug = local.app_slug + display_name = var.cli_app_display_name + + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT + ARG_MODEL='${var.model}' \ + ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ + ARG_CONTINUE='${var.continue}' \ + ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ + ARG_PERMISSION_MODE='${var.permission_mode}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ + ARG_BOUNDARY_VERSION='${var.boundary_version}' \ + ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ + ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ + ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ + ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ + ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ + ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ + ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ + ARG_CODER_HOST='${local.coder_host}' \ + /tmp/start.sh + EOT +} + + module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" From 09386a43cda8ffc4aa3dcc92f36dd0eea46f754a Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Thu, 4 Dec 2025 21:30:11 +0530 Subject: [PATCH 12/44] wip --- registry/coder/modules/claude-code/main.tf | 68 +++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index df9bc7e62..942ca8c69 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - # log_path = "${local.module_dir_name}/install.log" + log_path = "${local.module_dir_name}/install.log" script = < 0 ? var.cli_command : <<-EOT - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT -} - - +# resource "coder_app" "agent_cli" { +# +# count = (!var.report_tasks && var.cli_app) ? 1 : 0 +# +# +# agent_id = var.agent_id +# slug = local.app_slug +# display_name = var.cli_app_display_name +# +# command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT +# ARG_MODEL='${var.model}' \ +# ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ +# ARG_CONTINUE='${var.continue}' \ +# ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ +# ARG_PERMISSION_MODE='${var.permission_mode}' \ +# ARG_WORKDIR='${local.workdir}' \ +# ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ +# ARG_REPORT_TASKS='${var.report_tasks}' \ +# ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ +# ARG_BOUNDARY_VERSION='${var.boundary_version}' \ +# ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ +# ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ +# ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ +# ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ +# ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ +# ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ +# ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ +# ARG_CODER_HOST='${local.coder_host}' \ +# /tmp/start.sh +# EOT +# } +# +# module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" From e12cd61e4579399e39335cf11ed22700961e65f5 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Thu, 4 Dec 2025 21:39:49 +0530 Subject: [PATCH 13/44] wip --- 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 942ca8c69..8f21ee9cd 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "${local.module_dir_name}/install.log" + # log_path = "${local.module_dir_name}/install.log" script = < Date: Thu, 4 Dec 2025 21:42:56 +0530 Subject: [PATCH 14/44] wip --- 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 8f21ee9cd..942ca8c69 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - # log_path = "${local.module_dir_name}/install.log" + log_path = "${local.module_dir_name}/install.log" script = < Date: Fri, 5 Dec 2025 18:30:08 +0530 Subject: [PATCH 15/44] wip --- 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 942ca8c69..8d78daad7 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "${local.module_dir_name}/install.log" + log_path = "$HOME/${local.module_dir_name}/install.log" script = < Date: Fri, 5 Dec 2025 18:36:42 +0530 Subject: [PATCH 16/44] wip --- 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 8d78daad7..afa015ffe 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "$HOME/${local.module_dir_name}/install.log" + log_path = "~/${local.module_dir_name}/install.log" script = < Date: Fri, 5 Dec 2025 18:38:37 +0530 Subject: [PATCH 17/44] wip --- 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 afa015ffe..5e17e3e0c 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "~/${local.module_dir_name}/install.log" + log_path = "/${local.module_dir_name}/install.log" script = < Date: Fri, 5 Dec 2025 19:08:58 +0530 Subject: [PATCH 18/44] wip --- registry/coder/modules/claude-code/main.tf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 5e17e3e0c..977c98ee4 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,11 +345,12 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "/${local.module_dir_name}/install.log" + log_path = "$${HOME}/${local.module_dir_name}/install.log" script = < /tmp/install.sh echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh From 0d0bfa7131714e71079f9e8fab76ccdc9d29553f Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 5 Dec 2025 19:10:01 +0530 Subject: [PATCH 19/44] wip --- 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 977c98ee4..1937f091a 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "$${HOME}/${local.module_dir_name}/install.log" + log_path = "/home/coder/${local.module_dir_name}/install.log" script = < Date: Fri, 5 Dec 2025 19:14:55 +0530 Subject: [PATCH 20/44] wip --- registry/coder/modules/claude-code/main.tf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 1937f091a..a4dcd5117 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -352,6 +352,8 @@ resource "coder_script" "install_agent" { set -o pipefail set -x + mkdir -p "/home/coder/${local.module_dir_name}/install.log" + echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh From 250b64e44f481f7ad445cdd0686c456b39f42ec6 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 5 Dec 2025 19:18:01 +0530 Subject: [PATCH 21/44] wip --- registry/coder/modules/claude-code/main.tf | 3 --- 1 file changed, 3 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index a4dcd5117..a79c448c2 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -348,12 +348,9 @@ resource "coder_script" "install_agent" { log_path = "/home/coder/${local.module_dir_name}/install.log" script = < /tmp/install.sh echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh From 63eff436eb4e295e0267f919fb7c05933ae71b08 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 12 Dec 2025 18:02:51 +0000 Subject: [PATCH 22/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 68 +++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index a79c448c2..931ed4d3e 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -345,7 +345,7 @@ resource "coder_script" "install_agent" { agent_id = var.agent_id display_name = "Install agent" run_on_start = true - log_path = "/home/coder/${local.module_dir_name}/install.log" + log_path = "/home/coder/install.log" script = < 0 ? var.cli_command : <<-EOT -# ARG_MODEL='${var.model}' \ -# ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ -# ARG_CONTINUE='${var.continue}' \ -# ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ -# ARG_PERMISSION_MODE='${var.permission_mode}' \ -# ARG_WORKDIR='${local.workdir}' \ -# ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ -# ARG_REPORT_TASKS='${var.report_tasks}' \ -# ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ -# ARG_BOUNDARY_VERSION='${var.boundary_version}' \ -# ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ -# ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ -# ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ -# ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ -# ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ -# ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ -# ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ -# ARG_CODER_HOST='${local.coder_host}' \ -# /tmp/start.sh -# EOT -# } -# -# +resource "coder_app" "agent_cli" { + + count = (!var.report_tasks && var.cli_app) ? 1 : 0 + + + agent_id = var.agent_id + slug = local.app_slug + display_name = var.cli_app_display_name + + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT + ARG_MODEL='${var.model}' \ + ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ + ARG_CONTINUE='${var.continue}' \ + ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ + ARG_PERMISSION_MODE='${var.permission_mode}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ + ARG_BOUNDARY_VERSION='${var.boundary_version}' \ + ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ + ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ + ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ + ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ + ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ + ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ + ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ + ARG_CODER_HOST='${local.coder_host}' \ + /tmp/start.sh + EOT +} + + module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" From c2fa87aea6f57df81d1625d10163ff74e32aafe2 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Fri, 12 Dec 2025 18:13:53 +0000 Subject: [PATCH 23/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 1 + 1 file changed, 1 insertion(+) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 931ed4d3e..f7cd5b16f 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -355,6 +355,7 @@ resource "coder_script" "install_agent" { echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh chmod +x /tmp/install.sh + chmod +x /tmp/start.sh ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ From d0ef4f426be04fa32e96928f218d023a6c7c155a Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sat, 13 Dec 2025 11:28:06 +0000 Subject: [PATCH 24/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 154 +++++++++------------ 1 file changed, 65 insertions(+), 89 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index f7cd5b16f..45e9f7776 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -336,17 +336,43 @@ locals { var.report_tasks ? format("\n%s\n", local.report_tasks_system_prompt) : "", local.custom_system_prompt != "" ? format("\n%s\n", local.custom_system_prompt) : "" ) -} -resource "coder_script" "install_agent" { + # Common environment variables for install script + install_env_vars = <<-EOT + ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ + ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ + ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ + ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ + ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' + EOT - count = !var.report_tasks ? 1 : 0 + # Common environment variables for start script + start_env_vars = <<-EOT + ARG_MODEL='${var.model}' \ + ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ + ARG_CONTINUE='${var.continue}' \ + ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ + ARG_PERMISSION_MODE='${var.permission_mode}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ + ARG_BOUNDARY_VERSION='${var.boundary_version}' \ + ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ + ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ + ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ + ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ + ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ + ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ + ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ + ARG_CODER_HOST='${local.coder_host}' + EOT - agent_id = var.agent_id - display_name = "Install agent" - run_on_start = true - log_path = "/home/coder/install.log" - script = < /tmp/start.sh + echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" + chmod +x /tmp/start.sh + chmod +x /tmp/remove-last-session-id.sh + + ${local.start_env_vars} \ + /tmp/start.sh + EOT } -resource "coder_app" "agent_cli" { +resource "coder_script" "install_agent" { + count = !var.report_tasks ? 1 : 0 - count = (!var.report_tasks && var.cli_app) ? 1 : 0 + agent_id = var.agent_id + display_name = "Install agent" + run_on_start = true + log_path = "/home/coder/install.log" + script = local.install_command +} +resource "coder_app" "agent_cli" { + count = (!var.report_tasks && var.cli_app) ? 1 : 0 - agent_id = var.agent_id + agent_id = var.agent_id slug = local.app_slug display_name = var.cli_app_display_name - command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : "${local.start_env_vars} \\\n /tmp/start.sh" } @@ -405,7 +426,7 @@ module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" - count = var.report_tasks ? 1 : 0 + count = var.report_tasks ? 1 : 0 agent_id = var.agent_id web_app_slug = local.app_slug web_app_order = var.order @@ -422,53 +443,8 @@ module "agentapi" { agentapi_version = var.agentapi_version pre_install_script = var.pre_install_script post_install_script = var.post_install_script - start_script = <<-EOT - #!/bin/bash - set -o errexit - set -o pipefail - echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh - echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" - chmod +x /tmp/start.sh - chmod +x /tmp/remove-last-session-id.sh - - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT - - install_script = <<-EOT - #!/bin/bash - set -o errexit - set -o pipefail - - echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh - chmod +x /tmp/install.sh - ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ - ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ - ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ - ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ - ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ - /tmp/install.sh - EOT + start_script = local.agentapi_start_command + install_script = local.install_command } output "task_app_id" { From 19dc50db3e33712af04bfd7fdf49ab901efac134 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sat, 13 Dec 2025 11:33:20 +0000 Subject: [PATCH 25/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 1 - 1 file changed, 1 deletion(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 0d0be571b..cf71964ba 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -391,7 +391,6 @@ locals { set -o errexit set -o pipefail echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh - echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" chmod +x /tmp/start.sh chmod +x /tmp/remove-last-session-id.sh From 327f05487d48885b2a42b6942e942e5ea9c4059a Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 09:07:52 +0000 Subject: [PATCH 26/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index cf71964ba..b2335f818 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -338,13 +338,13 @@ locals { # Common environment variables for install script install_env_vars = <<-EOT - ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ - ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ - ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ - ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ + ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \\ + ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \\ + ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \\ + ARG_REPORT_TASKS='${var.report_tasks}' \\ + ARG_WORKDIR='${local.workdir}' \\ + ARG_ALLOWED_TOOLS='${var.allowed_tools}' \\ + ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \\ ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' EOT @@ -394,7 +394,7 @@ locals { chmod +x /tmp/start.sh chmod +x /tmp/remove-last-session-id.sh - ${local.start_env_vars} \ + ${local.start_env_vars} \\ /tmp/start.sh EOT } From 149e65b49fa832dc8cbe16f8cb7a2b56b0ee019b Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 09:13:33 +0000 Subject: [PATCH 27/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index b2335f818..ddc8ab649 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -338,14 +338,14 @@ locals { # Common environment variables for install script install_env_vars = <<-EOT - ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \\ - ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \\ - ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \\ - ARG_REPORT_TASKS='${var.report_tasks}' \\ - ARG_WORKDIR='${local.workdir}' \\ - ARG_ALLOWED_TOOLS='${var.allowed_tools}' \\ - ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \\ - ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' + ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ + ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ + ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ + ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ + ARG_MCP='xyz' EOT # Common environment variables for start script From 68069857786d70952a78a3c53f98f408fca9ea5b Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 09:20:48 +0000 Subject: [PATCH 28/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 2 +- registry/coder/modules/claude-code/scripts/install.sh | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index ddc8ab649..58f1e5b2c 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -394,7 +394,7 @@ locals { chmod +x /tmp/start.sh chmod +x /tmp/remove-last-session-id.sh - ${local.start_env_vars} \\ + ${local.start_env_vars} \ /tmp/start.sh EOT } diff --git a/registry/coder/modules/claude-code/scripts/install.sh b/registry/coder/modules/claude-code/scripts/install.sh index ba4420fa3..df10dac5b 100644 --- a/registry/coder/modules/claude-code/scripts/install.sh +++ b/registry/coder/modules/claude-code/scripts/install.sh @@ -1,8 +1,5 @@ #!/bin/bash -if [ -f "$HOME/.bashrc" ]; then - source "$HOME"/.bashrc -fi # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail From 5870805d0f4ba823d22d3a3a215d44d8dfaac19e Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 09:26:01 +0000 Subject: [PATCH 29/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 58 +++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 58f1e5b2c..8d87c3323 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -338,36 +338,36 @@ locals { # Common environment variables for install script install_env_vars = <<-EOT - ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ - ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ - ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ - ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ - ARG_MCP='xyz' + export ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' + export ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' + export ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' + export ARG_REPORT_TASKS='${var.report_tasks}' + export ARG_WORKDIR='${local.workdir}' + export ARG_ALLOWED_TOOLS='${var.allowed_tools}' + export ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' + export ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' EOT # Common environment variables for start script start_env_vars = <<-EOT - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' + export ARG_MODEL='${var.model}' + export ARG_RESUME_SESSION_ID='${var.resume_session_id}' + export ARG_CONTINUE='${var.continue}' + export ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' + export ARG_PERMISSION_MODE='${var.permission_mode}' + export ARG_WORKDIR='${local.workdir}' + export ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' + export ARG_REPORT_TASKS='${var.report_tasks}' + export ARG_ENABLE_BOUNDARY='${var.enable_boundary}' + export ARG_BOUNDARY_VERSION='${var.boundary_version}' + export ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' + export ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' + export ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' + export ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' + export ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' + export ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' + export ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' + export ARG_CODER_HOST='${local.coder_host}' EOT # Reusable install script command @@ -381,7 +381,7 @@ locals { chmod +x /tmp/install.sh chmod +x /tmp/start.sh - ${local.install_env_vars} \ + ${local.install_env_vars} /tmp/install.sh EOT @@ -394,7 +394,7 @@ locals { chmod +x /tmp/start.sh chmod +x /tmp/remove-last-session-id.sh - ${local.start_env_vars} \ + ${local.start_env_vars} /tmp/start.sh EOT } @@ -416,7 +416,7 @@ resource "coder_app" "agent_cli" { slug = local.app_slug display_name = var.cli_app_display_name - command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : "${local.start_env_vars} \\\n /tmp/start.sh" + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : "${local.start_env_vars}\n/tmp/start.sh" } From 93f9ec3708041bb96c09eb95cede6732eceb4f0e Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 10:07:30 +0000 Subject: [PATCH 30/44] wip Signed-off-by: 35C4n0r --- 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 8d87c3323..c7a931351 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -416,7 +416,7 @@ resource "coder_app" "agent_cli" { slug = local.app_slug display_name = var.cli_app_display_name - command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : "${local.start_env_vars}\n/tmp/start.sh" + command = length(trimprefix(var.cli_command, " ")) > 0 ? "${var.cli_command} >> $HOME/start.log 2>&1" : "${local.start_env_vars}\n/tmp/start.sh >> $HOME/start.log 2>&1" } From a630ffa42ab905af3ab23e88128d239531b4bca2 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 10:13:30 +0000 Subject: [PATCH 31/44] wip Signed-off-by: 35C4n0r --- 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 c7a931351..5a4b8c742 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -416,7 +416,7 @@ resource "coder_app" "agent_cli" { slug = local.app_slug display_name = var.cli_app_display_name - command = length(trimprefix(var.cli_command, " ")) > 0 ? "${var.cli_command} >> $HOME/start.log 2>&1" : "${local.start_env_vars}\n/tmp/start.sh >> $HOME/start.log 2>&1" + command = length(trimprefix(var.cli_command, " ")) > 0 ? "(${var.cli_command}) 2>&1 | tee -a $HOME/start.log" : "(${local.start_env_vars}\n/tmp/start.sh) 2>&1 | tee -a $HOME/start.log" } From 090fa7dd1dda991604927f4018032ac17d75d7f4 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 11:04:55 +0000 Subject: [PATCH 32/44] wip Signed-off-by: 35C4n0r --- 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 5a4b8c742..8d87c3323 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -416,7 +416,7 @@ resource "coder_app" "agent_cli" { slug = local.app_slug display_name = var.cli_app_display_name - command = length(trimprefix(var.cli_command, " ")) > 0 ? "(${var.cli_command}) 2>&1 | tee -a $HOME/start.log" : "(${local.start_env_vars}\n/tmp/start.sh) 2>&1 | tee -a $HOME/start.log" + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : "${local.start_env_vars}\n/tmp/start.sh" } From aaf2c4e0ddf69c01ce83a0b0652d774df1ba5f6d Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 12:23:27 +0000 Subject: [PATCH 33/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index d07dc1d43..9fd139560 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -3,7 +3,8 @@ # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail -export PATH="$HOME/.local/bin:$PATH" +# Redirect all script output to log file +exec >> "$HOME/start.log" 2>&1 command_exists() { command -v "$1" > /dev/null 2>&1 From ef0f597d5413f5869cfb21a26f6df20938b189ec Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 12:31:26 +0000 Subject: [PATCH 34/44] wip Signed-off-by: 35C4n0r --- .../modules/claude-code/scripts/start.sh | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 9fd139560..3d3c620a7 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -3,8 +3,9 @@ # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail -# Redirect all script output to log file -exec >> "$HOME/start.log" 2>&1 +log() { + printf "%s" "$*" >> "${HOME}/start.log" +} command_exists() { command -v "$1" > /dev/null 2>&1 @@ -16,7 +17,7 @@ ARG_CONTINUE=${ARG_CONTINUE:-false} ARG_DANGEROUSLY_SKIP_PERMISSIONS=${ARG_DANGEROUSLY_SKIP_PERMISSIONS:-} ARG_PERMISSION_MODE=${ARG_PERMISSION_MODE:-} ARG_WORKDIR=${ARG_WORKDIR:-"$HOME"} -ARG_AI_PROMPT=$(echo -n "${ARG_AI_PROMPT:-}" | base64 -d) +ARG_AI_PROMPT=$(log -n "${ARG_AI_PROMPT:-}" | base64 -d) ARG_REPORT_TASKS=${ARG_REPORT_TASKS:-true} ARG_ENABLE_BOUNDARY=${ARG_ENABLE_BOUNDARY:-false} ARG_BOUNDARY_VERSION=${ARG_BOUNDARY_VERSION:-"main"} @@ -28,30 +29,30 @@ ARG_BOUNDARY_PPROF_PORT=${ARG_BOUNDARY_PPROF_PORT:-"6067"} ARG_COMPILE_FROM_SOURCE=${ARG_COMPILE_FROM_SOURCE:-false} ARG_CODER_HOST=${ARG_CODER_HOST:-} -echo "--------------------------------" - -printf "ARG_MODEL: %s\n" "$ARG_MODEL" -printf "ARG_RESUME: %s\n" "$ARG_RESUME_SESSION_ID" -printf "ARG_CONTINUE: %s\n" "$ARG_CONTINUE" -printf "ARG_DANGEROUSLY_SKIP_PERMISSIONS: %s\n" "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" -printf "ARG_PERMISSION_MODE: %s\n" "$ARG_PERMISSION_MODE" -printf "ARG_AI_PROMPT: %s\n" "$ARG_AI_PROMPT" -printf "ARG_WORKDIR: %s\n" "$ARG_WORKDIR" -printf "ARG_REPORT_TASKS: %s\n" "$ARG_REPORT_TASKS" -printf "ARG_ENABLE_BOUNDARY: %s\n" "$ARG_ENABLE_BOUNDARY" -printf "ARG_BOUNDARY_VERSION: %s\n" "$ARG_BOUNDARY_VERSION" -printf "ARG_BOUNDARY_LOG_DIR: %s\n" "$ARG_BOUNDARY_LOG_DIR" -printf "ARG_BOUNDARY_LOG_LEVEL: %s\n" "$ARG_BOUNDARY_LOG_LEVEL" -printf "ARG_BOUNDARY_PROXY_PORT: %s\n" "$ARG_BOUNDARY_PROXY_PORT" -printf "ARG_COMPILE_FROM_SOURCE: %s\n" "$ARG_COMPILE_FROM_SOURCE" -printf "ARG_CODER_HOST: %s\n" "$ARG_CODER_HOST" - -echo "--------------------------------" +log "--------------------------------" + +log "ARG_MODEL: %s\n" "$ARG_MODEL" +log "ARG_RESUME: %s\n" "$ARG_RESUME_SESSION_ID" +log "ARG_CONTINUE: %s\n" "$ARG_CONTINUE" +log "ARG_DANGEROUSLY_SKIP_PERMISSIONS: %s\n" "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" +log "ARG_PERMISSION_MODE: %s\n" "$ARG_PERMISSION_MODE" +log "ARG_AI_PROMPT: %s\n" "$ARG_AI_PROMPT" +log "ARG_WORKDIR: %s\n" "$ARG_WORKDIR" +log "ARG_REPORT_TASKS: %s\n" "$ARG_REPORT_TASKS" +log "ARG_ENABLE_BOUNDARY: %s\n" "$ARG_ENABLE_BOUNDARY" +log "ARG_BOUNDARY_VERSION: %s\n" "$ARG_BOUNDARY_VERSION" +log "ARG_BOUNDARY_LOG_DIR: %s\n" "$ARG_BOUNDARY_LOG_DIR" +log "ARG_BOUNDARY_LOG_LEVEL: %s\n" "$ARG_BOUNDARY_LOG_LEVEL" +log "ARG_BOUNDARY_PROXY_PORT: %s\n" "$ARG_BOUNDARY_PROXY_PORT" +log "ARG_COMPILE_FROM_SOURCE: %s\n" "$ARG_COMPILE_FROM_SOURCE" +log "ARG_CODER_HOST: %s\n" "$ARG_CODER_HOST" + +log "--------------------------------" function install_boundary() { if [ "${ARG_COMPILE_FROM_SOURCE:-false}" = "true" ]; then # Install boundary by compiling from source - echo "Compiling boundary from source (version: $ARG_BOUNDARY_VERSION)" + log "Compiling boundary from source (version: $ARG_BOUNDARY_VERSION)" git clone https://github.com/coder/boundary.git cd boundary git checkout "$ARG_BOUNDARY_VERSION" @@ -65,16 +66,16 @@ function install_boundary() { sudo chmod +x /usr/local/bin/boundary-run else # Install boundary using official install script - echo "Installing boundary using official install script (version: $ARG_BOUNDARY_VERSION)" + log "Installing boundary using official install script (version: $ARG_BOUNDARY_VERSION)" curl -fsSL https://raw.githubusercontent.com/coder/boundary/main/install.sh | bash -s -- --version "$ARG_BOUNDARY_VERSION" fi } function validate_claude_installation() { if command_exists claude; then - printf "Claude Code is installed\n" + log "Claude Code is installed\n" else - printf "Error: Claude Code is not installed. Please enable install_claude_code or install it manually\n" + log "Error: Claude Code is not installed. Please enable install_claude_code or install it manually\n" exit 1 fi } @@ -85,12 +86,12 @@ TASK_SESSION_ID="cd32e253-ca16-4fd3-9825-d837e74ae3c2" get_project_dir() { local workdir_normalized - workdir_normalized=$(echo "$ARG_WORKDIR" | tr '/' '-') - echo "$HOME/.claude/projects/${workdir_normalized}" + workdir_normalized=$(log "$ARG_WORKDIR" | tr '/' '-') + log "$HOME/.claude/projects/${workdir_normalized}" } get_task_session_file() { - echo "$(get_project_dir)/${TASK_SESSION_ID}.jsonl" + log "$(get_project_dir)/${TASK_SESSION_ID}.jsonl" } task_session_exists() { @@ -98,10 +99,10 @@ task_session_exists() { session_file=$(get_task_session_file) if [ -f "$session_file" ]; then - printf "Task session file found: %s\n" "$session_file" + log "Task session file found: %s\n" "$session_file" return 0 else - printf "Task session file not found: %s\n" "$session_file" + log "Task session file not found: %s\n" "$session_file" return 1 fi } @@ -112,12 +113,12 @@ is_valid_session() { # Check if file exists and is not empty # Empty files indicate the session was created but never used so they need to be removed if [ ! -f "$session_file" ]; then - printf "Session validation failed: file does not exist\n" + log "Session validation failed: file does not exist\n" return 1 fi if [ ! -s "$session_file" ]; then - printf "Session validation failed: file is empty, removing stale file\n" + log "Session validation failed: file is empty, removing stale file\n" rm -f "$session_file" return 1 fi @@ -127,7 +128,7 @@ is_valid_session() { local line_count line_count=$(wc -l < "$session_file") if [ "$line_count" -lt 2 ]; then - printf "Session validation failed: incomplete (only %s lines), removing incomplete file\n" "$line_count" + log "Session validation failed: incomplete (only %s lines), removing incomplete file\n" "$line_count" rm -f "$session_file" return 1 fi @@ -135,7 +136,7 @@ is_valid_session() { # Validate JSONL format by checking first 3 lines # Claude session files use JSONL (JSON Lines) format where each line is valid JSON if ! head -3 "$session_file" | jq empty 2> /dev/null; then - printf "Session validation failed: invalid JSONL format, removing corrupt file\n" + log "Session validation failed: invalid JSONL format, removing corrupt file\n" rm -f "$session_file" return 1 fi @@ -144,12 +145,12 @@ is_valid_session() { # This ensures the file structure matches Claude's session format if ! grep -q '"sessionId"' "$session_file" \ || ! grep -m 1 '"sessionId"' "$session_file" | jq -e '.sessionId' > /dev/null 2>&1; then - printf "Session validation failed: no valid sessionId found, removing malformed file\n" + log "Session validation failed: no valid sessionId found, removing malformed file\n" rm -f "$session_file" return 1 fi - printf "Session validation passed: %s\n" "$session_file" + log "Session validation passed: %s\n" "$session_file" return 0 } @@ -158,10 +159,10 @@ has_any_sessions() { project_dir=$(get_project_dir) if [ -d "$project_dir" ] && find "$project_dir" -maxdepth 1 -name "*.jsonl" -size +0c 2> /dev/null | grep -q .; then - printf "Sessions found in: %s\n" "$project_dir" + log "Sessions found in: %s\n" "$project_dir" return 0 else - printf "No sessions found in: %s\n" "$project_dir" + log "No sessions found in: %s\n" "$project_dir" return 1 fi } @@ -184,7 +185,7 @@ function start_agentapi() { fi if [ -n "$ARG_RESUME_SESSION_ID" ]; then - echo "Resuming specified session: $ARG_RESUME_SESSION_ID" + log "Resuming specified session: $ARG_RESUME_SESSION_ID" ARGS+=(--resume "$ARG_RESUME_SESSION_ID") [ "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" = "true" ] && ARGS+=(--dangerously-skip-permissions) @@ -195,39 +196,39 @@ function start_agentapi() { session_file=$(get_task_session_file) if task_session_exists && is_valid_session "$session_file"; then - echo "Resuming task session: $TASK_SESSION_ID" + log "Resuming task session: $TASK_SESSION_ID" ARGS+=(--resume "$TASK_SESSION_ID" --dangerously-skip-permissions) else - echo "Starting new task session: $TASK_SESSION_ID" + log "Starting new task session: $TASK_SESSION_ID" ARGS+=(--session-id "$TASK_SESSION_ID" --dangerously-skip-permissions) [ -n "$ARG_AI_PROMPT" ] && ARGS+=(-- "$ARG_AI_PROMPT") fi else if has_any_sessions; then - echo "Continuing most recent standalone session" + log "Continuing most recent standalone session" ARGS+=(--continue) [ "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" = "true" ] && ARGS+=(--dangerously-skip-permissions) else - echo "No sessions found, starting fresh standalone session" + log "No sessions found, starting fresh standalone session" [ "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" = "true" ] && ARGS+=(--dangerously-skip-permissions) [ -n "$ARG_AI_PROMPT" ] && ARGS+=(-- "$ARG_AI_PROMPT") fi fi else - echo "Continue disabled, starting fresh session" + log "Continue disabled, starting fresh session" [ "$ARG_DANGEROUSLY_SKIP_PERMISSIONS" = "true" ] && ARGS+=(--dangerously-skip-permissions) [ -n "$ARG_AI_PROMPT" ] && ARGS+=(-- "$ARG_AI_PROMPT") fi - printf "Running claude code with args: %s\n" "$(printf '%q ' "${ARGS[@]}")" + log "Running claude code with args: %s\n" "$(log '%q ' "${ARGS[@]}")" if [ "${ARG_ENABLE_BOUNDARY:-false}" = "true" ]; then install_boundary mkdir -p "$ARG_BOUNDARY_LOG_DIR" - printf "Starting with coder boundary enabled\n" + log "Starting with coder boundary enabled\n" # Build boundary args with conditional --unprivileged flag BOUNDARY_ARGS=(--log-dir "$ARG_BOUNDARY_LOG_DIR") From 1dee0012f546299b626aa64cc4dd4e5a2edc5976 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 12:37:52 +0000 Subject: [PATCH 35/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 3d3c620a7..bde1bfde6 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -4,7 +4,7 @@ set -euo pipefail log() { - printf "%s" "$*" >> "${HOME}/start.log" + printf "$@" >> "$HOME/start.log" } command_exists() { From dd86d3d1d848ee1ffe8890039029025a9ad45f7d Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 12:41:21 +0000 Subject: [PATCH 36/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index bde1bfde6..185ab03d4 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -3,8 +3,10 @@ # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail +true > "${HOME}/start.log" + log() { - printf "$@" >> "$HOME/start.log" + printf "$@" >> "${HOME}/start.log" } command_exists() { From d3b505781968773a6bbff37dd33d54f129725446 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 12:46:45 +0000 Subject: [PATCH 37/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 185ab03d4..4fabe02eb 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -3,10 +3,10 @@ # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail -true > "${HOME}/start.log" +true > "$HOME/start.log" log() { - printf "$@" >> "${HOME}/start.log" + printf "$@" >> "$HOME/start.log" } command_exists() { From 65189bc068602f7ef18956820fab9ab9c282a9cd Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 12:50:51 +0000 Subject: [PATCH 38/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 4fabe02eb..6fe97d603 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -19,7 +19,7 @@ ARG_CONTINUE=${ARG_CONTINUE:-false} ARG_DANGEROUSLY_SKIP_PERMISSIONS=${ARG_DANGEROUSLY_SKIP_PERMISSIONS:-} ARG_PERMISSION_MODE=${ARG_PERMISSION_MODE:-} ARG_WORKDIR=${ARG_WORKDIR:-"$HOME"} -ARG_AI_PROMPT=$(log -n "${ARG_AI_PROMPT:-}" | base64 -d) +ARG_AI_PROMPT=$(echo -n "${ARG_AI_PROMPT:-}" | base64 -d) ARG_REPORT_TASKS=${ARG_REPORT_TASKS:-true} ARG_ENABLE_BOUNDARY=${ARG_ENABLE_BOUNDARY:-false} ARG_BOUNDARY_VERSION=${ARG_BOUNDARY_VERSION:-"main"} From 395f170d07207266dfed753bdfb51b9cf2a1088c Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 17:11:49 +0000 Subject: [PATCH 39/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 6fe97d603..e88ea9942 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -88,12 +88,12 @@ TASK_SESSION_ID="cd32e253-ca16-4fd3-9825-d837e74ae3c2" get_project_dir() { local workdir_normalized - workdir_normalized=$(log "$ARG_WORKDIR" | tr '/' '-') - log "$HOME/.claude/projects/${workdir_normalized}" + workdir_normalized=$(echo "$ARG_WORKDIR" | tr '/' '-') + echo "$HOME/.claude/projects/${workdir_normalized}" } get_task_session_file() { - log "$(get_project_dir)/${TASK_SESSION_ID}.jsonl" + echo "$(get_project_dir)/${TASK_SESSION_ID}.jsonl" } task_session_exists() { @@ -224,7 +224,7 @@ function start_agentapi() { [ -n "$ARG_AI_PROMPT" ] && ARGS+=(-- "$ARG_AI_PROMPT") fi - log "Running claude code with args: %s\n" "$(log '%q ' "${ARGS[@]}")" + log "Running claude code with args: %s\n" "$(printf '%q ' "${ARGS[@]}")" if [ "${ARG_ENABLE_BOUNDARY:-false}" = "true" ]; then install_boundary From c115d860f7f3c979693f4069f945ab9f9dd62156 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 17:21:53 +0000 Subject: [PATCH 40/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index e88ea9942..dac70e3f2 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -6,7 +6,7 @@ set -euo pipefail true > "$HOME/start.log" log() { - printf "$@" >> "$HOME/start.log" + printf -- "$@" >> "$HOME/start.log" } command_exists() { From 73af151f8d33e75a90e82380cfce25e50c911969 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 17:39:22 +0000 Subject: [PATCH 41/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/main.tf | 1 + .../coder/modules/claude-code/scripts/start.sh | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index 8d87c3323..45a3b4136 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -368,6 +368,7 @@ locals { export ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' export ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' export ARG_CODER_HOST='${local.coder_host}' + export ARG_NON_AGENTAPI_CLI=(!var.report_tasks && var.cli_app) ? true : false EOT # Reusable install script command diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index dac70e3f2..281cf44ad 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -5,10 +5,6 @@ set -euo pipefail true > "$HOME/start.log" -log() { - printf -- "$@" >> "$HOME/start.log" -} - command_exists() { command -v "$1" > /dev/null 2>&1 } @@ -30,6 +26,15 @@ ARG_ENABLE_BOUNDARY_PPROF=${ARG_ENABLE_BOUNDARY_PPROF:-false} ARG_BOUNDARY_PPROF_PORT=${ARG_BOUNDARY_PPROF_PORT:-"6067"} ARG_COMPILE_FROM_SOURCE=${ARG_COMPILE_FROM_SOURCE:-false} ARG_CODER_HOST=${ARG_CODER_HOST:-} +ARG_NON_AGENTAPI_CLI=${ARG_NON_AGENTAPI_CLI:-false} + +log() { + if [[ "${ARG_NON_AGENTAPI_CLI}" = "true" ]]; then + printf -- "$@" >> "$HOME/start.log" + else + printf -- "$@" + fi +} log "--------------------------------" @@ -48,6 +53,7 @@ log "ARG_BOUNDARY_LOG_LEVEL: %s\n" "$ARG_BOUNDARY_LOG_LEVEL" log "ARG_BOUNDARY_PROXY_PORT: %s\n" "$ARG_BOUNDARY_PROXY_PORT" log "ARG_COMPILE_FROM_SOURCE: %s\n" "$ARG_COMPILE_FROM_SOURCE" log "ARG_CODER_HOST: %s\n" "$ARG_CODER_HOST" +log "ARG_NON_AGENTAPI_CLI: %s\n" "$ARG_NON_AGENTAPI_CLI" log "--------------------------------" From ae48c1043b6da371329e35ec83853f406bd90ae3 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 17:47:20 +0000 Subject: [PATCH 42/44] wip Signed-off-by: 35C4n0r --- 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 45a3b4136..afcf9df3f 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -368,7 +368,7 @@ locals { export ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' export ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' export ARG_CODER_HOST='${local.coder_host}' - export ARG_NON_AGENTAPI_CLI=(!var.report_tasks && var.cli_app) ? true : false + export ARG_NON_AGENTAPI_CLI='${!var.report_tasks && var.cli_app ? true : false}' EOT # Reusable install script command From 4b03bce6f748865af8dde9d1608a346ce8e87110 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 18:00:11 +0000 Subject: [PATCH 43/44] wip Signed-off-by: 35C4n0r --- registry/coder/modules/claude-code/scripts/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 281cf44ad..3e017143e 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -36,7 +36,7 @@ log() { fi } -log "--------------------------------" +log "--------------------------------\n" log "ARG_MODEL: %s\n" "$ARG_MODEL" log "ARG_RESUME: %s\n" "$ARG_RESUME_SESSION_ID" @@ -55,7 +55,7 @@ log "ARG_COMPILE_FROM_SOURCE: %s\n" "$ARG_COMPILE_FROM_SOURCE" log "ARG_CODER_HOST: %s\n" "$ARG_CODER_HOST" log "ARG_NON_AGENTAPI_CLI: %s\n" "$ARG_NON_AGENTAPI_CLI" -log "--------------------------------" +log "--------------------------------\n" function install_boundary() { if [ "${ARG_COMPILE_FROM_SOURCE:-false}" = "true" ]; then From d4efc09b2041ec444fa9a07b856afada82ec7131 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 14 Dec 2025 18:05:17 +0000 Subject: [PATCH 44/44] bun fmt Signed-off-by: 35C4n0r --- .../coder/modules/claude-code/scripts/install.sh | 1 - .../coder/modules/claude-code/scripts/start.sh | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/registry/coder/modules/claude-code/scripts/install.sh b/registry/coder/modules/claude-code/scripts/install.sh index df10dac5b..0bca66755 100644 --- a/registry/coder/modules/claude-code/scripts/install.sh +++ b/registry/coder/modules/claude-code/scripts/install.sh @@ -1,6 +1,5 @@ #!/bin/bash - # Set strict error handling AFTER sourcing bashrc to avoid unbound variable errors from user dotfiles set -euo pipefail diff --git a/registry/coder/modules/claude-code/scripts/start.sh b/registry/coder/modules/claude-code/scripts/start.sh index 3e017143e..f2353de7a 100644 --- a/registry/coder/modules/claude-code/scripts/start.sh +++ b/registry/coder/modules/claude-code/scripts/start.sh @@ -264,13 +264,13 @@ function start_agentapi() { BOUNDARY_ARGS+=(--pprof-port "${ARG_BOUNDARY_PPROF_PORT}") fi -# if [[ "${ARG_REPORT_TASKS}" == "true" ]]; then -# boundary-run "${BOUNDARY_ARGS[@]}" -- \ -# claude "${ARGS[@]}" -# else - "${CORE_COMMAND[@]}" boundary-run "${BOUNDARY_ARGS[@]}" -- \ - claude "${ARGS[@]}" -# fi + # if [[ "${ARG_REPORT_TASKS}" == "true" ]]; then + # boundary-run "${BOUNDARY_ARGS[@]}" -- \ + # claude "${ARGS[@]}" + # else + "${CORE_COMMAND[@]}" boundary-run "${BOUNDARY_ARGS[@]}" -- \ + claude "${ARGS[@]}" + # fi else "${CORE_COMMAND[@]}" claude "${ARGS[@]}" fi