Skip to content

fix: use platform-appropriate commands in developer extension instructions#7898

Merged
DOsinga merged 2 commits intoblock:mainfrom
jeffa-block:jeffa/fix-developer-windows-instructions
Mar 26, 2026
Merged

fix: use platform-appropriate commands in developer extension instructions#7898
DOsinga merged 2 commits intoblock:mainfrom
jeffa-block:jeffa/fix-developer-windows-instructions

Conversation

@jeffa-block
Copy link
Copy Markdown
Contributor

Summary

On Windows, the developer extension instructions reference Unix-only commands (rg, cat, sed) that are unavailable. This contradicts the global hint that tells the model to "use only Windows commands", causing conflicting instructions and failed tool calls.

Changes

Extract the instructions string into a developer_instructions() function that returns platform-appropriate alternatives at compile time:

  • Windows: findstr / Select-String, type / Get-Content (via shell)
  • Unix/macOS: rg, cat, sed (unchanged)

Single file change: crates/goose/src/agents/platform_extensions/developer/mod.rs

Why cfg!(windows) over std::env::consts::OS

The developer extension already uses #[cfg(windows)] / #[cfg(not(windows))] throughout shell.rs for platform-conditional compilation (shell selection, PATH resolution, etc). Using cfg!(windows) in the instructions function follows the same pattern and is evaluated at compile time with no runtime cost.

Testing

  • All 34 developer extension tests pass
  • cargo check -p goose clean
  • No new dependencies

Fixes #7836

…tions

On Windows, the developer extension instructions reference Unix-only
commands (rg, cat, sed) that are unavailable, contradicting the global
hint that says 'use only Windows commands'. This causes the model to
receive conflicting instructions and attempt to use unavailable tools.

Extract instructions into a `developer_instructions()` function that
returns Windows-appropriate alternatives (findstr, Select-String, type,
Get-Content) when compiled for Windows, and the existing Unix commands
otherwise.

Fixes block#7836
jeffa-block added a commit to jeffa-block/goose that referenced this pull request Mar 15, 2026
The execute tool description includes example shell commands
(`ls -la`, `cat ./README.md`) that are unavailable on Windows.
When the model follows these examples, it generates failing commands.

Extract the description into `execute_tool_description()` and use
`cfg!(windows)` to substitute Windows equivalents (`dir /b`,
`type README.md`).

Companion to block#7898 which fixes the same issue in the developer
extension instructions.
@DOsinga DOsinga marked this pull request as ready for review March 26, 2026 21:22
Copy link
Copy Markdown
Collaborator

@DOsinga DOsinga left a comment

Choose a reason for hiding this comment

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

LGTM

