{
  "version": "0.8.0",
  "commands": [
    {
      "id": "sonar",
      "name": "sonar",
      "fullName": "sonar",
      "description": "SonarQube CLI",
      "isGroup": true,
      "isRoot": true,
      "requiresAuth": false,
      "depth": 0,
      "parentId": null,
      "arguments": [],
      "options": [],
      "examples": [],
      "children": [
        "sonar-auth",
        "sonar-integrate",
        "sonar-list",
        "sonar-analyze",
        "sonar-verify",
        "sonar-config",
        "sonar-self-update"
      ]
    },
    {
      "id": "sonar-auth",
      "name": "auth",
      "fullName": "sonar auth",
      "description": "Manage authentication tokens and credentials",
      "isGroup": true,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [],
      "examples": [],
      "children": [
        "sonar-auth-login",
        "sonar-auth-logout",
        "sonar-auth-purge",
        "sonar-auth-status"
      ]
    },
    {
      "id": "sonar-auth-login",
      "name": "login",
      "fullName": "sonar auth login",
      "description": "Save authentication token to keychain",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 2,
      "parentId": "sonar-auth",
      "arguments": [],
      "options": [
        {
          "flags": "-s, --server <server>",
          "long": "--server",
          "short": "-s",
          "description": "SonarQube URL (default is SonarQube https://sonarcloud.io)",
          "type": "string",
          "required": false
        },
        {
          "flags": "-o, --org <org>",
          "long": "--org",
          "short": "-o",
          "description": "SonarQube Cloud organization key (required for SonarQube Cloud)",
          "type": "string",
          "required": false
        },
        {
          "flags": "-t, --with-token <with-token>",
          "long": "--with-token",
          "short": "-t",
          "description": "Token value (skips browser, non-interactive mode)",
          "type": "string",
          "required": false
        }
      ],
      "examples": [
        {
          "command": "sonar auth login",
          "description": "Interactive login for SonarQube Cloud with browser"
        },
        {
          "command": "sonar auth login -o my-org -t squ_abc123",
          "description": "Non-interactive login with direct token"
        },
        {
          "command": "sonar auth login -s https://my-sonarqube.io --with-token squ_def456",
          "description": "Non-interactive login for custom server with token"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-auth-logout",
      "name": "logout",
      "fullName": "sonar auth logout",
      "description": "Remove active connection token from keychain",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 2,
      "parentId": "sonar-auth",
      "arguments": [],
      "options": [],
      "examples": [
        {
          "command": "sonar auth logout",
          "description": "Remove active connection token from keychain"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-auth-purge",
      "name": "purge",
      "fullName": "sonar auth purge",
      "description": "Remove all authentication tokens from keychain",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 2,
      "parentId": "sonar-auth",
      "arguments": [],
      "options": [],
      "examples": [
        {
          "command": "sonar auth purge",
          "description": "Interactively remove all saved tokens"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-auth-status",
      "name": "status",
      "fullName": "sonar auth status",
      "description": "Show active authentication connection with token verification",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 2,
      "parentId": "sonar-auth",
      "arguments": [],
      "options": [],
      "examples": [
        {
          "command": "sonar auth status",
          "description": "Show current server connection and token status"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-integrate",
      "name": "integrate",
      "fullName": "sonar integrate",
      "description": "Setup SonarQube integration for AI coding agents, git and others.",
      "isGroup": true,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [],
      "examples": [
        {
          "command": "sonar integrate claude -s https://sonarcloud.io -p my-project",
          "description": "Integrate Claude Code with interactive setup"
        },
        {
          "command": "sonar integrate claude -g",
          "description": "Integrate globally and install hooks to ~/.claude which will be available for all projects"
        }
      ],
      "children": [
        "sonar-integrate-claude",
        "sonar-integrate-git"
      ]
    },
    {
      "id": "sonar-integrate-claude",
      "name": "claude",
      "fullName": "sonar integrate claude",
      "description": "Setup SonarQube integration for Claude Code. This will install secrets scanning hooks, and configure SonarQube MCP Server.",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 2,
      "parentId": "sonar-integrate",
      "arguments": [],
      "options": [
        {
          "flags": "-p, --project <project>",
          "long": "--project",
          "short": "-p",
          "description": "Project key",
          "type": "string",
          "required": false
        },
        {
          "flags": "--non-interactive",
          "long": "--non-interactive",
          "description": "Non-interactive mode (no prompts)",
          "type": "boolean",
          "required": false
        },
        {
          "flags": "-g, --global",
          "long": "--global",
          "short": "-g",
          "description": "Install hooks and config globally to ~/.claude instead of project directory",
          "type": "boolean",
          "required": false
        }
      ],
      "examples": [],
      "children": []
    },
    {
      "id": "sonar-integrate-git",
      "name": "git",
      "fullName": "sonar integrate git",
      "description": "Install a git hook that scans staged files for secrets before each commit (pre-commit) or scans committed files for secrets before each push (pre-push).",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 2,
      "parentId": "sonar-integrate",
      "arguments": [],
      "options": [
        {
          "flags": "--hook <type>",
          "long": "--hook",
          "description": "Hook to install: pre-commit (scan staged files) or pre-push (scan files in unpushed commits)",
          "type": "string",
          "required": false
        },
        {
          "flags": "--force",
          "long": "--force",
          "description": "Overwrite existing hook if it is not from sonar integrate git",
          "type": "boolean",
          "required": false
        },
        {
          "flags": "--non-interactive",
          "long": "--non-interactive",
          "description": "Non-interactive mode (no prompts)",
          "type": "boolean",
          "required": false
        },
        {
          "flags": "--global",
          "long": "--global",
          "description": "Install hook globally for all repositories (sets git config --global core.hooksPath)",
          "type": "boolean",
          "required": false
        }
      ],
      "examples": [
        {
          "command": "sonar integrate git",
          "description": "Install a pre-commit hook that scans staged files for secrets (interactive)"
        },
        {
          "command": "sonar integrate git --hook pre-push",
          "description": "Install a pre-push hook that scans committed files for secrets before pushing"
        },
        {
          "command": "sonar integrate git --global",
          "description": "Install a staged-file secrets hook globally for all repositories (sets git config --global core.hooksPath)"
        },
        {
          "command": "sonar integrate git --hook pre-push --global --non-interactive",
          "description": "Non-interactive: install a pre-push secrets hook globally for all repositories"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-list",
      "name": "list",
      "fullName": "sonar list",
      "description": "List issues and projects from SonarQube",
      "isGroup": true,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [],
      "examples": [],
      "children": [
        "sonar-list-issues",
        "sonar-list-projects"
      ]
    },
    {
      "id": "sonar-list-issues",
      "name": "issues",
      "fullName": "sonar list issues",
      "description": "Search for issues in SonarQube",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 2,
      "parentId": "sonar-list",
      "arguments": [],
      "options": [
        {
          "flags": "-p, --project <project>",
          "long": "--project",
          "short": "-p",
          "description": "Project key",
          "type": "string",
          "required": true
        },
        {
          "flags": "--severity <severity>",
          "long": "--severity",
          "description": "Filter by severity",
          "type": "string",
          "required": false
        },
        {
          "flags": "--format <format>",
          "long": "--format",
          "description": "Output format",
          "type": "string",
          "required": false,
          "defaultValue": "json",
          "allowedValues": [
            "json",
            "table",
            "csv",
            "toon"
          ]
        },
        {
          "flags": "--branch <branch>",
          "long": "--branch",
          "description": "Branch name",
          "type": "string",
          "required": false
        },
        {
          "flags": "--pull-request <pull-request>",
          "long": "--pull-request",
          "description": "Pull request ID",
          "type": "string",
          "required": false
        },
        {
          "flags": "--page-size <page-size>",
          "long": "--page-size",
          "description": "Page size (1-500)",
          "type": "number",
          "required": false,
          "defaultValue": 500
        },
        {
          "flags": "--page <page>",
          "long": "--page",
          "description": "Page number",
          "type": "number",
          "required": false,
          "defaultValue": 1
        }
      ],
      "examples": [
        {
          "command": "sonar list issues -p my-project",
          "description": "List issues in a project"
        },
        {
          "command": "sonar list issues -p my-project --format toon",
          "description": "Output issues in TOON format for AI agents"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-list-projects",
      "name": "projects",
      "fullName": "sonar list projects",
      "description": "Search for projects in SonarQube",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 2,
      "parentId": "sonar-list",
      "arguments": [],
      "options": [
        {
          "flags": "-q, --query <query>",
          "long": "--query",
          "short": "-q",
          "description": "Search query to filter projects by name or key",
          "type": "string",
          "required": false
        },
        {
          "flags": "--page <page>",
          "long": "--page",
          "description": "Page number",
          "type": "number",
          "required": false,
          "defaultValue": 1
        },
        {
          "flags": "--page-size <page-size>",
          "long": "--page-size",
          "description": "Page size (1-500)",
          "type": "number",
          "required": false,
          "defaultValue": 500
        }
      ],
      "examples": [
        {
          "command": "sonar list projects",
          "description": "List first 500 accessible projects"
        },
        {
          "command": "sonar list projects -q my-project",
          "description": "Search projects by name or key"
        },
        {
          "command": "sonar list projects --page 2 --page-size 50",
          "description": "Paginate through projects"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-analyze",
      "name": "analyze",
      "fullName": "sonar analyze",
      "description": "Analyze code for security issues",
      "isGroup": true,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [],
      "examples": [],
      "children": [
        "sonar-analyze-secrets",
        "sonar-analyze-sqaa"
      ]
    },
    {
      "id": "sonar-analyze-secrets",
      "name": "secrets",
      "fullName": "sonar analyze secrets",
      "description": "Scan files or stdin for hardcoded secrets",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 2,
      "parentId": "sonar-analyze",
      "arguments": [
        {
          "name": "paths",
          "description": "File or directory paths to scan for secrets",
          "required": false,
          "variadic": true
        }
      ],
      "options": [
        {
          "flags": "--stdin",
          "long": "--stdin",
          "description": "Read from standard input instead of paths",
          "type": "boolean",
          "required": false
        }
      ],
      "examples": [
        {
          "command": "sonar analyze secrets src/config.ts",
          "description": "Scan a file for hardcoded secrets"
        },
        {
          "command": "sonar analyze secrets src/file1.ts src/file2.ts",
          "description": "Scan multiple files for hardcoded secrets"
        },
        {
          "command": "cat .env | sonar analyze secrets --stdin",
          "description": "Scan stdin for hardcoded secrets"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-analyze-sqaa",
      "name": "sqaa",
      "fullName": "sonar analyze sqaa",
      "description": "Run SQAA server-side analysis on a file (SonarQube Cloud only)",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 2,
      "parentId": "sonar-analyze",
      "arguments": [],
      "options": [
        {
          "flags": "--file <file>",
          "long": "--file",
          "description": "File path to analyze",
          "type": "string",
          "required": true
        },
        {
          "flags": "--branch <branch>",
          "long": "--branch",
          "description": "Branch name for analysis context",
          "type": "string",
          "required": false
        },
        {
          "flags": "--project <project>",
          "long": "--project",
          "description": "SonarCloud project key (overrides auto-detected project)",
          "type": "string",
          "required": false
        }
      ],
      "examples": [],
      "children": []
    },
    {
      "id": "sonar-verify",
      "name": "verify",
      "fullName": "sonar verify",
      "description": "Analyze a file for issues",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": true,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [
        {
          "flags": "--file <file>",
          "long": "--file",
          "description": "File path to analyze",
          "type": "string",
          "required": true
        },
        {
          "flags": "--branch <branch>",
          "long": "--branch",
          "description": "Branch name for analysis context",
          "type": "string",
          "required": false
        },
        {
          "flags": "--project <project>",
          "long": "--project",
          "description": "SonarCloud project key (overrides auto-detected project)",
          "type": "string",
          "required": false
        }
      ],
      "examples": [],
      "children": []
    },
    {
      "id": "sonar-config",
      "name": "config",
      "fullName": "sonar config",
      "description": "Configure CLI settings",
      "isGroup": true,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [],
      "examples": [],
      "children": [
        "sonar-config-telemetry"
      ]
    },
    {
      "id": "sonar-config-telemetry",
      "name": "telemetry",
      "fullName": "sonar config telemetry",
      "description": "Configure telemetry settings",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 2,
      "parentId": "sonar-config",
      "arguments": [],
      "options": [
        {
          "flags": "--enabled",
          "long": "--enabled",
          "description": "Enable collection of anonymous usage statistics",
          "type": "boolean",
          "required": false
        },
        {
          "flags": "--disabled",
          "long": "--disabled",
          "description": "Disable collection of anonymous usage statistics",
          "type": "boolean",
          "required": false
        }
      ],
      "examples": [
        {
          "command": "sonar config telemetry --enabled",
          "description": "Enable collection of anonymous usage statistics"
        },
        {
          "command": "sonar config telemetry --disabled",
          "description": "Disable collection of anonymous usage statistics"
        }
      ],
      "children": []
    },
    {
      "id": "sonar-self-update",
      "name": "self-update",
      "fullName": "sonar self-update",
      "description": "Update sonar CLI to the latest version",
      "isGroup": false,
      "isRoot": false,
      "requiresAuth": false,
      "depth": 1,
      "parentId": "sonar",
      "arguments": [],
      "options": [
        {
          "flags": "--status",
          "long": "--status",
          "description": "Check for a newer version without installing",
          "type": "boolean",
          "required": false
        },
        {
          "flags": "--force",
          "long": "--force",
          "description": "Install the latest version even if already up to date",
          "type": "boolean",
          "required": false
        }
      ],
      "examples": [],
      "children": []
    }
  ]
}