Skip to content

Commit 662208a

Browse files
fix: streamline installation and session management in claude-code module
- Removed redundant comments and improved script clarity. - Enhanced session management for tmux, ensuring proper handling of existing sessions.
1 parent a981c3c commit 662208a

File tree

1 file changed

+23
-30
lines changed
  • registry/coder/modules/claude-code

1 file changed

+23
-30
lines changed

registry/coder/modules/claude-code/main.tf

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,10 @@ resource "coder_script" "claude_code" {
110110
#!/bin/bash
111111
set -e
112112
113-
# Function to check if a command exists
114113
command_exists() {
115114
command -v "$1" >/dev/null 2>&1
116115
}
117116
118-
# Function to install tmux if needed
119117
install_tmux() {
120118
echo "Installing tmux..."
121119
if command_exists apt-get; then
@@ -134,7 +132,6 @@ resource "coder_script" "claude_code" {
134132
fi
135133
}
136134
137-
# Check if the specified folder exists
138135
if [ ! -d "${var.folder}" ]; then
139136
echo "Warning: The specified folder '${var.folder}' does not exist."
140137
echo "Creating the folder..."
@@ -143,23 +140,18 @@ resource "coder_script" "claude_code" {
143140
mkdir -p "${var.folder}"
144141
echo "Folder created successfully."
145142
fi
146-
147-
# Run pre-install script if provided
148143
if [ -n "${local.encoded_pre_install_script}" ]; then
149144
echo "Running pre-install script..."
150145
echo "${local.encoded_pre_install_script}" | base64 -d > /tmp/pre_install.sh
151146
chmod +x /tmp/pre_install.sh
152147
/tmp/pre_install.sh
153148
fi
154149
155-
# Install Claude Code if enabled
156150
if [ "${var.install_claude_code}" = "true" ]; then
157-
# Check if npm is available, if not try to install Node.js using NVM
158151
if ! command_exists npm; then
159152
echo "npm not found, checking for Node.js installation..."
160153
if ! command_exists node; then
161154
echo "Node.js not found, installing Node.js via NVM..."
162-
# Install NVM
163155
export NVM_DIR="$HOME/.nvm"
164156
if [ ! -d "$NVM_DIR" ]; then
165157
mkdir -p "$NVM_DIR"
@@ -169,7 +161,6 @@ resource "coder_script" "claude_code" {
169161
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
170162
fi
171163
172-
# Install Node.js LTS version
173164
nvm install --lts
174165
nvm use --lts
175166
nvm alias default node
@@ -190,40 +181,32 @@ resource "coder_script" "claude_code" {
190181
coder exp mcp configure claude-code ${var.folder}
191182
fi
192183
193-
# Run post-install script if provided
194184
if [ -n "${local.encoded_post_install_script}" ]; then
195185
echo "Running post-install script..."
196186
echo "${local.encoded_post_install_script}" | base64 -d > /tmp/post_install.sh
197187
chmod +x /tmp/post_install.sh
198188
/tmp/post_install.sh
199189
fi
200190
201-
# Handle terminal multiplexer selection (tmux or screen)
202191
if [ "${var.experiment_use_tmux}" = "true" ] && [ "${var.experiment_use_screen}" = "true" ]; then
203192
echo "Error: Both experiment_use_tmux and experiment_use_screen cannot be true simultaneously."
204193
echo "Please set only one of them to true."
205194
exit 1
206195
fi
207196
208-
# Validate session persistence requirements
209197
if [ "${var.experiment_tmux_session_persistence}" = "true" ] && [ "${var.experiment_use_tmux}" != "true" ]; then
210198
echo "Error: Session persistence requires tmux to be enabled."
211199
echo "Please set experiment_use_tmux = true when using session persistence."
212200
exit 1
213201
fi
214202
215-
# Install and configure tmux if enabled
216203
if [ "${var.experiment_use_tmux}" = "true" ]; then
217-
# Install tmux if not present
218204
if ! command_exists tmux; then
219205
install_tmux
220206
fi
221207
222-
# Configure tmux session persistence if enabled
223208
if [ "${var.experiment_tmux_session_persistence}" = "true" ]; then
224209
echo "Setting up tmux session persistence..."
225-
226-
# Check and install git if needed
227210
if ! command_exists git; then
228211
echo "Git not found, installing git..."
229212
if command_exists apt-get; then
@@ -243,28 +226,27 @@ resource "coder_script" "claude_code" {
243226
fi
244227
fi
245228
246-
# Install TPM and plugins
247229
mkdir -p ~/.tmux/plugins
248230
if [ ! -d ~/.tmux/plugins/tpm ]; then
249231
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
250232
fi
251233
252-
# Configure .tmux.conf for persistence
253234
cat > ~/.tmux.conf << EOF
254235
# Claude Code tmux persistence configuration
255236
set -g @plugin 'tmux-plugins/tmux-resurrect'
256237
set -g @plugin 'tmux-plugins/tmux-continuum'
257238
258239
# Configure session persistence
259240
set -g @resurrect-processes 'claude'
241+
set -g @resurrect-capture-pane-contents 'on'
260242
set -g @continuum-restore 'on'
261243
set -g @continuum-save-interval '${var.experiment_tmux_session_save_interval}'
244+
set -g @continuum-boot 'on'
262245
263246
# Initialize plugin manager
264247
run '~/.tmux/plugins/tpm/tpm'
265248
EOF
266249
267-
# Install plugins
268250
~/.tmux/plugins/tpm/scripts/install_plugins.sh
269251
fi
270252
@@ -273,25 +255,33 @@ EOF
273255
export LANG=en_US.UTF-8
274256
export LC_ALL=en_US.UTF-8
275257
276-
# Create or attach to session (persistence handles restoration automatically)
277-
if ! tmux has-session -t claude-code 2>/dev/null; then
278-
tmux new-session -d -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""
258+
if [ "${var.experiment_tmux_session_persistence}" = "true" ]; then
259+
sleep 3
260+
261+
if tmux has-session -t claude-code 2>/dev/null; then
262+
# Existing session - only start Claude if not running (no prompt)
263+
if ! tmux list-panes -t claude-code -F '#{pane_current_command}' | grep -q "claude"; then
264+
tmux send-keys -t claude-code "cd ${var.folder} && claude --dangerously-skip-permissions" C-m
265+
fi
266+
else
267+
# New session - include prompt
268+
tmux new-session -d -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""
269+
fi
270+
else
271+
if ! tmux has-session -t claude-code 2>/dev/null; then
272+
tmux new-session -d -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\""
273+
fi
279274
fi
280275
fi
281276
282-
# Run with screen if enabled
283277
if [ "${var.experiment_use_screen}" = "true" ]; then
284278
echo "Running Claude Code in the background..."
285-
286-
# Check if screen is installed
287279
if ! command_exists screen; then
288280
echo "Error: screen is not installed. Please install screen manually."
289281
exit 1
290282
fi
291283
292284
touch "$HOME/.claude-code.log"
293-
294-
# Ensure the screenrc exists
295285
if [ ! -f "$HOME/.screenrc" ]; then
296286
echo "Creating ~/.screenrc and adding multiuser settings..." | tee -a "$HOME/.claude-code.log"
297287
echo -e "multiuser on\nacladd $(whoami)" > "$HOME/.screenrc"
@@ -316,7 +306,6 @@ EOF
316306
exec bash
317307
'
318308
else
319-
# Check if claude is installed before running
320309
if ! command_exists claude; then
321310
echo "Error: Claude Code is not installed. Please enable install_claude_code or install it manually."
322311
exit 1
@@ -343,7 +332,11 @@ resource "coder_app" "claude_code" {
343332
tmux attach-session -t claude-code
344333
else
345334
echo "Starting a new Claude Code tmux session." | tee -a "$HOME/.claude-code.log"
346-
tmux new-session -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\"; exec bash"
335+
if [ -n "$CODER_MCP_CLAUDE_TASK_PROMPT" ]; then
336+
tmux new-session -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions \"$CODER_MCP_CLAUDE_TASK_PROMPT\" | tee -a \"$HOME/.claude-code.log\"; exec bash"
337+
else
338+
tmux new-session -s claude-code -c ${var.folder} "claude --dangerously-skip-permissions | tee -a \"$HOME/.claude-code.log\"; exec bash"
339+
fi
347340
fi
348341
elif [ "${var.experiment_use_screen}" = "true" ]; then
349342
if screen -list | grep -q "claude-code"; then

0 commit comments

Comments
 (0)