Code review has traditionally focused on reading a pull request and identifying potential problems before the code is merged. Automated CI pipelines then take over to compile the project, execute tests, run static analysis, and perform other validation.

GitHub Copilot Code Review with shell tools changes the boundary between these activities.

Instead of only examining source code, an agent can use supported shell tools to perform development tasks such as running build commands and tests, inspecting their output, and using those results to improve its review.

This creates a workflow closer to an AI-assisted development environment:

Pull Request
     |
     v
Copilot Code Review
     |
     v
Inspect Repository
     |
     v
Run Build / Tests
     |
     v
Analyze Results
     |
     v
Review Findings
     |
     v
Human Validation

The important question is not whether AI can execute a command.

The more useful question is whether allowing an AI reviewer to execute repository commands produces better review feedback without introducing security or trust problems.

What Are Shell Tools in Copilot Code Review?

A shell tool allows an agent to interact with the repository through command-line operations.

For a code review workflow, this can enable actions such as:

Build the project
Run unit tests
Inspect generated files
Check project structure
Execute repository scripts
Analyze command output

For example, a .NET project might use:

dotnet build

followed by:

dotnet test

A JavaScript project could instead use:

npm test

or:

npm run build

The exact commands depend on the repository.

The important difference is that the agent can obtain evidence from executing the project's own tooling rather than relying entirely on static inspection.

Why Static Review Is Not Always Enough

Consider this pull request:

public async Task<User?> GetUserAsync(int id)
{
    return await repository.FindAsync(id);
}

The code may appear correct.

But perhaps the repository interface has changed:

Task<User?> FindAsync(
    int id,
    CancellationToken cancellationToken);

A static review might identify the mismatch.

A build provides definitive evidence:

error CS7036:
There is no argument given that corresponds
to the required parameter 'cancellationToken'.

The agent can then use the build output as additional context.

This creates a useful feedback loop:

Code
 |
 v
Build
 |
 +---- Success ----> Continue Review
 |
 +---- Failure ----> Investigate Error
                         |
                         v
                    Review Finding

Running Tests During Review

Compilation is only one part of validation.

Suppose a change modifies authorization logic:

if (user.IsAdmin)
{
    return true;
}

The code may compile successfully.

But existing tests might reveal a behavioral regression:

Test: NonAdminCannotDeleteArticle
Result: Failed

Expected: Forbidden
Actual: Success

The test result gives the agent evidence that static analysis alone cannot provide.

A stronger review workflow therefore looks like:

Source Analysis
      +
Build
      +
Tests
      |
      v
Combined Review

Example: .NET Pull Request

Suppose a repository contains:

src/
tests/
Directory.Build.props
MyApp.sln

A code review agent can inspect the project and determine that the appropriate validation commands are:

dotnet build MyApp.sln

and:

dotnet test MyApp.sln

The results can then be incorporated into the review.

A successful build:

Build succeeded.
0 Error(s)

does not prove that the pull request is correct.

It only establishes that the solution compiles.

The agent still needs to review the behavior.

Build Success Is Not Review Success

This distinction is essential.

Consider:

Build
  |
  +--> Passed
  |
  v
Tests
  |
  +--> Passed
  |
  v
Security
  |
  +--> Potential Issue
  |
  v
Human Review

All tests passing does not mean that the code is secure or architecturally appropriate.

Similarly, a successful build does not verify:

  • Business requirements

  • Correct authorization behavior

  • Data migration safety

  • API compatibility

  • Performance characteristics

  • Operational behavior

Shell tools provide additional evidence. They do not replace engineering judgment.

Agent-Executed Commands and Trust

Allowing an AI agent to execute shell commands introduces an important security consideration.

A shell command can potentially:

  • Read files

  • Modify files

  • Access environment variables

  • Execute project scripts

  • Consume CPU and memory

  • Access network resources depending on the environment

  • Trigger side effects

Therefore, shell access should not be treated as equivalent to a harmless read-only code analysis feature.

The security model of the environment matters.

Why Repository Scripts Need Special Attention

Many repositories contain scripts that perform more than developers expect.

For example:

{
  "scripts": {
    "test": "node scripts/test.js",
    "build": "node scripts/build.js"
  }
}

Running:

npm test

does not necessarily execute a simple test runner.

It executes whatever the repository defines.

Similarly, a shell script such as:

./build.sh

may invoke several additional commands.

Before allowing an agent to execute repository commands automatically, teams should understand what those commands actually do.

A Safer Validation Model

A useful enterprise workflow is to separate commands into trust levels.

Low-Risk Commands

Examples:

dotnet build
dotnet test
npm test
go test ./...

These are generally intended for local validation, although their actual behavior should still be inspected.

Medium-Risk Commands

Examples:

npm run integration-test
./scripts/generate-code.sh
make test

These may interact with additional tools or services.

High-Risk Commands

Examples include scripts that:

Modify infrastructure
Deploy resources
Delete data
Change cloud configuration
Access production systems
Rotate credentials

These should not be automatically executed simply because an AI reviewer encounters them in a repository.

Preventing Dangerous Tool Usage

