Quality gate using LLM Council multi-model consensus for CI/CD pipelines. Use for automated approval workflows and pipeline quality checks. Keywords: gate, CI, CD, pipeline, automated approval, quality gate, GitHub Actions
Automated quality gate using multi-model consensus for CI/CD pipelines.
| Code | Verdict | CI/CD Behavior |
|------|---------|----------------|
| 0 | PASS | Pipeline continues |
| 1 | FAIL | Pipeline fails |
| 2 | UNCLEAR | Pipeline pauses for human review |
All deliberations are saved for audit:
.council/logs/{timestamp}-{hash}/
├── request.json # Input snapshot
├── stage1.json # Model responses
├── stage2.json # Peer reviews
├── stage3.json # Synthesis
└── result.json # Final verdict
name: Council Quality Gate
on:
pull_request:
branches: [main, master]
jobs:
council-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install LLM Council
run: pip install 'llm-council-core[http]'
- name: Run Council Gate
env:
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
run: |
llm-council gate \
--snapshot ${{ github.sha }} \
--rubric-focus Security \
--confidence-threshold 0.8
- name: Upload Transcript
if: always()
uses: actions/upload-artifact@v4
with:
name: council-transcript
path: .council/logs/
| Parameter | Default | Description |
|-----------|---------|-------------|
| confidence_threshold | 0.7 | Minimum confidence for PASS |
| rubric_focus | null | Focus area (Security, Performance) |
| timeout | 300s | Maximum execution time |
| tier | balanced | Council tier (quick, balanced, high) |
{
"verdict": "pass",
"confidence": 0.85,
"blocking_issues": [],
"rationale": "All models agreed...",
"exit_code": 0,
"transcript_path": ".council/logs/2025-12-31T...",
"partial": false,
"timeout_fired": false,
"completed_stages": ["stage1", "stage2", "stage3"]
}
Under LLM_COUNCIL_STRUCTURED_FINDINGS=true (ADR-051) the response also carries
a typed findings array (all severities) and the verdict is computed as fail
iff any critical finding exists. blocking_issues is then the critical
subset. Gate on the verdict / exit_code, not on blocking_issues == []
(empty even on real FAILs on the default prose-scrape path).
If timeout_fired: true, the gate timed out before completing all stages. This returns exit code 2 (UNCLEAR), pausing the pipeline for human review. Check completed_stages to see how far it got. Consider using --tier quick for faster gate checks (the tier sets the timeout budget; there is no separate --timeout flag).
# Basic gate check
llm-council gate --snapshot $(git rev-parse HEAD)
# Security-focused gate
llm-council gate --snapshot $(git rev-parse HEAD) --rubric-focus Security --confidence-threshold 0.9
# Quick tier for faster feedback
llm-council gate --snapshot $(git rev-parse HEAD) --tier quick
references/ci-cd-rubric.md for CI/CD-specific scoringcouncil-verify: General verificationcouncil-review: Code review with feedbackSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer