Skip to content

Conversation

@alexaustin007
Copy link

Summary

Fixes #13924

This PR adds the --force-interactive flag to allow Gemini CLI to run in interactive mode from non-TTY environments (Java, Node.js, backend services, IDE integrations).

Problem: CLI exits immediately when process.stdin.isTTY is false, preventing programmatic usage.
Solution: New flag overrides TTY detection and uses simple line-based I/O instead of full Ink UI.

Details

Implementation:

  • Added --force-interactive CLI flag with yargs
  • Created simpleInteractiveCli.ts for line-based I/O using Node.js readline
  • Modified TTY detection to respect the flag via isInteractiveModeAllowed
  • Added fork logic: Ink UI for real TTY, simple mode for non-TTY + flag

Key Features:

  • Stays alive for multi-turn conversations
  • Supports slash commands, @ commands, and tool execution
  • Plain text output (no ANSI codes)
  • Graceful EOF and signal handling

Related Issues

Fixes #13924

How to Validate

Test manually:

# Build first
npm run build

# Test with piped input
echo "hello" | node packages/cli/dist/index.js --force-interactive --prompt-interactive "test"

Expected output: "Gemini CLI ready (simple interactive mode)"

Node.js spawn test:
const { spawn } = require('child_process');
const cli = spawn('gemini', ['--force-interactive'], { stdio: ['pipe', 'pipe', 'pipe'] });
cli.stdin.write('hello\n');
// Should stay alive and respond

Pre-Merge Checklist

- Validated on required platforms/methods:
  - MacOS + npm run

@alexaustin007 alexaustin007 requested a review from a team as a code owner November 27, 2025 16:06
@google-cla
Copy link

google-cla bot commented Nov 27, 2025

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @alexaustin007, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the Gemini CLI's flexibility by introducing a --force-interactive flag. This flag enables the CLI to run in an interactive, line-based mode even when not connected to a traditional terminal (TTY), making it suitable for programmatic integration with other applications and services. This change resolves the issue of the CLI prematurely exiting in non-TTY environments when interactive behavior is desired, providing a robust solution for automated or embedded interactive workflows.

Highlights

  • New --force-interactive flag: A new CLI flag, --force-interactive, has been introduced to enable interactive mode even when the standard input is not a TTY (terminal).
  • Programmatic interactive usage: This feature allows the Gemini CLI to be used interactively from non-TTY environments such as Java, Node.js, backend services, and IDE integrations, addressing the issue of the CLI exiting prematurely in these scenarios.
  • Simple line-based interactive mode: A new simpleInteractiveCli.ts file implements a line-based input/output interactive mode, which is used instead of the full Ink UI when --force-interactive is specified in a non-TTY environment.
  • Enhanced interactive capabilities: The simple interactive mode supports multi-turn conversations, slash commands, @ commands, and tool execution, providing plain text output without ANSI codes.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a --force-interactive flag, a valuable feature for using the Gemini CLI in non-TTY environments. The implementation is solid, correctly forking logic between the full Ink UI and a new, simpler line-based interactive mode. The TTY checks and raw mode handling are correctly adjusted. I've found one high-severity issue in the new simple interactive mode where error messages from @ command processing are suppressed, providing a poor debugging experience for the user. My review includes a specific suggestion to fix this.

alexaustin007 and others added 2 commits November 27, 2025 11:34
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow interactive mode to stay alive even when process.stdin.isTTY is false

1 participant