Tailscale + Caddy でOpenClaw/Hermesのファイル成果物をスマホから開く
🤖
🔐 概要
OpenClaw(やHermes Agent)が生成するホスト上のファイル絶対パスを、Discord・スマホからURLタップ一発で開けるようにする構成。Tailscale + Caddy の組み合わせ。
yousanのQiita記事が元ネタ
📂 元記事
https://qiita.com/yousan/items/ebef95fdfe43289e351b
📁 問題
エージェントが「/home/user/.claude/usage-data/report-...html」と返しても開けない
URLではないのでDiscordでクリック無反応
別マシン(Mac)からはSCP/SSHが必要
iPhoneからは事実上不可能
🔧 解決策
Tailscale + Caddyのfile_server browseで共有領域をHTTP公開
Caddyをtailnet IPにbind(0.0.0.0にはしない)
symlinkをshare領域に置くだけで配信
auto_https off(tailnet内なのでTLS不要)
Grid表示・画像サムネ・検索・ソート・ダークモードがデフォルト
🔖 なぜCaddyか(比較)
python3 -m http.server
symlink追従するがUIが素のテキスト一覧のみ・認証なし
filebrowser
symlink追従しないので✗
dufs
symlink追従するがCaddyほどUIがリッチではない
Caddy file_server browse
symlink追従・Grid/サムネ/検索/ソート/ダークモード完備・シングルバイナリ
📋 Caddyfile(8行)
{
admin off
auto_https off
}
:8801 {
bind 100.100.26.90
root * /home/yousan/.openclaw/workspace/share
file_server browse
encode gzip
}
ポイント
bindでtailnet IPに絞る(全インターフェース公開を防ぐ)
サイトアドレスは:8801のみ(ホスト名不要)
auto_https offで証明書発行を回避
🔑 systemd user unit
~/.config/systemd/user/share-http.service
Unit
Description=Workspace share static HTTP server
After=network-online.target tailscaled.service
Wants=network-online.target
Service
Type=simple
ExecStart=%h/bin/caddy run --config %h/.config/caddy/Caddyfile --adapter caddyfile
Restart=on-failure
RestartSec=3s
Install
WantedBy=default.target
systemctl --user enable --now share-http.service
loginctl enable-linger $USER(ログアウト後も維持)
📌 エージェント運用ルール
share/YYYY-MM-DD/<topic-slug>/ にsymlinkを置く
ln -sf /path/to/元ファイル share/2026-06-12/usage-report/index.html
URL: http://tachikoma:8801/2026-06-12/usage-report/
禁止事項
別ポートでHTTPサーバを新規に立てること
Caddyfileのbindからtailnet IPを消すこと
📖 クロスデバイス効果
同じホストのLinux xdg-open <path> → URLタップ
Mac(別ホスト) SCP/sshfs/SSH → URLタップ
iPhone 事実上見られない → URLタップ
副次的メリット
過去成果物が消えない(ポートが死なない)
露出範囲がブレない(全エージェントがtailnet IP bind)
元ファイルが汚れない(symlinkのみ)
autoindexで日付単位の振り返りが可能
🔗 参考リンク
https://qiita.com/yousan/items/ebef95fdfe43289e351b