From llm-gateway
Submits completed implementation work for structured code review via llm-gateway, iterating on feedback until unconditional approval is received. Useful before merging or shipping.
How this skill is triggered — by the user, by Claude, or both
Slash command
/llm-gateway:codex-review-gateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Submit completed work to Codex via the llm-gateway for review. Iterate on feedback until you receive unconditional approval. This is the standard quality gate used across all VerivusAI projects.
Submit completed work to Codex via the llm-gateway for review. Iterate on feedback until you receive unconditional approval. This is the standard quality gate used across all VerivusAI projects.
Apply these on every dispatch unless the caller has explicitly overridden a rule in the current turn:
model — let the gateway use its configured default per CLI.approvalStrategy:"mcp_managed" is the skill dispatch default (the gateway schema default is "legacy"). For Codex, also pass fullAuto:true; this gives sandboxed autonomy while keeping the gateway approval gate in front of execution.idleTimeoutMs is a separate no-output safeguard.NOT APPROVED or conditional, fix + re-submit → repeat. Escalate after 3 rounds. This rule does not apply to pure implementation or non-review analysis dispatches.Use codex_request with a review prompt that includes:
codex_request({
prompt: "Review the changes in [path]. This implements [feature/fix]. Check for: correctness, edge cases, test coverage, and adherence to project conventions. End with APPROVED or NOT APPROVED with specific findings.",
fullAuto: true,
approvalStrategy: "mcp_managed"
})
fullAuto: true is mandatory. Without it, Codex runs in a restricted sandbox where it cannot read files, run commands, or use MCP tools. The review will fail with "cannot verify" errors. Always pass fullAuto: true and approvalStrategy: "mcp_managed" for review requests.
If the task is large or complex, expect auto-deferral at 45s. When response contains status:"deferred":
llm_job_status({jobId: "[from deferred response]"})
// Poll every 60 seconds until completed (no wallclock timeout)
llm_job_result({jobId: "[jobId]"})
Look for explicit APPROVED or NOT APPROVED in the response.
When NOT APPROVED:
codex_request({
prompt: "Re-review after fixes. Previous findings:\n1. [issue] — Fixed by [what you did]\n2. [issue] — Fixed by [what you did]\n\nVerify the fixes are correct. End with APPROVED or NOT APPROVED with findings.",
fullAuto: true,
approvalStrategy: "mcp_managed"
})
Repeat Steps 2-3 until you get unconditional APPROVED. Typical iterations:
If after 3 rounds Codex still has issues, escalate to the user.
If Codex says "cannot verify" or you see bwrap sandbox errors, you almost certainly forgot fullAuto: true. Without it, Codex runs in a restricted sandbox that blocks file access, shell commands, and MCP tools.
With fullAuto: true, Codex gets sandboxed autonomous execution:
In the rare case where Codex genuinely cannot access something specific (e.g., needs credentials it doesn't have), provide the evidence inline:
This skill is referenced by:
When codex_request returns status:"deferred":
llm_job_status every 60 seconds using a non-blocking wait between polls (see below)status:"completed", fetch with llm_job_resultidleTimeoutMs (no-output safeguard, default 10 min) remains active and will kill genuinely hung processes — this is separate from wallclock timeoutStandalone sleep 60 is blocked in some orchestrators (e.g. the Claude Code harness rejects Bash({command: "sleep 60"}) and also rejects chained short sleeps). Use a non-blocking equivalent:
Bash({command: "sleep 60 && echo done", run_in_background: true}) — emits a completion notification after 60s; poll then. Monitor is for streaming progress, not one-shot waits.ScheduleWakeup (if available in your orchestrator): schedule a wakeup with delaySeconds: 60 and a prompt that resumes the polling loop.correlationId to trace review rounds: "review-round-1", "review-round-2"model — let the gateway default applycodex_request_async explicitly to avoid any sync waitresumeLatest:true (or sessionId:<real Codex UUID from ~/.codex/sessions/>) on round 2+ so Codex carries the prior round's findings into the re-review. --full-auto is silently dropped on resume — the resumed session inherits its original approval policy.LLM_GATEWAY_JOB_RETENTION_DAYS). If your polling wrapper times out, fetch by jobId later or re-issue the identical call — auto-dedup reattaches to the existing Codex job within the dedup window (LLM_GATEWAY_DEDUP_WINDOW_MS, default 1 h). Use forceRefresh:true only when the diff under review has actually changed.grok_request with approvalStrategy:"mcp_managed") and require both to APPROVE. For maximum cross-vendor diversity, add mistral_request as a fifth reviewer (Mistral Vibe defaults to --agent auto-approve).promptParts field over prompt: { system: "<stable review brief>", context: "<file paths under review>", task: "Review for …" }. The two are mutually exclusive (provide exactly one of \prompt` or `promptParts`if both supplied). Stablesystem/contextkeeps the prefix bytes identical round-to-round, raising implicit cache hit rate at the provider. Confirm viacache-state://prefix/{hash}orsession_get.cacheState`.npx claudepluginhub verivus-oss/llm-cli-gateway --plugin llm-gatewayCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.