ワークフロー&基本ツール · daymade/claude-code-skills

codex-image-gallery

Codexが生成した画像を閲覧するための自己完結型ローカルWebギャラリーを起動または再利用します。Codex生成画像の閲覧、ローカル画像ギャラリーの起動、~/.codex/generated_images の確認、Codex画像出力フォルダの表示、またはCodexが生成した画像ファイルの閲覧をユーザーが要求した際に使用します。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1385License MIT(仓库根 LICENSE;GitHub API spdx MIT)Commit d5c4678cb5
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

自己完结型ローカルサービス:scripts/server.mjs はサードパーティ製パッケージを一切使わない純粋な Node stdlib HTTP サーバーであり、127.0.0.1 のデフォルトポート 8765 にバインドされます。ポート占有時は自動的に +1 ずつインクリメント(最大 +20)し、UI テンプレート assets/index.html は同一ディレクトリから配信されます。

daymade-codex/codex-image-gallery/SKILL.md
The server prints the actual URL. It starts at `http://127.0.0.1:8765/` and tries later ports if the default is occupied.
server.mjs: 'const HOST = process.env.HOST || "127.0.0.1"'、listen() 内: 'if (error.code === "EADDRINUSE" && port < DEFAULT_PORT + 20) { listen(port + 1); }'。

提供 API は2つのみ:GET /api/images で画像ルートディレクトリを再帰的に走査し {rootPath, items[](path/mtime/size)} を mtime 降順で返却;GET /images/<rel> で画像ファイルをストリーミング配信——双方ともパストラバーサル防止策(safePath による解決後パスがルート内に留まる検証)を実施。

daymade-codex/codex-image-gallery/scripts/server.mjs
if (fullPath !== root && !fullPath.startsWith(`${root}${path.sep}`)) { return null; }
/api/images には 'cache-control: no-store' を付与。/images/ の rel は decodeURIComponent を経由して safePath 判定され、境界外なら 403 を返却。デフォルトルートは ~/.codex/generated_images で、GALLERY_ROOT 環境変数で上書き可能。

「再利用優先」プロトコル:まず fetch /api/images でデフォルト URL をプローブ(成功時は稼働中サーバーを再利用)、失敗時は pgrep でプロセスを特定し後続ポートを検証、新規起動は最終手段とすることで、リクエストごとの多重起動を防止。

daymade-codex/codex-image-gallery/SKILL.md
If this succeeds, reuse the running server at `http://127.0.0.1:8765/`.
SKILL ワークフロー 1〜4 ステップ:プローブ → pgrep → ポート別検証・再利用 → サービス起動;'Keep the process running for the user and read stdout for the URL.'

フロントエンド index.html は同一オリジンの fetch('/api/images') によりグリッド/ライトボックス/一括タグをレンダリング。外部 CDN/フォント/スクリプトへの依存ゼロの純粋なローカルデータ動作。

daymade-codex/codex-image-gallery/assets/index.html
const response = await fetch("/api/images", { cache: "no-store" });
画面内には「Open another folder」(ブラウザ内フォルダ選択)やパスのコピーなどのローカル機能を備え、描画エスケープには escapeHtml を使用。

受入検証パスを自動検証可能:node --check 構文チェック + 起動後に /api/images の items 返却、/images/<rel> の画像取得、トップページがバンドルされた index.html 由来であることを確認——SKILL はコード修正後にこれら3点を実行して初めて healthy と宣言することを義務付け。

daymade-codex/codex-image-gallery/SKILL.md
Before declaring the skill healthy after edits, run: `node --check scripts/server.mjs`
これは作者独自の「修正後は必ず検証」という規律であり、statusline-generator のヘルスチェックと同様の思想。

2コア機能

01Codex 生成画像の閲覧(デフォルト ~/.codex/generated_images、GALLERY_ROOT で変更可能)
02再帰的なディレクトリ一覧取得 + mtime 順ソート + 画像別配信(png/jpg/webp/gif)
03稼働中サーバーのプローブと再利用(API チェック → pgrep → ポートインクリメント検索)
04ブラウザ内での一括閲覧/フィルタリング/ライトボックス/パスのコピー(バンドルされた単一ファイル UI)
05パストラバーサル防止機能を備えた静的ファイル配信

