Skip to main content

Terminal Integration

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)"

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?"

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)"

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)"

Shell History​

By default, goose does not record the commands you type. To let goose see your recent shell commands as context when you ask a question, pass --dangerous-include-history when initialising:

warning

When shell history is enabled, every command you run — including lines that contain passwords, API keys, or other credentials — is sent to the configured model provider. Only enable this if you understand and accept that risk.

eval "$(goose term init zsh --dangerous-include-history)"

With history enabled, goose sees the commands you've run since your last question, so you don't need to explain what you've been doing.

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) %~ $ '

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. 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: Shell history capture is opt-in. goose only sees your recent commands if you initialised with --dangerous-include-history. Without that flag, goose has no record of commands you've run.

If you've already enabled --dangerous-include-history but goose still reports no activity, check that 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