Go Review logo

Go Review

Organization
SpecterOps
go-review

Performs security review of arbitrary Go packages, including libraries, frameworks, CLIs, HTTP and gRPC services, and backend applications. Covers authentication and authorization, request parsing, SSRF, SQL and command injection, templates and filesystems, crypto/session handling, concurrency, and unsafe/cgo edges.

Overview

PublisherSpecterOps
Repositoryskills
Skill namego-review
Stars
706
Forks
80
Bundled files
1
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.

  • 1 bundled files

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

  • Open source

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

Installation

Install the Go Review 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/SpecterOps/skills/tree/main/plugins/go-review/skills/go-review
  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/SpecterOps/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/plugins/go-review/skills/go-review .claude/skills/go-review
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Go Review 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 Go Review 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 Go Review 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.

Go Security Review

Runs in the main conversation. The orchestrator builds a Go inventory, selects review clusters, delegates or sequentially executes their worker protocols, validates artifacts, then runs dedup and FP/severity judges.

When to Use

  • Auditing Go HTTP, gRPC, GraphQL, or RPC services
  • Reviewing backend APIs, daemons, gateways, proxies, or agents with network exposure
  • Investigating authorization, SSRF, SQL, template, filesystem, concurrency, or cgo risk
  • Reviewing Go libraries, frameworks, command-line tools, or packages without a service boundary

When NOT to Use

  • Smart contracts or blockchain modules with chain-specific semantics
  • Kernel or eBPF code
  • General Go style review without a security objective

Rationalizations to Reject

  • "Go is memory safe, so the code is safe." Most serious Go service bugs are trust-boundary and concurrency failures.
  • "The middleware handles auth." Verify every route, interceptor, and alternate entry path.
  • "The standard library prevents injection." It helps only when callers preserve its invariants.
  • "This only affects internal services." Internal service credentials and metadata endpoints are still security boundaries.
  • "The context will time out eventually." Missing cancellation and goroutine leaks become denial-of-service issues at scale.

Required Inputs

Collect these once if they are not explicit. Do not ask for a worker model by default; inherit the current session/client model. Honor a model only when the user explicitly names one that the client makes available.

ParameterValues
threat_modelREMOTE, LOCAL_UNPRIVILEGED, BOTH
severity_filterall, medium, high
scope_subpathoptional; defaults to .

Orchestration Workflow

Phase 1: Resolve Plugin Root

Resolve the directory containing prompts/clusters/manifest.json and go_inventory.go from ${CODEX_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_ROOT}, or the installed location of this skill. Do not scan a user's home directory. Abort with an actionable error if no root resolves.

Require Go 1.22 or newer. The inventory is implemented with the Go standard library, uses the locally installed toolchain without automatic downloads, and does not fetch the target's module dependencies. Source using syntax newer than the installed Go version can still fail to parse.

Phase 2: Build Go Inventory

Choose output_dir as .go-review-results/<UTC timestamp>/, or use an external location requested by the user. Create it and run the inventory portably with:

sh
python3 "${GO_REVIEW_PLUGIN_ROOT}/scripts/prepare_review.py" \
  --repo-root "." \
  --scope-subpath "${scope_subpath}" \
  --output-dir "${output_dir}"

Abort only if the inventory reports zero .go files. If has_service=false, skip the service-boundary and request-input clusters and continue with any other detected package capabilities.

The inventory schema remains at version 1. Its implementation uses Go syntax trees for imports, declarations, calls, routes, goroutines, and channel types; do not replace these results with text searches over source files.

This is conservative syntax analysis, not type or SSA analysis. It inventories all matching non-test .go files regardless of build tags, crosses nested Go modules within scope, and reports the review root's module in the top-level module field. Capability heuristics can still over-select a cluster; workers must verify reachability and data flow from source evidence.

Phase 3: Write Context

Read go-inventory.json and write context.md with YAML frontmatter:

  • threat_model
  • severity_filter
  • scope_subpath
  • go_file_count
  • package_count
  • every capability flag from the inventory
  • output_dir

The body must summarize:

  • service entry points and frameworks
  • untrusted input sources
  • trust boundaries and auth assumptions
  • outbound dependencies, storage, filesystem, templates, and crypto surfaces
  • concurrency and cgo/unsafe surfaces

Phase 4: Build Deterministic Run Plan

Run:

sh
python3 "${GO_REVIEW_PLUGIN_ROOT}/scripts/build_run_plan.py" \
  --plugin-root "${GO_REVIEW_PLUGIN_ROOT}" \
  --output-dir "${output_dir}" \
  --threat-model "${threat_model}" \
  --severity-filter "${severity_filter}" \
  --scope-subpath "${scope_subpath}" \
  --context-roots "." \
  --has-service "${has_service}" \
  --has-outbound-http "${has_outbound_http}" \
  --has-sql "${has_sql}" \
  --has-exec "${has_exec}" \
  --has-fs-archive "${has_fs_archive}" \
  --has-template "${has_template}" \
  --has-crypto-auth "${has_crypto_auth}" \
  --has-concurrency "${has_concurrency}" \
  --has-unsafe-cgo "${has_unsafe_cgo}"

Read plan.json; do not manually re-derive cluster selection.

Phase 5: Run Worker Protocols

The portable contracts are the bundled protocol files agents/go-review-worker.md, agents/go-review-dedup-judge.md, and agents/go-review-fp-judge.md. Do not assume those filenames are registered as callable agent names. Read the relevant protocol and pass it with each rendered prompt to the client-provided delegation mechanism. If delegation is not available, execute each assignment sequentially in the main session while preserving the same artifact contract.

Execution rules:

  • optional foreground cache primer
  • workers spawned foreground in waves of at most 16
  • no run_in_background=true
  • pass each rendered worker prompt verbatim
  • each worker writes findings, shard, and coverage artifacts
  • inherit the current session/client model unless the user explicitly selected an available model

If plan.json contains zero workers, create an empty findings-index.txt, note that no capability-gated clusters were selected in run-summary.md, and proceed to reporting. Do not treat an ordinary package with no selected clusters as a workflow failure.

Phase 6: Validate Worker Artifacts

For each completed worker, run:

sh
python3 "${GO_REVIEW_PLUGIN_ROOT}/scripts/validate_artifacts.py" \
  "${output_dir}/plan.json" \
  --worker "worker-N" \
  --claimed-count "worker-N=<count>"

After all workers complete, reconcile shards and initialize deterministic empty reports when applicable:

sh
python3 "${GO_REVIEW_PLUGIN_ROOT}/scripts/finalize_run.py" "${output_dir}"

This builds findings-index.txt from the union of worker shards and findings/*.md, retains orphan findings, and records incomplete shards in run-summary.md; do not silently drop a finding because a worker crashed after writing it.

Phase 7: Judges and Reports

Run the bundled dedup protocol, then the bundled FP protocol, each with output_dir in the prompt. The FP judge also receives the absolute path to generate_sarif.py. Use delegated workers when available or execute these protocols sequentially in the main session.

Always run the SARIF safety net:

sh
python3 "${GO_REVIEW_PLUGIN_ROOT}/scripts/generate_sarif.py" "${output_dir}"

Return REPORT.md, REPORT.sarif, go-inventory.json, and run-summary.md.

Success Criteria

  • go-inventory.json exists and reports at least one Go file
  • every planned worker has a coverage file and shard
  • findings-index.txt exists even for zero findings
  • dedup-summary.md, fp-summary.md, REPORT.md, and REPORT.sarif exist
  • any truncated or failed worker is surfaced in run-summary.md

Artifact Sensitivity

.go-review-results/ may contain source excerpts, suspected vulnerabilities, and absolute local paths. Treat it as sensitive assessment data. Before sharing or committing it, review and redact the contents. Recommend that users ignore the directory in the target repository or choose an external output location, but do not modify .gitignore without permission.

Source Provenance

The implementation approach and security-review taxonomy are annotated in references/provenance.md. Treat those sources as guidance; findings still require evidence from the repository under review.

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 Go Review AI skill do?

Performs security review of arbitrary Go packages, including libraries, frameworks, CLIs, HTTP and gRPC services, and backend applications. Covers authentication and authorization, request parsing, SSRF, SQL and command injection, templates and filesystems, crypto/session handling, concurrency, and unsafe/cgo edges.

Why use Go Review on TypingMind?

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

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/SpecterOps/skills/tree/main/plugins/go-review/skills/go-review. 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 Go Review?

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 Go Review?

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

Is the Go Review AI skill free?

Yes. It is published on GitHub by SpecterOps 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 👇