Compare commits

..

1 Commits

Author SHA1 Message Date
shokollm
a952204e15 fix: enforce MAX_CONCURRENT_AGENTS limit properly (fixes #63) 2026-04-01 02:12:19 +00:00
2 changed files with 6 additions and 49 deletions

View File

@@ -1,43 +0,0 @@
# Agent Concurrency Benchmark
**Date:** 2026-04-01
**Hardware:** 8GB RAM, 16 CPU cores
## Test Results
| Concurrent Agents | Status | Memory Usage | Notes |
|-------------------|--------|--------------|-------|
| 1 | ✓ Works | ~1.1GB idle | Baseline test |
| 3 | ✓ Works | ~1.1GB idle | Default limit |
| 5 | ✓ Works | ~1.1GB idle | Increased limit |
## Configuration
Default limit is set to **5 concurrent agents** in `skills/kugetsu/scripts/kugetsu`:
```bash
MAX_CONCURRENT_AGENTS="${MAX_CONCURRENT_AGENTS:-5}"
```
The limit can be overridden via environment variable:
```bash
MAX_CONCURRENT_AGENTS=3 kugetsu start <issue> <message>
```
## Observations
1. **Idle Memory:** ~1.1GB used even with sessions idle (includes system buffers)
2. **CPU:** 16 cores available - sufficient for multiple agents
3. **No Active Processes:** When sessions are idle, opencode processes are not actively running
## Recommendations
- **1-3 agents:** Safe for most workloads on 8GB RAM systems
- **5 agents:** Works but monitor memory if running additional services
- **More than 5:** Not tested - may require more RAM
## Notes
- Each agent session creates a worktree in `~/.kugetsu/worktrees/`
- Sessions are forked from base session using `opencode run --fork --continue --session`
- Idle sessions consume minimal resources

View File

@@ -937,23 +937,23 @@ cmd_continue() {
echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2 echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2
exit 1 exit 1
fi fi
trap release_agent_slot EXIT
if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then
echo "Using worktree: $worktree_path" echo "Using worktree: $worktree_path"
if [ "$DEBUG_MODE" = true ]; then 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 else
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 & opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path"
fi fi
else else
if [ "$DEBUG_MODE" = true ]; then 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 else
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 & opencode run "$message" --continue --session "$opencode_session_id"
fi fi
fi fi
local child_pid=$!
wait $child_pid
release_agent_slot release_agent_slot
trap - EXIT
} }
cmd_list() { cmd_list() {