ci-log-capture
Use when test scripts redirect probe output to /dev/null, hiding failure details.
Skill by gitricko
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/gitricko-ci-log-capture
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, devops
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ci-log-capture
What's inside
- Skill name
ci-log-capture- Description
- Use when test scripts redirect probe output to /dev/null, hiding failure details. Replace with file captures that feed CI artifacts.
- License
- MIT
- Instructions
- 106 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Files (1)
- SKILL.md
SKILL.md (first lines)
# CI Log Capture — Replace `/dev/null` with Artifact Files
Every `>/dev/null 2>&1` is a debug dead-end. Capture to files that auto-upload
as CI artifacts so failures are self-documenting.
## The problem
```bash
# BEFORE: failure body goes to void
if curl -sf https://api.example.com/health >/dev/null 2>&1; then
echo "OK"
else
echo "FAILED" # but WHY? 400? 401? 500? timeout?
fi
```
When this fails in CI, you get "FAILED" with zero context. The HTTP status,
response body, and headers are gone.
## The pattern: `run_and_log`
```bash
# 1. Ensure log dir exists (matches workflow env)
CI_LOGS_DIR="${CI_LOGS_DIR:-/tmp/ci-logs}"
mkdir -p "${CI_LOGS_DIR}"
# 2. Helper: run command, capture to file, print on failure
run_and_log() {
local test_name="$1"; shift
local log_file="${CI_LOGS_DIR}/${test_name}.log"
if "$@" >"${log_file}" 2>&1; then
log_info "${test_name} — OK"
return 0
else
log_error "${test_name} — FAILED (see ${log_file})"
cat "${log_file}" # immediate CI visibility
return 1
fi
}
# 3. Replace:
# BEFORE: if cmd >/dev/null 2>&1; then
# AFTER: if run_and_log "endpoint-name" cmd; then
```
## Artifact integration
The workflow must upload `${CI_LOGS_DIR}` with `if: always()`:
```yaml
# .github/workflows/ci.yml
- name: Upload diagnostic logs
if: always()
uses: actions/upload-artifact@v7
with:
name: ci-logs-${{ github.run_id }}
path: ${{ env.CI_LOGS_DIR }}/
if-no-files-found: warn
retention-days: 7
```
Name the log files so they sort logically in the artifact zip:
- `hermes-version.log`
- `omniroute-models.log`
- `ninerouter-chat.log`
- `boot.log`
## Probe classification — what to capture vs keep silent
| Probe type | Capture? | Notes |
|------------|----------|-------|
| Version checks (`--version`) | ✅ YES | Confirms binary integrity |
| Health endpoints (`/healthz`) | ✅ YES | Shows HTTP status on failure |
| Model lists (`/v1/models`) | ✅ YES | Shows count + any error body |
| Chat completions | ✅ YES | **Critical** — shows 400/401/403 from upstream |
| Preconfig steps (login, setup) | ✅ YES | Shows which step failed |
| Cleanup (`docker rm -f`) | NO — keep `>/dev/null 2>&1` | Expected noise |
| Container startup wait | NO — keep `>/dev/null 2>&1` | Expected noise |
| Extension list (`pi skill list`) | NO — keep stderr only | Too verbose for artifacts |
## CI workflow requirements
For this pattern to work, the calling CI job must:
1. Set `CI_LOGS_DIR` env (e.g. `/tmp/real-install`, `/tmp/dts-logs`)
2. Have an `if: always()` artifact upload step targeting that path
3. Match `retention-days` to your debugging window (7 days is typical)
The repo already has this for Real Install and DTS — just ensure test
scripts write to it.
## Real-world example (from this repo)
The `test_cli_integration.sh` chat completion probes (lines 318, 325)
were `>/dev/null` — hiding the exact OC provider 400/401/403 response.
After replacing with `run_and_log "omniroute-chat" curl ...`, the CI
log showed the full JSON error body on failure, and the artifact
contained it for download. No more guessing what the provider returned.
## When NOT to use
- Probes that run thousands of times in a tight loop (log file thrashing)
- Pure cleanup commands where failure is expected and irrelevant
- Situations where `CI_LOGS_DIR` isn't available (standalone scripts)
In those cases, keep the `/dev/null` but add a comment explaining why.From gitricko/.minions, MIT.
More from gitricko/.minions
- 0.586score
ci-lint-check
gitricko
Run pre-commit CI lint validation locally before pushing to avoid GitHub Actions failures.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
minions-llm-proxy-ops
gitricko
Use when operating or debugging the .minions LLM proxies.
SkillAFreshness: A★ 1Claude Code +9 - 0.583score
codespace-port-visibility
gitricko
Automate Codespace port visibility via CLI w/ vscode token.
SkillAFreshness: A★ 1Claude Code +9 - 0.583score
ci-debugging
gitricko
Use when a CI/test failure seems to have one cause but the real root is different, or when a silent failure hides the real issue.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
docker-test-shell
gitricko
Use when testing in a clean throwaway container.
SkillAFreshness: A★ 1Claude Code +9 - 0.579score
codespace-gh-auth
gitricko
Extract GitHub token from VS Code for API in Codespaces.
SkillAFreshness: A★ 1Claude Code +9 - 0.578score
adopting-external-skills
gitricko
Import external skills into the Codespace tree, adapted.
SkillAFreshness: A★ 1Claude Code +9 - 0.574score
minions-9router-models
gitricko
Manage 9Router model list via etc/9router-models.json.
SkillAFreshness: A★ 1Claude Code +9 - 0.549score
codespace-webtop
gitricko
Native Selkies/XFCE webtop (browser desktop) via pixelflux-based selkies package — install, run, and autostart on any Ubuntu base system
SkillBFreshness: B★ 1Claude Code +9 - 0.546score
codespace-vscode-open
gitricko
Auto-discover VS Code CLI in Codespaces and open files in connected editor
SkillBFreshness: B★ 1Claude Code +9 - 0.546score
agent-context-transfer
gitricko
Transfer implementation context to a fresh agent for seamless handoff
SkillBFreshness: B★ 1Claude Code +9 - 0.546score
codespace-lavish
gitricko
Launch a headed Lavish-AXI whiteboard over noVNC in Codespaces.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 2
- Open issues
- 3
- Last commit (this folder)
- Sep 22, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/gitricko/.minions
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from gitricko
- 0.586score
ci-lint-check
gitricko
Run pre-commit CI lint validation locally before pushing to avoid GitHub Actions failures.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
minions-llm-proxy-ops
gitricko
Use when operating or debugging the .minions LLM proxies.
SkillAFreshness: A★ 1Claude Code +9 - 0.583score
ci-debugging
gitricko
Use when a CI/test failure seems to have one cause but the real root is different, or when a silent failure hides the real issue.
SkillAFreshness: A★ 1Claude Code +9 - 0.583score
codespace-port-visibility
gitricko
Automate Codespace port visibility via CLI w/ vscode token.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
docker-test-shell
gitricko
Use when testing in a clean throwaway container.
SkillAFreshness: A★ 1Claude Code +9 - 0.579score
codespace-gh-auth
gitricko
Extract GitHub token from VS Code for API in Codespaces.
SkillAFreshness: A★ 1Claude Code +9
Cite this page
ci-log-capture skill. Agent Mart. https://agentmart.dev/skills/gitricko-ci-log-capture (last updated 2026-10-24)