From bd4e8587b4b30d31ead1b7de1cbd509b4ccec72f Mon Sep 17 00:00:00 2001 From: shokollm <270575765+shokollm@users.noreply.github.com> Date: Wed, 1 Apr 2026 03:05:13 +0000 Subject: [PATCH] fix: enforce MAX_CONCURRENT_AGENTS limit properly (fixes #63) - Fixed cmd_start() and cmd_continue() to wait for forked child - Capture child PID with $! and wait before release_agent_slot - This ensures slot is only released after child process completes --- skills/kugetsu/scripts/kugetsu | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index 9b876bd..ee7cc02 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -857,14 +857,14 @@ cmd_start() { remove_worktree_for_issue "$issue_ref" exit 1 fi - trap release_agent_slot EXIT if [ "$DEBUG_MODE" = true ]; then - opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log" + opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log" & else - opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 + opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 & fi + local child_pid=$! + wait $child_pid release_agent_slot - trap - EXIT local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) local new_session_id="" @@ -937,23 +937,23 @@ cmd_continue() { echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2 exit 1 fi - trap release_agent_slot EXIT if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then echo "Using worktree: $worktree_path" if [ "$DEBUG_MODE" = true ]; then - opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 | tee "$session_path.debug.log" + opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 | tee "$session_path.debug.log" & else - opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" + opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 & fi else if [ "$DEBUG_MODE" = true ]; then - opencode run "$message" --continue --session "$opencode_session_id" 2>&1 | tee "$session_path.debug.log" + opencode run "$message" --continue --session "$opencode_session_id" 2>&1 | tee "$session_path.debug.log" & else - opencode run "$message" --continue --session "$opencode_session_id" + opencode run "$message" --continue --session "$opencode_session_id" 2>&1 & fi fi + local child_pid=$! + wait $child_pid release_agent_slot - trap - EXIT } cmd_list() {