Skip to content

plugin-review

Placement runtime (out-of-process over gRPC)
Source github.com/opencharly/plugin-review/candy/plugin-review
Version 2026.251.0000
Candy plugin-review

This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).

The reserved words this plugin serves:

  • review — command class
  • pr — verb class

Read-only GitHub PR review for OpenCharly’s gate: the deterministic verb:pr tools (pr_diff / pr_commits / pr_thread / pr_meta) plus command:review — the same chat-completions agent loop the retired pi-review-action ran: four read-only GitHub tools, a deterministic Verdict: PASS|BLOCK line, ONE PR comment, and $GITHUB_OUTPUT compatibility (response/success/verdict). Also serves the runtime orchestration executor (charly review –plan ) that turns a declared review-plan.yml into a step pipeline, so ANY runtime plugin can join the review workflow purely through config. The review rulebook is a 1:1 port of pi-review-action’s prompt.txt, resolved at run time via REVIEW_PROMPT_PATH (T1: instructions from main, never the PR under review).

The CUE schema below is the authoritative grammar for this plugin’s input. It is the same single source that generates the plugin’s Go parameter types and answers the runtime Describe RPC, so this page cannot disagree with either.

// The plugin's OWN CUE schema — the typed plugin_input for the verb:pr check
// verbs. SINGLE SOURCE for this plugin's params, used two ways (the same contract
// the reference plugin-example-external uses):
//
// 1. GENERATE the Go param struct — `cue exp gengotypes` (wrapping with
// `package params` + @go annotations) emits params/cue_types_gen.go, so the
// provider decodes plugin_input into a TYPED struct, never a hand-parsed
// map[string]any.
// 2. VALIDATE authored input AT RUNTIME — the provider SERVES this source over
// the Describe channel (schema_cue via sdk.BuildCapabilities); the host
// splices it onto its base and validates every authored `pr:` step's
// plugin_input against #PrInput. The host never reads this file from disk.
//
// SELF-CONTAINED (no package clause, no base references): compiles standalone
// (gengotypes + the SDK serve-side check) and splices onto the base.
//
// command:review declares NO input def — its args are pass-through CLI tokens.
// #PrInput — the plugin_input shape for the `pr` verb (read-only check tools).
#PrInput: {
// repo — owner/repo of the PR; default: the triggering repository.
repo?: string @go(Repo)
// pr — PR number (required unless an offline fixture is used).
pr?: int @go(Pr)
// method — which read-only tool to run.
method: "pr_diff" | "pr_commits" | "pr_thread" | "pr_meta" @go(Method)
// fixture — name of a committed offline fixture (deterministic, no network).
fixture?: string @go(Fixture)
}

See also the candy reference for this candy’s install surface.