Files
Can H. Tartanoglu 80cac3626f add nushell terminal and completion support (#8628)
Signed-off-by: Can H. Tartanoglu <gpg@rotas.mozmail.com>
2026-05-12 23:39:28 +00:00

5.8 KiB

Terminal Integration

import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';

Talk to goose directly from your shell prompt. Instead of switching to a separate REPL session, stay in your terminal and call goose when you need it.

Setup

Add to ~/.zshrc:

eval "$(goose term init zsh)"

Add to ~/.bashrc:

eval "$(goose term init bash)"

Add to ~/.config/fish/config.fish:

goose term init fish | source

Add to ~/.config/nushell/config.nu:

let goose_term_init = ($nu.cache-dir | path join "goose-term-init.nu")
^goose term init nu | save --force $goose_term_init
source $goose_term_init

Add to $PROFILE:

Invoke-Expression (goose term init powershell)

Restart your terminal or source the config, and that's it!

Usage

Just type @goose (or @g for short) followed by your question:

npm install express
    npm ERR! code EACCES
    npm ERR! permission denied

@goose "how do I fix this error?"

goose automatically sees the commands you've run since your last question, so you don't need to explain what you've been doing. Use quotes around your prompt if it contains special characters like ?, *, or ':

@goose "what's in this directory?"
@g "analyze the error: 'permission denied'"

Named Sessions

By default, each terminal gets its own goose session that lasts until you close it. Named sessions let you continue conversations across terminal restarts and share context between windows.

eval "$(goose term init zsh --name my-project)"
eval "$(goose term init bash --name my-project)"
goose term init fish --name my-project | source
let goose_term_init = ($nu.cache-dir | path join "goose-term-init.nu")
^goose term init nu --name my-project | save --force $goose_term_init
source $goose_term_init
Invoke-Expression (goose term init powershell --name my-project)

Named sessions persist in goose's database, so they're available anytime, even after restarting your computer. Reopen later and run the same command to continue:

# Start debugging
eval "$(goose term init zsh --name auth-bug)"
@goose help me debug this login timeout

# Close terminal, come back later
eval "$(goose term init zsh --name auth-bug)"
@goose "what was the solution we discussed?"
# Continues the same conversation with context

Default Handler

Use --default if you want goose to answer commands your shell cannot resolve.

eval "$(goose term init zsh --default)"
eval "$(goose term init bash --default)"
let goose_term_init = ($nu.cache-dir | path join "goose-term-init.nu")
^goose term init nu --default | save --force $goose_term_init
source $goose_term_init

Show Context Status in Your Prompt

Add goose term info to your prompt to see how much context you've used and which model is active during a terminal goose session.

PROMPT='$(goose term info) %~ $ '
PS1='$(goose term info) \w $ '
function fish_prompt
    goose term info
    echo -n ' '(prompt_pwd)' $ '
end
$env.PROMPT_COMMAND = {|| $"(goose term info) (pwd)> " }
function prompt {
    $gooseInfo = & goose term info
    "$gooseInfo $(Get-Location) PS> "
}

Your terminal prompt now shows the context usage and model name (shortened for readability) for the active goose session. For example:

●●○○○ sonnet ~/projects $

Shell Completion for goose Commands

@goose provides context-aware assistance based on your command history. To enable tab completion of goose CLI commands (like goose session, goose run, etc.), see the shell completion documentation.

Troubleshooting

goose doesn't see recent commands: If you run commands but goose says it doesn't see any recent activity, check if terminal integration is properly set up in your shell config. You can also check the id of the goose session in your current terminal:

# Check if session ID exists
echo $AGENT_SESSION_ID
# Should show something like: 20251209_151730
# Nushell
$env.AGENT_SESSION_ID
# Should show something like: 20251209_151730

To share context across terminal windows, use a named session instead.

Session getting too full (prompt shows ●●●●●): If goose's responses are getting slow or hitting context limits, start a fresh goose session in the terminal. The new goose session sees your command history, but not the conversation history from the previous session.

# Start a new goose session in the same shell
eval "$(goose term init zsh)"
# Nushell
let goose_term_init = ($nu.cache-dir | path join "goose-term-init.nu")
^goose term init nu | save --force $goose_term_init
source $goose_term_init