The principle should be:

AI can validate code
        |
        v
AI should not automatically control production

CI environments should use least privilege.

If a review agent only needs to compile and test a project, it should not have:

  • Production credentials

  • Deployment permissions

  • Database administrator access

  • Cloud account owner privileges

  • Unrestricted secret access

This follows the same security principles used for any automated CI worker.

Shell Tools and Secrets

Environment variables deserve special attention.

A process might have access to:

DATABASE_URL
API_KEY
CLOUD_TOKEN
PACKAGE_REGISTRY_TOKEN

Even if the agent does not intentionally request these values, repository commands might access them.

Therefore, shell-enabled review environments should use appropriately scoped credentials and secret-management controls.

Never assume that a shell tool is safe simply because the AI is instructed not to print secrets.

Security should be enforced by the execution environment.

Test Isolation

Tests themselves can have side effects.

For example:

Integration Tests
       |
       v
Database
       |
       v
External Service

If an AI reviewer executes those tests against a shared environment, the tests could modify real data or consume external resources.

Prefer:

AI Review
    |
    v
Isolated Test Environment
    |
    +--> Temporary Database
    +--> Mock Services
    +--> Test Credentials

This is safer and more reproducible.

How Shell Results Improve Review Quality

Suppose Copilot identifies a potentially incorrect API change:

public IActionResult Get(int id)
{
    return Ok(service.Get(id));
}

The agent can inspect the project and discover that:

service.Get()

was changed to:

Task<Item?> GetAsync(int id);

Running the build produces concrete evidence.

Instead of a speculative comment such as:

"This may cause a compilation problem."

the review can be based on:

"The project fails to compile because the service now
returns Task<Item?> while this action expects Item."

This makes the review more actionable.

Shell Tools and Test-Driven Review

Test failures can provide even stronger evidence.

Imagine a change to a discount calculation:

var total = price * quantity;

The agent runs:

dotnet test

and receives:

Failed:
OrderTotal_WithDiscount_ReturnsExpectedValue
Expected: 90
Actual: 100

The review now has an actual failing scenario.

This is significantly more useful than simply identifying that the calculation "looks suspicious."

The agent can inspect:

Production Code
       +
Test
       +
Failure Output

and provide a more informed finding.

Should the Agent Fix the Problem?

That depends on the workflow.

A review-only workflow might:

Run Tests
   |
   v
Report Failure

An agent-assisted development workflow could go further:

Run Tests
   |
   v
Identify Failure
   |
   v
Modify Code
   |
   v
Run Tests Again
   |
   v
Report Result

The second model is more powerful but also introduces greater risk.

Every additional write capability increases the importance of:

  • Sandboxing

  • Permissions

  • Auditability

  • Human review

  • Validation

A Build-Test-Fix Loop

A controlled agent workflow can use an iterative loop:

          +----------------+
          | Inspect Change |
          +-------+--------+
                  |
                  v
          +----------------+
          | Run Build/Test |
          +-------+--------+
                  |
          +-------+-------+
          |               |
       Pass             Fail
          |               |
          v               v
   Review Complete    Analyze Error
                          |
                          v
                     Apply Fix
                          |
                          v
                    Run Again

The loop should have a bounded number of iterations.

Without limits, an agent can repeatedly modify code without converging on a correct solution.

Setting Practical Limits

A safe workflow might define:

Maximum iterations: 3
Maximum execution time: 10 minutes
Allowed commands: Build + Test
Writable directories: Repository workspace
Network: Restricted
Secrets: Minimal

The exact values depend on the project.

The principle is to constrain the agent's operating environment to the minimum required for the review.

CI Still Matters

Copilot's shell-based validation should not replace CI.

A pull request should still go through the organization's standard pipeline:

Developer
   |
   v
Pull Request
   |
   +--> Copilot Review
   |       |
   |       +--> Shell Validation
   |
   v
CI Pipeline
   |
   +--> Build
   +--> Unit Tests
   +--> Integration Tests
   +--> Security Scanning
   +--> Policy Checks
   |
   v
Human Approval
   |
   v
Merge

The AI review is an additional layer.

CI remains the authoritative automated validation system because it is centrally configured, repeatable, auditable, and governed by the organization's policies.

Shell Validation vs CI

Capability

Copilot Shell Validation

CI Pipeline

Interactive investigation

Strong

Limited

Early feedback

Strong

Strong

Repository exploration

Strong

Depends

Standardized environment

Depends

Strong

Central governance

Limited

Strong

Production deployment controls

Should be restricted

Controlled

Auditability

Depends on platform

Strong

Final merge gate

No

Yes

Human review replacement

No

No

The two systems are complementary.

Security Review Considerations

Security-sensitive repositories require additional controls.

An agent should not automatically be trusted with:

Production secrets
Private signing keys
Cloud administrator credentials
Production databases
Deployment credentials

Use separate credentials for review environments.

For example:

Production
   |
   X
AI Review Agent

Test Environment
   |
   v
AI Review Agent

This simple separation can significantly reduce blast radius.

Common Mistakes

Giving the Agent Excessive Permissions