@DOsinga DOsinga added this pull request to the merge queue Mar 26, 2026
Merged via the queue into block:main with commit 9a22642 Mar 26, 2026
21 checks passed
michaelneale added a commit that referenced this pull request Mar 26, 2026
* main: (337 commits)
  fix: replace panics with user-friendly errors in CLI session builder (#7901)
  fix: read GOOSE_CONTEXT_LIMIT from config.yaml, not just env vars (#7900)
  fix: deliver truncation notice as separate content block (#7899)
  fix: use platform-appropriate commands in developer extension instructions (#7898)
  fix: replace any with proper SVG types in icon components (#7873)
  chore: remove debug console.log statements, stale comments, and dead code (#8142)
  feat: Gemini OAuth provider (#8129)
  chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /documentation (#8123)
  feat: show installed skills in UI (#7910)
  fix(deps): gate keyring platform features behind target-specific deps (#8039)
  chore(deps): bump yaml from 2.8.2 to 2.8.3 in /evals/open-model-gym/suite (#8124)
  fix: strip message wrapper in CLI session title generation (#7996)
  fix(providers): fall back to configured models when models endpoint fetch fails (#7530)
  chore(deps): bump brace-expansion from 5.0.3 to 5.0.5 in /evals/open-model-gym/suite (#8139)
  fix: prevent Ollama provider from hanging on tool-calling requests (#7723)
  fix: VMware Tanzu Platform provider - bug fixes, streaming, UI improvements (#8126)
  feat: allow GOOSE_CLI_SHOW_THINKING to be set in config.yaml (#8097)
  fix: GitHub Copilot auth fails to open browser in Desktop app (#6957) (#8019)
  fix(ci): produce .tar.gz archives for Zed ACP registry compatibility (#8054)
  feat: add GOOSE_SHOW_FULL_OUTPUT config to disable tool output truncation (#7919)
  ...

# Conflicts:
#	crates/goose/src/providers/formats/openai.rs
michaelneale added a commit that referenced this pull request Mar 30, 2026
* origin/main: (63 commits)
  remove name from blog post (#8157)
  fix: use `overflow: clip` to not disrupt sticky ToC (#8158)
  chore(deps): bump path-to-regexp from 0.1.12 to 0.1.13 in /documentation (#8161)
  chore(deps): bump node-forge from 1.3.2 to 1.4.0 in /documentation (#8145)
  refactor: goose-acp-server -> goose binary for TUI (#8155)
  fix "View as Markdown" feature not working (#8160)
  feat(tui): UI improvements for messages, tool calls, text entry, etc (#8156)
  feat(desktop): add i18n infrastructure with react-intl (#8105)
  fix(tui): ordering of messages (#8144)
  fix: extension command with quotes in  cli (#8150)
  chore(aaif): Use Azure Artifact Signing for Windows (#8116)
  chore(aaif): Switch macOS code signing (#8076)
  Remove unused tool call json in logs (#8147)
  feat(tui): tab expand tool calls cleanly (#8136)
  fix: replace panics with user-friendly errors in CLI session builder (#7901)
  fix: read GOOSE_CONTEXT_LIMIT from config.yaml, not just env vars (#7900)
  fix: deliver truncation notice as separate content block (#7899)
  fix: use platform-appropriate commands in developer extension instructions (#7898)
  fix: replace any with proper SVG types in icon components (#7873)
  chore: remove debug console.log statements, stale comments, and dead code (#8142)
  ...
hydrosquall pushed a commit to hydrosquall/goose that referenced this pull request Mar 31, 2026
blackgirlbytes pushed a commit that referenced this pull request Apr 2, 2026
* main: (337 commits)
  fix: replace panics with user-friendly errors in CLI session builder (#7901)
  fix: read GOOSE_CONTEXT_LIMIT from config.yaml, not just env vars (#7900)
  fix: deliver truncation notice as separate content block (#7899)
  fix: use platform-appropriate commands in developer extension instructions (#7898)
  fix: replace any with proper SVG types in icon components (#7873)
  chore: remove debug console.log statements, stale comments, and dead code (#8142)
  feat: Gemini OAuth provider (#8129)
  chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /documentation (#8123)
  feat: show installed skills in UI (#7910)
  fix(deps): gate keyring platform features behind target-specific deps (#8039)
  chore(deps): bump yaml from 2.8.2 to 2.8.3 in /evals/open-model-gym/suite (#8124)
  fix: strip message wrapper in CLI session title generation (#7996)
  fix(providers): fall back to configured models when models endpoint fetch fails (#7530)
  chore(deps): bump brace-expansion from 5.0.3 to 5.0.5 in /evals/open-model-gym/suite (#8139)
  fix: prevent Ollama provider from hanging on tool-calling requests (#7723)
  fix: VMware Tanzu Platform provider - bug fixes, streaming, UI improvements (#8126)
  feat: allow GOOSE_CLI_SHOW_THINKING to be set in config.yaml (#8097)
  fix: GitHub Copilot auth fails to open browser in Desktop app (#6957) (#8019)
  fix(ci): produce .tar.gz archives for Zed ACP registry compatibility (#8054)
  feat: add GOOSE_SHOW_FULL_OUTPUT config to disable tool output truncation (#7919)
  ...

# Conflicts:
#	crates/goose/src/providers/formats/openai.rs
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.

Developer extension provides model instructions inappropriate for Windows OS

2 participants