3外部依存関係

KindDependency / Endpoint
clinode(运行 server.mjs;SKILL 亦用 node -e fetch 做探测)
clipgrep(探测已有 server 进程)
cliopen(可选,打开浏览器到本地 URL)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: node scripts/server.mjs(ローカル HTTP サービス、純粋な stdlib)
  • 环境变量 / API Key: ベンダーサービス API キーの読み取り: なし
  • 本地工作目录: ファイル読み書きおよび成果物出力: なし(サーバーは画像ディレクトリと assets を読み取るのみで、ファイル書き込みは行いません)
監査ノート: 組み込みの Node stdlib ローカルスクリプトを使用し、ループバック監視のみで、外部送信なし、認証情報なし、ディスク書き込みなしであるため、「付属のローカルスクリプト実行、ローカル読み書きのみ」の基準に基づき blue に分類されます。注意点:認証なしのループバック HTTP により ~/.codex/generated_images の内容が公開されるため、同一マシン上の他ユーザーやプロセスから読み取り可能です。最新ブラウザの PNA により一般Webページからの直接アクセスは緩和されますが、ローカルプロセスからのアクセスは制限されないため、共有マシンでの利用時はリスクを各自で評価してください。

5二重目の独立検証

  • [ok] 绑定地址与端口递增 — server.mjs 'HOST = process.env.HOST || "127.0.0.1"' + 'error.code === "EADDRINUSE" && port < DEFAULT_PORT + 20'。
  • [ok] 路径穿越防护 — safePath resolve 后 prefix 校验,越界 403;decodeURIComponent 包 try/catch。
  • [ok] 无外发网络/第三方依赖 — server imports 仅 node:http/fs/os/path/url;index.html 外链扫描仅同源。
  • [ok] SKILL 探测复用协议可实现性 — fetch('/api/images')、pgrep pattern 'node .*server\.mjs' 与 server 实际进程命令行一致(node scripts/server.mjs)。
  • [ok] 鉴权缺失的暴露半径 — 代码无任何鉴权/CORS 头;暴露限于回环(本机)——已在 risk 记录;浏览器 PNA 缓解无法在源码验证,标注为宿主/浏览器行为。
  • [unlocatable] 真实浏览器端渲染验证 — index.html 视觉行为未在浏览器实测(本环境无 Codex 图片目录/浏览器),验证止于静态代码与 SKILL 自述。

6結論

  • 依存関係ゼロの自己完結型(Node stdlib + 単一 HTML)で clone 後すぐに使用可能
  • リソースを節約しポートの多重占有を防ぐ「再利用優先」プロトコル
  • ドキュメント上の保証にとどまらず実装レイヤーで防御されたパストラバーサル対策
  • コード修正後の3段階検証が組み込まれており、healthy 宣言の根拠が明確
  • 最適な用途: Codex 生成画像のローカル閲覧・選別用途に最適:セッション内でエージェントが迅速にギャラリーを起動し、出力の確認、バッチ比較、画像選定を行えます。サードパーティ依存ゼロ、純粋なローカル環境、いつでも停止可能な軽量シナリオに適しています。
    不向きな用途: マルチユーザー共有マシン(認証なしの露出が許容されない環境)やリモートアクセスが必要な環境(ループバックのみバインド)には不向きです。非画像アセットの閲覧、サムネイル生成パイプライン、巨大ディレクトリのページネーションを伴う高度な要件(walkImages が全量再帰スキャンを実行しページネーション非対応)には不向きです。常駐ギャラリーサービスがすでにある場合は、本スキルを起動せず既存 URL を直接再利用してください。
    Install Agent-Ready
    ① Verified Mirror 2026-09-09
    Option A · Direct DownloadDownload codex-image-gallery.tar.gz
    sha256: b2b0045b3baaf9a9…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.