@@ -54,6 +54,12 @@ variable "experiment_use_screen" {
54
54
default = false
55
55
}
56
56
57
+ variable "experiment_use_tmux" {
58
+ type = bool
59
+ description = " Whether to use tmux instead of screen for running Claude Code in the background."
60
+ default = false
61
+ }
62
+
57
63
variable "experiment_report_tasks" {
58
64
type = bool
59
65
description = " Whether to enable task reporting."
@@ -122,6 +128,39 @@ resource "coder_script" "claude_code" {
122
128
coder exp mcp configure claude-code ${ var . folder }
123
129
fi
124
130
131
+ # Handle terminal multiplexer selection (tmux or screen)
132
+ if [ "${ var . experiment_use_tmux } " = "true" ] && [ "${ var . experiment_use_screen } " = "true" ]; then
133
+ echo "Error: Both experiment_use_tmux and experiment_use_screen cannot be true simultaneously."
134
+ echo "Please set only one of them to true."
135
+ exit 1
136
+ fi
137
+
138
+ # Run with tmux if enabled
139
+ if [ "${ var . experiment_use_tmux } " = "true" ]; then
140
+ echo "Running Claude Code in the background with tmux..."
141
+
142
+ # Check if tmux is installed
143
+ if ! command_exists tmux; then
144
+ echo "Error: tmux is not installed. Please install tmux manually."
145
+ exit 1
146
+ fi
147
+
148
+ touch "$HOME/.claude-code.log"
149
+
150
+ export LANG=en_US.UTF-8
151
+ export LC_ALL=en_US.UTF-8
152
+
153
+ # Create a new tmux session in detached mode
154
+ tmux new-session -d -s claude-code -c ${ var . folder } "claude"
155
+
156
+ # Send the prompt to the tmux session if needed
157
+ if [ -n "$CODER_MCP_CLAUDE_TASK_PROMPT" ]; then
158
+ tmux send-keys -t claude-code "$CODER_MCP_CLAUDE_TASK_PROMPT"
159
+ sleep 5
160
+ tmux send-keys -t claude-code Enter
161
+ fi
162
+ fi
163
+
125
164
# Run with screen if enabled
126
165
if [ "${ var . experiment_use_screen } " = "true" ]; then
127
166
echo "Running Claude Code in the background..."
@@ -182,20 +221,27 @@ resource "coder_app" "claude_code" {
182
221
#!/bin/bash
183
222
set -e
184
223
185
- if [ "${ var . experiment_use_screen } " = "true" ]; then
224
+ export LANG=en_US.UTF-8
225
+ export LC_ALL=en_US.UTF-8
226
+
227
+ if [ "${ var . experiment_use_tmux } " = "true" ]; then
228
+ if tmux has-session -t claude-code 2>/dev/null; then
229
+ echo "Attaching to existing Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
230
+ tmux attach-session -t claude-code
231
+ else
232
+ echo "Starting a new Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
233
+ tmux new-session -s claude-code -c ${ var . folder } "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\"; exec bash"
234
+ fi
235
+ elif [ "${ var . experiment_use_screen } " = "true" ]; then
186
236
if screen -list | grep -q "claude-code"; then
187
- export LANG=en_US.UTF-8
188
- export LC_ALL=en_US.UTF-8
189
- echo "Attaching to existing Claude Code session." | tee -a "$HOME/.claude-code.log"
237
+ echo "Attaching to existing Claude Code screen session." | tee -a "$HOME/.claude-code.log"
190
238
screen -xRR claude-code
191
239
else
192
- echo "Starting a new Claude Code session." | tee -a "$HOME/.claude-code.log"
193
- screen -S claude-code bash -c 'export LANG=en_US.UTF-8; export LC_ALL=en_US.UTF-8; claude --dangerously-skip-permissions | tee -a "$HOME/.claude-code.log"; exec bash'
240
+ echo "Starting a new Claude Code screen session." | tee -a "$HOME/.claude-code.log"
241
+ screen -S claude-code bash -c 'claude --dangerously-skip-permissions | tee -a "$HOME/.claude-code.log"; exec bash'
194
242
fi
195
243
else
196
244
cd ${ var . folder }
197
- export LANG=en_US.UTF-8
198
- export LC_ALL=en_US.UTF-8
199
245
claude
200
246
fi
201
247
EOT
0 commit comments