| name | setup-repo |
| description | Initialize a worktree-based repo layout for parallel development. Creates a main worktree, a reviews worktree for PR reviews, and N numbered work branches. Handles .env creation, dependency installation, and branchlet config. TRIGGER when user asks to set up the repo from scratch, initialize worktrees, bootstrap their dev environment, "setup repo", "setup worktrees", "initialize dev environment", "set up branches", or when a freshly cloned repo has no sibling worktrees. |
| user-invocable | true |
| args | No arguments — interactive setup via prompts. |
| metadata | {"author":"autogpt-team","version":"1.0.0"} |
Repository Setup
This skill sets up a worktree-based development layout from a freshly cloned repo. It creates:
- A main worktree (the primary checkout)
- A reviews worktree (for PR reviews)
- N work branches (branch1..branchN) for parallel development
Step 1: Identify the repo
Determine the repo root and parent directory:
ROOT=$(git rev-parse --show-toplevel)
REPO_NAME=$(basename "$ROOT")
PARENT=$(dirname "$ROOT")
Detect if the repo is already inside a worktree layout by counting sibling worktrees (not just checking the directory name, which could be anything):
SIBLING_COUNT=$(git worktree list --porcelain 2>/dev/null | grep "^worktree " | grep -c "$PARENT/" || true)
if [ "$SIBLING_COUNT" -gt 1 ]; then
echo "INFO: Existing worktree layout detected at $PARENT ($SIBLING_COUNT worktrees)"
else
echo "INFO: Fresh clone detected, proceeding with setup"
fi
Step 2: Ask the user questions
Use AskUserQuestion to gather setup preferences:
- How many parallel work branches do you need? (Options: 4, 8, 16, or custom)
- These become
branch1 through branchN
- Which branch should be the base? (Options: origin/master, origin/dev, or custom)
- All work branches and reviews will start from this
Step 3: Fetch and set up branches
cd "$ROOT"
git fetch origin
if git show-ref --verify --quiet refs/heads/reviews; then
echo "INFO: Branch 'reviews' already exists, skipping"
else
git branch reviews <base-branch>
fi
for i in $(seq 1 "$COUNT"); do
if git show-ref --verify --quiet "refs/heads/branch$i"; then
echo "INFO: Branch 'branch$i' already exists, skipping"
else
git branch "branch$i" <base-branch>
fi
done
Step 4: Create worktrees
Create worktrees as siblings to the main checkout:
if [ -d "$PARENT/reviews" ]; then
echo "INFO: Worktree '$PARENT/reviews' already exists, skipping"
else
git worktree add "$PARENT/reviews" reviews
fi
for i in $(seq 1 "$COUNT"); do
if [ -d "$PARENT/branch$i" ]; then
echo "INFO: Worktree '$PARENT/branch$i' already exists, skipping"
else
git worktree add "$PARENT/branch$i" "branch$i"
fi
done
Step 5: Set up environment files
Do NOT assume .env files exist. For each worktree (including main if needed):
- Check if
.env exists in the source worktree for each path
- If
.env exists, copy it
- If only
.env.default or .env.example exists, copy that as .env
- If neither exists, warn the user and list which env files are missing
Env file locations to check (same as the /worktree skill — keep these in sync):
autogpt_platform/.env
autogpt_platform/backend/.env
autogpt_platform/frontend/.env
Note: This env copying logic intentionally mirrors the /worktree skill's approach. If you update the path list or fallback logic here, update /worktree as well.
SOURCE="$ROOT"
WORKTREES="reviews"
for i in $(seq 1 "$COUNT"); do WORKTREES="$WORKTREES branch$i"; done
FOUND_ANY_ENV=0
for wt in $WORKTREES; do
TARGET="$PARENT/$wt"
for envpath in autogpt_platform autogpt_platform/backend autogpt_platform/frontend; do
if [ -f "$SOURCE/$envpath/.env" ]; then
FOUND_ANY_ENV=1
cp "$SOURCE/$envpath/.env" "$TARGET/$envpath/.env"
elif [ -f "$SOURCE/$envpath/.env.default" ]; then
FOUND_ANY_ENV=1
cp "$SOURCE/$envpath/.env.default" "$TARGET/$envpath/.env"
echo "NOTE: $wt/$envpath/.env was created from .env.default — you may need to edit it"
elif [ -f "$SOURCE/$envpath/.env.example" ]; then
FOUND_ANY_ENV=1
cp "$SOURCE/$envpath/.env.example" "$TARGET/$envpath/.env"
echo "NOTE: $wt/$envpath/.env was created from .env.example — you may need to edit it"
else
echo "WARNING: No .env, .env.default, or .env.example found at $SOURCE/$envpath/"
fi
done
done
if [ "$FOUND_ANY_ENV" -eq 0 ]; then
echo "WARNING: No environment files or templates were found in the source worktree."
fi
Step 6: Copy branchlet config
Copy .branchlet.json from main to each worktree so branchlet can manage sub-worktrees:
if [ -f "$ROOT/.branchlet.json" ]; then
for wt in $WORKTREES; do
cp "$ROOT/.branchlet.json" "$PARENT/$wt/.branchlet.json"
done
fi
Step 7: Install dependencies
Install deps in all worktrees. Run these sequentially per worktree:
for wt in $WORKTREES; do
TARGET="$PARENT/$wt"
echo "=== Installing deps for $wt ==="
(cd "$TARGET/autogpt_platform/autogpt_libs" && poetry install) &&
(cd "$TARGET/autogpt_platform/backend" && poetry install && poetry run prisma generate) &&
(cd "$TARGET/autogpt_platform/frontend" && pnpm install) &&
echo "=== Done: $wt ===" ||
echo "=== FAILED: $wt ==="
done
This is slow. Run in background if possible and notify when complete.
Step 8: Verify and report
After setup, verify and report to the user:
git worktree list
Summarize:
- Number of worktrees created
- Which env files were copied vs created from defaults vs missing
- Any warnings or errors encountered
Final directory layout
parent/
main/ # Primary checkout (already exists)
reviews/ # PR review worktree
branch1/ # Work branch 1
branch2/ # Work branch 2
...
branchN/ # Work branch N