--- name: clawteam-dev description: > This skill should be used when the user asks to "run e2e test", "test clawteam", "end-to-end test", "test agent team", "verify clawteam works", "dev test", or wants to validate the full ClawTeam lifecycle. Runs a complete end-to-end test: cleanup → create team → create tasks with dependencies → spawn agents → wait for completion → verify results → cleanup. version: 0.1.0 --- # ClawTeam End-to-End Test This skill runs a full lifecycle test of ClawTeam: cleanup residual state, create a team with tasks and dependency chains, spawn real Claude agents in tmux, wait for all tasks to complete, verify results, and clean up. ## Prerequisites - ClawTeam installed (`pip install -e .` from the ClawTeam repo) - `tmux` available - `claude` CLI available - Current directory is the ClawTeam git repo (for worktree isolation) ## Test Procedure Follow these steps **exactly in order**. Run each bash block and verify the expected output before proceeding to the next step. ### Step 1: Cleanup ALL Previous State Remove **all** residual clawteam teams, worktrees, tmux sessions, and branches from any prior runs. This ensures a clean slate regardless of what team names were used before or if a previous test crashed. ```bash # 1. Kill ALL clawteam tmux sessions for sess in $(tmux list-sessions -F '#{session_name}' 2>/dev/null | grep '^clawteam-'); do tmux kill-session -t "$sess" 2>/dev/null done echo "tmux sessions cleaned" # 2. Remove ALL clawteam worktrees for wt in $(git worktree list --porcelain | grep 'worktree.*/\.clawteam/' | awk '{print $2}'); do git worktree remove --force "$wt" 2>/dev/null done echo "worktrees cleaned" # 3. Delete ALL clawteam branches for br in $(git branch --list 'clawteam/*' | tr -d ' +'); do git branch -D "$br" 2>/dev/null done echo "branches cleaned" # 4. Remove all team/task/workspace data (preserve config.json) rm -rf ~/.clawteam/teams/ ~/.clawteam/tasks/ ~/.clawteam/workspaces/ ~/.clawteam/inboxes/ ~/.clawteam/events/ ~/.clawteam/plans/ echo "data cleaned" # 5. Verify clean state echo "=== Verification ===" git worktree list git branch --list 'clawteam/*' | grep . || echo "OK: no clawteam branches" tmux list-sessions 2>&1 | grep '^clawteam-' || echo "OK: no clawteam tmux sessions" ls ~/.clawteam/ 2>/dev/null ``` **Expected**: Only the main worktree remains, no clawteam branches, no clawteam tmux sessions, `~/.clawteam/` contains only `config.json`. ### Step 2: Set Leader Identity ```bash export CLAWTEAM_AGENT_ID="e2e-leader-001" export CLAWTEAM_AGENT_NAME="leader" export CLAWTEAM_AGENT_TYPE="leader" ``` These env vars MUST be set for all subsequent commands in this test. ### Step 3: Create Team ```bash clawteam team spawn-team e2e-test -d "End-to-end test team" -n leader ``` **Expected**: `OK Team 'e2e-test' created` ### Step 4: Create Tasks with Dependencies Create 3 tasks: 2 independent tasks and 1 dependent task that is blocked until both complete. ```bash T1=$(clawteam --json task create e2e-test "Implement feature A" -o worker1 -d "Add a hello() function to a new file hello.py" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])") T2=$(clawteam --json task create e2e-test "Implement feature B" -o worker2 -d "Add a goodbye() function to a new file goodbye.py" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])") T3=$(clawteam --json task create e2e-test "Write tests" -o worker3 -d "Write pytest tests for hello.py and goodbye.py" --blocked-by "$T1,$T2" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])") echo "Tasks created: T1=$T1 T2=$T2 T3=$T3" ``` **Expected**: Three task IDs printed. Then verify: ```bash clawteam task list e2e-test ``` **Expected**: worker1 and worker2 tasks are `pending`, worker3 task is `blocked`. ### Step 5: Spawn Agents Spawn 3 agents. Each gets its own git worktree and tmux window. ```bash clawteam spawn --team e2e-test --agent-name worker1 \ --task "Create hello.py with a hello() function that returns 'Hello, World!'. When done, mark your task as completed and send a summary to leader." clawteam spawn --team e2e-test --agent-name worker2 \ --task "Create goodbye.py with a goodbye() function that returns 'Goodbye, World!'. When done, mark your task as completed and send a summary to leader." clawteam spawn --team e2e-test --agent-name worker3 \ --task "Write pytest tests in test_all.py for hello.py (hello function) and goodbye.py (goodbye function). When done, mark your task as completed and send a summary to leader." ``` **Expected**: Each prints `OK Agent '' spawned in tmux (clawteam-e2e-test:)` with a workspace path. ### Step 6: Verify Team State ```bash clawteam team status e2e-test clawteam board show e2e-test git worktree list tmux list-windows -t clawteam-e2e-test ``` **Expected**: - 4 members (leader + 3 workers) - Board shows 2 pending, 1 blocked tasks - 3 worktrees under `~/.clawteam/workspaces/e2e-test/` - 3 tmux windows ### Step 7: Wait for All Tasks to Complete Block until all agents finish. Timeout 10 minutes, poll every 5 seconds. ```bash clawteam task wait e2e-test --timeout 600 --poll-interval 5 ``` **Expected**: - Progress updates as tasks complete (e.g., `1/3 tasks completed`) - Messages from workers displayed as they arrive - Final line: `All 3 tasks completed!` - Exit code 0 ### Step 8: Verify Results ```bash # All tasks should be completed clawteam task list e2e-test # Board should show 3 completed, 0 pending/blocked clawteam board show e2e-test # Read any remaining inbox messages clawteam inbox receive e2e-test ``` **Expected**: - All 3 tasks show status `completed` - Board shows 3 in COMPLETED column - Messages from workers summarizing their work ### Step 9: Cleanup Reuse the same full cleanup from Step 1 to remove everything created during this test. ```bash # Kill ALL clawteam tmux sessions for sess in $(tmux list-sessions -F '#{session_name}' 2>/dev/null | grep '^clawteam-'); do tmux kill-session -t "$sess" 2>/dev/null done # Remove ALL clawteam worktrees for wt in $(git worktree list --porcelain | grep 'worktree.*/\.clawteam/' | awk '{print $2}'); do git worktree remove --force "$wt" 2>/dev/null done # Delete ALL clawteam branches for br in $(git branch --list 'clawteam/*' | tr -d ' +'); do git branch -D "$br" 2>/dev/null done # Remove all team/task/workspace data (preserve config.json) rm -rf ~/.clawteam/teams/ ~/.clawteam/tasks/ ~/.clawteam/workspaces/ ~/.clawteam/inboxes/ ~/.clawteam/events/ ~/.clawteam/plans/ echo "E2E test cleanup complete" ``` **Expected**: `E2E test cleanup complete` ### Step 10: Final Verification ```bash git worktree list | grep -v '^\/' | head -1 # should show only main git branch --list 'clawteam/*' | grep . || echo "OK: no clawteam branches" tmux list-sessions 2>&1 | grep '^clawteam-' || echo "OK: no clawteam tmux sessions" ls ~/.clawteam/teams/ 2>&1 | grep -q "No such file" && echo "OK: no team data" ls ~/.clawteam/tasks/ 2>&1 | grep -q "No such file" && echo "OK: no task data" ls ~/.clawteam/workspaces/ 2>&1 | grep -q "No such file" && echo "OK: no workspace data" ``` **Expected**: All lines start with `OK:`. ## Test Variants ### With P2P Transport Add `--transport p2p` and `export CLAWTEAM_TRANSPORT=p2p` before Step 3 to test ZeroMQ direct messaging with file fallback. The rest of the steps remain the same. ### ⚠️ Do NOT use subprocess backend The `subprocess` backend causes agents to die immediately after the shell exits. **Always use the tmux backend** for persistent agent sessions. ## What This Test Validates | Component | Validated | |-----------|-----------| | `team spawn-team` | Team creation with leader | | `task create --blocked-by` | Task dependency chains | | `spawn` (tmux backend only) | Agent process launch with worktree isolation | | Identity propagation | Env vars passed to sub-agents | | Agent coordination | Workers update task status and send messages to leader | | Auto-unblock | Blocked task unblocked when dependencies complete | | `task wait` | Progress tracking, inbox drain, completion detection | | `inbox send/receive` | Point-to-point messaging between agents | | `board show` | Kanban board rendering | | `workspace` (auto) | Git worktree creation and isolation | | Cleanup | Worktree removal, branch deletion, data cleanup |