
Zuroku Publish
- 1 installs
- Updated May 21, 2026
- ai-driven-r-d-dept/zuroku-cli
zuroku-publish is a Claude Code skill that publishes an HTML page and its images to the zuroku CLI and returns a public URL.
About
zuroku-publish is a Claude Code skill (documented in Japanese) that runs the zuroku CLI to upload an HTML file and its images and get back a public URL. A developer uses it to deploy explainers or graphic-record pages after generating them. It documents path-normalization, WebP compression, thumbnail rules, size limits, and visibility modes so an agent can call zuroku publish correctly.
- Publishes an HTML page plus images to the zuroku CLI and returns a public URL
- Auto-normalizes image paths, compresses PNG/JPEG to WebP, and generates OG thumbnails
- Supports private, curator, and public visibility with per-publish overrides
Zuroku Publish by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,983 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Jul 13, 2026 (Skillselion catalog sync)
zuroku-publish capabilities & compatibility
Requires the zuroku CLI; visibility defaults to curator (Discord curator role) unless public/private is chosen.
- Capabilities
- content publishing · html deploy · image compression
- Use cases
- ci cd
What zuroku-publish says it does
`zuroku publish` で HTML + 画像をアップロードする手順。AI agent (Claude Code 等) からの呼び出しを想定。
HTML: 5 MiB
npx skills add https://github.com/ai-driven-r-d-dept/zuroku-cli --skill zuroku-publishAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | May 21, 2026 |
| Repository | ai-driven-r-d-dept/zuroku-cli ↗ |
What it does
Deploy an HTML explainer plus its images through the zuroku CLI and return a shareable URL.
Who is it for?
Deploying AI-generated HTML explainers or graphic records to a shareable zuroku URL.
Skip if: Publishing SVG images (only PNG/JPEG/WebP/GIF are accepted) or content over the 5 MiB HTML/asset limits.
When should I use this skill?
When you want to publish or deploy an HTML explainer or graphic record via zuroku.
What you get
A published zuroku page whose final stdout line is the public URL.
- Published zuroku page URL
By the numbers
- HTML limit 5 MiB, per-asset limit 5 MiB
- Daily limit 50 publishes / 500 MB
- sharp compresses to WebP at 85% quality, long edge max 2000px
Files
zuroku-publish
zuroku publish で HTML + 画像をアップロードする手順。AI agent (Claude Code 等) からの呼び出しを想定。
前提:zurokuCLI が PATH にあること。無ければcommand -v zurokuで確認し、
未インストールなら npm i -g @zuroku/cli を案内する (このプラグインは CLI を同梱しない)。TL;DR
# HTML と画像をデプロイ用ディレクトリに集める (sed での書き換えは原則不要、下の注意参照)
mkdir -p /tmp/zuroku-deploy
cp /path/to/index.html /path/to/images/*.png /tmp/zuroku-deploy/
cd /tmp/zuroku-deploy
zuroku publish ./index.html ./*.png --title "..."
# - `images/<画像>` 参照は CLI が **provided asset の filename にアンカーして**
# 自動で `img/<画像>` に正規化する。手動 sed は不要 (外部 URL は壊さない)。
# - sharp で client-side WebP 圧縮 (85%、長辺 2000px)。<img src="img/foo.png"> も
# CLI が自動で .webp に rewrite (v0.1.1+)。
# - 標準出力の最終行が公開 URL
# 自分だけが見える private で上げたい場合
zuroku publish ./index.html ./*.png --title "..." --private⚠️ `sed 's|images/|img/|g'` のような bare 置換は使わない。 文字列 images/をどこでも置換するため、HTML 内の外部画像 URL
(https://.../images/foo.webp等) まで.../img/...に化けさせて 404 にする。
ローカル参照の正規化は CLI が安全に行うので不要。どうしても手動で直す必要がある
場合 (後述assets/等) はsrc="images/のようにローカル参照だけにアンカーすること。
制約
R1. HTML の image src は img/<basename> に統一
- 配信ルートが
/p/:slug/img/:filename固定。HTML 側は相対<img src="img/foo.png">で参照する。 - `images/<画像>` (複数形) は CLI が provided asset について自動で `img/` に正規化するので手動修正は不要。外部 URL (
https://.../images/...) は provided にアンカーされるため触られない。 assets/、style/等の別ディレクトリ名は自動正規化の対象外。必要ならsrc="assets/のようにローカル参照だけにアンカーして書き換える。bare `images/` を global 置換しないこと (外部 URL 内のimages/まで壊して 404 になる)。- SVG (
<img src="img/foo.svg">) は受け付けない。PNG / JPEG / WebP / GIF のみ。
R2. 圧縮 (default ON、client-side で軽量化される)
- default で sharp が PNG/JPEG → WebP 85%、長辺 max 2000px に変換 (帯域 / 表示の両方で大幅軽量化)。
- 拡張子
.png→.webpの rename が発生するが、HTML 内 `<img src="img/foo.png">` は CLI が自動で `.webp` に rewrite する (v0.1.1+)。AI agent 側で sed は不要。 --no-compressを付けると original のまま upload (filename 不変、HTML も触らず)。サイズが大きい時は事前リサイズしないと R3 に当たる。- GIF はアニメ保持のため compress でも passthrough (filename 不変)。
R2.5. サムネ / OG 画像 (thumb.* 規約)
- OG 画像 (SNS unfurl / アプリ内一覧のサムネ) は `thumb.{png|jpg|jpeg|webp|gif}` という名前の画像が自動で選ばれる。専用フラグは無く、ファイル名規約で指定する。
thumb.*が無ければ asset の 1 枚目 (created_at→filename昇順の先頭) に自動フォールバックする。意図しない画像がサムネになりがちなので、サムネを効かせたい記事では必ずthumb.*を用意する。- どの画像を `thumb` にするか: その記事の 全体像を最もよく表す 1 枚 を選んで
thumb.*にリネームして含める。 - 良い例: 図解全体の俯瞰図 / 完成形のキービジュアル / 記事の結論を 1 枚で示す図。
- 避ける: 部分拡大・補足の細部図・文脈なしでは意味が伝わらない断片。SNS のカードや一覧で「これは何の記事か」が一目で伝わる 1 枚を選ぶ。
- *`thumb.
は OG/SNS unfurl 互換のため CLI が自動で JPEG (thumb.jpg) に変換する** (v0.1.8+)。他の asset は WebP 圧縮されるが、サムネだけは LinkedIn / Facebook / LINE 等が WebP の og:image を描画しない問題を避けるため JPEG に揃える (Slack/Discord は WebP でも可)。HTML 内のimg/thumb.png参照もimg/thumb.jpg` に自動 rewrite される。 - GIF の
thumb.gifはアニメ保持のため変換しない。--no-compressで WebP の thumb を渡すと warn が出る (OG が表示されない可能性)。 updateの全置換でもthumb.*を含めれば再選定される。--keep-assetsでは既存のサムネがそのまま維持される。
R3. サイズ上限
- HTML: 5 MiB
- asset 1 ファイル: 5 MiB
- 1 日: 50 publish / 500 MB
R4. visibility (公開範囲)
-V, --visibility <mode>:private(本人のみ) /curator(curator role を持つ Discord メンバーのみ閲覧可) /public(リンクを知る誰でも閲覧可)。--private:--visibility privateのショートカット。-V curatorと併用された場合は--privateが勝つ (CLI が warn を出す)。- どちらも未指定なら順に下記の優先順で解決:
1. CLI flag (--private > --visibility) 2. ~/.config/zuroku/config.json の default_visibility (zuroku config set default-visibility ...) 3. server default = curator
- `public` は per-publish で指定可能 (
--visibility public)。リンクを知る誰でも閲覧できるが、アプリ内 timeline/検索には出さずX-Robots-Tag: noindex,nofollowで配信される (リンク共有 / SNS unfurl 用、SEO index はしない)。 - ただし `public` を `config set default-visibility` のデフォルトには保存できない (公開は毎回明示的に選ぶべきで、暗黙のデフォルトにはしない設計)。
- private のまま publish 後に visibility を変えたいときは stderr に表示される
manage visibility: <app>/settings/projectsの URL から切り替える (Web UI からは public への切替も可)。
CLI が publish 前に弾くケース
zuroku publish は HTML を parse して <img src="img/..."> と asset 引数の整合性を検査し、不一致なら INVALID_INPUT で fail-fast する。stderr に詳細メッセージが出るので、AI agent はタグを見て対処する。
| タグ | 意味 | 対処 |
|---|---|---|
[MISSING] | HTML が参照しているが asset 引数にない file | --no-compress 漏れ or rename ミス |
[UNUSED] | asset 引数にあるが HTML 未参照 | 余分な image を引数から外す |
[WRONG-PATH] | img/ で始まらない相対参照 | src="images/ のようにローカル参照だけにアンカーして書換 (bare images/ の global 置換は外部 URL を壊すので不可) |
緊急 bypass: ZUROKU_SKIP_PREFLIGHT=1 zuroku publish ... (debug 用、本番では使わない)。
R6. 外部 subresource の hotlink protection (v0.1.5+, 自動)
zuroku CLI は publish/update 時に HTML を scan し、<img src="https://..."> と <iframe src="https://..."> に referrerpolicy="no-referrer" が無ければ 自動付与する。理由:
- 配信ドメイン (例:
app.zuroku.masao.ai) を Referer に載せると、X / 一部 CDN /
報道サイトの hotlink protection が 403 / placeholder を返す。
curl/fetch(url)だと 200 が返るので「URL は生きている」と誤認しがちだが、
ブラウザ subresource として読むと壊れる。初見エージェントが最も機械的に踏む罠。
- 自動付与時は stderr に
info html: added referrerpolicy="no-referrer" to N external <img>/<iframe>が出る。 - 既に
referrerpolicyが指定済みで値がno-referrer以外 (origin/unsafe-url等) なら
CLI は 書き換えず warn を出す (誤設定の hint)。
スコープ外:
<a href="https://...">(ナビゲーションは hotlink 制限の対象外)img/<basename>(zuroku asset。同一 origin)data:/blob:URI
R5. local-path leak preflight (v0.1.3+)
preflight は asset 参照だけでなく HTML 全体を text として scan し、viewer 環境では絶対に解決しない作者マシン path を見つけたら LOCAL_PATH_LEAK で fail-fast する:
| pattern | severity | 例 |
|---|---|---|
/Users/<name>/... | error | macOS の個人 home |
/home/<name>/... | error | Linux の個人 home |
file://... | error | local file URI |
C:\Users\... / Documents\ / Desktop\ | error | Windows の個人 path |
/var/folders/... | error | macOS の TMPDIR layout |
~/... | warn | warn のみ、publish は通る |
検知された場合は HTML 側を直して から再 publish する (絶対パスを削除 / 公開 URL に置換 / ファイル名だけ抽象的に言及)。<code> ブロックや本文中の引用にも leak しやすい。
update (republish) — slug を維持して上書き (v0.1.3+)
# slug でも id でも OK。HTML auto-rewrite / preflight は publish と同じ。
zuroku update my-cool-page ./index.html ./img/*.png- 既存 project の HTML と asset を 完全置換 して同じ slug / URL で再公開する (
-2は付かない)。 - asset は 全置換。残したい画像も含めて positional 引数で渡すこと (省略すると 0 件で送られる)。
- 新しい URL を発行したい場合は
updateでなくpublishを使う。 - 内部的には
republish-init→uploadHtml/uploadAsset(新 token) →republishの 3 段階。失敗しても manifest swap (3 段目) までは旧版が viewer に出続ける。
--keep-assets — 本文だけ直して画像はそのまま (v0.1.5+)
# HTML だけ差し替え、既存の画像は一切触らない。img 引数は不要 (渡しても無視)。
zuroku update my-cool-page ./index.html --keep-assets- 既存画像を 温存 したまま HTML だけ更新する。全置換モードと違い画像の再アップロード不要。
- 「文言だけ直したい」「typo 修正」など本文のみの更新で、画像の渡し忘れによる一括削除事故を防げる。
- asset 欠落 preflight はスキップされる (HTML が参照する
img/*はサーバ側に温存されている前提)。 - ただし新 HTML が*サーバに無い `img/
を参照している**場合は CLI が warn を出す (--keep-assets: HTML references img/ files not present on the server)。「本文だけ直す」つもりで画像参照名を変えると沈黙して 404 になる事故を防ぐためのもの。warn が出たら参照名を直すか、--keep-assets` を外して全画像を渡す全置換モードに切り替える。 - thumbnail / OG 画像も従来のまま維持される。
- 画像を 足す / 差し替える / 消す ときは
--keep-assetsを付けず、全画像を positional で渡す全置換モードを使う。
認証
# Web UI で API key 発行 → 平文 token をコピー → CLI に登録
zuroku auth login --token zrk_live_xxx --base-url https://app.zuroku.masao.aitoken は HMAC で server 保存、平文は発行時 1 回だけ表示される。
config (per-user 既定値)
zuroku config set default-visibility private # 既定を private に
zuroku config set default-visibility curator # 既定を curator に戻す
zuroku config unset default-visibility # config 削除 → server default 'curator'
zuroku config get default-visibility # 現在値を stdout に
zuroku config get # 一覧config は ~/.config/zuroku/config.json に 0600 で保存される (XDG_CONFIG_HOME 尊重)。 default-visibility に設定できるのは private / curator のみ。`public` は `set` で reject される (公開は per-publish で --visibility public を明示する設計で、暗黙のデフォルトにはしない)。publish は flag 未指定時に config を fallback する (info 行 visibility: <mode> (from config default_visibility) が出る)。
list / delete
zuroku list # 自分の publish 一覧
zuroku delete <slug> # soft delete
zuroku delete <slug> -y # 確認スキップsoft delete 後に同じ slug を再 publish すると <slug>-2 が自動採番される。
出力 contract
zuroku publish の stdout 最終行は bare URL のみ。進捗 / info / success は stderr に出る。
URL=$(zuroku publish ./index.html ./img/*.png --title "..." 2>/dev/null | tail -1)失敗パターン早見表
| 症状 | 原因 | 対処 |
|---|---|---|
INVALID_INPUT [MISSING] | HTML 内 src と asset の filename 不一致 | preflight メッセージの Suggested fixes を読む |
LOCAL_PATH_LEAK | HTML 本文に /Users/... 等の作者マシン path が混入 (v0.1.3+ で検知) | HTML 側で絶対パスを削除 / 公開 URL に置換 / ファイル名だけ抽象的に言及 |
| 公開ページで外部画像だけ 403 / placeholder | hotlink protection (Referer 検査) | v0.1.5+ は自動付与。warn 行 `referrerpolicy="..." (recommended: "no-referrer")` が出たら HTML 側を no-referrer に直す。<a> には不要 |
| 配信ページで画像 404 | (v0.1.1+ では自動 rewrite される。それ以前 / HTML を直接書き換えていた場合) basename 不一致。HTML の <img src="img/..."> と asset 引数の filename を再確認 | |
UNSUPPORTED_MEDIA 415 | SVG / Content-Type 偽装 | PNG/JPEG/WebP/GIF のみ |
BODY_TOO_LARGE 413 | ファイル 5 MiB 超過 | 事前リサイズ |
QUOTA_EXCEEDED 429 | 1 日上限超過 | 翌 UTC midnight まで待つ |
AUTH_INVALID 401 | token revoked / expired / typo | Web で再発行 + zuroku auth login |
NOT_CURATOR 403 | curator role を Discord で剥奪された | role 復帰 (反映まで最大 60 秒) |
Related skills
FAQ
Do I need to rewrite image paths myself?
No. The CLI anchors provided assets and normalizes images/<file> to img/<file>; bare global sed replacement is warned against because it breaks external URLs.
How is the thumbnail chosen?
A file named thumb.* is used for the OG image, otherwise the first asset; thumb.* is auto-converted to JPEG for OG/SNS compatibility (v0.1.8+).