AgentClash CI Release Gate
SkillDev toolsUse when wiring AgentClash manifest-based CI gates, deciding whether a PR should run AgentClash, resolving baselines, running `agentclash ci run`, interpreting gate exit codes, collecting CI artifacts, or configuring regression promotion policy in GitHub Actions.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the AgentClash CI Release Gate skill
What this skill tells your AI
The instructions your AI receives, as published by agentclash/agentclash in web/content/agent-skills/agentclash-ci-release-gate/SKILL.md and read by ahel’s review.
Purpose
Wire an AgentClash candidate build/deployment into a repo-tracked CI manifest, compare it against a baseline run, and turn the release gate verdict into CI status.
Use When
- A pull request or mainline workflow should run AgentClash only when relevant files or labels match.
- A user needs a
.agentclash/ci.yamlmanifest for a candidate agent, workload, baseline, gate, and regression promotion policy. - CI should fail on AgentClash release gate failures, warnings, insufficient evidence, setup errors, run timeouts, or candidate run failures.
- A GitHub Actions workflow should use the repo-local
.github/actions/agentclash-cicomposite action.
Do Not Use When
- The agent build spec does not exist yet; use
agentclash-agent-build-author. - Runtime profiles, provider accounts, model aliases, or workspace tools are not configured; use
agentclash-runtime-resources-setup. - The challenge pack or input set is not validated and published; use the challenge-pack skills first.
- The task is only to read scorecards or failure evidence from an existing run; use
agentclash-scorecard-readeroragentclash-regression-flywheel.
Environment
Use hosted production by default:
export AGENTCLASH_API_URL="https://api.agentclash.dev"
export AGENTCLASH_TOKEN="<token>"
export AGENTCLASH_WORKSPACE="<workspace-id>"
In GitHub Actions, pass tokens through secrets or the composite action inputs. Do not print tokens. ci run exits with code 10 and a JSON error envelope when workspace context is missing, so set AGENTCLASH_WORKSPACE, pass --workspace, or use saved CLI workspace config.
Manifest Shape
Create a sample with:
agentclash ci init .agentclash/ci.yaml
agentclash ci init .agentclash/ci.yaml --force
The CLI sample manifest is:
version: 1
trigger:
paths:
- .agentclash/agent.json
- prompts/**
- tools/**
labels:
- agentclash/eval
candidate:
build:
agent_build_id: 00000000-0000-0000-0000-000000000001
spec_file: .agentclash/agent.json
deployment:
name: pr-candidate
runtime_profile_id: 00000000-0000-0000-0000-000000000002
provider_account_id: 00000000-0000-0000-0000-000000000003
model: gpt-5.5
evaluation:
challenge_pack_version_id: 00000000-0000-0000-0000-000000000005
input_set_id: 00000000-0000-0000-0000-000000000006
regression_suites:
- 00000000-0000-0000-0000-000000000007
baseline:
run_id: 00000000-0000-0000-0000-000000000008
refresh: manual
max_age_days: 30
gate:
fail_on: regression
regressions:
promote_failures: proposed
Exact fields the current CLI parses:
version: must be1.trigger.paths: required, nonblank doublestar globs;trigger.labels: optional labels that can force a run.candidate.build.agent_build_id: required existing agent build ID.candidate.build.spec_file: required relative path inside the repository; absolute paths and..escapes are rejected byci run.candidate.deployment.name: optional deployment name; if blank,ci rungeneratesagentclash-ci-<unix>.candidate.deployment.runtime_profile_id: required.candidate.deployment.provider_account_idandcandidate.deployment.model: optional individually, but required together whenci runcreates the candidate deployment. Remote validation checks that the provider account exists.evaluation.challenge_pack_version_id: required.evaluation.input_set_id,evaluation.regression_suites, andevaluation.regression_cases: optional; blank regression entries are invalid.baseline.run_id: locked baseline run, preferred for PR gates.baseline.run_agent_id: optional but only valid withbaseline.run_id.baseline.deployment_id: moving baseline selector; mutually exclusive withbaseline.run_id.baseline.refresh: optionalmanual,propose, orauto_on_main; default behavior ismanual.baseline.max_age_days: optional non-negative freshness limit;0means no age check.gate.fail_on: required, one ofregression,warning, orinsufficient_evidence.gate.policy_file: optional schema field, but the currentagentclash ci runimplementation does not read or post it.regressions.promote_failures: required, one ofdisabled,proposed, orauto_on_main.
Important gate fidelity note: today ci run posts baseline_run_id, candidate_run_id, and optional run-agent IDs to /v1/release-gates/evaluate. It does not pass gate.fail_on, does not load gate.policy_file, and has no --fail-on or --policy-file flag. The backend normalizes an empty policy to the default release gate policy. Do not claim manifest gate fields customize evaluation until the CLI source wires that behavior.
Validation Commands
Validate locally first:
agentclash ci validate .agentclash/ci.yaml
agentclash ci validate .agentclash/ci.yaml --json
Use remote validation when workspace credentials are available:
agentclash ci validate .agentclash/ci.yaml --remote --json
Structured validate output includes:
{
"path": ".agentclash/ci.yaml",
"valid": true,
"manifest": {},
"remote": {
"workspace_id": "<WORKSPACE_ID>",
"valid": true,
"checks": [
{
"field": "candidate.build.agent_build_id",
"resource": "agent_build",
"id": "<AGENT_BUILD_ID>",
"valid": true,
"code": "ok",
"message": "agent build is accessible in the selected workspace"
}
]
}
}
Remote validation checks the agent build, runtime profile, provider account, model alias, challenge pack version, input set, regression suites, regression cases, and baseline compatibility. API failures that cannot be reduced to a field problem appear as remote API error: ....
Should Run
Use this before spending hosted evaluation budget:
agentclash ci should-run --manifest .agentclash/ci.yaml --base origin/main --head HEAD --json
agentclash ci should-run --manifest .agentclash/ci.yaml --changed-file prompts/refund.md --labels agentclash/eval --json
--changed-file may be repeated. --labels accepts comma-separated or repeated values. If changed files are omitted and refs are present, the CLI derives files with git diff --name-only --diff-filter=ACDMRTUXB <base>...<head>. Ref defaults can come from AGENTCLASH_CI_BASE, GITHUB_BASE_REF as origin/<base>, AGENTCLASH_CI_HEAD, GITHUB_SHA, and HEAD when a base is set.
JSON output shape:
{
"path": ".agentclash/ci.yaml",
"should_run": true,
"reason": "changed files matched trigger.paths",
"changed_files": ["prompts/refund.md"],
"labels": ["agentclash/eval"],
"checked_path_globs": ["prompts/**"],
"checked_labels": ["agentclash/eval"],
"matched_paths": [{"pattern": "prompts/**", "file": "prompts/refund.md"}],
"matched_labels": ["agentclash/eval"]
}
The decision is an OR: matched paths or matched labels make should_run: true. Reasons are exactly:
changed files matched trigger.paths and labels matched trigger.labelschanged files matched trigger.pathslabels matched trigger.labelsno changed files or labels were providedno changed files or labels matched manifest triggers
Baseline Resolution
Resolve and print the exact baseline before running the gate:
agentclash ci baseline --manifest .agentclash/ci.yaml --json
For baseline.run_id, strategy is locked_run and source is baseline.run_id. The run must be in the selected workspace, completed, compatible with evaluation.challenge_pack_version_id and optional evaluation.input_set_id, and within baseline.max_age_days when set. baseline.run_agent_id is resolved against that run when present.
For baseline.deployment_id, strategy is deployment_latest_completed and source is baseline.deployment_id. The CLI selects the newest completed compatible run whose participant used that deployment and warns that deployment baselines move over time. Prefer baseline.run_id for PRs.
Refresh next actions are:
manual: after a successful mainline run, updatebaseline.run_idintentionally in a reviewed change.propose: after a successful mainline run, open a reviewed change that updatesbaseline.run_id.auto_on_main: after a successful protected mainline run, automation may updatebaseline.run_idwith an auditable commit.
Run The Gate
Run the manifest workflow:
agentclash ci run --manifest .agentclash/ci.yaml --json --artifact-dir agentclash-artifacts
agentclash ci run --manifest .agentclash/ci.yaml --json --summary-file agentclash-summary.md
agentclash ci run --manifest .agentclash/ci.yaml --follow --timeout 30m --poll-interval 5s
Flags:
--manifest: defaults to.agentclash/ci.yaml.--follow: streams run events only for non-JSON output.--timeout: duration, default30m;0disables timeout; negative values exit10.--poll-interval: duration, default5s; must be greater than zero.--summary-file: writes a Markdown gate summary.--github-step-summary: defaults true and appends whenGITHUB_STEP_SUMMARYis set.--artifact-dir: writes stable JSON artifacts.- CI metadata overrides:
--ci-provider,--ci-repository,--ci-pull-request,--ci-branch,--ci-ref,--ci-commit,--ci-workflow,--ci-workflow-run-id,--ci-workflow-run-attempt,--ci-workflow-run-url,--ci-event,--ci-default-branch.
ci run does this in order: validate local manifest, remote-validate resource IDs, create a build version from candidate.build.spec_file, mark it ready, create a deployment, resolve the baseline, create a run with official_pack_mode: "full" plus optional regression suites/cases, wait for completion, resolve the candidate run agent, optionally fetch scorecard and comparison when reports are enabled, evaluate the release gate, optionally promote regression failures, then write reports.
Structured output includes:
{
"manifest_path": ".agentclash/ci.yaml",
"workspace_id": "<WORKSPACE_ID>",
"remote_validation": {},
"candidate": {
"agent_build_id": "<AGENT_BUILD_ID>",
"build_version_id": "<BUILD_VERSION_ID>",
"deployment_id": "<DEPLOYMENT_ID>",
"run_id": "<RUN_ID>",
"run_agent_id": "<RUN_AGENT_ID>",
"run_status": "completed",
"run_url": "<URL>",
"deployment_name": "pr-candidate",
"ci_metadata": {}
},
"baseline_resolution": {},
"baseline": {
"run_id": "<BASELINE_RUN_ID>",
"run_agent_id": "<BASELINE_RUN_AGENT_ID>",
"status": "completed"
},
"release_gate": {},
"gate_verdict": "pass",
"failure_reason": "",
"reports": {},
"regression_promotions": {},
"exit_code": 0
}
Exit codes are exact:
0: pass.1: release gate failed.2: release gate warning.3: insufficient gate evidence.10: invalid manifest, missing workspace forci run, invalid duration flag, invalid CI metadata flag, or local candidate spec error.20: API/auth failure or report-writing failure after a successful gate.30: candidate run timed out.31: candidate run failed before gate evaluation.
Successful terminal run statuses are completed, succeeded, and success. Failed terminal statuses include failed, error, errored, canceled, cancelled, aborted, timed_out, timeout, and expired.
Reports And Artifacts
Reports are enabled only when --summary-file, GITHUB_STEP_SUMMARY with --github-step-summary, or --artifact-dir is set. --artifact-dir agentclash-artifacts writes:
agentclash-artifacts/run.jsonwith kindagentclash.ci.run.agentclash-artifacts/scorecard.jsonwith kindagentclash.ci.scorecard.agentclash-artifacts/comparison.jsonwith kindagentclash.ci.comparison.agentclash-artifacts/gate.jsonwith kindagentclash.ci.gate.agentclash-artifacts/result.jsonwith kindagentclash.ci.result.
Each artifact is wrapped in an envelope with schema_version: "2026-05-04", kind, generated_at, manifest_path, workspace_id, challenge_pack_version_id, candidate, baseline, optional gate policy identity fields, and payload.
Regression Promotion
regressions.promote_failures runs only when the gate verdict is fail. Modes:
disabled: returns a skipped summary with reasonpolicy_disabled.proposed: creates proposed regression candidates.auto_on_main: creates active cases only on the default branch outside pull request events; otherwise it blocks withpull_request_event,missing_default_branch, ornon_default_branch.
Promotion also blocks when evaluation.regression_suites is empty, using reason no_regression_suites. It lists candidate run failures with limit=200, prefers full_executable over output_only, skips non-promotable or unsupported failures, and avoids existing cases by source_challenge_identity_id or metadata source_failure_cluster_key unless the existing case status is archived or rejected.
regression_promotions contains policy, optional case_status, created, existing, skipped, blocked, and errors. Created/existing items include suite_id, case_id, challenge_identity_id, challenge_key, failure_cluster_key, status, and created.
GitHub Action
The repo-local composite action is .github/actions/agentclash-ci. Example:
name: AgentClash gate
on:
pull_request:
jobs:
agentclash:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: agentclash
uses: agentclash/agentclash/.github/actions/agentclash-ci@main
with:
token: ${{ secrets.AGENTCLASH_TOKEN }}
workspace: ${{ secrets.AGENTCLASH_WORKSPACE }}
api-url: https://api.agentclash.dev
manifest: .agentclash/ci.yaml
artifact-dir: agentclash-artifacts
- uses: actions/upload-artifact@v4
if: always() && steps.agentclash.outputs['should-run'] == 'true'
with:
name: agentclash-ci
path: |
${{ steps.agentclash.outputs['result-file'] }}
${{ steps.agentclash.outputs['artifact-dir'] }}/*.json
Action inputs are exactly manifest, token, workspace, api-url, install-cli, cli-version, remote-validate, skip-if-unmatched, base, head, changed-files, labels, artifact-dir, result-file, timeout, poll-interval, follow, and default-branch.
Action outputs are exactly should-run, skip-reason, run-id, gate-verdict, exit-code, result-file, and artifact-dir.
The action exports AGENTCLASH_TOKEN, AGENTCLASH_WORKSPACE, and AGENTCLASH_API_URL, installs agentclash@<cli-version> when install-cli is true, runs ci validate with --remote by default, runs ci should-run --json, exits 0 when unmatched and skip-if-unmatched is true, then runs ci run --json --artifact-dir.
Failure Modes
- Missing token or API access: confirm
AGENTCLASH_TOKENand hosted API URL. - Missing workspace: set
AGENTCLASH_WORKSPACE, pass--workspace, or configure workspace locally. - Local validation fails: fix YAML fields before remote calls; unknown YAML fields fail because the decoder uses known fields.
- Remote validation fails: check workspace visibility for build, runtime profile, provider account, model alias, challenge pack version, input set, regression suites/cases, and baseline.
should-runskips unexpectedly: inspecttrigger.paths,trigger.labels, checkout depth, base/head refs, and explicitly passedchanged-files.- Candidate spec fails:
candidate.build.spec_filemust be readable JSON at a relative path inside the repo. - Candidate run is slow: tune
--timeoutand--poll-interval. auto_on_mainis blocked: pass default-branch metadata and run from the default branch, not a PR event.
Report Back Format
Manifest: <path>
Should run: <true/false + reason>
Baseline: <run-id or deployment selector + strategy>
Candidate run: <run-id>
Gate verdict: <pass|warn|fail|insufficient_evidence>
Exit code: <code + meaning>
Artifacts: <result-file and artifact-dir>
Regression candidates: <created/existing/skipped/blocked/errors>
Next command: <exact agentclash command or GitHub Actions fix>
Related Skills
agentclash-hub: workflow map and dependency order.agentclash-cli-setup: authenticate, select workspace, and configure hosted API.agentclash-runtime-resources-setup: create runtime profiles, provider accounts, model aliases, secrets, and tools.agentclash-agent-build-author: create the candidate build spec and ready build version.agentclash-agent-deployment-setup: understand deployment resources used by the CI manifest.agentclash-challenge-pack-validation-publish: publish the challenge pack version and optional input sets.agentclash-eval-runner: run ad hoc evals before formal CI gates.agentclash-scorecard-reader: inspect scorecard, comparison, replay, and failure evidence.agentclash-compare-and-triage: baseline bookmarks,compare latest --gate, and replay triage.agentclash-regression-flywheel: promote failures and manage regression suites/cases.agentclash-dataset-workflows: dataset eval gates with--format junitfor CI pipelines.agentclash-security-evaluation: client-side security stress harnesses before full pipeline runs.
Related Docs
/docs-md/guides/ci-cd-agent-gates/docs-md/guides/ci-cd-workload-recipes/docs-md/challenge-packs/eval-workflows-and-gates
Signals
- GitHub stars
- 30
- Forks
- 2
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
agentclash-ci-release-gate- Source
- github.com/agentclash/agentclash