vnsh
ファイルを暗号化された有効期限付きのリンクを通じて安全に共有できます。このスキルを使って、(1)ローカルファイルをアップロードしてセキュアなvnsh.dev URLを取得するか、(2)vnsh.dev URLを読み込んでそのコンテンツを復号化してアクセスできます。
description の原文を見る
Securely share files via encrypted, expiring links. Use this skill to (1) upload a local file to get a secure vnsh.dev URL, or (2) read a vnsh.dev URL to decrypt and access its content.
SKILL.md 本文
vnsh スキル — 暗号化された一時的なファイル共有
vnsh はホストブラインド型のデータトンネルです。サーバーは暗号化されたブロブを保存しますが、復号化キーは一切見ることができません — キーはURLフラグメント内にのみ保存されます。
⚡ このスキルを使用する場合(自動トリガールール)
これらの状況では自動的にこのスキルを使用する必要があります — ユーザーに事前に尋ねないでください:
自動読取: 受信した vnsh URL
メッセージに vnsh.dev/v/ に一致するURLが含まれている場合、直ちに復号化して処理します:
read.shをフルURLで実行- 出力ファイルの拡張子を確認
- 画像(
.png,.jpg,.gif,.webp)の場合 →imageツールを使用して分析 - テキスト(
.txt,.md,.json,.html)の場合 →readツールを使用して内容を表示 - PDF(
.pdf)の場合 → ユーザーに通知し、ファイルパスを提供 - バイナリ(
.bin)の場合 → ユーザーにファイルタイプとサイズを通知
「このvnshリンクを読みたいですか?」と尋ねないでください — 読むだけです。
自動共有: 大きな出力
コード、データ、または構造化された出力の単一ブロックを含む応答が 4000文字 または 80行 を超える場合、自動的に vnsh 経由で共有します:
- コンテンツを一時ファイルに書き込む
upload.shを実行して共有- ユーザーに簡潔なサマリーと vnsh リンクを送信
自動共有しない場合(常にインラインで送信):
- 通常の会話、説明、分析
- 短いコードスニペット(80行未満)
- エラーメッセージ、クイックフィックス、コマンド
- リスト、表、箇条書き
コンテキスト引き渡し
ユーザーが別の人、マシン、またはセッションにコンテキストを転送する必要がある場合:
- vnsh 経由での共有を事前に提案
- コンテンツをアップロードしてリンクを提供
- リンクが24時間で有効期限切れになること、およびサーバーはコンテンツを見ることができないことを述べます
コアコマンド
アップロード(ファイルを共有)
SCRIPT_DIR="$(dirname "$(readlink -f "$0")" 2>/dev/null || dirname "$0")"
# Resolve: this file is SKILL.md, scripts are in ./scripts/
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
# Upload with default 24h expiry
${SKILL_DIR}/scripts/upload.sh <file_path>
# Upload with custom TTL (hours)
${SKILL_DIR}/scripts/upload.sh <file_path> <ttl_hours>
出力: 標準出力に出力された単一の https://vnsh.dev/... URL。
例 — 生成されたチャートを共有:
# 1. Save output to temp file
echo "$LARGE_OUTPUT" > /tmp/output.txt
# 2. Upload
URL=$(~/.openclaw/skills/vnsh/scripts/upload.sh /tmp/output.txt)
# 3. Send the URL to the user
読取(vnsh URL を復号化)
~/.openclaw/skills/vnsh/scripts/read.sh "<full_vnsh_url>"
出力: 正しい拡張子を持つ一時ファイルへの絶対パス(例:/tmp/vnsh-decrypted-XXXXX.png)。
例 — 画像を読み取る:
FILE_PATH=$(~/.openclaw/skills/vnsh/scripts/read.sh "https://vnsh.dev/v/abc#k=...&iv=...")
# FILE_PATH is now /tmp/vnsh-decrypted-abcde.png
# Use the image tool to analyze it
標準入力からパイプ(テキスト/コマンド出力を共有)
# Share command output directly
echo "some content" | vn
# Share a large git diff
git diff HEAD~5 | vn
# Share docker logs
docker logs mycontainer 2>&1 | vn
ワークフローレシピ
レシピ 1: ユーザーがチャット経由で vnsh リンクを送信
User: "Check this out https://vnsh.dev/v/abc123#k=dead...&iv=cafe..."
Your action:
1. file_path = exec("~/.openclaw/skills/vnsh/scripts/read.sh 'https://vnsh.dev/v/abc123#k=dead...&iv=cafe...'")
2. Check extension:
- .png/.jpg → image(image=file_path, prompt="Describe this image")
- .txt/.md → read(file_path=file_path)
3. Respond with analysis of the content
レシピ 2: 出力がチャットに長すぎる場合
Your action:
1. Write content to /tmp/vnsh-share-XXXXX.txt
2. url = exec("~/.openclaw/skills/vnsh/scripts/upload.sh /tmp/vnsh-share-XXXXX.txt")
3. Reply: "The output is quite long, so I've shared it via an encrypted link:\n📎 {url}\n\nBrief summary: [2-3 sentence summary]"
レシピ 3: セッション/エージェント間での共有
Agent A needs to pass context to Agent B:
1. Agent A writes context to temp file
2. Agent A uploads via upload.sh, gets URL
3. Agent A sends URL to Agent B via sessions_send
4. Agent B auto-detects vnsh URL, reads it via read.sh
レシピ 4: ユーザーが他の人と共有したい場合
User: "Send this analysis to my coworker"
Your action:
1. Write the analysis to a temp file
2. Upload via upload.sh
3. Reply: "Shared securely. The link auto-expires in 24h and the server never sees the content:\n📎 {url}"
セキュリティモデル
- クライアント側暗号化: AES-256-CBC、キーはローカルで生成
- フラグメントプライバシー: URL
#k=...内のキーはサーバーに送信されない - 一時的: TTL 後に自動削除(デフォルト24時間、最大168時間)
- ホストブラインド: サーバーは暗号化されたブロブを保存し、復号化できない
フォールバック: 依存関係ゼロのワンライナー(vn CLI 不要)
vn がインストールされていない場合、スクリプトは自動的に生の curl + openssl にフォールバックします。これらのワンライナーを直接使用することもできます:
vn CLI なしでコンテンツを共有:
CONTENT="your content here" && \
KEY=$(openssl rand -hex 32) && IV=$(openssl rand -hex 16) && \
RESP=$(echo "$CONTENT" | openssl enc -aes-256-cbc -K $KEY -iv $IV | \
curl -s -X POST --data-binary @- -H "Content-Type: application/octet-stream" \
"https://vnsh.dev/api/drop") && \
ID=$(echo $RESP | grep -o '"id":"[^"]*"' | cut -d'"' -f4) && \
echo "https://vnsh.dev/v/${ID}#k=${KEY}&iv=${IV}"
vn CLI なしでファイルを共有:
FILE="/path/to/file" && \
KEY=$(openssl rand -hex 32) && IV=$(openssl rand -hex 16) && \
RESP=$(openssl enc -aes-256-cbc -K $KEY -iv $IV -in "$FILE" | \
curl -s -X POST --data-binary @- -H "Content-Type: application/octet-stream" \
"https://vnsh.dev/api/drop") && \
ID=$(echo $RESP | grep -o '"id":"[^"]*"' | cut -d'"' -f4) && \
echo "https://vnsh.dev/v/${ID}#k=${KEY}&iv=${IV}"
vn CLI なしで vnsh URL を読む:
URL="https://vnsh.dev/v/XXXX#k=YYYY&iv=ZZZZ" && \
ID=$(echo "$URL" | sed 's|.*/v/||;s|#.*||') && \
KEY=$(echo "$URL" | sed 's|.*#k=||;s|&.*||') && \
IV=$(echo "$URL" | sed 's|.*&iv=||') && \
curl -s "https://vnsh.dev/api/blob/$ID" | openssl enc -d -aes-256-cbc -K "$KEY" -iv "$IV"
スマートオーバーフロー: プラットフォーム固有のしきい値
応答がプラットフォームの快適な読み取り長を超える場合、自動的に vnsh 経由で共有します:
| プラットフォーム | しきい値 | アクション |
|---|---|---|
| WhatsApp / Telegram | > 500文字のコード/データ | vnsh 経由で自動共有 |
| Discord | > 1500文字 | vnsh 経由で自動共有 |
| Claude Code ターミナル | > 2000文字 | vnsh を検討 |
| Webchat | > 4000文字 | vnsh 経由で自動共有 |
パターン: コンテンツを生成 → 一時ファイルに書き込み → upload.sh 経由でアップロード → サマリー + vnsh URL で応答
トラブルシューティング
| 問題 | 解決策 |
|---|---|
vn: command not found | 実行: curl -sL vnsh.dev/i | sh |
openssl: command not found | OpenSSL をインストール: brew install openssl(macOS) |
| ブロブが見つからない / 404 | リンクが有効期限切れ(デフォルト24時間) |
| 復号化に失敗 | URLが切り詰められている — 完全な #k=...&iv=... が含まれていることを確認 |
| 復号化後のファイルが空 | 元のコンテンツが空であるか、URL が不正な可能性があります |
リンク
- Website: https://vnsh.dev
- GitHub: https://github.com/raullenchai/vnsh
- MCP for Claude Code:
npx vnsh-mcp
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- raullenchai
- リポジトリ
- raullenchai/vnsh
- ライセンス
- MIT
- 最終更新
- 2026/3/13
Source: https://github.com/raullenchai/vnsh / ライセンス: MIT