Sonarqube logo

Sonarqube

Community
DougTrajano
sonarqube

Operate SonarQube-enabled repositories through the SonarQube CLI (`sonar`): verify authentication, discover project keys, inspect project metadata, issues, measures, and quality gates, analyze changed code, scan secrets and dependency risks, call authenticated APIs, trigger remediation, configure integrations, and troubleshoot the CLI. Use whenever the user mentions SonarQube, SonarQube Cloud/SonarCloud, Sonar project details, quality gates, Sonar issues, `sonar` commands, agentic analysis, dependency risks, secrets scanning, or Sonar integrations, even if they do not explicitly name this skill. Do not use for generic static analysis unrelated to SonarQube.

Overview

PublisherDougTrajano
Repositorypydantic-ai-skills
Skill namesonarqube
Stars
380
Forks
29
Bundled files
4
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by DougTrajano on GitHub. Read the source before you install it.

Installation

Install the Sonarqube AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/DougTrajano/pydantic-ai-skills/tree/main/.claude/skills/sonarqube
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/DougTrajano/pydantic-ai-skills.git /tmp/pydantic-ai-skills
mkdir -p .claude/skills
cp -r /tmp/pydantic-ai-skills/.claude/skills/sonarqube .claude/skills/sonarqube
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Sonarqube in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Sonarqube on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Sonarqube is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

SonarQube CLI

Use the installed sonar CLI as the source of truth for a SonarQube-enabled project. Prefer structured, read-only inspection before analysis or mutation, and make the final response state the project, branch or pull request, command scope, and result.

Start with a preflight

Run these checks from the repository or worktree the user placed in scope:

bash
command -v sonar
sonar --version
sonar auth status

If the task involves installation state, integrations, or a confusing auth error, also run sonar system status --json.

Treat sonar auth status as the authoritative credential check. Do not infer authentication merely from a saved config file. In a sandbox, container, SSH session, or background agent, OS Keychain access may fail even though authentication works in the user's interactive terminal. Explain that distinction and use the environment-variable route in authentication.md when the user has made credentials available; never retrieve, print, or persist a token yourself.

The CLI is evolving. If the installed version differs from the reference snapshot or a command rejects an option, run sonar --help and sonar <command> --help, then follow the installed help. Read commands.md when selecting flags or when the user asks what the CLI supports.

Resolve the project before querying it

Use the exact project key, not the display name. Resolve it in this order:

  1. Use a project key explicitly supplied by the user.
  2. Inspect sonar.projectKey in sonar-project.properties at the repository root.
  3. Inspect SonarQube for IDE connected-mode binding under .sonarlint/, such as .sonarlint/connectedMode.json.
  4. Let the CLI auto-detect when the command supports it.
  5. Search accessible projects with sonar list projects -q <name-or-key> and disambiguate multiple matches before continuing.

Do not silently choose among multiple project matches. Read workflows.md for project-detail, issue, quality-gate, and API recipes.

Choose the correct analysis

IntentCommandImportant behavior
Analyze one or more changed source filessonar analyze --file <path>One file defaults to STANDARD; multiple files default to DEEP. --file is repeatable.
Analyze uncommitted Git changessonar analyzeRequires a Git repository and may run server-side analysis.
Analyze staged filessonar analyze --stagedUses git diff --cached.
Compare with a base refsonar analyze --base <ref>Analyze the change set relative to the named ref.
Request explicit cross-file analysissonar analyze --depth DEEPMore context and potentially more time/data transfer.
Invoke the explicit Vortex routesonar analyze agentic ...Server-side analysis; limitations and entitlements apply.
Scan files for hardcoded secretssonar analyze secrets <paths...>Scans paths or --stdin; treat a findings exit code as a finding, not an infrastructure failure.
Analyze dependency manifestssonar analyze dependency-risksUploads manifests for security/license analysis; product entitlement may be required.
Run a traditional full-project CI scanProject's existing scanner/build commandsonar analyze is not a replacement for every SonarScanner, Maven, Gradle, or .NET full-project pipeline. Inspect repository config and use the existing workflow only when requested.

Before server-side analysis, inspect the selected files or Git change set so the scope is known. Avoid --force unless the user has explicitly accepted bypassing the large-change-set confirmation. Prefer --format json for deterministic parsing and retain the command exit status.

After fixing findings, rerun the same analysis scope. Do not expand from a file scan to the entire change set without saying so.

If the selected Git scope is empty, report that no files were analyzed. An empty change set is not evidence that the repository is clean.

Prefer dedicated read commands

Use the narrowest command that answers the question:

bash
sonar list projects -q <query>
sonar list issues --project <key> --format json
sonar quality-gate status --project <key> --format json --all

Add exactly one of --branch <name> or --pull-request <id> when needed. They are mutually exclusive for quality-gate status. Paginate project and issue results rather than assuming the first page is complete.

For an agent-facing issue summary, --format toon is compact. Use JSON when filtering, joining, or producing exact counts; use table or CSV only when that presentation is requested.

Use sonar api get ... when dedicated commands do not expose enough detail. Start with read-only GET requests and consult the connected instance's API description when endpoint support is uncertain:

bash
sonar api get "/api/webservices/list"

API v1/v2 availability differs by Cloud region and Server version. The CLI rewrites supported v2 paths between Cloud and Server, but the server remains the authority. URL-encode project keys and other user-controlled query values.

Handle state-changing commands deliberately

These commands can change local files, credentials, CLI state, code, or remote SonarQube state:

  • sonar remediate
  • sonar api post|patch|put|delete ...
  • sonar integrate ...
  • sonar auth login|logout
  • sonar config telemetry ...
  • sonar update
  • sonar system reset

Resolve exact targets and explain the effect before running them. Browser login must be performed manually by the user; agents cannot authenticate themselves. Never pass tokens in command arguments, logs, committed files, or chat output.

For sonar remediate, preview eligible issue keys with sonar list issues, limit the selection to the requested issues, and note that non-interactive use requires --issues with at most 20 comma-separated keys.

For sonar integrate, inspect existing hooks and agent configuration first because the command writes project or global configuration. Use --non-interactive only after all choices are known. Do not combine project selection with global mode where the installed help marks them mutually exclusive.

Treat sonar system reset --force as destructive: it removes tokens, managed binaries, integrations, and cached files. Run it only when the user explicitly asks for a reset. Likewise, run sonar auth logout, telemetry changes, or an update only on explicit request.

Report results clearly

For inspection tasks, report:

  • CLI version and authenticated target without exposing credentials
  • resolved project key and how it was resolved
  • branch or pull request scope
  • the requested result, including pagination or filters
  • any product/edition limitation or incomplete API response
  • a compact Queries run list naming the dedicated commands and GET endpoints used, so the result is auditable without exposing credentials

For analysis tasks, report files/change-set scope, depth, issue counts grouped usefully, exit status, and the next concrete remediation step. Never reproduce detected secret values; report only type and safe location metadata.

Troubleshoot methodically

When a command fails:

  1. Run its --help and compare flags with the installed version.
  2. Recheck sonar auth status and sonar system status --json.
  3. Confirm Cloud region or Server URL, organization, exact project key, branch/PR, and permissions.
  4. Distinguish authentication, entitlement/edition, network/proxy/TLS, Git-scope, and no-findings outcomes.
  5. Use sonar api ... --verbose only when needed and redact sensitive request or response data before reporting it.

Read authentication.md for credential and network guidance, workflows.md for complete operational recipes, and commands.md for the v1.7.0 command inventory.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Sonarqube AI skill do?

Operate SonarQube-enabled repositories through the SonarQube CLI (`sonar`): verify authentication, discover project keys, inspect project metadata, issues, measures, and quality gates, analyze changed code, scan secrets and dependency risks, call authenticated APIs, trigger remediation, configure integrations, and troubleshoot the CLI. Use whenever the user mentions SonarQube, SonarQube Cloud/SonarCloud, Sonar project details, quality gates, Sonar issues, `sonar` commands, agentic analysis, dependency risks, secrets scanning, or Sonar integrations, even if they do not explicitly name this s...

Why use Sonarqube on TypingMind?

Because you install it once and use it with any model. Sonarqube is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Sonarqube in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/DougTrajano/pydantic-ai-skills/tree/main/.claude/skills/sonarqube. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Sonarqube?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Sonarqube?

As many as you like. As long as a model supports skills, you can use Sonarqube with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Sonarqube AI skill free?

Yes. It is published on GitHub by DougTrajano under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