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
- CI fails — GitHub Action uploads the full log, encrypted
- PR comment appears — with a vnsh link
- Copy the link — paste it to Claude Code
- Claude reads the full log — decrypts locally via MCP, analyzes the complete output
- 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:
- Size: CI logs are often 500+ lines. Pasting them floods your chat context and pushes out earlier conversation history.
- Privacy: Build logs can contain environment variables, internal paths, package names, and infrastructure details. With vnsh, the log is encrypted client-side — GitHub, vnsh servers, and anyone without the link cannot read it.
- Reusability: The same link works for your teammate, your AI assistant, and your future self. Share it in Slack, paste it in an issue — it just works for 24 hours, then vanishes.
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:
- Encryption happens in the Action runner — the log is encrypted with AES-256-CBC before upload
- Keys stay in the URL fragment — the vnsh server never sees them
- 24-hour auto-expiry — logs are automatically deleted, no cleanup needed
- No GitHub token exposure — GITHUB_TOKEN is only used to post the PR comment, not for encryption
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.