with one click
cella-testing
// Use when running a systematic test sweep of the cella worktree/task system from inside a container. Also use after modifying the daemon, agent CLI, or task manager, before releases, or after bug fixes.
// Use when running a systematic test sweep of the cella worktree/task system from inside a container. Also use after modifying the daemon, agent CLI, or task manager, before releases, or after bug fixes.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | cella-testing |
| description | Use when running a systematic test sweep of the cella worktree/task system from inside a container. Also use after modifying the daemon, agent CLI, or task manager, before releases, or after bug fixes. |
Systematic verification of the cella worktree-container-task system. Run this from inside a running cella container to validate that branch creation, exec routing, task dispatch, and lifecycle management all work correctly.
Cella gives each git branch its own isolated dev container. This test sweep exercises the full stack: daemon connectivity, branch creation (typically 30-80s each depending on cache), cross-container exec, background task dispatch with timeouts, and container lifecycle (stop/start/remove/prune). It catches regressions in the daemon, agent CLI, and task manager.
You must be inside a cella container. Verify:
cella doctor
Must exit 0. If it fails, the daemon is not reachable — no point continuing.
Check version:
cella doctor --json
The JSON output contains a daemon_version field. The text output of cella doctor (without --json) also prints the agent version in its banner. Verify these match.
Pre-existing branches: If test/a, test/b, or test/deep/nested/name already exist as git branches (e.g., from a previous failed run), cella branch handles them idempotently — it creates the worktree and container without error.
cella doctor
cella doctor --json
cella list
cella list --json
Expected results:
cella doctor exits 0cella doctor --json returns valid JSON with a daemon_version fieldcella list shows at least one container with * marking the current onecella list --json returns valid JSON arraycella branch test/a
cella exec test/a -- echo "works"
cella exec test/a -- cella exec main -- echo "roundtrip"
cella branch test/b
cella exec test/a -- cella exec test/b -- echo "wt-to-wt"
Expected results:
cella branch test/a exits 0 (takes ~80s)cella exec test/a -- echo "works" exits 0, stdout contains "works"main targets the primary worktree container, which may be running any branch — not necessarily a branch named maincella branch test/b exits 0 (takes ~80s)cella task run test/a -- echo "done"
cella task list
cella task run test/b --timeout 5 -- sleep 30
sleep 7
cella task list
cella task logs test/b
Expected results:
echo "done") completes almost instantly; cella task list shows status done with ~0s elapsedsleep 30 with --timeout 5) shows status timed_out after ~7s, with elapsed frozen at ~5scella task logs test/b may show "Task timed out after 5s" or be empty — the timed_out status in cella task list is what mattersexited state (for unrelated reasons), restart it with cella up test/b before continuing.cella task run test/a --timeout 120 -- claude --dangerously-skip-permissions -p "Create /tmp/test.txt with 'hello'"
cella task run test/b --timeout 120 -- bash -c 'codex exec "Create /tmp/test.txt with hello"'
cella task wait test/a
cella task wait test/b
cella exec test/a -- cat /tmp/test.txt
cella exec test/b -- cat /tmp/test.txt
Expected results:
done)/tmp/test.txt exists in both containers with expected contentNote: This phase requires Claude Code and Codex to be installed in the containers. Skip if not available. If an agent is installed but times out (status timed_out), report it as a partial pass — the task dispatch mechanism is working correctly even if the agent itself is slow. Consider increasing --timeout for slower agents.
cella up test/a 2>&1 | grep -c '{' || true # expect count 0
cella down test/a 2>&1 | grep -c '{' || true # expect count 0
Expected results:
grep -c exits with code 1 when the count is 0 (no matches). The || true prevents this from being misread as a test failure. Check the printed count, not the exit code.Note: Phase 5's cella down test/a leaves it stopped. Phase 6 starts with cella down test/a which is intentionally idempotent — it confirms the stopped state rather than changing it.
cella down test/a
cella list | grep test/a # should show "exited"
cella up test/a
cella list | grep test/a # should show "running"
cella prune --dry-run --all # should list branches that would be pruned
cella down test/a --rm
cella down test/b --rm
cella list # test/a and test/b should be gone
cella task list # task records for test/a and test/b should be gone
Expected results:
cella down test/a: container shows "exited" in cella listcella up test/a: container shows "running" in cella listcella prune --dry-run --all exits 0 and lists individual branches that would be prunedcella down test/a --rm and cella down test/b --rm: both containers, worktrees, and task records are removeddown --rm fails with ContainerNotFound, the container was already gone — use cella prune --missing-worktree to clean up the orphaned entrycella branch test/deep/nested/name
cella exec test/deep/nested/name -- bash -c 'echo "quotes" && echo $HOME'
cella task run test/deep/nested/name --timeout 30 -- echo "rapid"
cella down test/deep/nested/name --rm
Expected results:
Always clean up test branches when done. Run these even if tests fail partway through:
cella down test/a --rm 2>/dev/null
cella down test/b --rm 2>/dev/null
cella down test/deep/nested/name --rm 2>/dev/null
Verify cleanup:
cella list # no test/* entries
cella task list # no test/* entries
If a branch disappears or a phase fails partway through:
cella branch test/a and retry. If the removal was deliberate (testing failure handling), skip dependent tests instead — don't recreate.exited state when a phase needs it running, use cella up <branch> to restart before continuing.2>/dev/null to suppress errors for already-removed branches. Run it regardless of which phases succeeded.cella doctor reports unexpected results