If the agent only needs to run tests, it should not have deployment credentials.

Running Tests Against Production

Never assume repository tests are harmless.

Use isolated environments.

Trusting Build Success Too Much

Compilation only proves that the compiler accepted the code.

Treating AI Output as a Security Guarantee

AI review can miss vulnerabilities and can also generate incorrect findings.

Continue using dedicated security controls.

Allowing Unlimited Agent Iterations

Set execution and modification limits.

Ignoring Repository Scripts

A command such as:

npm test

may execute arbitrary repository-defined scripts.

Understand the command chain before allowing automation.

Automatically Merging After Successful Tests

Tests are necessary but are not sufficient evidence for every engineering decision.

Best Practices

Use Least Privilege

Give the review environment only the permissions it needs.

Prefer Isolated Execution

Use disposable or sandboxed environments for shell-based validation.

Restrict Network Access

If tests do not require unrestricted network access, don't provide it.

Minimize Secrets

Do not expose production credentials to the review environment.

Use Existing Build Commands

Prefer the repository's documented validation commands instead of inventing arbitrary commands.

Keep CI as the Final Gate

AI validation should supplement, not replace, centralized CI.

Review Agent-Generated Changes

If the agent modifies code, inspect the resulting diff.

Capture Validation Results

Build and test results should be visible and auditable.

Bound the Execution Loop

Set reasonable time and iteration limits.

Advantages

More Evidence-Based Reviews

The agent can use actual compiler and test output instead of relying entirely on static reasoning.

Faster Feedback

Potential problems can be identified during the review rather than waiting for later manual investigation.

Better Test Awareness

The agent can understand whether a change causes existing tests to fail.

Reduced Developer Context Switching

Developers can receive code analysis and validation feedback in one workflow.

Useful Repository Exploration

Shell access allows the agent to inspect project structure and existing tooling.

Disadvantages and Risks

Security Exposure

Shell execution creates a larger attack surface than read-only code analysis.

Repository Scripts Can Have Side Effects

The command being executed may perform more actions than expected.

False Confidence

Passing tests do not guarantee correct software.

Resource Consumption

Builds and integration tests can consume significant CPU, memory, storage, and network resources.

Environment Differences

A command that passes in an agent's environment may fail in the organization's actual CI environment.

Incorrect Fixes

If the agent is allowed to modify code, it may introduce unrelated or incorrect changes while attempting to fix a failure.

Recommended Enterprise Architecture

A mature implementation can separate responsibilities:

                    Pull Request
                         |
                         v
                Copilot Code Review
                         |
             +-----------+-----------+
             |                       |
             v                       v
       Static Analysis        Shell Validation
                                     |
                          +----------+----------+
                          |                     |
                          v                     v
                       Build                  Tests
                          |                     |
                          +----------+----------+
                                     |
                                     v
                              Review Findings
                                     |
                                     v
                              Human Reviewer
                                     |
                                     v
                                    CI
                                     |
                                     v
                                   Merge

The agent can accelerate analysis while the organization's existing controls remain authoritative.

Example Review Policy

A team can define a policy such as:

Copilot may:
- Inspect repository files
- Run build commands
- Run unit tests
- Run static analysis
- Read command output

Copilot may not:
- Access production systems
- Deploy infrastructure
- Modify CI security settings
- Read production secrets
- Change protected configuration

This gives developers useful automation without granting unnecessary authority.

A Practical .NET Workflow

For an ASP.NET Core repository, the validation process could be:

dotnet restore
dotnet build --no-restore
dotnet test --no-build

The agent can use the results to identify:

Restore failure
Build failure
Test failure

If everything succeeds:

Restore: Passed
Build: Passed
Tests: Passed

the review still continues with static inspection.

If tests fail:

Tests: Failed
2 failing tests

the agent can inspect the relevant test and production code before reporting the finding.

This is a much stronger process than treating code review and test execution as completely disconnected activities.

Conclusion

GitHub Copilot Code Review with shell tools represents an important evolution in AI-assisted code review.

Traditional AI review primarily reasons over source code and pull request context. Shell-enabled review can obtain additional evidence by interacting with the repository's development tools.

That enables a workflow such as:

Pull Request
     |
     v
AI Review
     |
     v
Build
     |
     v
Tests
     |
     v
Analyze Results
     |
     v
Review Findings

The benefit is straightforward: the reviewer can reason from actual build and test results rather than relying exclusively on static analysis.

But shell access also introduces additional security considerations. Repository commands can have side effects, tests can access external systems, and environment variables can contain sensitive credentials.

For that reason, the safest implementation uses:

Least Privilege
      +
Sandboxed Execution
      +
Restricted Network
      +
Minimal Secrets
      +
Bounded Agent Actions
      +
Standard CI
      +
Human Review

The goal should not be to let AI replace the engineering validation pipeline.

Instead, Copilot's shell capabilities can act as an additional intelligent layer between code changes and the final CI and human-review gates. When properly isolated and governed, this can make pull-request review more evidence-driven, reduce repetitive investigation, and help developers identify build and test failures earlier without weakening the controls required for production software.