home / skills / mthines / gw-tools / @gw-config-management
This skill helps you configure and optimize gw tooling for various project types, automating setup, auto-copy, and troubleshooting for Next.js, Node.js, and
npx playbooks add skill mthines/gw-tools --skill @gw-config-managementReview the files below or copy the command above to add this skill to your agents.
---
name: '@gw-config-management'
description: Configure and optimize gw-tools for different project types and team needs. Use this skill when setting up gw for new projects, configuring auto-copy files, troubleshooting configuration issues, or customizing gw for Next.js, Node.js APIs, monorepos, or React SPAs. Triggers on tasks involving .gw/config.json, auto-copy patterns, environment files, or gw init commands.
license: MIT
metadata:
author: mthines
version: '1.0.0'
---
# Configuration Management - Comprehensive Guide
This guide teaches you how to configure gw for optimal workflows across different project types.
## Table of Contents
1. [Understanding gw Configuration](#1-understanding-gw-configuration)
2. [Configuration Options Reference](#2-configuration-options-reference)
3. [Initial Setup: Secrets in the Default Branch](#3-initial-setup-secrets-in-the-default-branch)
4. [Auto-Copy Strategies](#4-auto-copy-strategies)
5. [Project-Type Configuration Patterns](#5-project-type-configuration-patterns)
6. [Team Configuration Management](#6-team-configuration-management)
7. [Advanced Configuration Techniques](#7-advanced-configuration-techniques)
8. [Troubleshooting Configuration](#8-troubleshooting-configuration)
---
## 1. Understanding gw Configuration
### Config File Location
gw stores configuration at `.gw/config.json` in your repository:
```
/projects/myapp.git/
├── main/ # Main worktree
│ ├── src/
│ ├── .gw/
│ │ └── config.json # ← Configuration file
│ └── package.json
├── feature-a/ # Other worktrees
└── feature-b/
```
### Auto-Detection vs Manual Configuration
**Auto-detection (recommended for most cases):**
```bash
$ cd /projects/myapp/main
$ gw init
Repository root detected: /projects/myapp.git
Default branch detected: main
Configuration created at .gw/config.json
```
gw automatically detects:
- Repository root (parent directory containing worktrees)
- Default branch (main, master, or current branch)
**Manual configuration (when auto-detection fails):**
```bash
$ gw init --root /projects/myapp.git \
--default-branch main \
--auto-copy-files .env,.env.local,secrets/
```
**Interactive configuration (for guided setup):**
```bash
$ gw init --interactive
Interactive Configuration
Press Enter to accept defaults. Leave blank to skip optional settings.
Default source worktree name [main]: main
Do you want to auto-copy files when creating worktrees? (y/n) [n]: y
Enter comma-separated file/directory paths (e.g., .env,secrets/)
Files to auto-copy: .env,.env.local,secrets/
Do you want to add post-add hooks? (y/n) [n]: y
Enter commands to run after creating worktrees
Variables: {worktree}, {worktreePath}, {gitRoot}, {branch}
Post-add hook 1 (leave blank to finish): pnpm install
Post-add hook 2 (leave blank to finish):
Days before worktrees are considered stale [7]: 14
Prompt to cleanup stale worktrees after add/list? (y/n) [n]: n
✓ Configuration created successfully
```
Interactive mode is useful when:
- Setting up gw for the first time
- You're unsure about configuration options
- You want to explore all available settings
- Onboarding new team members who need guidance
### Network Behavior and Offline Support
The `gw add` command follows a **remote-first approach** when creating new branches to ensure you're always working with the latest code:
**Remote-First Design:**
When you create a new branch (e.g., `gw add feat/new-feature`), gw:
1. Fetches the latest version of the source branch from the remote (e.g., `origin/main`)
2. Creates your new branch from the fresh remote ref
3. Sets up tracking to your new branch's remote counterpart (e.g., `origin/feat/new-feature`)
**Why this matters:**
- **Prevents conflicts**: Your branch starts from the latest remote code, not a potentially outdated local branch
- **Ensures fresh code**: You're building on the most recent changes from your team
- **Reduces merge pain**: Fewer surprises when you eventually merge back
- **Team synchronization**: Everyone starts from the same point
**Automatic Fallback for Offline Work:**
The command has intelligent fallback behavior based on how you use it:
| Command | Fetch Behavior | Fallback |
| -------------------------------- | ------------------------ | --------------------------------------- |
| `gw add feat/new` | Fetches `origin/main` | Falls back to local `main` with warning |
| `gw add feat/new --from develop` | Fetches `origin/develop` | **No fallback** - exits with error |
**When `--from` is specified**, gw assumes you need that exact source and requires a successful remote fetch. If the fetch fails, you'll get:
- Clear error message about why the fetch failed
- Troubleshooting steps (check network, verify branch exists, check auth)
- Alternative command suggestions
**When using default branch** (no `--from`), gw allows local fallback for offline development or when no remote is configured. You'll see:
- Warning that remote fetch failed
- Explanation that start point may not be current
- Note that this is acceptable for offline work
- Confirmation that local branch is being used
**Example output (offline scenario):**
```bash
$ gw add feat/offline
Branch feat/offline doesn't exist, creating from main...
Fetching latest from remote to ensure fresh start point...
⚠ WARNING Could not fetch from remote
Falling back to local branch. The start point may not be up-to-date with remote.
This is acceptable for offline development or when remote is unavailable.
Creating from main (local branch)
Creating worktree: feat/offline
```
**Strictness Levels:**
- **Lenient**: `gw add feat/new` - Allows local fallback for offline work
- **Strict**: `gw add feat/new --from develop` - Requires fresh remote ref, no fallback
- **Manual override**: Can always use local branches explicitly with `git worktree add`
**Clone and initialize (new repositories):**
```bash
# Clone a repository and automatically set up gw
$ gw init [email protected]:user/repo.git
Cloning repository from [email protected]:user/repo.git...
✓ Repository cloned to repo
Setting up gw_root branch...
✓ Created gw_root branch
Initializing gw configuration...
✓ Configuration created
Creating main worktree...
✓ Created main worktree
✓ Repository initialized successfully!
Repository: /projects/repo
Config: /projects/repo/.gw/config.json
Default worktree: main
```
Clone mode automatically:
- Clones the repository with `--no-checkout`
- Creates a `gw_root` branch
- Auto-detects the default branch from the remote
- Creates gw configuration
- Creates the default branch worktree
- Uses `.git` suffix for the repository directory (bare repo convention)
- Navigates you to the repository directory (with shell integration)
You can also specify a custom directory and configuration:
```bash
# Clone into a specific directory with configuration
$ gw init [email protected]:user/repo.git my-project \
--auto-copy-files .env,secrets/ \
--post-add "pnpm install"
# Clone and configure interactively
$ gw init https://github.com/user/repo.git --interactive
```
### Configuration Scope
Configuration is **per-repository**, not global:
- Each repository has its own `.gw/config.json`
- Different repos can have different configurations
- Configuration is shared across all worktrees in that repo
### Config Precedence and Defaults
If no configuration exists:
1. `gw` searches for `.gw/config.json` walking up from current directory
2. If not found, attempts auto-detection on first `gw add` command
3. Uses fallback defaults:
- `root`: Auto-detected from `git worktree list`
- `defaultBranch`: "main"
- `autoCopyFiles`: `[]` (nothing copied automatically)
---
## 2. Configuration Options Reference
### Complete Configuration Structure
```jsonc
{
"root": "/absolute/path/to/repo.git",
"defaultBranch": "main",
// Auto-copy these files to new worktrees
"autoCopyFiles": [".env", ".env.local", "secrets/", "config/local.json"],
"updateStrategy": "merge", // or "rebase"
"cleanThreshold": 7,
"autoClean": true, // trailing comma OK
}
```
**JSONC Support:** The `.gw/config.json` file supports JSONC (JSON with Comments), allowing you to document your configuration directly in the file. You can use `//` for single-line comments or `/* */` for multi-line comments. Trailing commas are also supported for cleaner diffs. When `gw` saves the configuration, it writes clean JSON without comments.
### `root`: Repository Root Path
**Purpose:** Absolute path to the parent directory containing all worktrees.
**Example:**
```json
{
"root": "/Users/you/projects/myapp.git"
}
```
**How it's used:**
- Resolving worktree names to absolute paths
- Finding source files for auto-copy
- Determining worktree relationships
**When to set manually:**
- Auto-detection fails (unusual directory structure)
- Repository has non-standard naming
- Using symlinks or network drives
### `defaultBranch`: Default Source Worktree
**Purpose:** Which worktree to copy files from by default.
**Example:**
```json
{
"defaultBranch": "develop"
}
```
**Common values:**
- `"main"` - Most projects
- `"master"` - Older projects
- `"develop"` - Gitflow workflow
- `"staging"` - Copy from staging environment
**How it's used:**
- `gw add feature-x` copies from `defaultBranch` worktree
- `gw sync target file.txt` syncs from `defaultBranch` unless `--from` specified
- `gw sync target` (without files) syncs `autoCopyFiles` from `defaultBranch`
- `gw update` fetches and updates from `defaultBranch` unless `--from` specified
- **Auto-clean never removes this worktree** - it's protected as the source for file syncing
**Important:** Ensure your secrets and environment files exist in the `defaultBranch` worktree **before** using `gw add` or `gw sync`. This worktree is the source from which files are copied.
### `updateStrategy`: Default Update Strategy
**Purpose:** Choose default strategy for `gw update` command - merge or rebase.
**Example:**
```json
{
"updateStrategy": "rebase"
}
```
**Valid values:**
- `"merge"` (default) - Creates merge commits, preserves complete history
- `"rebase"` - Replays commits for linear history, rewrites history
**How it's used:**
- `gw update` uses this strategy by default
- Can be overridden per-command with `--merge` or `--rebase` flags
- Strategy precedence: CLI flags > config > default (merge)
**Which strategy to choose:**
Use **merge** when:
- You want to preserve complete commit history
- Working on shared branches where others may have pulled your commits
- You prefer explicit merge commits showing when branches were integrated
- Team prefers "true history" approach
Use **rebase** when:
- You want a linear, clean commit history
- Working on personal feature branches not shared with others
- You're comfortable with rewriting history
- Team prefers clean, linear history approach
**Important:** Rebase rewrites commit history. Only use it on branches you haven't shared with others, or ensure your team understands the implications.
### `autoCopyFiles`: File Patterns to Auto-Copy
**Purpose:** Files/directories automatically copied when creating worktrees.
**Example:**
```json
{
"autoCopyFiles": [".env", ".env.local", "secrets/api-keys.json", "config/", "ssl/"]
}
```
**Pattern types:**
1. **Exact files:** `".env"` - Single file
2. **Directories:** `"secrets/"` - Entire directory (recursive)
3. **Nested paths:** `"config/local.json"` - Specific nested file
**How it's used:**
- `gw add feature-x` automatically copies these files when creating worktrees
- `gw sync feature-x` (without file arguments) syncs these files to existing worktrees
**Important notes:**
- Paths are relative to repository root
- Directories should end with `/`
- Files are copied, not symlinked
- Non-existent files are skipped with warning
### `cleanThreshold`: Worktree Cleanup Age
**Purpose:** Number of days before worktrees are considered stale when using `gw clean --use-autoclean-threshold` or auto-cleanup.
**Example:**
```json
{
"cleanThreshold": 7
}
```
**Common values:**
- `7` - Default (one week)
- `14` - Two weeks (more lenient)
- `3` - Three days (aggressive cleanup)
- `30` - One month (very lenient)
**How it's used:**
- `gw clean` (default) removes ALL safe worktrees regardless of age
- `gw clean --use-autoclean-threshold` removes only worktrees older than this threshold
- Auto-cleanup (via `autoClean` setting) respects this threshold
- Only removes worktrees with no uncommitted changes and no unpushed commits (unless `--force`)
- `gw clean --dry-run` or `gw clean --use-autoclean-threshold --dry-run` previews which worktrees would be removed
**Setting the threshold:**
```bash
# Set during initialization
gw init --clean-threshold 14
# Or manually edit .gw/config.json
```
**Important notes:**
- Age is calculated from the worktree's `.git` file modification time
- Bare/main repository worktrees are never removed
- Use `--force` flag to bypass safety checks (not recommended)
### `autoClean`: Interactive Cleanup Prompts
**Purpose:** Enable interactive prompts to clean up stale worktrees automatically after `gw add` and `gw list` commands.
**Example:**
```json
{
"autoClean": true,
"cleanThreshold": 7
}
```
**How it works:**
- Prompts appear after `gw add` or `gw list` when stale worktrees are detected
- Only prompts once per 24 hours (cooldown period)
- Shows: `🧹 Found 2 stale worktrees (7+ days old). Clean them up? [Y/n]:`
- Press Enter or `y` to remove them, or `n` to skip
- Uses the same safety checks as `gw clean` (no uncommitted/unpushed changes)
- Never removes the `defaultBranch` worktree
**Setting auto-clean:**
```bash
# Enable during initialization
gw init --auto-clean
# With custom threshold
gw init --auto-clean --clean-threshold 14
```
**When to use:**
- Teams that frequently create feature branches
- Repositories with many short-lived worktrees
- Projects where disk space is a concern
- Development workflows with regular cleanup needs
**When NOT to use:**
- You prefer manual cleanup control
- Long-lived feature branches are common
- You want to review worktrees before removing them
**Tip:** If you decline the prompt, you can always run `gw clean` manually to review and clean worktrees interactively.
---
## 3. Initial Setup: Secrets in the Default Branch
Before using `gw add` with auto-copy, your secrets and environment files **must exist** in your `defaultBranch` worktree. This worktree is the **source** from which files are copied.
### First-Time Setup Flow
```bash
# 1. Set up your bare repository structure
git clone --bare https://github.com/user/repo.git repo.git
cd repo.git
# 2. Create the main worktree (your defaultBranch)
git worktree add main main
# 3. Set up secrets in the main worktree FIRST
cd main
cp .env.example .env # Create your environment file
# Edit .env with your actual secrets, API keys, etc.
mkdir -p secrets/
# Add any other secret files your project needs
# 4. Initialize gw with auto-copy configuration
gw init --auto-copy-files .env,secrets/
# 5. Now create feature worktrees - files are copied automatically
cd ..
gw add feat-new-feature
# .env and secrets/ are automatically copied from main
```
### Why This Order Matters
1. **Source must exist first** - `gw add` copies from `defaultBranch`, so files must be there
2. **Auto-clean protection** - The `defaultBranch` worktree is never auto-cleaned, ensuring your source files are always available
3. **Sync depends on source** - `gw sync` also uses `defaultBranch` as the source
### Keeping Secrets Updated
When you update secrets in your `defaultBranch` worktree:
```bash
# Sync all autoCopyFiles to an existing worktree
gw sync feat-existing-branch
# Or sync specific files
gw sync feat-existing-branch .env
```
---
## 4. Auto-Copy Strategies
### Files That Should Be Copied
**Environment variables:**
```json
".env",
".env.local",
".env.development"
```
**Secrets and credentials:**
```json
"secrets/",
"keys/",
"ssl/certificates/"
```
**Local configuration:**
```json
"config/local.json",
".vscode/settings.json",
"components/ui/.vercel/"
```
**Cache directories (sometimes):**
```json
".next/cache/",
"public/uploads/"
```
### Files That Should NOT Be Copied
**Dependencies:**
```
❌ node_modules/
❌ vendor/
❌ .pnpm-store/
```
**Build artifacts:**
```
❌ dist/
❌ build/
❌ .next/ (except cache)
❌ out/
```
**Version control:**
```
❌ .git (handled automatically)
❌ .gitignore (in source control)
```
**IDE settings (usually):**
```
❌ .idea/
❌ .vscode/ (unless team-shared)
```
### Directory vs File Copying
**Directory (recursive):**
```json
{
"autoCopyFiles": ["secrets/"]
}
```
Copies:
```
secrets/
├── api-key.json ← Copied
├── database.env ← Copied
└── ssl/
└── cert.pem ← Copied (recursive)
```
**Specific file:**
```json
{
"autoCopyFiles": ["secrets/api-key.json"]
}
```
Copies only:
```
secrets/
└── api-key.json ← Only this file
```
### Glob Patterns (Not Currently Supported)
Currently, gw doesn't support glob patterns like:
- `"*.env"` - All .env files
- `"config/**/*.json"` - All JSON in config
**Workaround:** List files explicitly or copy parent directory.
---
## 5. Project-Type Configuration Patterns
### Next.js Projects
**Typical structure:**
```
myapp/
├── .env
├── .env.local
├── .next/
├── public/
│ └── uploads/
├── components/
│ └── ui/
│ └── .vercel/
└── pages/
```
**Recommended configuration:**
```json
{
"root": "/projects/myapp.git",
"defaultBranch": "main",
"autoCopyFiles": [".env", ".env.local", ".env.development", ".vercel/", "public/uploads/", "components/ui/.vercel/"]
}
```
**Why these files:**
- `.env*` - Environment variables for different modes
- `.vercel/` - Vercel deployment configuration
- `public/uploads/` - User-uploaded assets
- `components/ui/.vercel/` - Component-specific Vercel settings
**See also:** [Next.js Setup Example](./examples/nextjs-setup.md)
### Node.js APIs
**Typical structure:**
```
api/
├── .env
├── src/
├── ssl/
│ ├── private.key
│ └── certificate.crt
└── config/
└── local.json
```
**Recommended configuration:**
```json
{
"root": "/projects/api.git",
"defaultBranch": "main",
"autoCopyFiles": [".env", "ssl/", "keys/", "secrets/", "config/local.json"]
}
```
**Why these files:**
- `.env` - Database URLs, API keys, service credentials
- `ssl/` - SSL certificates for HTTPS
- `keys/` - JWT keys, encryption keys
- `secrets/` - Service account credentials
- `config/local.json` - Local-only configuration overrides
### React SPAs
**Typical structure:**
```
webapp/
├── .env
├── .env.local
├── public/
│ └── config.json
└── src/
```
**Recommended configuration:**
```json
{
"root": "/projects/webapp.git",
"defaultBranch": "main",
"autoCopyFiles": [".env", ".env.local", "public/config.json"]
}
```
**Why these files:**
- `.env` - Build-time environment variables
- `.env.local` - Local API endpoints, feature flags
- `public/config.json` - Runtime configuration
### Monorepos (pnpm/Yarn/npm workspaces)
**Typical structure:**
```
monorepo/
├── .env # Root environment
├── packages/
│ ├── api/
│ │ └── .env # Package-specific
│ ├── web/
│ │ └── .env
│ └── shared/
└── pnpm-workspace.yaml
```
**Recommended configuration:**
```json
{
"root": "/projects/monorepo.git",
"defaultBranch": "main",
"autoCopyFiles": [".env", "packages/api/.env", "packages/web/.env", "packages/shared/config.local.json", ".vercel/"]
}
```
**Why these files:**
- Root `.env` - Shared environment variables
- Package-specific `.env` - Service-specific configuration
- Shared config files - Cross-package configuration
**See also:** [Monorepo Setup Example](./examples/monorepo-setup.md)
### Full-Stack Apps (Frontend + Backend)
**Typical structure:**
```
fullstack/
├── .env.backend
├── .env.frontend
├── backend/
│ ├── ssl/
│ └── secrets/
└── frontend/
└── .vercel/
```
**Recommended configuration:**
```json
{
"root": "/projects/fullstack.git",
"defaultBranch": "main",
"autoCopyFiles": [".env.backend", ".env.frontend", "backend/ssl/", "backend/secrets/", "frontend/.vercel/"]
}
```
---
## 6. Team Configuration Management
### Committing Configuration to Version Control
**Recommended approach:**
```bash
# Add .gw/config.json to git
git add .gw/config.json
git commit -m "chore: add gw configuration for team"
git push
```
**Benefits:**
- Team members get configuration automatically
- Consistent workflow across team
- Version-controlled changes to auto-copy patterns
- Easy onboarding for new developers
**What to include:**
- `root` - Can be a template, team members adjust locally
- `defaultBranch` - Should match team's workflow
- `autoCopyFiles` - Should include all shared secrets/configs
### Team-Wide vs Personal File Patterns
**Team-wide (commit to repo):**
```json
{
"autoCopyFiles": [".env.template", "ssl/development-cert.pem", "config/shared.json"]
}
```
**Personal (each developer customizes):**
```bash
# Copy team config
cp .gw/config.json .gw/config.local.json
# Add personal files
vim .gw/config.local.json
# Add: "path/to/my-secrets.env"
# .gw/config.local.json is in .gitignore
```
### Documenting Auto-Copy Patterns
**In README.md:**
```markdown
## Development Setup
### 1. Install gw
npm install -g @gw-tools/gw-tool
### 2. Configuration
The repository includes gw configuration (`.gw/config.json`) that automatically copies:
- `.env` - Environment variables (copy from `.env.example`)
- `ssl/` - Development SSL certificates
- `secrets/` - Service credentials (get from team lead)
### 3. Create Feature Worktree
gw add feature-name -b feature-name main
Files will be automatically copied from the main worktree.
```
### Generating Documentation from Config
Use `gw show-init` to automatically generate a setup command from your current configuration:
```bash
# Generate the init command from current config
gw show-init
# Output: gw init --auto-copy-files .env,secrets/ --post-add 'pnpm install'
# Add to documentation automatically
echo "## Setup\n\n\`\`\`bash\n$(gw show-init)\n\`\`\`" >> README.md
# Copy to clipboard for sharing (macOS)
gw show-init | pbcopy
# Copy to clipboard for sharing (Linux)
gw show-init | xclip -selection clipboard
```
**Benefits:**
- Always accurate - generated from actual config
- Easy to share with team members
- Simple to document in README files
- Shows exact command to replicate your setup
**Example documentation update:**
```markdown
## Quick Setup
To configure gw for this project, run:
\`\`\`bash
gw init --auto-copy-files .env,secrets/ --post-add 'pnpm install' --clean-threshold 14
\`\`\`
This will:
- Auto-copy `.env` and `secrets/` directory when creating worktrees
- Run `pnpm install` after each worktree creation
- Clean up worktrees older than 14 days
```
### Onboarding New Developers
**Onboarding checklist:**
1. Clone repository
2. Install gw: `npm install -g @gw-tools/gw-tool`
3. Set up secrets (one-time):
```bash
cp .env.example .env
# Get secrets from team lead or secret manager
```
4. Create first worktree:
```bash
gw add feature-onboarding -b feature-onboarding main
# Automatically copies configured files
```
---
## 7. Advanced Configuration Techniques
### Multiple Source Worktrees
**Scenario:** Different features copy from different sources.
```bash
# Feature branches copy from develop
gw add feature-x -b feature-x
# Hotfixes copy from main
gw add hotfix-y --from main -b hotfix-y
```
**Configuration supports one default:**
```json
{
"defaultBranch": "develop"
}
```
**Override at runtime:**
```bash
gw sync --from staging target-worktree .env
```
### Environment-Specific Configurations
**Scenario:** Different environments need different files.
**Approach:** Use custom config files.
```bash
# Development
cp .gw/config.development.json .gw/config.json
# Production
cp .gw/config.production.json .gw/config.json
```
### Integration with Secret Management Tools
**1Password:**
```bash
# After creating worktree, inject secrets
gw add feature-x
op inject -i feature-x/.env.template -o feature-x/.env
```
**AWS Secrets Manager:**
```bash
gw add feature-x
aws secretsmanager get-secret-value --secret-id myapp/dev \
--query SecretString --output text > feature-x/.env
```
**HashiCorp Vault:**
```bash
gw add feature-x
vault kv get -field=.env secret/myapp > feature-x/.env
```
---
## 8. Troubleshooting Configuration
### Config Not Being Detected
**Problem:**
```bash
$ gw add feature-x
Error: Could not find .gw/config.json
```
**Solution:**
```bash
# Initialize configuration
gw init
# Or specify root manually
gw init --root $(gw root)
```
### Files Not Being Auto-Copied
**Problem:**
```bash
$ gw add feature-x
✓ Worktree created
# But .env is missing!
```
**Diagnostics:**
```bash
# Check configuration
cat .gw/config.json
# Check if file exists in source
ls ../main/.env
```
**Solutions:**
**Solution A:** Add to auto-copy:
```bash
gw init --auto-copy-files .env,.env.local
```
**Solution B:** Manual sync:
```bash
# Sync all autoCopyFiles from config
gw sync feature-x
# Or sync specific files
gw sync feature-x .env
```
### Wrong Files Being Copied
**Problem:** Copying too many or wrong files.
**Solution:** Review and update `autoCopyFiles`:
```bash
# Edit configuration
vim .gw/config.json
# Remove unwanted patterns
# Add specific files instead of directories
```
### Path Resolution Issues
**Problem:**
```bash
$ gw add feature-x
Error: Source file not found: secrets/api-key.json
```
**Solution:**
Ensure paths are relative to repository root:
```json
{
"autoCopyFiles": [
"secrets/api-key.json" // ✓ Relative to root
]
}
```
Not:
```json
{
"autoCopyFiles": [
"/Users/you/projects/myapp/secrets/api-key.json" // ✗ Absolute path
]
}
```
---
## Summary
You now understand:
- ✅ How gw configuration works (`.gw/config.json`)
- ✅ All configuration options (`root`, `defaultBranch`, `autoCopyFiles`)
- ✅ What files to auto-copy for different project types
- ✅ Team configuration management and onboarding
- ✅ Advanced techniques for complex workflows
- ✅ Troubleshooting common configuration issues
### Next Steps
1. Configure gw for your project using a [template](./templates/)
2. Read project-specific examples ([Next.js](./examples/nextjs-setup.md), [Monorepo](./examples/monorepo-setup.md))
3. Explore [autonomous workflow](../autonomous-workflow/)
---
_Part of the [gw-tools skills collection](../README.md)_
This skill configures and optimizes gw-tools for different project types and team needs. It guides setup of .gw/config.json, auto-copy patterns, update strategies, and cleanup policies so repositories and worktrees behave predictably. Use it to standardize onboarding, protect secrets, and automate routine worktree maintenance.
The skill inspects the repository's .gw/config.json and the git worktree layout to determine root, defaultBranch, autoCopyFiles, updateStrategy, cleanThreshold, and autoClean settings. It recommends values, generates or updates config.json, and validates auto-copy patterns and paths relative to the repository root. It also simulates init and gw add flows to catch offline/fetch fallbacks and common misconfigurations.
What happens if auto-copy files are missing in the default branch?
gw skips missing paths and emits a warning; ensure required secrets exist in the defaultBranch before creating worktrees if you rely on them.
When does gw fall back to local branches?
gw falls back to a local defaultBranch only when no --from is specified and remote fetch fails; --from disables fallback and will error if fetch fails.