Skip to content

The copilot CLI flashes the permission prompt UI, even though extension has approved. #956

@brijeshb

Description

@brijeshb

I'm working on an extension that would auto approve based on some rules.

// Deferred fire-and-forget logger — session isn't available until joinSession resolves
let _session = null;
const log = (msg) => { if (_session) _session.log(msg).catch(() => {}); };
...

onPermissionRequest: (request) => {
        const toolName = request.toolName ?? "";
        const toolArgs = {};
        if (request.fullCommandText) toolArgs.command = request.fullCommandText;
        if (request.fileName) toolArgs.path = request.fileName;

        // 1. deny rules first
        for (const rule of parsedDeny) {
            if (matchRule(rule, toolName, toolArgs)) {
                log(`DENY (permission) tool=${toolName} kind=${request.kind} rule="${rule.raw}"`);
                return { kind: "denied-by-rules", rules: [rule.raw] };
            }
        }

        // 2. allow rules — auto-approve
        for (const rule of parsedAllow) {
            if (matchRule(rule, toolName, toolArgs)) {
                log(`APPROVE (permission) tool=${toolName} kind=${request.kind} rule="${rule.raw}"`);
                return { kind: "approved" };
            }
        }

        // 3. no match — let CLI handle (prompt user)
        log(`NO MATCH (permission) tool=${toolName} kind=${request.kind}`);
        return { kind: "no-result" };
    },

In the cli i see the UI prompt none the less, if i do nothing, i see the tool call get approved and complete in the background.
If i'm fast enough or am on autopilot with limited permissions then the ui prompt rejects the tool call and fails it.

I do not think the CLI is correctly sequencing and waiting on extensions for permissions flow.

CLI Version : v1.0.13-1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions