Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
412 changes: 412 additions & 0 deletions .github/skills/code-simplifier/SKILL.md

Large diffs are not rendered by default.

863 changes: 863 additions & 0 deletions .github/skills/copilot-sdk/SKILL.md

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,26 @@ azqr mcp --mode http --addr :8080

> For detailed MCP configuration, see the [Usage documentation](https://azure.github.io/azqr/docs/usage/).

### Copilot (AI Assistant)

Azure Quick Review includes an interactive AI assistant powered by GitHub Copilot for natural language interaction with azqr:

```bash
# Start interactive AI assistant
azqr copilot

# Use a specific model
azqr copilot --model claude-sonnet-4.5

# Resume a previous session
azqr copilot --resume <session-id>
```

**Prerequisites:**
1. [GitHub CLI](https://cli.github.com/) installed
2. Authenticated: `gh auth login`
3. Active GitHub Copilot subscription

## Filtering Recommendations and more

You can configure Azure Quick Review to include or exclude specific subscriptions or resource groups and also exclude services or recommendations. To do so, create a `yaml` file with the following format:
Expand Down
61 changes: 61 additions & 0 deletions cmd/azqr/commands/copilot.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

package commands

import (
"github.com/Azure/azqr/internal/copilot"

"github.com/spf13/cobra"
)

const defaultCopilotModel = "claude-sonnet-4.6"

var (
copilotModel string
copilotPrompt string
)

func init() {
copilotCmd.Flags().StringVar(&copilotModel, "model", defaultCopilotModel, "Copilot model to use (default: Claude Sonnet 4.6 Medium)")
copilotCmd.Flags().StringVarP(&copilotPrompt, "prompt", "p", "", "Run a single prompt and print the response")
copilotCmd.AddCommand(copilotModelsCmd)
rootCmd.AddCommand(copilotCmd)
}

var copilotModelsCmd = &cobra.Command{
Use: "models",
Short: "List available GitHub Copilot models",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return copilot.ListModels()
},
}

var copilotCmd = &cobra.Command{
Use: "copilot",
Short: "Interactive AI assistant powered by GitHub Copilot",
Long: `Start a conversational AI session powered by GitHub Copilot to interact with azqr.

This command connects to GitHub Copilot and enables natural language interaction
with Azure Quick Review tools and capabilities.

Requirements:
1. GitHub CLI installed (https://cli.github.com/)
2. Authenticated: gh auth login
3. GitHub Copilot subscription active

Examples:
# Start interactive session
azqr copilot

# Run a single prompt
azqr copilot -p "Scan my Azure subscription for compliance issues"

# Use a specific model
azqr copilot --model claude-sonnet-4.6`,
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return copilot.Run(copilotModel, copilotPrompt)
},
}
32 changes: 32 additions & 0 deletions docs/content/en/docs/Usage/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,38 @@ azqr show --file report.json --open
azqr show --file report.xlsx --port 3000
```

## Copilot (AI Assistant)

Azure Quick Review includes an interactive AI assistant powered by GitHub Copilot. This command starts a conversational TUI session that connects to GitHub Copilot and exposes azqr tools for natural language interaction.

### Prerequisites

1. [GitHub CLI](https://cli.github.com/) installed
2. Authenticated: `gh auth login`
3. Active GitHub Copilot subscription

### Starting the Assistant

```bash
# Start interactive AI assistant
azqr copilot

# Use a specific model (default: claude-sonnet-4.5)
azqr copilot --model claude-sonnet-4.5

# Resume a previous session
azqr copilot --resume <session-id>
```
### Available Tools

The assistant can invoke the following azqr tools:

- **scan** – Run Azure resource compliance scans
- **get-recommendations-catalog** – View the azqr recommendations catalog
- **get-supported-services** – List supported Azure services

It also has access to the [Microsoft Learn MCP server](https://learn.microsoft.com/api/mcp) for fetching official Azure documentation.

## MCP Server (Model Context Protocol)

Azure Quick Review includes a Model Context Protocol (MCP) server that enables AI assistants and tools to interact with azqr functionality. The MCP server can run in two modes:
Expand Down
45 changes: 34 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.2.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription v1.2.0
github.com/charmbracelet/lipgloss v1.1.0
github.com/chzyer/readline v1.5.1
github.com/github/copilot-sdk/go v0.2.0
github.com/gruntwork-io/terratest v0.56.0
github.com/iancoleman/strcase v0.3.0
github.com/mark3labs/mcp-go v0.45.0
Expand All @@ -27,14 +30,26 @@ require (

require (
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.7.0 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
github.com/buger/jsonparser v1.1.2 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charmbracelet/colorprofile v0.4.1 // indirect
github.com/charmbracelet/x/ansi v0.11.6 // indirect
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
github.com/charmbracelet/x/term v0.2.2 // indirect
github.com/clipperhouse/displaywidth v0.9.0 // indirect
github.com/clipperhouse/stringish v0.1.1 // indirect
github.com/clipperhouse/uax29/v2 v2.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
github.com/google/jsonschema-go v0.4.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
Expand All @@ -47,20 +62,23 @@ require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/jsonschema v0.13.0 // indirect
github.com/jinzhu/copier v0.4.0 // indirect
github.com/klauspost/compress v1.18.4 // indirect
github.com/klauspost/compress v1.18.5 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/mailru/easyjson v0.9.1 // indirect
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
github.com/mailru/easyjson v0.9.2 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.19 // indirect
github.com/mattn/go-zglob v0.0.6 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/richardlehane/mscfb v1.0.6 // indirect
github.com/richardlehane/msoleps v1.0.6 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/tiendc/go-deepcopy v1.7.2 // indirect
Expand All @@ -69,15 +87,20 @@ require (
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/xuri/efp v0.0.1 // indirect
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
github.com/zclconf/go-cty v1.18.0 // indirect
golang.org/x/crypto v0.48.0 // indirect
golang.org/x/mod v0.33.0 // indirect
golang.org/x/net v0.51.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.41.0 // indirect
golang.org/x/text v0.34.0 // indirect
golang.org/x/tools v0.42.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/otel v1.42.0 // indirect
go.opentelemetry.io/otel/metric v1.42.0 // indirect
go.opentelemetry.io/otel/trace v1.42.0 // indirect
golang.org/x/crypto v0.49.0 // indirect
golang.org/x/mod v0.34.0 // indirect
golang.org/x/net v0.52.0 // indirect
golang.org/x/sync v0.20.0 // indirect
golang.org/x/sys v0.42.0 // indirect
golang.org/x/text v0.35.0 // indirect
golang.org/x/tools v0.43.0 // indirect
)
Loading
Loading