Generates a local chapter-structured blueprint from a single public URL, distinguishing frontend facts from backend/design inferences with confidence levels, and runs deterministic quality checks.
How this skill is triggered — by the user, by Claude, or both
Slash command
/extract-system-blueprint:run-extract-blueprint <url> [--crawl-mode single|full_site] [--resume]<url> [--crawl-mode single|full_site] [--resume]urlcrawl_moderesumeThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> extract-system-blueprint plugin の抽出本体 (L1 skill)。plugin-root 共有 script (`scripts/authz-classify.py`=C12 / `fetch-snapshot.py`=C09 / `browser-render.py`=C15 / `doc-emit.py`=C11 / `mermaid-validate.py`=C10)・analyzer sub-agent 5 体 (C03/C04/C05/C13/C06)・fail-closed hook (`hooks/pre-fetch-authz-guard.py`=C08) を配線する。パス解決は `$CLAUDE_PLUGIN_ROOT` 起点、成果物は `$CLAUDE_PROJECT_DIR`/cwd 配下。
extract-system-blueprint plugin の抽出本体 (L1 skill)。plugin-root 共有 script (
scripts/authz-classify.py=C12 /fetch-snapshot.py=C09 /browser-render.py=C15 /doc-emit.py=C11 /mermaid-validate.py=C10)・analyzer sub-agent 5 体 (C03/C04/C05/C13/C06)・fail-closed hook (hooks/pre-fetch-authz-guard.py=C08) を配線する。パス解決は$CLAUDE_PLUGIN_ROOT起点、成果物は$CLAUDE_PROJECT_DIR/cwd 配下。
対象システムの公開 URL 1 件から、フロント表層の事実 (fact) とバックエンド/UIUX/コンテンツ伝達意図の根拠+確度つき推測 (inference) を明示区別した章別ブループリント (md + json + Mermaid5種) をローカルへ生成して完結する (外部公開はしない)。
入力: url (対象 URL 1 件), --crawl-mode single|full_site (既定 single), --resume (前 run の site coverage manifest から継続)
出力:
system-blueprint.schema.json 準拠の md + json)・5 種 Mermaid 図・画面別 layout.json / layout-overlay.svg・合成 design-tokens.json・site coverage manifest・request ledger完了条件: 決定論チェック (authz/fetch/mermaid/doc) 全 exit0 + fact/inference/observation_gap 相互排他 + 5 種 Mermaid 網羅。生成物はローカル draft として完結し、C02 (独立 context) がローカル品質評価の verdict (PASS/FAIL) を発行する。
禁則: 認証必須領域への無断到達・実侵入・認可外スクレイピングをしない。全 origin 並列 1・最小間隔・request budget・Retry-After・停止条件を緩めない (引上げはユーザー承認対象)。
$CLAUDE_PLUGIN_ROOT/schemas/fact-inference-confidence.schema.json): fact は provenance (source_url/locator/captured_at/method/snapshot_id) 必須・レンズ解釈を含めない。inference は claim + evidence_refs(≥1) + confidence{level,rationale} 必須。observation_gap は not_observed|blocked + reason + budget_state で inference に昇格させない。top-level blueprint shape は system-blueprint.schema.json (screens[]/design_tokens/tech_stack/essence 等) を正本とする。prompts/R1-R3):
prompts/R1-fetch.md): C12 で AuthzEvidence/request budget/crawl_profile を確定し、C09 の URL discovery → C12 の scope 分類 (in_scope/excluded+reason) で system 関連 URL 台帳を作り、C08 の fail-closed 境界内で C09 静的 HTTP snapshot を全 in-scope 画面へ取得し、加えて C15 (browser-render.py・MCP 非依存 headless Chrome via Bash) で rendered DOM/screenshot の取得を試みる (ブラウザ不在=exit 3 時のみ gap)。--resume は前 run の site coverage manifest を C12 --coverage-manifest-in へ再投入する。prompts/R2-analyze.md): C03 (視覚/content/tech_signals/機能/CWV/security/compliance/site_inventory fact) → C04 (バックエンド/named 同定/security_design(OWASP)/delivery_topology) / C05 (UIUX/user_journeys) / C13 (content-intent) → C06 (essence + feature_map + user_journeys + security/topology 統合) の順に Task で独立 context へ委譲し、fact と inference を明示区別して収集する。C03 の観測は 静的 HTTP (WebFetch + C09 snapshot) と C15 browser-render (MCP 非依存 headless Chrome via Bash) の rendered DOM/screenshot を根拠とし、JS 実行後 DOM・screenshot・computed style は browser-render で取得を試み、ブラウザ不在 (exit 3=browser-unavailable) 時のみ observation_gap (blocked) として記録する。prompts/R3-document.md): C11 (doc-emit.py) で章別ローカル draft (md/json) と 5 種 Mermaid・画面別 layout.json/overlay を確定し、doc-emit.py --check-screens で layout completeness を、mermaid-validate.py (C10) で図種網羅を自己検証する。python3 "$CLAUDE_PLUGIN_ROOT/scripts/doc-emit.py" --extraction <json> --out-dir <dir> --request-ledger <f> [--check-screens] で起動する。screenshot / annotated は browser-render (C15) 取得時に extraction の screens[] へ populate され、ブラウザ不在時のみ observation_gap として記録する。本 skill は固定手順ではなく、下記ゴールへ向けて完了チェックリストの未達項目を埋める手順を都度生成して反復する。正本:
../../../harness-creator/skills/run-build-skill/references/goal-seek-paradigm.md。
対象 URL 1 件について、フロント表層の事実とバックエンド/設計意図の根拠つき推測を明示区別した章別ドキュメント群 (md + json + 事実推測区別図を含む 5 種 Mermaid + 主要画面の layout.json / 注釈 overlay / verbatim content fact / essence 章) がローカルへ生成されて完結し、C02 (独立 context) がローカル品質評価の verdict (PASS/FAIL) を発行できる状態。
URL をブラウザ目視 + F12 確認する手作業 3 ステップ (週 2.5 回 × 平均 90 分) を排し、URL 解析結果から自社実装の雛形・設計ドキュメントを即生成して自社構築の着手を速くするため。事実と推測を構造分離することで、AI へ渡した際に追加ヒアリングなしで自社版スカフォールドへ着手できる粒度を担保する。
allow)、C08 の fail-closed 境界内で C09 静的 HTTP snapshot を全 in-scope 画面へ取得し、C15 browser-render で rendered DOM/screenshot の取得を試みた (MCP 非依存・対象 origin 並列 1・budget 超過 0・ブラウザ不在=exit 3 時のみ gap) observation_gap+reason=browser-unavailable として記録され、未取得 field が無言欠落でなく not_observed+reason である mermaid-validate.py が exit0 doc-emit.py --check-screens が exit0 (layout 参照整合・観測色の palette 孤児 0・site coverage manifest の pending 無言欠落なし・未取得 screenshot は observation_gap として記録) で、draft_hash が固定された 正本 goal-seek-paradigm.md の 6 ステップ (現状評価/手順生成/実行/検証/Anchor Step/反復) に従う。本 skill 固有の差分:
## 局面カタログ (順序は都度判断) から選んで埋める (順序固定禁止)。open_issues へ残し上位 orchestrator へ差し戻す。eval-log/goal-spec.json を本 skill と run-blueprint-apply (C14) が共有する (progress は skill 別ファイル。ゴール正本は 1 つ、周回状態は skill 別という設計意図)。eval-log/run-extract-blueprint-intermediate.jsonl へ追記する (cwd 相対禁止)。各周回末に不変アンカー original_goal (上記ゴール文の原文) と delta_from_original、次周回の必須入力 merged_directive_for_next を記録し、次周回 Step2 の必須入力とする (集約化ドリフト圧縮)。周回サマリは schemas/goal-seek-loop.schema.json 準拠の eval-log/run-extract-blueprint-progress.json に残す。frontend-surface-analyzer、バックエンド推測は backend-inference-analyzer、UIUX 推測は uiux-rationale-analyzer、content 意図は content-intent-analyzer、統合は architecture-essence-synthesizer を Task で fork する。各周回末に中間成果物 JSONL の整合を機械検証する。required_keys (= original_goal, merged_directive_for_next, delta_from_original) が全て存在し、original_goal_hash が初回の hashlib.sha256(original_goal) と一致することを確認する (ゴール改竄検出)。不一致なら周回を停止し差し戻す。
python3 "$CLAUDE_PLUGIN_ROOT/scripts/validate-goal-seek-anchor.py" \
--intermediate eval-log/run-extract-blueprint-intermediate.jsonl
検証ロジックの正本は共有 validator ../../scripts/validate-goal-seek-anchor.py とし、各 skill は対象 JSONL のパスだけを渡す (対象 JSONL 不在は fail-closed で exit 1=配線バグ扱い。必ず追記後に起動する)。
下記は固定順序ではなく、ゴールシークループが未達チェックリスト項目に応じて選ぶ局面群。各局面の詳細手順・入出力契約は prompts/R1-R3 を正本とする。
run 開始時の bootstrap は単一 Bash 呼びが正本: mkdir -p "${CLAUDE_PROJECT_DIR:-$PWD}/.esb-authz" && python3 "$CLAUDE_PLUGIN_ROOT/scripts/authz-classify.py" --url <url> --evidence-out <dir>/authz.json --budget-out <dir>/budget.json [--crawl-mode full_site --discovered-urls ... --coverage-manifest-in ...] で状態置場作成と C12 authz 発行を同一呼び内で完結させ、allow/deny/unknown と budget/crawl_profile を確定する (unknown は deny)。C08 hook は tool call 時点で dir 不在なら非アクティブで素通すため、この呼び完了時には dir+evidence が揃い、以後の全 tool call が enforce される (evidence 不在窓なし)。分割禁止: mkdir 単独を先行させると hook が即アクティブ化し、evidence の唯一の producer である C12 呼び自身が evidence 不在=fail-closed deny (exit2) で遮断され bootstrap deadlock になる。ESB_RUN=1 は hook が別プロセスで spawn されるため Bash セッション内 export では継承されず、セッション起動時 env としてのみ有効な補助上書き。allow のとき python3 "$CLAUDE_PLUGIN_ROOT/scripts/fetch-snapshot.py" --url <url> --out-dir <dir> --authz-evidence <dir>/authz.json --request-budget <dir>/budget.json [--discover-urls --discovered-urls-out ...] で snapshot + discovery。evidence/budget は C08 が参照する ESB_AUTHZ_DIR (既定 .esb-authz) へ配置する。全 fetch は C08 hook の fail-closed 境界内で走る。
Task で frontend-surface-analyzer を先行起動し fact records を得てから、backend-inference-analyzer / uiux-rationale-analyzer / content-intent-analyzer を C03 出力起点の直交レーンとして起動し、最後に architecture-essence-synthesizer へ fan-in する。各 analyzer は fact/inference を分離 JSON として成果物ディレクトリへ直接書き出す (応答長起因の無言欠落を排除)。
python3 "$CLAUDE_PLUGIN_ROOT/scripts/doc-emit.py" --extraction <json> --out-dir <dir> --request-ledger <f> [--check-screens] で章別 draft + Mermaid + layout を生成し、doc-emit.py --check-screens と python3 "$CLAUDE_PLUGIN_ROOT/scripts/mermaid-validate.py" --docs-dir <dir> で自己検証。draft_hash を固定する。
mermaid-validate.py (C10) / doc-emit.py --check-screens (C11) は C01 の自己検証と C02 の独立評価で同一ロジックを共有する。assign-blueprint-fidelity-evaluator (C02) が draft_hash に束縛したローカル品質評価の verdict (PASS/FAIL) を発行する。C01 は draft と draft_hash を成果物ディレクトリへ出す。run-blueprint-apply (C14) が自社適用 recommendations の入力に使う。export ESB_RUN=1 は hook に届かない: PreToolUse hook はハーネスが別プロセスで spawn するため Bash セッション内 export を継承しない。C08 run-scoping のアクティブ化は .esb-authz / .esb-verdict ディレクトリ検出が正 (R1 冒頭の combined call で作成)。ESB_RUN=1 はセッション起動時 env としてのみ有効。mkdir -p .esb-authz 単独先行は bootstrap deadlock: dir 発見で hook が即アクティブ化し、evidence の唯一の producer である C12 (authz-classify.py) の Bash 呼び自身が evidence 不在=fail-closed deny (exit2) で遮断される。bootstrap は mkdir -p ... && authz-classify の単一 Bash 呼び (R1 冒頭) で行う (呼び時点は dir 不在=非アクティブで素通り、完了時に dir+evidence が揃う)。browser-render.py (MCP 非依存のローカル headless Chrome via Bash) で取得を試み、ブラウザ不在 (exit 3=browser-unavailable) 時のみこれらを observation_gap (blocked) として記録する (無言欠落禁止・inference へ昇格させない)。${ESB_VERDICT_DIR:-.esb-verdict} は cwd 起点なので、C02 の品質評価 verdict 発行と C01 の品質判定参照は同一 cwd で回す (cwd が変わると receipt 不在=fail-closed で品質判定が読めない)。$CLAUDE_PLUGIN_ROOT/scripts/ — authz-classify.py (C12) / fetch-snapshot.py (C09) / doc-emit.py (C11) / mermaid-validate.py (C10)$CLAUDE_PLUGIN_ROOT/agents/ — frontend-surface-analyzer (C03) / backend-inference-analyzer (C04) / uiux-rationale-analyzer (C05) / content-intent-analyzer (C13) / architecture-essence-synthesizer (C06)$CLAUDE_PLUGIN_ROOT/hooks/pre-fetch-authz-guard.py (C08) — fetch-authz 単一述語の fail-closed hook (matcher=Bash|WebFetch)$CLAUDE_PLUGIN_ROOT/schemas/ — fact-inference-confidence.schema.json / system-blueprint.schema.json (横断データ契約)prompts/R1-fetch.md〜R3-document.md — 責務プロンプト (7 層)npx claudepluginhub p/daishiman-extract-system-blueprint-plugins-extract-system-blueprintEvaluates chapter blueprint fidelity from run-extract-blueprint in independent context. Verifies fact/inference distinction, granularity, coverage, and issues PASS/FAIL verdict for quality gate.
Reverse-engineers a target website into a pixel-perfect local implementation with audit evidence. Use for authorized cloning, migration, learning, or recovery.
Generates seven YAML blueprint files (UX, UI, content, accessibility, ethical, technical, business intelligence) encoding design system knowledge for AI agents in .ai/context-engine/.