2026-02-09 22:13:04 -05:00
|
|
|
# Plan Mode (experimental)
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
Plan Mode is a read-only environment for architecting robust solutions before
|
|
|
|
|
implementation. It allows you to:
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
- **Research:** Explore the project in a read-only state to prevent accidental
|
|
|
|
|
changes.
|
|
|
|
|
- **Design:** Understand problems, evaluate trade-offs, and choose a solution.
|
|
|
|
|
- **Plan:** Align on an execution strategy before any code is modified.
|
|
|
|
|
|
|
|
|
|
> **Note:** This is a preview feature currently under active development. Your
|
|
|
|
|
> feedback is invaluable as we refine this feature. If you have ideas,
|
2026-02-08 22:25:02 -05:00
|
|
|
> suggestions, or encounter issues:
|
|
|
|
|
>
|
|
|
|
|
> - [Open an issue](https://github.com/google-gemini/gemini-cli/issues) on
|
|
|
|
|
> GitHub.
|
2026-02-20 10:56:49 -05:00
|
|
|
> - Use the **/bug** command within Gemini CLI to file an issue.
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
- [Enabling Plan Mode](#enabling-plan-mode)
|
2026-02-08 22:25:02 -05:00
|
|
|
- [How to use Plan Mode](#how-to-use-plan-mode)
|
|
|
|
|
- [Entering Plan Mode](#entering-plan-mode)
|
2026-02-20 10:56:49 -05:00
|
|
|
- [Planning Workflow](#planning-workflow)
|
2026-02-08 22:25:02 -05:00
|
|
|
- [Exiting Plan Mode](#exiting-plan-mode)
|
|
|
|
|
- [Tool Restrictions](#tool-restrictions)
|
2026-02-11 12:59:03 -05:00
|
|
|
- [Customizing Planning with Skills](#customizing-planning-with-skills)
|
2026-02-11 12:32:02 -05:00
|
|
|
- [Customizing Policies](#customizing-policies)
|
2026-02-20 10:56:49 -05:00
|
|
|
- [Example: Allow git commands in Plan Mode](#example-allow-git-commands-in-plan-mode)
|
|
|
|
|
- [Example: Enable research subagents in Plan Mode](#example-enable-research-subagents-in-plan-mode)
|
|
|
|
|
- [Custom Plan Directory and Policies](#custom-plan-directory-and-policies)
|
|
|
|
|
|
|
|
|
|
## Enabling Plan Mode
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
To use Plan Mode, enable it via **/settings** (search for **Plan**) or add the
|
|
|
|
|
following to your `settings.json`:
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"experimental": {
|
|
|
|
|
"plan": true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
## How to use Plan Mode
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
### Entering Plan Mode
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
You can configure Gemini CLI to start in Plan Mode by default or enter it
|
|
|
|
|
manually during a session.
|
|
|
|
|
|
|
|
|
|
- **Configuration:** Configure Gemini CLI to start directly in Plan Mode by
|
|
|
|
|
default:
|
|
|
|
|
1. Type `/settings` in the CLI.
|
|
|
|
|
2. Search for **Default Approval Mode**.
|
|
|
|
|
3. Set the value to **Plan**.
|
|
|
|
|
|
|
|
|
|
Alternatively, use the `gemini --approval-mode=plan` CLI flag or manually
|
|
|
|
|
update:
|
2026-02-08 22:25:02 -05:00
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
2026-02-10 08:07:04 -05:00
|
|
|
"general": {
|
|
|
|
|
"defaultApprovalMode": "plan"
|
2026-02-08 22:25:02 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
- **Keyboard Shortcut:** Press `Shift+Tab` to cycle through approval modes
|
|
|
|
|
(`Default` -> `Auto-Edit` -> `Plan`).
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
> **Note:** Plan Mode is automatically removed from the rotation when Gemini
|
|
|
|
|
> CLI is actively processing or showing confirmation dialogs.
|
2026-02-17 12:36:59 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
- **Command:** Type `/plan` in the input box.
|
2026-02-17 12:36:59 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
- **Natural Language:** Ask Gemini CLI to "start a plan for...". Gemini CLI then
|
|
|
|
|
calls the [`enter_plan_mode`] tool to switch modes.
|
|
|
|
|
> **Note:** This tool is not available when Gemini CLI is in [YOLO mode].
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
### Planning Workflow
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
1. **Explore & Analyze:** Analyze requirements and use read-only tools to map
|
|
|
|
|
the codebase and validate assumptions. For complex tasks, identify at least
|
|
|
|
|
two viable implementation approaches.
|
|
|
|
|
2. **Consult:** Present a summary of the identified approaches via [`ask_user`]
|
|
|
|
|
to obtain a selection. For simple or canonical tasks, this step may be
|
|
|
|
|
skipped.
|
|
|
|
|
3. **Draft:** Once an approach is selected, write a detailed implementation
|
|
|
|
|
plan to the plans directory.
|
|
|
|
|
4. **Review & Approval:** Use the [`exit_plan_mode`] tool to present the plan
|
|
|
|
|
and formally request approval.
|
|
|
|
|
- **Approve:** Exit Plan Mode and start implementation.
|
2026-02-08 22:25:02 -05:00
|
|
|
- **Iterate:** Provide feedback to refine the plan.
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
For more complex or specialized planning tasks, you can
|
|
|
|
|
[customize the planning workflow with skills](#customizing-planning-with-skills).
|
|
|
|
|
|
2026-02-08 22:25:02 -05:00
|
|
|
### Exiting Plan Mode
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
To exit Plan Mode, you can:
|
|
|
|
|
|
|
|
|
|
- **Keyboard Shortcut:** Press `Shift+Tab` to cycle to the desired mode.
|
2026-02-08 22:25:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
- **Tool:** Gemini CLI calls the [`exit_plan_mode`] tool to present the
|
|
|
|
|
finalized plan for your approval.
|
2026-02-08 22:25:02 -05:00
|
|
|
|
|
|
|
|
## Tool Restrictions
|
|
|
|
|
|
|
|
|
|
Plan Mode enforces strict safety policies to prevent accidental changes.
|
|
|
|
|
|
|
|
|
|
These are the only allowed tools:
|
|
|
|
|
|
|
|
|
|
- **FileSystem (Read):** [`read_file`], [`list_directory`], [`glob`]
|
|
|
|
|
- **Search:** [`grep_search`], [`google_web_search`]
|
2026-02-11 15:04:01 -05:00
|
|
|
- **Interaction:** [`ask_user`]
|
2026-02-08 22:25:02 -05:00
|
|
|
- **MCP Tools (Read):** Read-only [MCP tools] (e.g., `github_read_issue`,
|
|
|
|
|
`postgres_read_schema`) are allowed.
|
2026-02-20 10:56:49 -05:00
|
|
|
- **Planning (Write):** [`write_file`] and [`replace`] only allowed for `.md`
|
|
|
|
|
files in the `~/.gemini/tmp/<project>/<session-id>/plans/` directory or your
|
|
|
|
|
[custom plans directory](#custom-plan-directory-and-policies).
|
2026-02-11 12:59:03 -05:00
|
|
|
- **Skills:** [`activate_skill`] (allows loading specialized instructions and
|
|
|
|
|
resources in a read-only manner)
|
|
|
|
|
|
|
|
|
|
### Customizing Planning with Skills
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
You can use [Agent Skills](./skills.md) to customize how Gemini CLI approaches
|
|
|
|
|
planning for specific types of tasks. When a skill is activated during Plan
|
|
|
|
|
Mode, its specialized instructions and procedural workflows will guide the
|
|
|
|
|
research, design and planning phases.
|
2026-02-11 12:59:03 -05:00
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
- A **"Database Migration"** skill could ensure the plan includes data safety
|
|
|
|
|
checks and rollback strategies.
|
2026-02-20 10:56:49 -05:00
|
|
|
- A **"Security Audit"** skill could prompt Gemini CLI to look for specific
|
2026-02-11 12:59:03 -05:00
|
|
|
vulnerabilities during codebase exploration.
|
2026-02-20 10:56:49 -05:00
|
|
|
- A **"Frontend Design"** skill could guide Gemini CLI to use specific UI
|
2026-02-11 12:59:03 -05:00
|
|
|
components and accessibility standards in its proposal.
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
To use a skill in Plan Mode, you can explicitly ask Gemini CLI to "use the
|
|
|
|
|
`<skill-name>` skill to plan..." or Gemini CLI may autonomously activate it
|
|
|
|
|
based on the task description.
|
2026-02-19 17:47:08 -05:00
|
|
|
|
2026-02-11 12:32:02 -05:00
|
|
|
### Customizing Policies
|
|
|
|
|
|
|
|
|
|
Plan Mode is designed to be read-only by default to ensure safety during the
|
|
|
|
|
research phase. However, you may occasionally need to allow specific tools to
|
|
|
|
|
assist in your planning.
|
|
|
|
|
|
|
|
|
|
Because user policies (Tier 2) have a higher base priority than built-in
|
|
|
|
|
policies (Tier 1), you can override Plan Mode's default restrictions by creating
|
|
|
|
|
a rule in your `~/.gemini/policies/` directory.
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
#### Example: Allow git commands in Plan Mode
|
2026-02-11 12:32:02 -05:00
|
|
|
|
|
|
|
|
This rule allows you to check the repository status and see changes while in
|
|
|
|
|
Plan Mode.
|
|
|
|
|
|
|
|
|
|
`~/.gemini/policies/git-research.toml`
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
[[rule]]
|
|
|
|
|
toolName = "run_shell_command"
|
|
|
|
|
commandPrefix = ["git status", "git diff"]
|
|
|
|
|
decision = "allow"
|
|
|
|
|
priority = 100
|
|
|
|
|
modes = ["plan"]
|
|
|
|
|
```
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
#### Example: Enable research subagents in Plan Mode
|
2026-02-11 12:32:02 -05:00
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
You can enable experimental research [subagents] like `codebase_investigator` to
|
|
|
|
|
help gather architecture details during the planning phase.
|
2026-02-11 12:32:02 -05:00
|
|
|
|
|
|
|
|
`~/.gemini/policies/research-subagents.toml`
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
[[rule]]
|
|
|
|
|
toolName = "codebase_investigator"
|
|
|
|
|
decision = "allow"
|
|
|
|
|
priority = 100
|
|
|
|
|
modes = ["plan"]
|
|
|
|
|
```
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
Tell Gemini CLI it can use these tools in your prompt, for example: _"You can
|
2026-02-11 12:32:02 -05:00
|
|
|
check ongoing changes in git."_
|
|
|
|
|
|
2026-02-20 10:56:49 -05:00
|
|
|
For more information on how the policy engine works, see the [policy engine]
|
|
|
|
|
docs.
|
|
|
|
|
|
|
|
|
|
### Custom Plan Directory and Policies
|
|
|
|
|
|
|
|
|
|
By default, planning artifacts are stored in a managed temporary directory
|
|
|
|
|
outside your project: `~/.gemini/tmp/<project>/<session-id>/plans/`.
|
|
|
|
|
|
|
|
|
|
You can configure a custom directory for plans in your `settings.json`. For
|
|
|
|
|
example, to store plans in a `.gemini/plans` directory within your project:
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"general": {
|
|
|
|
|
"plan": {
|
|
|
|
|
"directory": ".gemini/plans"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To maintain the safety of Plan Mode, user-configured paths for the plans
|
|
|
|
|
directory are restricted to the project root. This ensures that custom planning
|
|
|
|
|
locations defined within a project's workspace cannot be used to escape and
|
|
|
|
|
overwrite sensitive files elsewhere. Any user-configured directory must reside
|
|
|
|
|
within the project boundary.
|
|
|
|
|
|
|
|
|
|
Using a custom directory requires updating your [policy engine] configurations
|
|
|
|
|
to allow `write_file` and `replace` in that specific location. For example, to
|
|
|
|
|
allow writing to the `.gemini/plans` directory within your project, create a
|
|
|
|
|
policy file at `~/.gemini/policies/plan-custom-directory.toml`:
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
[[rule]]
|
|
|
|
|
toolName = ["write_file", "replace"]
|
|
|
|
|
decision = "allow"
|
|
|
|
|
priority = 100
|
|
|
|
|
modes = ["plan"]
|
|
|
|
|
# Adjust the pattern to match your custom directory.
|
|
|
|
|
# This example matches any .md file in a .gemini/plans directory within the project.
|
2026-02-23 12:48:50 -05:00
|
|
|
argsPattern = "\"file_path\":\"[^\"]+[\\\\/]+\\.gemini[\\\\/]+plans[\\\\/]+[\\w-]+\\.md\""
|
2026-02-20 10:56:49 -05:00
|
|
|
```
|
2026-02-11 12:32:02 -05:00
|
|
|
|
2026-02-09 13:08:39 -05:00
|
|
|
[`list_directory`]: /docs/tools/file-system.md#1-list_directory-readfolder
|
|
|
|
|
[`read_file`]: /docs/tools/file-system.md#2-read_file-readfile
|
|
|
|
|
[`grep_search`]: /docs/tools/file-system.md#5-grep_search-searchtext
|
|
|
|
|
[`write_file`]: /docs/tools/file-system.md#3-write_file-writefile
|
|
|
|
|
[`glob`]: /docs/tools/file-system.md#4-glob-findfiles
|
|
|
|
|
[`google_web_search`]: /docs/tools/web-search.md
|
|
|
|
|
[`replace`]: /docs/tools/file-system.md#6-replace-edit
|
|
|
|
|
[MCP tools]: /docs/tools/mcp-server.md
|
2026-02-11 12:59:03 -05:00
|
|
|
[`activate_skill`]: /docs/cli/skills.md
|
2026-02-20 10:56:49 -05:00
|
|
|
[subagents]: /docs/core/subagents.md
|
|
|
|
|
[policy engine]: /docs/reference/policy-engine.md
|
2026-02-11 13:53:43 -05:00
|
|
|
[`enter_plan_mode`]: /docs/tools/planning.md#1-enter_plan_mode-enterplanmode
|
|
|
|
|
[`exit_plan_mode`]: /docs/tools/planning.md#2-exit_plan_mode-exitplanmode
|
2026-02-11 15:04:01 -05:00
|
|
|
[`ask_user`]: /docs/tools/ask-user.md
|
2026-02-20 10:56:49 -05:00
|
|
|
[YOLO mode]: /docs/reference/configuration.md#command-line-arguments
|