mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-06-12 04:17:15 -07:00
193 lines
9.9 KiB
Markdown
193 lines
9.9 KiB
Markdown
# Gemini CLI Git Worktrees Discussion Transcript
|
|
|
|
## Overview
|
|
|
|
This document captures a discussion regarding the new experimental native Git
|
|
Worktree support in the Gemini CLI and whether it makes the custom
|
|
`_ux_git-worktree` skill obsolete for the UX team.
|
|
|
|
### Skill Information
|
|
|
|
**Path:** `packages/extensions/ux-extension/skills/_ux_git-worktree/SKILL.md`
|
|
|
|
**High-Level Description:** The `_ux_git-worktree` skill manages a specific
|
|
"Base Folder Strategy" for the engineering team. Rather than nesting worktrees
|
|
inside a hidden `.gemini` folder, it enforces that all functional work occurs in
|
|
sibling sub-directories (e.g., `main/`, `feature-name/`). It automates creating
|
|
new task branches, checking out GitHub PRs into semantically named folders
|
|
(e.g., `pr-123-fix-core-bug`), and automatically running `npm install` to ensure
|
|
the isolated environment is immediately ready for development. It also handles
|
|
macOS sandbox pathing requirements.
|
|
|
|
---
|
|
|
|
## Discussion Transcript
|
|
|
|
**User:** Take a look at this new feature of Gemini CLI, and let me know if you
|
|
think it makes our git-worktree skill obsolete.
|
|
https://geminicli.com/docs/cli/git-worktrees/
|
|
|
|
**Gemini CLI:** Based on the documentation for the new native Git Worktree
|
|
feature and the specific rules defined in your `_ux_git-worktree` skill, **no,
|
|
it does not make your custom skill obsolete.**
|
|
|
|
While the new native feature is great for general-purpose isolation, your
|
|
`_ux_git-worktree` skill enforces highly specific, project-tailored workflows
|
|
that the native feature doesn't cover out-of-the-box:
|
|
|
|
1. **Directory Structure (The "Base Folder" Strategy):** The native CLI creates
|
|
worktrees hidden away in `.gemini/worktrees/`. Your skill strictly enforces
|
|
that worktrees must be **sibling directories** to `main/` (e.g.,
|
|
`../feature-name/`).
|
|
2. **Semantic PR Checkouts:** Your skill uses a custom `worktree-manager.sh`
|
|
script to automatically fetch PR titles and create human-readable, semantic
|
|
directory names (like `pr-123-fix-core-bug`). The native CLI does not
|
|
integrate with GitHub PRs in this way.
|
|
3. **Mandatory Environment Setup:** Your skill enforces a mandatory
|
|
`npm install` immediately after a worktree is created to ensure the
|
|
environment is ready for development.
|
|
4. **macOS Sandbox Management:** Because your worktrees live outside the
|
|
immediate repository container as sibling folders, your skill includes
|
|
specific logic to ensure the primary `../main/.git` path is added to the
|
|
trusted environment to bypass macOS sandbox restrictions.
|
|
|
|
**Recommendation:** The native `--worktree` flag is an excellent feature for
|
|
standard use cases, but for the rigorous, standardized workflows required by the
|
|
UX Extension in this repository, you should continue using your custom
|
|
`_ux_git-worktree` skill to maintain compliance with the "Base Folder"
|
|
architecture.
|
|
|
|
**User:** Let's back up a step. My goal is for the UX team that uses this
|
|
extension to be able to use git worktrees following the standard team convention
|
|
(i.e. the whole eng team will use this worktrees feature). We don't want to
|
|
duplicate or recreate the feature with our skill, nor do we want to diverge from
|
|
standard team practice. The exception is that I'd like the UX team (and end
|
|
users potentially) to be able to create and use worktrees with natural language.
|
|
|
|
Let's take a user-journey approach to designing the experience. Start by
|
|
creating a list of the use-cases/journeys that users will want to do with
|
|
worktrees. My current behavior is:
|
|
|
|
1. I want to create a new worktree to work on a new feature. I have a name in
|
|
mind, and I want to start from main. Its nice that I can use gemini cli
|
|
interactive mode and say 'new worktree called blahblah' and i dont have to
|
|
remember a specific syntax, but also the startup time maybe means I should
|
|
just learn the syntax. It seems simple. Its convenient that it runs npm
|
|
install to save me a step, but not critical.
|
|
2. I want to create a new worktree by cloning someone's branch/PR to my local
|
|
machine. Its easy for me to run gemini cli interactive mode and say 'create a
|
|
new worktree from http://PRURL and call it blahblah. Again, the npm install
|
|
is convenient. In this case Im not sure how to do this in noninteractive
|
|
mode.
|
|
3. I want to see all the worktrees ive created locally, and its handy i can look
|
|
at my folders, becuase it basically represents a list of my projects/features
|
|
im working on. Im not sure how this could be done in noninteractive mode, so
|
|
I would worry about losing my work in progress. its kind of confusing if my
|
|
worktrees are in gemini's hidden folder. It would be great if there was a way
|
|
to see my worktrees within gemini cli interactive and non interactive mode.
|
|
|
|
So as a worktree novice, and someone who has not tested this experimental
|
|
feature still, I may be misunderstanding things. Would you please create a list
|
|
of use-cases that includes mine, as well as any key ones im missing? Under each
|
|
use-case, identify whether its supported by the experimental feature in both
|
|
interactive and noninteractive modes.
|
|
|
|
**Gemini CLI:** This is a great approach. Stepping back to look at the user
|
|
journey is the best way to determine if a feature genuinely serves the team's
|
|
workflow or just adds unnecessary complexity.
|
|
|
|
Based on your current workflow, the documentation for the new experimental
|
|
feature, and standard Git worktree lifecycles, here is a breakdown of the key
|
|
user journeys.
|
|
|
|
### 1. Create a new worktree for a new feature (from `main`)
|
|
|
|
**User Goal:** Spin up an isolated environment to start fresh work, optionally
|
|
with a specific name, without messing up the primary `main` branch.
|
|
|
|
- **Experimental Native Feature (Non-Interactive):** **Supported.** You launch
|
|
Gemini with `gemini --worktree <name>`. It automatically creates a new branch
|
|
and a linked directory in `.gemini/worktrees/<name>`. _(Note: It does not
|
|
automatically run `npm install` like your current skill does)._
|
|
- **Experimental Native Feature (Interactive):** **Partially Supported.** You
|
|
cannot start a standard `gemini` session and then type a native slash command
|
|
(like `/worktree new`) to instantly pivot the current session into a worktree.
|
|
You must use the `--worktree` flag _when launching_ the CLI. However, once
|
|
inside any interactive session, you can always just ask the agent in natural
|
|
language to run standard `git worktree add` commands for you.
|
|
|
|
### 2. Create a worktree from a remote branch or PR
|
|
|
|
**User Goal:** Review a teammate's PR or continue work on a remote branch
|
|
without stashing current local changes.
|
|
|
|
- **Experimental Native Feature (Non-Interactive):** **Not Supported Natively.**
|
|
The `--worktree` flag only creates _new_ branches from your current HEAD. It
|
|
does not accept a PR URL or remote branch name. You would have to manually
|
|
fetch the remote branch and use standard `git worktree add` commands before
|
|
launching Gemini.
|
|
- **Experimental Native Feature (Interactive):** **Not Supported Natively.**
|
|
Again, the native feature lacks a "PR-to-worktree" pipeline. To do this with
|
|
natural language, you still rely on the AI agent running shell commands (which
|
|
is exactly what your `_ux_git-worktree` skill automates so reliably).
|
|
|
|
### 3. Discoverability: View existing local worktrees
|
|
|
|
**User Goal:** See a list of all active projects/features currently in progress.
|
|
|
|
- **Experimental Native Feature (Non-Interactive):** **Supported (but hidden).**
|
|
The native feature stores worktrees inside `.gemini/worktrees/`. Because this
|
|
is a hidden directory, you won't see your projects when doing a standard `ls`
|
|
in your file explorer. You have to explicitly check that hidden path or run
|
|
standard `git worktree list`.
|
|
- **Experimental Native Feature (Interactive):** **Supported.** You can ask the
|
|
agent, "What worktrees do I have open?" and it will run `git worktree list` to
|
|
tell you.
|
|
|
|
### 4. Resume work on an existing worktree _(Missing Use-Case)_
|
|
|
|
**User Goal:** Switch context back to a feature you started yesterday.
|
|
|
|
- **Experimental Native Feature (Non-Interactive):** **Supported.** You have to
|
|
manually `cd` into the hidden `.gemini/worktrees/<name>` directory and run
|
|
`gemini` again.
|
|
- **Experimental Native Feature (Interactive):** **Supported.** If you want to
|
|
resume the exact AI conversation you were having in that worktree, you
|
|
navigate to the hidden folder and launch with `gemini --resume <session_id>`.
|
|
|
|
### 5. Clean up / Delete a finished worktree _(Missing Use-Case)_
|
|
|
|
**User Goal:** After a PR is merged, delete the local branch and the isolated
|
|
folder to free up space.
|
|
|
|
- **Experimental Native Feature (Non-Interactive):** **Not Supported.** The
|
|
documentation explicitly states Gemini does not automatically clean up
|
|
worktrees. You must manually run `git worktree remove <path> --force` and
|
|
`git branch -D <branch>`.
|
|
- **Experimental Native Feature (Interactive):** **Not Supported Natively.** You
|
|
can ask the AI agent to run the cleanup commands for you, but there is no
|
|
native garbage collection.
|
|
|
|
---
|
|
|
|
### The Verdict for Your Team
|
|
|
|
You are not misunderstanding things; your concerns are spot on.
|
|
|
|
The new native `--worktree` feature is designed primarily for **AI
|
|
isolation**—giving the agent a safe sandbox so it doesn't break the user's main
|
|
repository while generating code. Because it hides these folders in
|
|
`.gemini/worktrees/`, it treats them as ephemeral AI scratchpads rather than
|
|
primary developer workspaces.
|
|
|
|
Your team's **"Base Folder Strategy"** (creating sibling folders like
|
|
`../feature-name/`) is designed for **Developer ergonomics**. It keeps projects
|
|
visible, integrates directly with PR workflows, and handles environment setup
|
|
(`npm install`).
|
|
|
|
**Conclusion:** The native feature does _not_ replace your skill. If you adopt
|
|
the native feature, your team will lose the PR checkout automation, the
|
|
automatic dependency installation, and the visibility of having worktrees as
|
|
top-level sibling folders. You should keep your `_ux_git-worktree` skill to
|
|
maintain your team's specific, natural-language-driven engineering standards.
|