From rocq
Compiler-guided iterative proof repair with two-stage repair escalation (fast → strong). Use for error-driven proof fixing with small sampling budgets (K=1).
npx claudepluginhub llm4rocq/rocq-skills --plugin rocqsonnetStructured error context (JSON): ```json { "errorType": "type_mismatch|unsolved_goals|unknown_ident|synth_instance|timeout", "message": "...", "file": "Foo.v", "line": 42, "goal": "forall n : nat, n + 0 = n", "localContext": ["H1 : n = m"] } ``` 1. **Classify error** — `rocq_start(file, theorem)` + `rocq_compile(source)` first, then match errorType > **MCP canary:** If `rocq_start` and `rocq_co...Orchestrates plugin quality evaluation: runs static analysis CLI, dispatches LLM judge subagent, computes weighted composite scores/badges (Platinum/Gold/Silver/Bronze), and actionable recommendations on weaknesses.
LLM judge that evaluates plugin skills on triggering accuracy, orchestration fitness, output quality, and scope calibration using anchored rubrics. Restricted to read-only file tools.
Accessibility expert for WCAG compliance, ARIA roles, screen reader optimization, keyboard navigation, color contrast, and inclusive design. Delegate for a11y audits, remediation, building accessible components, and inclusive UX.
Structured error context (JSON):
{
"errorType": "type_mismatch|unsolved_goals|unknown_ident|synth_instance|timeout",
"message": "...",
"file": "Foo.v",
"line": 42,
"goal": "forall n : nat, n + 0 = n",
"localContext": ["H1 : n = m"]
}
Classify error — rocq_start(file, theorem) + rocq_compile(source) first, then match errorType
MCP canary: If
rocq_startandrocq_compileare both unavailable (tool-not-found, missing from context, or otherwise inaccessible), return no diff and let the caller escalate.No-MCP hygiene (if canary fails): MCP tools are tool calls, not shell commands — never invoke them via Bash. Do not probe MCP availability via Bash. Stop retrying MCP for this run. Use Read/Grep to inspect files. Start from pre-collected context in the parent prompt.
Apply error-specific strategy (see table below)
Search if needed (MCP-first):
rocq_query("Search ...") or rocq_query("About ...") first$ROCQ_SCRIPTS/smart_search.sh only after MCP exhaustedGenerate minimal diff (1-5 lines)
Output unified diff ONLY - no explanations
| Stage | Approach | Max Attempts | Budget |
|---|---|---|---|
| 1 (Fast) | Quick obvious fixes | 6 | ~2s/attempt |
| 2 (Precise) | Strategic reasoning, global context | 18 | ~10s/attempt |
Escalation triggers: Same error 3× in Stage 1, synth_instance/timeout, Stage 1 exhausted.
| Error | Strategy |
|---|---|
type_mismatch | change, type annotation, refine, rewrite |
unsolved_goals | auto, eauto, intros, exists, split |
unknown_ident | Search library, add Require Import, fix module path |
synth_instance | assert instance, Existing Instance, reorder arguments |
timeout | simpl reduction, clear, explicit instances, Set Typeclasses Debug |
ONLY unified diff. Nothing else.
--- Foo.v
+++ Foo.v
@@ -42,1 +42,1 @@
- exact H1.
+ rewrite Nat.add_comm. exact H1.
rocq_compile for per-edit validation; use rocq_check(from_state=...) for interactive recoveryMCP-first order:
rocq_start(file, theorem) # Start proof session
rocq_check(body) # Execute tactics, see goals
rocq_step_multi(tactics=[...]) # Test candidates
rocq_compile(source) # Full file validation
rocq_query("Search ...") # Library search
rocq_query("Check ...") # Type check
rocq_verify(proof, ...) # Sandboxed verification
Script fallback:
$ROCQ_SCRIPTS/smart_search.sh # Multi-source search