diff --git a/docs/cli/configuration.md b/docs/cli/configuration.md
index c866c01f..450d6ce8 100644
--- a/docs/cli/configuration.md
+++ b/docs/cli/configuration.md
@@ -176,6 +176,15 @@ In addition to a project settings file, a project's `.gemini` directory can cont
"usageStatisticsEnabled": false
```
+- **`hideTips`** (boolean):
+ - **Description:** Enables or disables helpful tips in the CLI interface.
+ - **Default:** `false`
+ - **Example:**
+
+ ```json
+ "hideTips": true
+ ```
+
### Example `settings.json`:
```json
@@ -199,7 +208,8 @@ In addition to a project settings file, a project's `.gemini` directory can cont
"otlpEndpoint": "http://localhost:4317",
"logPrompts": true
},
- "usageStatisticsEnabled": true
+ "usageStatisticsEnabled": true,
+ "hideTips": false
}
```
diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts
index de1e5569..28010a7a 100644
--- a/packages/cli/src/config/settings.ts
+++ b/packages/cli/src/config/settings.ts
@@ -63,6 +63,7 @@ export interface Settings {
// UI setting. Does not display the ANSI-controlled terminal title.
hideWindowTitle?: boolean;
+ hideTips?: boolean;
// Add other settings here.
}
diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx
index 2f12615b..ecd56f5e 100644
--- a/packages/cli/src/ui/App.test.tsx
+++ b/packages/cli/src/ui/App.test.tsx
@@ -17,6 +17,7 @@ import {
} from '@google/gemini-cli-core';
import { LoadedSettings, SettingsFile, Settings } from '../config/settings.js';
import process from 'node:process';
+import { Tips } from './components/Tips.js';
// Define a more complete mock server config based on actual Config
interface MockServerConfig {
@@ -173,6 +174,10 @@ vi.mock('../config/config.js', async (importOriginal) => {
};
});
+vi.mock('./components/Tips.js', () => ({
+ Tips: vi.fn(() => null),
+}));
+
describe('App UI', () => {
let mockConfig: MockServerConfig;
let mockSettings: LoadedSettings;
@@ -379,6 +384,34 @@ describe('App UI', () => {
expect(lastFrame()).toContain('Using 2 MCP servers');
});
+ it('should display Tips component by default', async () => {
+ const { unmount } = render(
+ ,
+ );
+ currentUnmount = unmount;
+ await Promise.resolve();
+ expect(vi.mocked(Tips)).toHaveBeenCalled();
+ });
+
+ it('should not display Tips component when hideTips is true', async () => {
+ mockSettings = createMockSettings({
+ hideTips: true,
+ });
+
+ const { unmount } = render(
+ ,
+ );
+ currentUnmount = unmount;
+ await Promise.resolve();
+ expect(vi.mocked(Tips)).not.toHaveBeenCalled();
+ });
+
describe('when no theme is set', () => {
let originalNoColor: string | undefined;
diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx
index 6bbe47d4..0848e330 100644
--- a/packages/cli/src/ui/App.tsx
+++ b/packages/cli/src/ui/App.tsx
@@ -584,7 +584,7 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => {
items={[
-
+ {!settings.merged.hideTips && }
{updateMessage && }
,
...history.map((h) => (