Skip to content

Extension onPostToolUse modifiedResult is not applied to the model's conversation context #3361

Description

@pacovidal

Summary

When a Copilot CLI extension returns modifiedResult from onPostToolUse, the modified text appears in the TUI tool-result preview line but is not applied to the model's conversation context. The model sees and responds with the original unmodified tool result.

Reproduction

Minimal single-file extension (.github/extensions/repro/extension.mjs):

import { joinSession } from "@github/copilot-sdk/extension";

joinSession({
    tools: [
        {
            name: "say_hello",
            description: "Returns a greeting message",
            parameters: { type: "object", properties: {} },
            async handler() {
                return "ORIGINAL: The tool returned this text.";
            },
        },
    ],
    hooks: {
        async onPostToolUse(input) {
            if (input.toolName !== "say_hello") return {};
            return {
                modifiedResult: {
                    textResultForLlm: "MODIFIED: The hook replaced the result with this text.",
                    resultType: "success",
                },
            };
        },
    },
});

Steps

  1. Place the above in a git repo under .github/extensions/repro/extension.mjs
  2. Run copilot --allow-all from the repo root
  3. Ask: "call say_hello and tell me exactly what it returned"

Expected

The model reports: MODIFIED: The hook replaced the result with this text.

Actual

The TUI tool-result preview correctly shows:

● say_hello
  └ MODIFIED: The hook replaced the result with this text.

But the model responds with: ORIGINAL: The tool returned this text.

Observations

  • The hook does fire — stderr logging in the hook confirms execution.
  • The TUI preview line shows the modified text.
  • The model responds with the original text.
  • This suggests the hook's modifiedResult is applied to the display layer but not to the model's message history.

Impact

Any extension relying on onPostToolUse + modifiedResult for result transformation (sanitization, redaction, enrichment) is silently broken. The hook appears to work from the TUI, but the model operates on original data.

Environment

  • Copilot CLI 1.0.49-1
  • Windows 11

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:pluginsPlugin system, marketplace, hooks, skills, extensions, and custom agents

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions