Skip to content

Copilot strict no-Bash workflows receive CLI-only safeoutputs instructions #53532

Description

@kubaflo

Summary

A strict Copilot workflow with tools.github.min-integrity: none must set tools.bash: false, but gh-aw v0.86.2 still injects mcp_cli_tools_prompt.md and lists safeoutputs as a CLI executable. The generated prompt explicitly says to invoke it from bash and that it is not an MCP tool, while the agent has no Bash tool. This can produce a silent no-output run even though safeoutputs is present in the Copilot allow-list.

Reproduction

Compile a workflow with:

strict: true
tools:
  bash: false
  github:
    min-integrity: none
safe-outputs:
  add-labels:

The v0.86.2 lock contains all of the following:

  • GH_AW_PROMPT_CONFIG includes safe_outputs_prompt.md and mcp_cli_tools_prompt.md.
  • GH_AW_MCP_CLI_SERVERS_LIST includes safeoutputs.
  • mcp_cli_tools_prompt.md says: "Invoke them from bash - they are not MCP tools" and "For safeoutputs ... always use the CLI commands above."
  • The Copilot invocation has --allow-tool safeoutputs but no shell tool (--allow-tool github --allow-tool safeoutputs --allow-tool write).
  • ${RUNNER_TEMP}/gh-aw/mcp-cli/bin is mounted on PATH, but the model cannot invoke it without Bash.

This was observed in dotnet/maui PR #37447 on the agentic-labeler workflow. The workflow cannot simply enable Bash because v0.86.2 correctly rejects min-integrity: none unless tools.bash: false; lowering integrity would prevent labeling first-time contributors.

Impact

The prompt directs the model to a tool path it cannot use. A model that follows the generated instruction can finish without emitting add_labels or noop; this workflow intentionally disables failure-issue reporting, so the failure may be silent.

Suggested fix

Align prompt generation with the actual tool surface when Bash is disabled. For example, omit CLI-only safeoutputs instructions and provide direct safeoutputs MCP-tool guidance when the Copilot harness exposes --allow-tool safeoutputs, or otherwise ensure the required safe-output path remains callable without Bash.

Related: #46259 / #46778 fixed omission of mounted servers from the Copilot CLI prompt list, but this is the opposite edge: the CLI prompt is present while Bash is deliberately unavailable.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions