Codexqa Defect Analyzer logo

Codexqa Defect Analyzer

Organization
openqa-cn
codexqa-defect-analyzer

AI defect detection and code-risk scanning for engineering projects. Use when the user asks for AI defect detection, code-risk scan, review a diff/MR/PR/commit (incremental), baseline-scan a repository (full), OR upload/paste code snippets for adhoc defect detection. Combines two detection dimensions — (1) deterministic SAST/lint/secrets/SCA and (2) one-round Agent LLM Detection by the invoking agent's embedded model (no separate LLM API key) — then dedupes and merges them into the final report. Delivers structured findings ordered by severity (P0–P3) via report_scan.json / report_scan.md / report_scan.html. Do NOT use to apply or autofix code style/formatting — lint may still surface hygiene findings. Code-graph / call-chain MUST use CodexQA CLI for all languages (references/codexqa-cli.md) — never homemade analyzers. Not CodexQA evidence-pack HTML review (that is codexqa-code-reviewer), not structure/impact mapping (that is codexqa-code-analyzer), and not exception RCA (that is codexqa-rootcause-analyzer). When scenario unclear, ask or run choose_scenario / run_scan.py choose. Former skill name: defect-detection.

Overview

Publisheropenqa-cn
Repositorycodexqa
Skill namecodexqa-defect-analyzer
Stars
233
Forks
3
Bundled files
78
LicenseApache-2.0
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.

  • 78 bundled files

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

  • Open source

    Published by openqa-cn on GitHub. Read the source before you install it.

Installation

Install the Codexqa Defect Analyzer 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/openqa-cn/codexqa/tree/main/skills/codexqa-defect-analyzer
  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/openqa-cn/codexqa.git /tmp/codexqa
mkdir -p .claude/skills
cp -r /tmp/codexqa/skills/codexqa-defect-analyzer .claude/skills/codexqa-defect-analyzer
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Codexqa Defect Analyzer 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 Codexqa Defect Analyzer 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 Codexqa Defect Analyzer 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.

Defect Detection

You are a codexqa-defect-analyzer orchestrator. Commands are English; user-facing text may be Chinese. Never start semantic review before deterministic collect + context budget checks.

CLI: python3 {baseDir}/scripts/run_scan.py ($SKILL_SCRIPT). Runtime artifacts: -o report dir (default /tmp/aid_report/) and optional {baseDir}/data/ feedback.

README.md / README.zh-CN.md / HOW_IT_WORKS.md / KNOWN_LIMITATIONS.md (and their .zh-CN twins) are human-facing. Do not load them at runtime.

Boundaries

NeedSkill
SAST + Agent LLM Detection → report_scan.* (P0–P3)this skill (codexqa-defect-analyzer)
CodexQA evidence-pack + Agent LLM judgment → bilingual REVIEW-REPORT.htmlcodexqa-code-reviewer
Symbol-graph change impact, callers, test gapscodexqa-code-analyzer
Exception RCA from stacks/logs on top of CLI analysiscodexqa-rootcause-analyzer

Detection dimensions

Final report_scan.* = deduped merge of two dimensions:

DimensionWho runs itOutput / provenance
DeterministicPython adapters (SAST / lint / secrets / SCA)sast_only; dimension=deterministic
Agent LLM DetectionYou — the host agent's embedded model (one analysis round + Stage2 verify)llm_judged; dimension=agent_llm
(merged)Same-locus compatible hitssast_confirmed; dimension=deterministic+agent_llm

Agent LLM Detection uses prompts/agent_detect.md (Stage1) then prompts/review_filter.md (Stage2). No LLM_API_KEY in default --llm-mode agent.

Judgment model (default)

You (the agent invoking this skill) ARE the Agent LLM Detection dimension (Stage1/Stage2). Do not require LLM_API_KEY / LLM_BASE_URL. Scripts prepare prompts; you write findings JSON; scripts merge + dedupe the report.

--llm-modeWhen
agent (default)Skill / Cursor agent inline — no API key
apiOptional external OpenAI-compatible API — see references/llm-api.md
dry-runHeuristic mock (CI advisory only)

Deliverable

ArtifactDefaultRole
report_scan.json/tmp/aid_report/ (-o)Canonical findings; schema references/output_schema.json
report_scan.mdsame dirHuman summary (Markdown)
report_scan.htmlsame dirSame content as .md in styled HTML (auto-generated at finalize)

Finding fields: file, line, category, severity, title, evidence, suggestion; source ∈ sast_only | sast_confirmed | llm_judged; dimension ∈ deterministic | agent_llm | deterministic+agent_llm; judgment SHOULD include rule_id. Order P0→P3. Surface tooling_status.missing when present. Deterministic adapters must emit non-empty suggestion (Semgrep uses fix/message; normalize_finding backfills from evidence as fallback).

Not this skill’s deliverable: CodexQA Mermaid “必看组” reports (references/codexqa-cli.md), platform write-back, or exception RCA prose.

Scenario selection

bash
python3 scripts/choose_scenario.py --list
python3 scripts/choose_scenario.py --infer "<user utterance>"
python3 scripts/run_scan.py choose --scenario <id> ...
idWhen
repo-incrementalGit MR/PR/diff
repo-fullWhole-repo baseline
upload-incremental / upload-fullUploaded files / directory
pasteChat paste / snippet

Upload/paste → temp file → run_scan.py adhoc. Unspecified mode: snippet→incremental, directory→full. No code → ask; do not scan empty.

Tools (deterministic)

Before collect: python3 scripts/ensure_tools.py --repo <repo>. Missing scanners: repair (≤3 agent attempts) → tell user → continue; report tooling_status.missing. CodexQA mock policy: real CLI always wins. If codexqa --help succeeds, all mock env vars (CODEXQA_FORCE_MOCK, CODEXQA_MOCK) are ignored and the live graph is used. Mock applies only when the binary is missing (adhoc may auto-enable mock as last resort). Repo scans hard-fail if CLI missing and mock not allowed.

RoleTools
SASTSemgrep, Bandit, gosec
Secrets / SCA / Lintgitleaks→…, OSV (osv-scanner → OSV HTTP API → npm audit), ruff / eslint / golangci-lint

Not used: SonarQube, CodeQL.

bash
bash scripts/install_codexqa.sh
export PATH="$(npm prefix -g)/bin:$HOME/.local/bin:$HOME/go/bin:$PATH"

Report cache (diff_hash)

Incremental scans cache finalized reports keyed by diff_hash. Agent-inline mode (default) never reads cache at prepare — it always emits agent_llm/ for Agent LLM Detection (Stage1/Stage2). Cache hits apply only to --llm-mode api|dry-run unless you explicitly pass --use-cache.

Flag / commandWhen
(default agent)Always full Stage1 → Stage2 → finalize; no cache short-circuit
--freshClear this diff's cache entry before scan (use for full rescan, adhoc retest, post-fix validation)
--no-cacheDisable cache read and write for this run
--use-cacheAgent mode only: reuse a prior finalized report without LLM (re-present only)
run_scan.py cache listInspect cached entries (pipeline version, llm_mode, complete)
run_scan.py cache --cache-clear-allWipe all cache (after pipeline upgrades)
run_scan.py cache --cache-diff-hash <hash>Remove one stale entry

Agent MUST do before a user-requested full rescan: pass --fresh (or cache --cache-clear-all after skill/pipeline changes). Never assume a prior report_scan.* in -o is from the current pipeline run.

Scan scope planning (full / incremental)

Before deterministic collect, scope_planner.py narrows analysis using industry scope rules (see references/scope_policy.yaml):

  • SonarQube: global + test exclusions; inclusions only shrink the analyzable set.
  • Semgrep: monorepo --include roots (apps/, packages/, …).
  • CodeQL: paths-ignore for vendor/generated/tests/fixtures.
  • Sonatype reachability: application/service/library projects only; exclude docs/deploy/tooling.
  • Polyglot roots: manifest-based project detection; deepest root owns files.
bash
python3 scripts/scope_planner.py --repo <repo> --print-summary
python3 scripts/scope_planner.py --repo <repo> -o /tmp/scope_plan.json

Override via config/scan_config.yaml → scope_planning.manual_include (e.g. [apps/]).

SCA (OSV-first)

  • No Trivy / trivy-db. SCA never downloads or requires a local vulnerability DB.
  • Primary: osv-scanner CLI when installed (optional; brew/go).
  • Always available: OSV HTTP API (api.osv.dev) for Maven pom.xml coordinates — no binary needed.
  • Node fallback: npm audit when package-lock.json is present.
  • Core install does not fail if osv-scanner is missing.

Agent-inline scan SOP (default)

1) Deterministic prepare (handoff)

bash
python3 scripts/run_scan.py incremental --repo <repo> --intent "<desc>" -o /tmp/aid_report
# full rescan / adhoc / retest after fixes — always add --fresh:
python3 scripts/run_scan.py adhoc --scan-mode incremental --files path/to/File.java --fresh -o /tmp/aid_report
# or: full | adhoc --scan-mode incremental|full ...

Stdout/stderr includes AGENT_LLM_HANDOFF and bundle_dir → usually /tmp/aid_report/agent_llm. If you see CACHE SKIP: agent-inline mode… — proceed to Stage1 (expected). If you see CACHE HIT in agent mode, you passed --use-cache intentionally. Read agent_llm/MANIFEST.json for paths. Do not invent findings before this step.

2) Stage1 — Agent LLM Detection (you)

  1. Read agent_llm/stage1_prompt.md (from prompts/agent_detect.md; or each shards/<id>/stage1_prompt.md for full).
  2. You are the Agent LLM Detection dimension: one round of embedded-model code analysis. Apply prompts/ + injected policies; output strict JSON {"findings":[...]}.
  3. Write stage1.json (per shard if full). Empty findings is OK when deterministic already covers risk.

3) Stage2 prepare + Stage2 (you)

bash
python3 scripts/run_scan.py agent-stage2 --agent-dir /tmp/aid_report/agent_llm
  1. Read stage2_prompt.md (per shard if full).
  2. Write llm_final.json (incremental) or each shards/<id>/stage2.json (full) as {"findings":[...]} with optional "dismissals":[{"file","line","reason"}].
    • Ambiguous SAST residue: demote by emitting a same-locus finding with the final severity (merge keeps LLM severity), or dismiss via dismissals / "dismissed": true / "verdict":"dismiss" (clear SAST cannot be dismissed).
  3. Empty findings alone does not remove ambiguous SAST from the report — use dismissals.

4) Finalize — merge + dedupe + present

bash
python3 scripts/run_scan.py finalize --agent-dir /tmp/aid_report/agent_llm -o /tmp/aid_report

finalize / merge_report.py dedupes and merges deterministic ∪ Agent LLM Detection into one severity-ordered report. Read report_scan.json / .md / .html; present to user (Deliverable). HTML is written automatically from the Markdown body. Then Section D if user verdicts.

Quick commands

bash
python3 scripts/run_scan.py adhoc --scan-mode incremental --files a.py --fresh -o /tmp/aid_report
python3 scripts/run_scan.py adhoc --scan-mode incremental --paste-file /tmp/snip.py --lang python --fresh -o /tmp/aid_report
python3 scripts/run_scan.py choose --infer "帮我看看这段粘贴的代码有没有漏洞"
python3 scripts/run_scan.py cache list
python3 scripts/run_scan.py cache --cache-clear-all
# CI / offline mock only (cache hits OK for identical diff):
python3 scripts/run_scan.py incremental --repo . --dry-run -o /tmp/aid_report

Section D — Verdicts

Only when the user explicitly accepts/dismisses/ignores:

bash
python3 scripts/feedback.py record --title "<title>" --verdict accept|dismiss|ignore \
  --file "<path>" --category "<cat>" --rule-id "<RULE_ID>"

No verdict → do not invent one.

LLM semantic policies

Canonical: references/policies/manifest.yaml (v1.1.0, 27 rules). There is no separate AUTH-003; auth-bypass paths are covered by ARCH-001. SAST-clear patterns (SSRF, pickle, path traversal, open redirect, weak crypto, float money, …) stay out of the pack.

bash
python3 scripts/audit_policy_fixtures.py

Add rule: new unused id YAML + manifest + bump version + audit. Details in policies dir.

Hard rules

  • Polyglot CodexQA mandate: every language (Java/Go/Python/TS/Rust/…) MUST use CodexQA CLI for underlying repo code-graph / call-chain / import / RAG analysis. Language detection labels the repo (primary_language + confidence); it never selects another graph engine. No homemade analyzers, no GitNexus/language-AST graph fallback (references/codexqa-cli.md).
  • Primary language: auto-detected (file counts + weighted manifests; JS/TS disambiguation). Override when wrong: config.primary_language, --language, or AID_PRIMARY_LANGUAGE. Low confidence is warned on stderr.
  • SAST / lint / secrets / SCA remain language-aware adapters and are unchanged by this mandate.
  • SAST missing: repair → warn → continue.
  • Never feed whole files >500 lines into judgment context (scripts already truncate).
  • Never emit a finding without file, line, evidence, severity.
  • Ask/choose when scenario unclear; do not autofix style.
  • Do not export CODEXQA_FORCE_MOCK=1 in your shell for user scans — it is ignored when real CLI works, but clutters logs. Mock is auto-selected only when CLI is missing.
  • Full rescan / adhoc retest: always --fresh; never skip Stage1/Stage2 because of diff_hash cache (agent mode blocks this by default; use --fresh for api/dry-run and to invalidate stale entries).
  • Always run Agent LLM Detection in default agent mode (Stage1 → Stage2 → finalize merge). Do not skip the embedded-model round when presenting a final report.

CI (advisory smoke)

Monorepo hygiene runs npm test (pipeline + policy fixtures). Live agent/API scans are not required. An optional advisory workflow template lives at references/ci-advisory-workflow.yml (CODEXQA_FORCE_MOCK=1 + --dry-run); treat its artifacts as smoke only.

Policy fixture check

bash
python3 scripts/audit_policy_fixtures.py

Optional external API LLM

See references/llm-api.md (--llm-mode api).

Bundled files

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

and 18 more files.

Frequently asked questions

What does the Codexqa Defect Analyzer AI skill do?

AI defect detection and code-risk scanning for engineering projects. Use when the user asks for AI defect detection, code-risk scan, review a diff/MR/PR/commit (incremental), baseline-scan a repository (full), OR upload/paste code snippets for adhoc defect detection. Combines two detection dimensions — (1) deterministic SAST/lint/secrets/SCA and (2) one-round Agent LLM Detection by the invoking agent's embedded model (no separate LLM API key) — then dedupes and merges them into the final report. Delivers structured findings ordered by severity (P0–P3) via report_scan.json / report_scan.md /...

Why use Codexqa Defect Analyzer on TypingMind?

Because you install it once and use it with any model. Codexqa Defect Analyzer 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 Codexqa Defect Analyzer in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/openqa-cn/codexqa/tree/main/skills/codexqa-defect-analyzer. 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 Codexqa Defect Analyzer?

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 Codexqa Defect Analyzer?

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

Is the Codexqa Defect Analyzer AI skill free?

Yes. It is published on GitHub by openqa-cn under the Apache-2.0 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 👇