skills/remy-ci/SKILL.md
Analyze CI/CD failure logs to diagnose build, test, and gate failures. Supports GitHub Actions (gh CLI), local log files, and pasted logs. Produces evidence packets for /remy-patch.
npx skillsauth add till-crazy-tears-us-apart/claude-code-engineering-suite remy-ciInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
CI/CD failure log analysis skill. Parses build/test/gate failure logs, localizes errors to source files, and produces a structured diagnosis report plus an evidence packet compatible with /remy-patch. Does NOT modify source code.
| Environment Variable | Default | Description |
| :--- | :--- | :--- |
| CI_LOG_MAX_LINES | 500 | Maximum lines to retain per failed step when truncating logs. |
/remy-ci [run_id | log_file_path | --paste]
--paste: treat as paste mode (Mode A) — prompt user to provide log text.Goal: Obtain CI failure log content for analysis.
Use AskUserQuestion to ask:
Prerequisite Check:
Bash("gh --version 2>/dev/null && echo GH_OK || echo GH_MISSING").GH_MISSING: report "gh CLI not available. Use Mode A (paste) or Mode B (file) instead." → return to 0.1.Bash("gh auth status 2>&1 | head -3") to verify authentication.Log Retrieval:
If run_id was provided:
Bash("gh run view {run_id} --json jobs,conclusion,name,headBranch").Bash("gh run view {run_id} --log-failed 2>&1 | tail -n {CI_LOG_MAX_LINES}").If no run_id:
Bash("git branch --show-current").Bash("gh run list --branch {branch} --status failure -L 1 --json databaseId,name,conclusion,event").databaseId and proceed as if run_id was provided.Record the structured metadata as CI Metadata and the log text as Raw Log.
Read the specified file path.CI_LOG_MAX_LINES lines: apply Phase 1 truncation strategy.AskUserQuestion: "Paste the CI failure log below (or provide the key error messages)."Phase 0 Exit: Raw Log exists (and optionally CI Metadata). Proceed to Phase 1.
Goal: Identify the failure type(s) and reduce log volume.
If CI Metadata is available:
parsers.json.Read the file skills/remy-ci/parsers.json.keywords (case-insensitive).unknown.If Raw Log exceeds CI_LOG_MAX_LINES:
CI_LOG_MAX_LINES / 2 lines of the Raw Log (tail context).If Raw Log is within limits: use Raw Log directly as Filtered Log.
Phase 1 Exit: Failure type(s) identified. Filtered Log available. Proceed to Phase 2.
Goal: Extract structured error information from the Filtered Log.
For each identified failure type, apply the corresponding parsing rules:
compile_error){file}:{line}:{col}: error: {message} or {file}:{line}: error: {message}link_error)undefined reference to '{symbol}', multiple definition of '{symbol}'test_failure)FAILED {test_id}), gtest ([ FAILED ] {test_name}), kunit (not ok {n} - {test_name}), TAP format.qemu_failure)Kernel panic, BUG:, Unable to mount root fs, timeout, QEMU exit codes.style_check)WARNING:, ERROR:), clang-format diff output.sanitizer_report)BUG: KASAN:, UBSAN:, BUG: KCSAN:, AddressSanitizer/ThreadSanitizer.static_analysis)warning:), smatch, Coverity (CID), clang-tidy ([check-name]).build_config)No rule to make target, CONFIG_* not set, unmet direct dependencies.For each parsed error, produce an Error Record: {type, file, line, message, raw_text}.
Phase 2 Exit: List of Error Records. Proceed to Phase 3.
Goal: Map Error Records to local workspace files and analyze impact.
For each Error Record with a file path:
/home/runner/work/repo/repo/).Bash("test -f '{normalized_path}' && echo EXISTS || echo MISSING").Read the relevant lines (error line ± 10 lines context).Bash("git diff HEAD~3..HEAD --name-only 2>/dev/null").Bash("git diff HEAD~3..HEAD -- '{file}'") to show what changed.Bash("test -f .claude/logic_index.json && echo EXISTS || echo MISSING").Bash("python \"~/.claude/skills/remy-index/impact.py\" {file_1} {file_2} ...")
Record output as Impact Report.Phase 3 Exit: Error Records enriched with local context, git correlation, and optional impact data. Proceed to Phase 4.
Goal: Produce a structured, readable diagnosis report.
Read the template: skills/remy-ci/diagnosis_template.md.Bash("mkdir -p '.claude/temp_ci'").Bash("date +\"%Y%m%d_%H%M%S\"") → {TIMESTAMP}.Write the report to .claude/temp_ci/ci_{TIMESTAMP}.md.Goal: Produce an evidence packet compatible with /remy-patch.
Bash("git rev-parse HEAD 2>/dev/null || echo NO_GIT").Bash("mkdir -p '.claude/temp_task'").Write packet to .claude/temp_task/ci_{TIMESTAMP}.json:{
"v": "1.0.0",
"task": {
"id": "ci_{TIMESTAMP}",
"mode": "write",
"summary": "<one sentence: what to fix based on CI failure diagnosis>",
"read_only_until_evidence": true
},
"sender_payload": {
"plan": ["<proposed fix step 1>", "<proposed fix step 2>"],
"analysis": "<constraints and risks from diagnosis>",
"assumptions": ["<any inferred but unconfirmed information>"]
},
"evidence_packet": {
"source_revision": {
"type": "git",
"commit": "{COMMIT}",
"retrieved_at": "<ISO-8601 datetime>"
},
"evidence": [
{
"id": "E-001",
"file_type": "source",
"path": "<repo-relative path>",
"range": {"start": 1, "end": 50},
"why": "<why this file is relevant to the CI failure>",
"status": "confirmed",
"confidence": 0.9,
"excerpt": "<verbatim text from that range>"
}
],
"proposed_changes": [
{
"id": "C-001",
"description": "<fix description derived from CI failure analysis>",
"evidence_refs": ["E-001"]
}
]
}
}
Strict Rules:
evidence[]: one item per file ACTUALLY READ during this session. Unread files MUST NOT appear.excerpt: MANDATORY verbatim text. Summaries are prohibited.status: "confirmed" for files read; "suspected" for inferred but unread files."type": "filesystem" and omit "commit"."mode": "investigate" instead of "write"..active_packet: Bash("rm -f '.claude/temp_task/.active_packet' && echo 'ci_{TIMESTAMP}.json' > '.claude/temp_task/.active_packet'").After writing the report and packet:
📦 Report: ci_{TIMESTAMP}.md | Packet: ci_{TIMESTAMP}.json执行修复: /remy-patch ci_{TIMESTAMP}.json (only if mode = "write").data-ai
Deep repository analysis with multi-agent parallel perspectives. Requires /init + /remy-index as prerequisites. Produces structured research reports.
development
Generate persistent unit tests for existing or stub code. Supports post-hoc testing (default) and TDD mode (--tdd). Multi-angle agent analysis at medium/high effort levels.
tools
--- name: remy-secure description: Review branch changes for security vulnerabilities. Multi-stage: regex pre-scan, parallel agents, and false-positive filtering. allowed-tools: Read, Grep, Glob, Bash, AskUserQuestion, Agent argument-hint: "[low|medium|high] [diff_range (optional, e.g. HEAD~3...HEAD)]" disable-model-invocation: true --- # Security Audit Protocol Security-focused review of code changes on the current branch. Identifies exploitable vulnerabilities with high confidence (≥ 8/10),
tools
--- name: remy-reposcout description: Analyze a GitHub repository in two stages: metadata assessment via GH CLI, then sandboxed deep inspection upon confirmation. disable-model-invocation: true allowed-tools: Bash, Glob, Grep, Read --- # Repository Audit Skill This skill allows you to safely inspect GitHub repositories without polluting your main workspace. It operates in two stages to prevent unnecessary cloning of massive repositories. **Requirements**: - `git` - `gh` (GitHub CLI) - Must be