February 18, 2026

Debug CI Failures Faster with vnsh + Claude Code

A step-by-step tutorial on using the upload-to-vnsh GitHub Action and Claude Code MCP to debug CI failures in seconds.

The Problem: CI Fails, Now What?

Your CI pipeline fails. You click through to the GitHub Actions log. You scroll through hundreds of lines of build output looking for the actual error. You copy-paste it into Claude. You lose context because the log is truncated. Sound familiar?

There's a faster way: automatically upload CI logs to an encrypted link and let Claude analyze them in full — without pasting walls of text into chat.

Setup: 2 Minutes, Zero Config

Step 1: Add the GitHub Action

Add upload-to-vnsh to any workflow. It runs only on failure, uploads the log file encrypted, and posts a comment to your PR:

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test 2>&1 | tee test.log

      - name: Debug with vnsh
        if: failure()
        uses: raullenchai/upload-to-vnsh@v1
        with:
          file: test.log
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

When CI fails, the action posts a PR comment:

🔍 Debug with Claude

CI logs uploaded securely.
View Logs: https://vnsh.dev/v/aBcDeFgH...#R_sI4...
Paste link to Claude for instant analysis

Step 2: Install vnsh MCP for Claude Code

One command gives Claude the ability to decrypt vnsh links:

curl -sL vnsh.dev/claude | sh

Type /mcp in Claude Code to reload. Done.

The Workflow: Failure to Fix in 30 Seconds

  1. CI fails — GitHub Action uploads the full log, encrypted
  2. PR comment appears — with a vnsh link
  3. Copy the link — paste it to Claude Code
  4. Claude reads the full log — decrypts locally via MCP, analyzes the complete output
  5. Claude suggests the fix — with full context, not a truncated snippet

No copy-pasting log walls. No "can you show me the full error?" follow-ups. Claude sees everything.

Why Not Just Paste the Log?

Three reasons:

Advanced: Multiple Log Files

Upload different artifacts from the same failed run:

- name: Upload test log
  if: failure()
  uses: raullenchai/upload-to-vnsh@v1
  with:
    file: test.log
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload coverage report
  if: failure()
  uses: raullenchai/upload-to-vnsh@v1
  with:
    file: coverage/lcov-report/index.html
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Each file gets its own encrypted link in the PR comment. Paste both to Claude for cross-referenced analysis.

Advanced: Docker and Build Logs

Capture Docker build failures or complex build pipelines:

- run: docker build . 2>&1 | tee build.log
- run: docker compose up -d && docker compose logs > compose.log 2>&1

- name: Debug build
  if: failure()
  uses: raullenchai/upload-to-vnsh@v1
  with:
    file: build.log
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Security Model

Every log uploaded via the GitHub Action follows vnsh's host-blind architecture:

Even if someone compromises the vnsh server, they get only encrypted binary blobs with no way to decrypt them.

Get Started

Add the action to your workflow in 30 seconds:

# In your existing CI workflow, add after your test step:
- name: Debug with vnsh
  if: failure()
  uses: raullenchai/upload-to-vnsh@v1
  with:
    file: test.log
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Install MCP for Claude Code:

curl -sL vnsh.dev/claude | sh

Next time CI fails, you'll have a secure, encrypted link ready for Claude to analyze — no more scrolling through GitHub Actions logs.

Try vnsh now — encrypted, ephemeral sharing for developers and AI agents.

Share via CLI Chrome Extension