PageSourceSearch

https://speca.pages.dev/assets/js/72e76d65.9bdd9ee3.js

js speca.pages.dev collected 2026-10-03 05:58:35 UTC 61,522 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkhomepage=self.webpackChunkhomepage||[]).push([["1534"],{9667(e,n,s){s.r(n),s.d(n,{metadata:()=>i,default:()=>a,frontMatter:()=>t,contentTitle:()=>l,toc:()=>h,assets:()=>c});var i=JSON.parse('{"id":"guide/try-it","title":"\u3068\u308A\u3042\u3048\u305A\u52D5\u304B\u3057\u3066\u307F\u308B","description":"CLI / Web UI / multi-runtime \u306E 3 \u30EB\u30FC\u30C8 \u3067\u8A66\u305B\u307E\u3059\u3002Web UI \u304C\u4E00\u756A\u7C21\u5358\u306A\u306E\u3067\u521D\u3081\u3066\u306E\u65B9\u306F\u305D\u3053\u304B\u3089\u3002\u5404\u30B9\u30C6\u30C3\u30D7\u306B\u300C\u3053\u3053\u3067\u5931\u6557\u3057\u305F\u3089\u3053\u3046\u76F4\u3059\u300D\u3082\u4F75\u8A18\u3057\u3066\u3044\u307E\u3059\u3002","source":"@site/docs/guide/try-it.md","sourceDirName":"guide","slug":"/guide/try-it","permalink":"/docs/guide/try-it","draft":false,"unlisted":false,"editUrl":"https://github.com/NyxFoundation/speca/tree/dev/website/docs/guide/try-it.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Web UI \u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8 (5 \u5206)","permalink":"/docs/getting-started/web-ui-quickstart"},"next":{"title":"\u30C6\u30B9\u30C8\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u76E3\u67FB\u3092\u4F53\u9A13","permalink":"/docs/tutorial/audit-walkthrough"}}'),r=s(4848),d=s(8453);let t={sidebar_position:3},l="\u3068\u308A\u3042\u3048\u305A\u52D5\u304B\u3057\u3066\u307F\u308B",c={},h=[{value:"\u524D\u63D0",id:"\u524D\u63D0",level:2},{value:"\u30EB\u30FC\u30C8 A: Web UI \u3067\u76E3\u67FB\u3092\u56DE\u3059 (\u521D\u5FC3\u8005\u5411\u3051)",id:"\u30EB\u30FC\u30C8-a-web-ui-\u3067\u76E3\u67FB\u3092\u56DE\u3059-\u521D\u5FC3\u8005\u5411\u3051",level:2},{value:"1. clone + \u4F9D\u5B58\u89E3\u6C7A",id:"1-clone--\u4F9D\u5B58\u89E3\u6C7A",level:3},{value:"2. claude \u306B\u30ED\u30B0\u30A4\u30F3 (\u63A8\u5968\u7D4C\u8DEF)",id:"2-claude-\u306B\u30ED\u30B0\u30A4\u30F3-\u63A8\u5968\u7D4C\u8DEF",level:3},{value:"3. Web \u30B5\u30FC\u30D0\u8D77\u52D5",id:"3-web-\u30B5\u30FC\u30D0\u8D77\u52D5",level:3},{value:"4. (\u30AA\u30D7\u30B7\u30E7\u30F3) Runtime \u3092\u5207\u66FF\u3048\u3066\u307F\u308B",id:"4-\u30AA\u30D7\u30B7\u30E7\u30F3-runtime-\u3092\u5207\u66FF\u3048\u3066\u307F\u308B",level:3},{value:"5. \u76E3\u67FB run \u3092\u958B\u59CB",id:"5-\u76E3\u67FB-run-\u3092\u958B\u59CB",level:3},{value:"6. Run \u9032\u6357\u3092\u773A\u3081\u308B",id:"6-run-\u9032\u6357\u3092\u773A\u3081\u308B",level:3},{value:"7. Findings \u95B2\u89A7",id:"7-findings-\u95B2\u89A7",level:3},{value:"8. (\u30AA\u30D7\u30B7\u30E7\u30F3) Markdown export",id:"8-\u30AA\u30D7\u30B7\u30E7\u30F3-markdown-export",level:3},{value:"\u30EB\u30FC\u30C8 B: CLI \u3067\u76E3\u67FB\u3092\u56DE\u3059 (CI / \u30B9\u30AF\u30EA\u30D7\u30C8\u5411\u3051 / \u7D30\u304B\u3044\u5236\u5FA1\u304C\u3057\u305F\u3044\u4EBA)",id:"\u30EB\u30FC\u30C8-b-cli-\u3067\u76E3\u67FB\u3092\u56DE\u3059-ci--\u30B9\u30AF\u30EA\u30D7\u30C8\u5411\u3051--\u7D30\u304B\u3044\u5236\u5FA1\u304C\u3057\u305F\u3044\u4EBA",level:2},{value:"B-1. \u30D7\u30EA\u30D5\u30E9\u30A4\u30C8",id:"b-1-\u30D7\u30EA\u30D5\u30E9\u30A4\u30C8",level:3},{value:"B-2. \u30BF\u30FC\u30B2\u30C3\u30C8\u60C5\u5831\u3092\u66F8\u304F",id:"b-2-\u30BF\u30FC\u30B2\u30C3\u30C8\u60C5\u5831\u3092\u66F8\u304F",level:3},{value:"B-3. (\u30AA\u30D7\u30B7\u30E7\u30F3) Phase 01a \u306E env \u3092\u4E0A\u66F8\u304D",id:"b-3-\u30AA\u30D7\u30B7\u30E7\u30F3-phase-01a-\u306E-env-\u3092\u4E0A\u66F8\u304D",level:3},{value:"B-4. \u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u5B9F\u884C",id:"b-4-\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u5B9F\u884C",level:3},{value:"\u30D1\u30BF\u30FC\u30F3 1: \u5168\u30D5\u30A7\u30FC\u30BA\u3092\u4E00\u6C17\u306B",id:"\u30D1\u30BF\u30FC\u30F3-1-\u5168\u30D5\u30A7\u30FC\u30BA\u3092\u4E00\u6C17\u306B",level:4},{value:"\u30D1\u30BF\u30FC\u30F3 2: 1 \u30D5\u30A7\u30FC\u30BA\u305A\u3064\u624B\u52D5\u3067",id:"\u30D1\u30BF\u30FC\u30F3-2-1-\u30D5\u30A7\u30FC\u30BA\u305A\u3064\u624B\u52D5\u3067",level:4},{value:"\u30D1\u30BF\u30FC\u30F3 3: \u7279\u5B9A\u30D5\u30A7\u30FC\u30BA\u3092\u30B9\u30AD\u30C3\u30D7",id:"\u30D1\u30BF\u30FC\u30F3-3-\u7279\u5B9A\u30D5\u30A7\u30FC\u30BA\u3092\u30B9\u30AD\u30C3\u30D7",level:4},{value:"\u3088\u304F\u4F7F\u3046\u30D5\u30E9\u30B0",id:"\u3088\u304F\u4F7F\u3046\u30D5\u30E9\u30B0",level:4},{value:"B-5. Runtime \u3092\u5207\u66FF\u3048\u308B",id:"b-5-runtime-\u3092\u5207\u66FF\u3048\u308B",level:3},{value:"\u5404 runtime \u3067\u306E\u5B9F\u884C\u4F8B",id:"\u5404-runtime-\u3067\u306E\u5B9F\u884C\u4F8B",level:4},{value:"B-6. \u30ED\u30B0\u3092\u773A\u3081\u308B / \u9032\u6357\u3092\u78BA\u8A8D",id:"b-6-\u30ED\u30B0\u3092\u773A\u3081\u308B--\u9032\u6357\u3092\u78BA\u8A8D",level:3},{value:"B-7. Findings \u3092\u95B2\u89A7",id:"b-7-findings-\u3092\u95B2\u89A7",level:3},{value:"\u76F4\u63A5 \u30D5\u30A1\u30A4\u30EB\u3092\u898B\u308B",id:"\u76F4\u63A5-\u30D5\u30A1\u30A4\u30EB\u3092\u898B\u308B",level:4},{value:"<code>speca browse</code> TUI \u3092\u4F7F\u3046",id:"speca-browse-tui-\u3092\u4F7F\u3046",level:4},{value:"Markdown export \u3092 CLI \u304B\u3089",id:"markdown-export-\u3092-cli-\u304B\u3089",level:4},{value:"B-8. \u500B\u5225 finding \u3092 Claude \u306B\u8CEA\u554F",id:"b-8-\u500B\u5225-finding-\u3092-claude-\u306B\u8CEA\u554F",level:3},{value:"B-9. \u5931\u6557\u6642\u306E\u30EA\u30AB\u30D0\u30EA (\u624B\u4F5C\u696D)",
1id:"b-9-\u5931\u6557\u6642\u306E\u30EA\u30AB\u30D0\u30EA-\u624B\u4F5C\u696D",level:3},{value:"B-10. CI \u306B\u7D44\u307F\u8FBC\u3080\u4F8B (GitHub Actions)",id:"b-10-ci-\u306B\u7D44\u307F\u8FBC\u3080\u4F8B-github-actions",level:3},{value:"B-11. \u4E26\u5217\u3067\u5225\u306E audit \u3092\u8D70\u3089\u305B\u308B",id:"b-11-\u4E26\u5217\u3067\u5225\u306E-audit-\u3092\u8D70\u3089\u305B\u308B",level:3},{value:"\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u898B\u65B9 (CLI TUI)",id:"\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u898B\u65B9-cli-tui",level:2},{value:"\u30B3\u30B9\u30C8\u3068\u6240\u8981\u6642\u9593\u306E\u76EE\u5B89",id:"\u30B3\u30B9\u30C8\u3068\u6240\u8981\u6642\u9593\u306E\u76EE\u5B89",level:2},{value:"\u30AF\u30A4\u30C3\u30AF\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0",id:"\u30AF\u30A4\u30C3\u30AF\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0",level:2},{value:"Phase 01a \u3067\u300CEmpty results\u300D",id:"phase-01a-\u3067empty-results",level:3},{value:"\u7D42\u4E86\u30B3\u30FC\u30C9 64 / 65 \u3067\u505C\u6B62",id:"\u7D42\u4E86\u30B3\u30FC\u30C9-64--65-\u3067\u505C\u6B62",level:3},{value:"Chat \u30D1\u30CD\u30EB\u3067\u5FDC\u7B54\u304C\u8FD4\u3063\u3066\u3053\u306A\u3044",id:"chat-\u30D1\u30CD\u30EB\u3067\u5FDC\u7B54\u304C\u8FD4\u3063\u3066\u3053\u306A\u3044",level:3},{value:"Web UI \u304C\u8868\u793A\u3055\u308C\u306A\u3044",id:"web-ui-\u304C\u8868\u793A\u3055\u308C\u306A\u3044",level:3},{value:"\u521D\u56DE\u76E3\u67FB\u304C\u7D42\u308F\u3063\u305F\u3042\u3068",id:"\u521D\u56DE\u76E3\u67FB\u304C\u7D42\u308F\u3063\u305F\u3042\u3068",level:2},{value:"\u6B21\u306E\u30B9\u30C6\u30C3\u30D7",id:"\u6B21\u306E\u30B9\u30C6\u30C3\u30D7",level:2}];function o(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"\u3068\u308A\u3042\u3048\u305A\u52D5\u304B\u3057\u3066\u307F\u308B",children:"\u3068\u308A\u3042\u3048\u305A\u52D5\u304B\u3057\u3066\u307F\u308B"})}),"\n",(0,r.jsxs)(n.p,{children:["CLI / Web UI / multi-runtime \u306E ",(0,r.jsx)(n.strong,{children:"3 \u30EB\u30FC\u30C8"})," \u3067\u8A66\u305B\u307E\u3059\u3002",(0,r.jsx)(n.strong,{children:"Web UI \u304C\u4E00\u756A\u7C21\u5358"}),"\u306A\u306E\u3067\u521D\u3081\u3066\u306E\u65B9\u306F\u305D\u3053\u304B\u3089\u3002\u5404\u30B9\u30C6\u30C3\u30D7\u306B\u300C\u3053\u3053\u3067\u5931\u6557\u3057\u305F\u3089\u3053\u3046\u76F4\u3059\u300D\u3082\u4F75\u8A18\u3057\u3066\u3044\u307E\u3059\u3002"]}),"\n",(0,r.jsx)(n.h2,{id:"\u524D\u63D0",children:"\u524D\u63D0"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"\u9805\u76EE"}),(0,r.jsx)(n.th,{children:"\u5FC5\u8981"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Node.js"}),(0,r.jsx)(n.td,{children:"\u2265 20"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Python"}),(0,r.jsxs)(n.td,{children:["3.12 (",(0,r.jsx)(n.code,{children:"uv"})," \u63A8\u5968)"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"git"}),(0,r.jsx)(n.td,{children:"\u4EFB\u610F\u306E\u30D0\u30FC\u30B8\u30E7\u30F3"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"OS"}),(0,r.jsx)(n.td,{children:"Windows 11 / macOS 14 / Ubuntu 22.04 \u691C\u8A3C\u6E08"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"\u8A8D\u8A3C"}),(0,r.jsxs)(n.td,{children:["\u4E0B\u306E\u3044\u305A\u308C\u304B 1 \u3064: claude.ai \u30B5\u30D6\u30B9\u30AF (Pro/Max) / ",(0,r.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," / ",(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})," / ",(0,r.jsx)(n.code,{children:"GEMINI_API_KEY"})," / Ollama (self-hosted \u306F\u7121\u6599)"]})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"\u4E8B\u524D\u78BA\u8A8D:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"node --version    # v20.x \u4EE5\u4E0A\nuv --version      # 0.6 \u4EE5\u4E0A\ngit --version     # \u4EFB\u610F\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u30EB\u30FC\u30C8-a-web-ui-\u3067\u76E3\u67FB\u3092\u56DE\u3059-\u521D\u5FC3\u8005\u5411\u3051",children:"\u30EB\u30FC\u30C8 A: Web UI \u3067\u76E3\u67FB\u3092\u56DE\u3059 (\u521D\u5FC3\u8005\u5411\u3051)"}),"\n",(0,r.jsx)(n.h3,{id:"1-clone--\u4F9D\u5B58\u89E3\u6C7A",children:"1. clone + \u4F9D\u5B58\u89E3\u6C7A"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NyxFoundation/speca.git\ncd speca\n\nuv sync                          # Python \u4F9D\u5B58\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\ncd web/frontend && npm install   # Frontend \u4F9D\u5B58\ncd ../..\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"\u593
11\u6557\u3057\u305F\u3089:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"uv sync"})," \u304C\u30A8\u30E9\u30FC \u2192 ",(0,r.jsx)(n.code,{children:"python -V"})," \u3067 3.12 \u3092\u78BA\u8A8D\u3001PATH \u4E0A\u306B ",(0,r.jsx)(n.code,{children:"python"})," \u304C\u7121\u3044\u5834\u5408\u306F ",(0,r.jsx)(n.code,{children:"uv python install 3.12"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"npm install"})," \u304C\u30A8\u30E9\u30FC \u2192 ",(0,r.jsx)(n.code,{children:"node -v"})," \u304C v20 \u672A\u6E80\u306A\u3089 ",(0,r.jsx)(n.code,{children:"nvm install 20 && nvm use 20"})]}),"\n",(0,r.jsxs)(n.li,{children:["Windows \u3067 ",(0,r.jsx)(n.code,{children:"cd web/frontend && npm install"})," \u306E sh \u69CB\u6587\u304C\u30C0\u30E1 \u2192 PowerShell \u3067\u306F ",(0,r.jsx)(n.code,{children:"cd web\\frontend; npm install; cd ..\\.."})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"2-claude-\u306B\u30ED\u30B0\u30A4\u30F3-\u63A8\u5968\u7D4C\u8DEF",children:"2. claude \u306B\u30ED\u30B0\u30A4\u30F3 (\u63A8\u5968\u7D4C\u8DEF)"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install -g @anthropic-ai/claude-code\nclaude auth login        # \u30D6\u30E9\u30A6\u30B6\u304C\u958B\u3044\u3066 claude.ai OAuth\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"\u78BA\u8A8D:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'claude auth status --json\n# \u2192 { "loggedIn": true, "authMethod": "claude.ai", "email": "...", "subscriptionType": "max" }\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"\u4ED6\u306E\u8A8D\u8A3C\u30BD\u30FC\u30B9\u3092\u4F7F\u3046\u5834\u5408 (API key / OAuth \u4E21\u5BFE\u5FDC):"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# --- Anthropic ---\n# OAuth (Pro/Max subscription)\nclaude auth login\n# \u3042\u308B\u3044\u306F API key\nexport ANTHROPIC_API_KEY=sk-ant-api-...\n\n# --- OpenAI Codex ---\n# OAuth (ChatGPT plan)\nnpm install -g @openai/codex\ncodex login\n# \u3042\u308B\u3044\u306F API key\nprintenv OPENAI_API_KEY | codex login --with-api-key\n# \u3042\u308B\u3044\u306F env var \u3067\u76F4\u63A5 (audit pipeline \u5411\u3051)\nexport OPENAI_API_KEY=sk-...\n\n# --- Google Gemini ---\n# API key (\u30B7\u30F3\u30D7\u30EB)\nexport GEMINI_API_KEY=...                     # https://aistudio.google.com/apikey\n# \u3042\u308B\u3044\u306F Google OAuth (Application Default Credentials)\ngcloud auth application-default login\nexport GOOGLE_GENAI_USE_GCA=true\n\n# --- Ollama (OAuth \u7121\u3057) ---\n# Self-hosted (\u8A8D\u8A3C\u4E0D\u8981)\nollama serve   # \u5225\u30BF\u30FC\u30DF\u30CA\u30EB\u3067\nexport OLLAMA_HOST=http://localhost:11434\n# Cloud (API key)\nexport OLLAMA_HOST=https://ollama.com\nexport OLLAMA_API_KEY=...\n\n# --- GitHub Copilot (chat \u306E\u307F\u3001audit \u975E\u5BFE\u5FDC) ---\ngh auth login                                  # GitHub OAuth\ngh extension install github/gh-copilot\n"})}),"\n",(0,r.jsx)(n.p,{children:":::tip OAuth \u3068 API key \u306E\u4F7F\u3044\u5206\u3051"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OAuth"})," \u306F subscription \u8AB2\u91D1 (Pro/Max plan / ChatGPT plan / Google personal account) \u306B\u4E57\u308A\u307E\u3059\u3002\u30C8\u30FC\u30AF\u30F3\u7BA1\u7406\u3092 CLI \u304C\u4EE3\u884C\u3059\u308B\u306E\u3067\u697D\u3002"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"API key"})," \u306F\u5F93\u91CF\u8AB2\u91D1\u3002CI / \u81EA\u52D5\u5316\u306B\u5411\u304D\u307E\u3059\u3002"]}),"\n",(0,r.jsxs)(n.li,{children:["\u3069\u3061\u3089\u304C\u5229\u7528\u53EF\u80FD\u304B\u306F ",(0,r.jsx)(n.code,{children:"/diagnostics"})," \u30DA\u30FC\u30B8\u3084 ",(0,r.jsx)(n.code,{children:"--list-runtimes"})," \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\n:::"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"3-web-\u30B5\u30FC\u30D0\u8D77\u52D5",children:"3. Web \u30B5\u30FC\u30D0\u8D77\u52D5"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run speca-web --port 7411 --host 127.0.0.1 --serve-frontend\n"})}),"\n",(0,r.jsx)(n.p,{children:"\u671F\u5F85\u30ED\u30B0:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"INFO:     Started server process [...]\nINFO:     Application startup complete.\nINFO:     Uvicorn running on http://0.0.0.0:7411\n"})}),"\n",(0,r.jsxs)(n.p,{children:["\u30D6\u30E9\u30A6\u30B6\u3067 ",(0,r.jsx)(n.a,{href:"http://127.0.0.1:7411/",children:"http://127.0.0.1:7411/"})," \u3092\u958B\u304F:"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Dashboard",src:s(209).A+"",width:"1400",height:"925"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"\u593
11\u6557\u3057\u305F\u3089:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\u30DD\u30FC\u30C8\u7AF6\u5408 \u2192 ",(0,r.jsx)(n.code,{children:"--port 8000"})," \u7B49\u306B\u5909\u66F4"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"claude auth status"})," \u306F\u901A\u308B\u304C Web UI \u3067 ",(0,r.jsx)(n.code,{children:"logged_in: false"})," \u2192 \u8A8D\u8A3C\u30D1\u30B9\u306E\u30D0\u30B0\u3002",(0,r.jsx)(n.code,{children:"ls ~/.claude/.credentials.json"})," (\u5148\u982D\u30C9\u30C3\u30C8\u6CE8\u610F) \u3067\u5B9F\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308B\u304B\u78BA\u8A8D"]}),"\n",(0,r.jsxs)(n.li,{children:["\u30D6\u30E9\u30A6\u30B6\u304C\u7E4B\u304C\u3089\u306A\u3044 \u2192 \u30D5\u30A1\u30A4\u30A2\u30A6\u30A9\u30FC\u30EB\u3002",(0,r.jsx)(n.code,{children:"--host 0.0.0.0"})," \u3067\u516C\u958B\u3001\u307E\u305F\u306F ",(0,r.jsx)(n.code,{children:"127.0.0.1"})," \u3067\u30EB\u30FC\u30D7\u30D0\u30C3\u30AF\u78BA\u8A8D"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"4-\u30AA\u30D7\u30B7\u30E7\u30F3-runtime-\u3092\u5207\u66FF\u3048\u3066\u307F\u308B",children:"4. (\u30AA\u30D7\u30B7\u30E7\u30F3) Runtime \u3092\u5207\u66FF\u3048\u3066\u307F\u308B"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"/settings"})," \u3092\u958B\u304D ",(0,r.jsx)(n.strong,{children:"Chat runtime"})," \u30BB\u30AF\u30B7\u30E7\u30F3\u3067 claude \u4EE5\u5916\u3092\u9078\u3093\u3067\u307F\u307E\u3059:"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Runtime selector",src:s(9922).A+"",width:"1400",height:"1587"})}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Runtime"}),(0,r.jsx)(n.th,{children:"OAuth"}),(0,r.jsx)(n.th,{children:"API key"}),(0,r.jsx)(n.th,{children:"\u30B5\u30FC\u30D0\u304C\u5FC5\u8981\u306A env / \u8A8D\u8A3C"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Claude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"claude auth login"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})}),(0,r.jsx)(n.td,{children:"\u65E2\u5B9A \u2014 \u4F55\u3082\u8A2D\u5B9A\u4E0D\u8981"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Codex"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"codex login"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})}),(0,r.jsxs)(n.td,{children:["\u8A8D\u8A3C\u6E08\u306E CLI \u304C\u3042\u308B or ",(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})," \u3092 export"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Gemini"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"gcloud auth application-default login"})," + ",(0,r.jsx)(n.code,{children:"GOOGLE_GENAI_USE_GCA=true"})]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GEMINI_API_KEY"})}),(0,r.jsx)(n.td,{children:"\u3044\u305A\u308C\u304B\u3092 export"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Ollama"})}),(0,r.jsx)(n.td,{children:"\u2014 (OAuth \u7121\u3057)"}),(0,r.jsxs)(n.td,{children:["cloud \u306F ",(0,r.jsx)(n.code,{children:"OLLAMA_API_KEY"}),"\u3001self-hosted \u306F\u4E0D\u8981"]}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"OLLAMA_HOST"})," \u3092\u5FC5\u8981\u306B\u5FDC\u3058\u3066 (\u30C7\u30D5\u30A9\u30EB\u30C8 cloud)"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Copilot"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"gh auth login"})," (GitHub OAuth)"]}),(0,r.jsx)(n.td,{children:"\u2014 (Copilot \u5951\u7D04\u5FC5\u9808)"}),(0,r.jsx)(n.td,{children:"Chat \u306E\u307F\u3001audit \u4E0D\u53EF"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["availability bagde ",(0,r.jsx)(n.code,{children:"\u2713"})," / ",(0,r.jsx)(n.code,{children:"!"})," \u306F\u300C\u30B5\u30FC\u30D0\u74B0\u5883\u5909\u6570 / CLI \u306E\u72B6\u614B\u300D\u3092\u898B\u307E\u3059\u3002env \u3092 export \u3057\u3066\u304B\u3089 Web \u30B5\u30FC\u30D0\u518D\u8D77\u52D5\u304C\u78BA\u5B9F\u3067\u3059\u3002\u5404 runtime \u306E deep dive \u306F ",(0,r.jsx)(n.a,{href:"/docs/operations/multi-runtime",children:"Multi-runtime \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"}),"\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"5-\u76E3\u67FB-run-\u3092\u958B\u59CB",children:"5. \u76E3\u67FB run \u3092\u958B\u59CB"}),"\n",(0,r.jsxs)(n.p,{children:["\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u300C+ \u65B0\u898F run\u300D \u2192 ",(0,r.jsx)(n.strong,{children:"Picker"})," \u304B ",(0,r.jsx)(n.strong,{children:"Wizard"})," \u3067\u5BFE\u8C61\u30EA\u30DD\u30B8\u30C8\u30EA\u60C5\u5831\u3092\u5165\u529B\u3002"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u521D\u5FC3\u8005\u5411\u3051: Wizard \u30E2\u30FC\u30C9"})," (",(0,r.jsx)(n.code,{children:"/runs/new/wizard"}),")"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7A2E\u5225"})," \u2014 ",(0,r.jsx)(n.code,{children:"smart_contract"})," / ",(0,r.jsx)(n.code,{children:"web_app"})," / ",(0,r.jsx)(n.code,{children:"library"})," / ",(0,r.jsx)(n.code,{children:"other"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u5BFE\u8C61\u30EA\u30DD\u30B8\u30C8\u30EA"})," \u2014 ",(0,r.jsx)(n.code,{children:"owner/name"})," (\u4F8B: ",(0,r.jsx)(n.code,{children:"OpenZeppelin/openzeppelin-contracts"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u5BFE\u8C61 ref"})," \u2014 \u7A7A\u6B04\u3067\u30C7\u30D5\u30A9\u30EB\u30C8\u30D6\u30E9\u30F3\u30C1\u3001\u307E\u305F\u306F ",(0,r.jsx)(n.code,{children:"v5.0.0"})," \u7B49"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u30B9\u30B3\u30FC\u30D7"})," \u2014 Bug bounty URL \u304C\u3042\u308C\u3070\u8CBC\u308B\u3001\u7121\u3051\u308C\u3070\u7A7A"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Spec URLs"})," \u2014 \u30AA\u30D7\u30B7\u30E7\u30F3 (Phase 01a \u306E seed)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u78BA\u8A8D"})," \u2014 Launch"]}
1),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"\u5931\u6557\u30D1\u30BF\u30FC\u30F3:"})}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"\u30A8\u30E9\u30FC"}),(0,r.jsx)(n.th,{children:"\u610F\u5473"}),(0,r.jsx)(n.th,{children:"\u4FEE\u6B63\u65B9\u6CD5"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clone_failed"})}),(0,r.jsx)(n.td,{children:"private repo / typo / network"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"git ls-remote https://github.com/<owner>/<name>"})," \u3067\u758E\u901A\u78BA\u8A8D\u3002private \u306A\u3089 ",(0,r.jsx)(n.code,{children:"GH_TOKEN"})," env \u3092 export \u3057\u3066\u304B\u3089\u518D\u8D77\u52D5"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"invalid_target_repo"})}),(0,r.jsx)(n.td,{children:"\u30B9\u30E9\u30B0\u5F62\u5F0F\u4E0D\u6B63"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"owner/name"})," \u306E\u30B7\u30F3\u30D7\u30EB\u5F62\u5F0F\u306B\u76F4\u3059\u3002",(0,r.jsx)(n.code,{children:"https://"})," \u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u4E0D\u8981"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ref_not_found"})}),(0,r.jsx)(n.td,{children:"branch/tag \u304C origin \u306B\u7121\u3044"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"git ls-remote --tags --heads <repo>"})," \u3067\u5B9F\u5728\u30C1\u30A7\u30C3\u30AF"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"worktree_failed"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:".speca/workspaces/"})," \u306E\u6C5A\u67D3"]}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"rm -rf .speca/workspaces/<target>"})," \u3067\u518D\u751F\u6210\u3055\u305B\u308B"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"anthropic_unreachable"})}),(0,r.jsx)(n.td,{children:"API \u969C\u5BB3 or auth \u5207\u308C"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"claude auth status --json"})," \u518D\u78BA\u8A8D\u3001status.anthropic.com \u3092\u898B\u308B"]})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"\u30A8\u30E9\u30FC\u306F\u753B\u9762\u4E0A\u306E\u30E2\u30FC\u30C0\u30EB\u3067\u65E5\u672C\u8A9E\u306E\u5BFE\u51E6\u4ED8\u304D\u3067\u51FA\u307E\u3059 (CLI spec \xa710.4 \u306E 7 \u30B1\u30FC\u30B9\u5BFE\u5FDC)\u3002"}),"\n",(0,r.jsx)(n.h3,{id:"6-run-\u9032\u6357\u3092\u773A\u3081\u308B",children:"6. Run \u9032\u6357\u3092\u773A\u3081\u308B"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Run detail with phases",src:s(5777).A+"",width:"1400",height:"900"})}),"\n",(0,r.jsxs)(n.p,{children:["\u5404 phase \u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u5C55\u958B\u3001\u307E\u305F\u306F phase \u884C\u3092 Tab focus \u3057\u3066 ",(0,r.jsx)(n.code,{children:"l"})," \u30AD\u30FC\u3067\u30ED\u30B0\u30DA\u30A4\u30F3\u3092\u958B\u304F\u3002",(0,r.jsx)(n.code,{children:"f"})," \u3067\u500B\u5225 phase \u306E force re-run\u3002"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u4E88\u7B97\u8D85\u904E:"})," \u30B2\u30FC\u30B8\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066 cap-bump:"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Cap-bump modal",src:s(8847).A+"",width:"1400",height:"900"})}),"\n",(0,r.jsx)(n.h3,{id:"7-findings-\u95B2\u89A7",children:"7. Findings \u95B2\u89A7"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Findings list",src:s(1160).A+"",width:"1400",height:"5133"})}),"\n",(0,r.jsx)(n.p,{children:"DSL \u3067\u30D5\u30A3\u30EB\u30BF:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"severity:HIGH|CRITICAL verdict:CONFIRMED_VULNERABILITY path:contracts/**/*.sol\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"?glob="})," URL param \u3067\u3082 directly link \u53EF:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"http://127.0.0.1:7411/runs/<id>/findings?glob=contracts/**/*.sol\n"})}),"\n",(0,r.jsx)(n.p,{children:"\u884C\u30AF\u30EA\u30C3\u30AF\u3067\u8A73\u7D30 (Prism \u30B3\u30FC\u30C9\u30CF\u30A4\u30E9\u30A4\u30C8):"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Finding detail",src:s(2276).A+"",width:"1400",height:"900"})}),"\n",(0,r.jsx)(n.p,{children:"\u300CAsk Claude about this finding\u300D\u3067 chat \u306B finding \u3092 inject\u3002"}),"\n",(0,r.jsx)(n.h3,{id:"8-\u30AA\u30D7\u30B7\u30E7\u30F3-markdown-export",children:"8. (\u30AA\u30D7\u30B7\u30E7\u30F3) Markdown export"}),"\n",(0,r.jsxs)(n.p,{children:["Findings \u4E00\u89A7\u306E ",(0,r.jsx)(n.strong,{children:"Export Markdown"})," \u3067 severity \u5225\u30EC\u30DD\u30FC\u30C8\u3092 1 \u30D5\u30A1\u30A4\u30EB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3002\u30D0\u30B0\u5831\u544A / \u30EC\u30D3\u30E5\u30FC\u8CC7\u6599\u306E\u4E0B\u66F8\u304D\u306B\u306A\u308A\u307E\u3059\u3002"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u30EB\u30FC\u30C8-b-cli-\u3067\u76E3\u67FB\u3092\u56DE\u3059-ci--\u30B9\u30AF\u30EA\u30D7\u30C8\u54
111\u3051--\u7D30\u304B\u3044\u5236\u5FA1\u304C\u3057\u305F\u3044\u4EBA",children:"\u30EB\u30FC\u30C8 B: CLI \u3067\u76E3\u67FB\u3092\u56DE\u3059 (CI / \u30B9\u30AF\u30EA\u30D7\u30C8\u5411\u3051 / \u7D30\u304B\u3044\u5236\u5FA1\u304C\u3057\u305F\u3044\u4EBA)"}),"\n",(0,r.jsxs)(n.p,{children:["Web UI \u304C\u7ACB\u3061\u4E0A\u3052\u305A\u7D14\u7C8B\u306B CLI \u3067\u5B8C\u7D50\u3057\u305F\u3044 / GitHub Actions \u306B\u7D44\u307F\u8FBC\u307F\u305F\u3044\u5834\u5408\u306E\u30EB\u30FC\u30C8\u3002Route A \u3068\u540C\u3058\u74B0\u5883 (clone + ",(0,r.jsx)(n.code,{children:"uv sync"}),") \u3092\u5171\u6709\u3057\u307E\u3059\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"b-1-\u30D7\u30EA\u30D5\u30E9\u30A4\u30C8",children:"B-1. \u30D7\u30EA\u30D5\u30E9\u30A4\u30C8"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Python / Node / git / claude CLI / MCP server \u304C\u305D\u308D\u3063\u3066\u3044\u308B\u304B\nuv run python -c "import sys; print(sys.version)"\nnode --version\nwhich claude    # or where claude (Windows)\nbash scripts/setup_mcp.sh --verify\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"--verify"})," \u3067 MCP server \u304C\u767B\u9332\u6E08\u304B\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\u672A\u767B\u9332\u306A\u3089 ",(0,r.jsx)(n.code,{children:"bash scripts/setup_mcp.sh"})," (\u7121\u5370) \u3067\u518D\u767B\u9332\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"b-2-\u30BF\u30FC\u30B2\u30C3\u30C8\u60C5\u5831\u3092\u66F8\u304F",children:"B-2. \u30BF\u30FC\u30B2\u30C3\u30C8\u60C5\u5831\u3092\u66F8\u304F"}),"\n",(0,r.jsxs)(n.p,{children:["CLI \u304B\u3089\u306F ",(0,r.jsx)(n.code,{children:"outputs/TARGET_INFO.json"})," \u3068 ",(0,r.jsx)(n.code,{children:"outputs/BUG_BOUNTY_SCOPE.json"})," \u3092",(0,r.jsx)(n.strong,{children:"\u624B\u66F8\u304D"}),"\u3059\u308B\u306E\u304C\u4E00\u756A\u7D20\u76F4\u3067\u3059 (Wizard \u76F8\u5F53\u3092\u76F4\u63A5\u66F8\u304F\u3060\u3051):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir -p outputs\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="outputs/TARGET_INFO.json"',children:'{\n  "repository": "OpenZeppelin/openzeppelin-contracts",\n  "ref": "v5.0.0",\n  "project_type": "smart_contract"\n}\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="outputs/BUG_BOUNTY_SCOPE.json"',children:'{\n  "url": "https://www.immunefi.com/bounty/openzeppelin",\n  "scope_summary": "Core ERC-20/721 + access control contracts",\n  "in_scope_assets": [\n    "contracts/access/Ownable.sol",\n    "contracts/access/AccessControl.sol",\n    "contracts/token/ERC20/**/*.sol"\n  ],\n  "spec_urls": [\n    "https://docs.openzeppelin.com/contracts/5.x/access-control"\n  ]\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["\u30B9\u30AD\u30FC\u30DE\u306E\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u306F ",(0,r.jsx)(n.a,{href:"/docs/getting-started/config-files",children:"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB"})," \u3092\u53C2\u7167\u3002",(0,r.jsx)(n.strong,{children:'\u30D5\u30A1\u30A4\u30EB\u304C\u7121\u3044\u3068 Phase 01a \u304C "Empty results" \u3067\u6B62\u307E\u308A\u307E\u3059'})," (",(0,r.jsx)(n.a,{href:"/docs/operations/troubleshooting",children:"\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0 C"}),")\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"b-3-\u30AA\u30D7\u30B7\u30E7\u30F3-phase-01a-\u306E-env-\u3092\u4E0A\u66F8\u304D",children:"B-3. (\u30AA\u30D7\u30B7\u30E7\u30F3) Phase 01a \u306E env \u3092\u4E0A\u66F8\u304D"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"spec_urls"})," \u3092 ",(0,r.jsx)(n.code,{children:"BUG_BOUNTY_SCOPE.json"})," \u306B\u66F8\u304B\u306A\u3044\u5834\u5408\u306F env \u304B\u3089\u6E21\u305B\u307E\u3059:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'export KEYWORDS="ethereum execution client EIP"\nexport SPEC_URLS="https://ethereum.github.io/execution-specs/src/,https://geth.ethereum.org/docs"\n'})}),"\n",(0,r.jsx)(n.p,{children:"\u4E21\u65B9\u672A\u8A2D\u5B9A\u306E\u5834\u5408\u3001Phase 01a \u306F default \u306E Ethereum seed (KEYWORDS / SPEC_URLS \u306E\u7D44\u307F\u8FBC\u307F\u5B9A\u6570) \u3092\u4F7F\u3044\u307E\u3059\u3002"}),"\n",(0,r.jsx)(n.h3,{id:"b-4-\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u5B9F\u884C",children:"B-4. \u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u5B9F\u884C"}),"\n",(0,r.jsx)(n.h4,{id:"\u30D1\u30BF\u30FC\u30F3-1-\u5168\u30D5\u30A7\u30FC\u30BA\u3092\u4E00\u6C17\u306B",children:"\u30D1\u30BF\u30FC\u30F3 1: \u5168\u30D5\u30A7\u30FC\u30BA\u3092\u4E00\u6C17\u306B"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/run_phase.py --target 04 --workers 4\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"--target 04"})," \u306F\u4F9D\u5B58\u89E3\u6C7A\u3092\u3057\u3066 ",(0,r.jsx)(n.code,{children:"01a \u2192 01b \u2192 01e \u2192 02c \u2192 03 \u2192 04"})," \u306E\u9806\u306B\u8D70\u3089\u305B\u307E\u3059\u3002"]}),"\n",(0,r.jsx)(n.h4,{id:"\u30D1\u30BF\u30FC\u30F3-2-1-\u30D5\u30A7\u30FC\u30BA\u305A\u3064\u624B\u52D5\u3067",children:"\u30D1\u30BF\u30FC\u30F3 2: 1 \u30D5\u30A7\u30FC\u30BA\u305A\u3064\u624B\u52D5\u3067"}),"\n",(0,r.jsx)(n.p,{children:"\u5404\u30D5\u30A7\u30FC\u30BA\u306E\u51FA\u529B\u3092\u78BA\u8A8D\u3057\u306A\u304C\u3089\u9032\u3081\u308B\u5834\u5408:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/run_phase.py --phase 01a --workers 4\n# \u2192 outputs/01a_STATE.json + outputs/01a_PARTIAL_*.json\ncat outputs/01a_STATE.json | python -m json.tool | head -30\n\nuv run python scripts/run_phase.py --phase 01b --workers 4\n# \u2192 outputs/01b_PARTIAL_*.json + outputs/graphs/\n\nuv run python scripts/run_phase.py --phase 01e --workers 4\nuv run python scripts/run_phase.py --phase 02c --workers 4\nuv run python scripts/run_phase.py --phase 03 --workers 4\nuv run python scripts/run_phase.py --phase 04 --workers 4\n"})}),"\n",(0,r.jsx)(n.h4,{id:"\u30D1\u30BF\u30FC\u30F3-3-\u7279\u5B9A\u30D5\u30A7\u30FC\u30BA\u3092\u30B9\u30AD\u30C3\u30D7",children:"\u30D1\u30BF\u30FC\u30F3 3: \u7279\u5B9A\u30D5\u30A7\u30FC\u30BA\u3092\u30B9\u30AD\u30C3\u30D7"}),"\n",(0,r.jsx)(n.p,{children:"Phase 02c (MCP tree-sitter \u4F9D\u5B58) \u3092 runtime \u306E\u90FD\u5408\u3067\u30B9\u30AD\u30C3\u30D7\u3057\u305F\u3044\u3068\u304D:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/run_phase.py --phase 01a 01b 01e 03 04 --workers 4\n"})}),"\n",(0,r.jsx)(n.h4,{id:"\u3088\u304F\u4F7F\u3046\u30D5\u30E9\u30B0",children:"\u3088\u304F\u4F7F\u3046\u30D5\u30E9\u30B0"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"--force                    # resume \u72B6\u614B\u3092\u7121\u8996\u3057\u3066\u518D\u5B9F\u884C\n--workers 4                # \u4E26\u5217\u30EF\u30FC\u30AB\u30FC\u6570\n--max-concurrent 8         # phase \u5185\u306E\u540C\u6642 claude \u8D77\u52D5\u6570\n--budget 50                # \u30B3\u30B9\u30C8\u4E0A\u9650 (USD)\u3001\u8D85\u3048\u305F\u3089 exit 64\n--output-dir outputs-test  # \u5225\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u51FA\u3059 (\u4E26\u5217\u5B9F\u884C\u306B\u4FBF\u5229)\n--cleanup-dry-run          # \u4F55\u304C\u518D\u5B9F\u884C\u5BFE\u8C61\u304B\u78BA\u8A8D\u3060\u3051\n--json                     # NDJSON \u51FA\u529B (CI \u5411\u3051)\n--no-tui                   # plain text (--json \u3068\u4F75\u7528\u53EF)\n--01a-scope primary        # Phase 01a \u306E\u72B6\u614B\u3092\u7D5E\u308B (PR #65)\n--runtime <name>           # runtime \u5207\u66FF (PR #64)\n--list-runtimes            # \u5229\u7528\u53EF\u80FD\u306A runtime \u3092\u4E00\u89A7\u8868\u793A\n"})}),"\n",(0,r.jsx)(n.h3,{id:"b-5-runtime-\u3092\u5207\u66FF\u3048\u308B",children:"B-5. Runtime \u3092\u5207\u66FF\u3048\u308B"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# \u5229\u7528\u53EF\u80FD\u306A runtime \u3092\u78BA\u8A8D\nuv run python scripts/run_phase.py --list-runtimes\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Active runtime: claude\n[OK] claude       Anthropic claude CLI (stream-json). ...\n[..] api          OpenRouter-style HTTP. - Set API_RUNNER_API_KEY ...\n[..] codex        OpenAI Chat API. - Set OPENAI_API_KEY ...\n[..] gemini       Google Gemini (OpenAI-compat endpoint). - Set GEMINI_API_KEY ...\n[..] ollama       Ollama (/v1/chat/completions). ...\n[OK] copilot      GitHub Copilot agentic CLI (`copilot -p --output-format json --allow-all-tools`). Routes through CopilotRunner.\n"})}),"\n",(0,r.jsxs)(n.p,{children:["JSON \u3067\u5410\u304B\u305B\u308B\u5834\u5408 (CI / ",(0,r.jsx)(n.code,{children:"speca-cli"})," \u7528):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/run_phase.py --list-runtimes --json | python -m json.tool\n"})}),"\n",(0,r.jsx)(n.h4,{id:"\u5404-runtime-\u3067\u306E\u5B9F\u884C\u4F8B",children:"\u5404 runtime \u3067\u306E\u5B9F\u884C\u4F8B"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# --- Claude (\u65E2\u5B9A) \u2014 \u4F55\u3082\u3057\u306A\u304F\u3066\u3082 claude \u304C\u9078\u3070\u308C\u308B\nuv run python scripts/run_phase.py --target 04 --workers 4\n\n# --- OpenRouter (\u6C4E\u7528 OpenAI \u4E92\u63DB) ---\nexport API_RUNNER_API_KEY=sk-or-v1-...\nexport API_RUNNER_BASE_URL=https://
1openrouter.ai/api/v1\nexport API_RUNNER_MODEL=deepseek/deepseek-r1\nuv run python scripts/run_phase.py --target 04 --runtime api --workers 4\n\n# --- OpenAI Codex ---\n# OAuth \u7D4C\u7531 (ChatGPT plan)\ncodex login\n# \u3042\u308B\u3044\u306F API key\nexport OPENAI_API_KEY=sk-...\nuv run python scripts/run_phase.py --target 04 --runtime codex --workers 4\n# \u30E2\u30C7\u30EB\u4E0A\u66F8\u304D\nexport OPENAI_MODEL=gpt-4-turbo\nuv run python scripts/run_phase.py --target 04 --runtime codex\n\n# --- Google Gemini ---\n# API key\nexport GEMINI_API_KEY=...\n# \u3042\u308B\u3044\u306F Google OAuth (ADC)\ngcloud auth application-default login\nexport GOOGLE_GENAI_USE_GCA=true\nuv run python scripts/run_phase.py --target 04 --runtime gemini\n\n# --- Ollama self-hosted ---\n# \u30BF\u30FC\u30DF\u30CA\u30EB A\nollama serve\nollama pull llama3.2\n# \u30BF\u30FC\u30DF\u30CA\u30EB B\nexport OLLAMA_HOST=http://localhost:11434\nuv run python scripts/run_phase.py --target 04 --runtime ollama --workers 2\n\n# --- Ollama cloud ---\nexport OLLAMA_HOST=https://ollama.com\nexport OLLAMA_API_KEY=...\nuv run python scripts/run_phase.py --target 04 --runtime ollama\n\n# --- GitHub Copilot (agentic CLI\u3001\u30B5\u30D6\u30B9\u30AF\u524D\u63D0) ---\nnpm install -g @github/copilot\ncopilot                                # \u521D\u56DE GitHub OAuth (~/.copilot \u306B creds \u6C38\u7D9A)\n# \u4EFB\u610F: COPILOT_MODEL=claude-sonnet-4-6 \u3067\u30E2\u30C7\u30EB\u4E0A\u66F8\u304D\nuv run python scripts/run_phase.py --target 04 --runtime copilot --workers 2\n"})}),"\n",(0,r.jsxs)(n.p,{children:["\u5404 runtime \u306E\u8A8D\u8A3C / env \u8A73\u7D30\u306F ",(0,r.jsx)(n.a,{href:"/docs/operations/multi-runtime",children:"Multi-runtime \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"})," \u306B\u6574\u7406\u3057\u3066\u3042\u308A\u307E\u3059\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"b-6-\u30ED\u30B0\u3092\u773A\u3081\u308B--\u9032\u6357\u3092\u78BA\u8A8D",children:"B-6. \u30ED\u30B0\u3092\u773A\u3081\u308B / \u9032\u6357\u3092\u78BA\u8A8D"}),"\n",(0,r.jsx)(n.p,{children:"TUI \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9 (\u30C7\u30D5\u30A9\u30EB\u30C8) \u306F phase \u9032\u6357\u3068\u30B3\u30B9\u30C8\u3092\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u8868\u793A\u3057\u307E\u3059\u3002\u5225\u30BF\u30FC\u30DF\u30CA\u30EB\u3067\u8A73\u7D30\u30ED\u30B0\u3092\u5C3E\u8FFD\u3044\u3059\u308B\u5834\u5408:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# \u6700\u65B0\u30D5\u30A7\u30FC\u30BA\u306E\u30ED\u30B0\u3092 tail\ntail -f outputs/logs/03_W0B0_*.jsonl | jq .\n\n# PARTIAL \u306E\u6570 (\u9032\u6357) \u3092\u8997\u304F\nls -1 outputs/03_PARTIAL_*.json | wc -l\n\n# manifest \u3092\u8AAD\u3080 (\u4E2D\u65AD\u3057\u305F\u3042\u3068 resume \u3059\u308B\u3068\u304D\u306B\u5F79\u7ACB\u3064)\ncat .speca/runs/*/state.json | jq '{run_id, status, current_phase, cost_usd_total}'\n"})}),"\n",(0,r.jsx)(n.h3,{id:"b-7-findings-\u3092\u95B2\u89A7",children:"B-7. Findings \u3092\u95B2\u89A7"}),"\n",(0,r.jsx)(n.h4,{id:"\u76F4\u63A5-\u30D5\u30A1\u30A4\u30EB\u3092\u898B\u308B",children:"\u76F4\u63A5 \u30D5\u30A1\u30A4\u30EB\u3092\u898B\u308B"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# \u5168 finding \u3092\u62BD\u51FA\nls outputs/04_PARTIAL_*.json\ncat outputs/04_PARTIAL_W0B0_*.json | jq '.findings[] | {property_id, severity, verdict, file}'\n\n# \u7279\u5B9A severity \u3060\u3051\ncat outputs/04_PARTIAL_*.json | jq '.findings[] | select(.severity==\"High\")'\n"})}),"\n",(0,r.jsxs)(n.h4,{id:"speca-browse-tui-\u3092\u4F7F\u3046",children:[(0,r.jsx)(n.code,{children:"speca browse"})," TUI \u3092\u4F7F\u3046"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'speca browse                                    # \u30DA\u30EB\u30C6\u30A3\u5225\u306E TUI \u30D3\u30E5\u30FC\u30A2\nspeca browse --severity Critical\nspeca browse --filter "verdict:CONFIRMED_*"\nspeca browse --filter "path:contracts/**/*.sol severity:HIGH"\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"c"})," \u30AD\u30FC\u3067\u30B3\u30FC\u30C9\u629C\u7C8B\u3001",(0,r.jsx)(n.code,{children:"f"})," \u3067\u30D5\u30A3\u30EB\u30BF\u7DE8\u96C6\u3001",(0,r.jsx)(n.code,{children:"q"})," \u3067\u7D42\u4E86\u3002DSL \u306E\u5168\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306F ",(0,r.jsx)(n.a,{href:"/docs/getting-started/cli-reference#speca-browse",children:"CLI \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9"})," \u3092\u53C2\u7167\u3002"]}),"\n",(0,r.jsx)(n.h4,{id:"markdown-export-\u3092-cli-\u304B\u3089",children:"Markdown export \u3092 CLI \u304B\u3089"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# 1 \u30D5\u30A1\u30A4\u30EB\u306B\u307E\u3068\u3081\u308B\nuv run python -c \"\nfrom pathlib import Path\nimport json\nfindings = []\nfor p in Path('outputs').glob('04_PARTIAL_*.json'):\n    findings.extend(json.loads(p.read_text())['findings'])\nfindings.sort(key=lambda f: ('Critical High Medium Low Informational'.index(f['severity']), f['property_id']))\nfor f in findings:\n    print(f'## {f[\\\"property_id\\\"]} \u2014 {f[\\\"severity\\\"]} / {f.get(\\\"verdict\\\", \\\"?\\\")}')\n    if f.get('file'): print(f'`{f[\\\"file\\\"]}::{f.get(\\\"line_range\\\", \\\"\\\")}`')\n    print()\n    print(f.get('evidence_snippet', '_(no snippet)_'))\n    print()\n\" > findings.md\n"})}),"\n",(0,r.jsx)(n.h3,{id:"b-8-\u500B\u5225-finding-\u3092-claude-\u306B\u8CEA\u554F",children:"B-8. \u500B\u5225 finding \u3092 Claude \u306B\u8CEA\u554F"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'speca ask                                       # \u6700\u521D\u306E finding \u3092\u9078\u629E\nspeca ask PROP-abc-001 --from outputs/04_PARTIAL_*.json\nspeca ask --severity High --filter "verdict:CONFIRMED_*"\n'})}),"\n",(0,r.jsx)(n.p,{children:"\u305D\u306E finding \u3092\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u3057\u305F Claude Code \u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u304D\u307E\u3059\u3002Web UI \u306E\u300CAsk Claude about this finding\u300D\u3068\u540C\u3058\u6A5F\u80FD\u306E CLI \u7248\u3002"}),"\n",(0,r.jsx)(n.h3,{id:"b-9-\u5931\u6557\u6642\u306E\u30EA\u30AB\u30D0\u30EA-\u624B\u4F5C\u696D",children:"B-9. \u5931\u6557\u6642\u306E\u30EA\u30AB\u30D0\u30EA (\u624B\u4F5C\u696D)"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"\u75C7\u72B6"}),(0,r.jsx)(n.th,{children:"\u78BA\u8A8D"}),(0,r.jsx)(n.th,{children:"\u4FEE\u5FA9"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Phase 03 \u3067 circuit breaker (exit 65)"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tail -50 outputs/logs/03_*.jsonl | jq ."})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"--force --workers 2 --max-concurrent 4"})," \u3067\u4E26\u5217\u6570\u3092\u4E0B\u3052\u3066\u518D\u958B"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1 batch \u3060\u3051\u7834\u640D"}),(0,r.jsxs)(n.td,{children:["\u8A72\u5F53 ",(0,r.jsx)(n.code,{children:"outputs/<phase>_PARTIAL_W<W>B<B>_*.json"})," \u3092\u78BA\u8A8D"]}),(0,r.jsx)(n.td,{children:"\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u3060\u3051\u524A\u9664 \u2192 resume"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"\u4E88\u7B97\u5230\u9054 (exit 64)"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"cat .speca/runs/*/state.json | jq .cost_usd_total"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"--budget 100"})," \u306B\u4E0A\u3052\u308B or scope \u3092\u72ED\u3081\u308B"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"BUG_BOUNTY_SCOPE.json missing"})," \u3067 sys.exit"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ls outputs/BUG_BOUNTY_SCOPE.json"})}),(0,r.jsx)(n.td,{children:"B-2 \u306E\u30C6\u30F3\u30D7\u30EC\u3067\u624B\u66F8\u304D\u4F5C\u6210"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"outputs/01a_STATE.json"})," \u304C\u7A7A"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"cat outputs/01a_STATE.json"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"SPEC_URLS"})," \u3092 export \u3057\u3066\u304B\u3089 ",(0,r.jsx)(n.code,{children:"--phase 01a --force"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Phase 02c \u3067 MCP \u5931\u6557"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"bash scripts/setup_mcp.sh --verify"})}),(0,r.jsxs)(n.td,{children:["MCP \u518D\u767B\u9332 \u2192 ",(0,r.jsx)(n.code,{children:"--phase 02c --force"})]})]})]})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# \u5931\u6557 phase \u3060\u3051 force re-run\nuv run python scripts/run_phase.py --phase 03 --force --workers 4\n\n# 1 batch \u3060\u3051\u524A\u9664\u3057\u3066 resume\nrm outputs/03_PARTIAL_W0B5_*.json\nuv run python scripts/run_phase.py --phase 03\n\n# \u4F55\u304C cleanup \u3055\u308C\u308B\u304B dry-run \u3067\u78BA\u8A8D\nuv run python scripts/run_phase.py --phase 03 --cleanup-dry-run\n"})}),"\n",(0,r.jsxs)(n.p,{children:["\u4F53\u7CFB\u7684\u306A\u624B\u4F5C\u696D\u4FEE\u5FA9\u306F ",(0,r.jsx)(n.a,{href:"/docs/operations/troubleshooting",children:"\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0"})," \u306B\u96C6\u7D04\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"b-10-ci-\u306B\u7D44\u307F\u8FBC\u3080\u4F8B-github-actions",children:"B-10. CI \u306B\u7D44\u307F\u8FBC\u3080\u4F8B (GitHub Actions)"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title=".github/workflows/audit.yml"',children:'name: Nightly SPECA audit\non:\n  schedule: [{ cron: "0 18 * * *" }
1]   # 03:00 JST \u6BCE\u6669\n  workflow_dispatch:\n\njobs:\n  audit:\n    runs-on: ubuntu-22.04\n    timeout-minutes: 180\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with: { node-version: "20" }\n      - uses: astral-sh/setup-uv@v3\n      - name: install claude CLI\n        run: npm install -g @anthropic-ai/claude-code\n      - name: install deps\n        run: uv sync\n      - name: target info\n        run: |\n          cat > outputs/TARGET_INFO.json <<EOF\n          {"repository":"${{ github.repository }}","ref":"${{ github.sha }}","project_type":"smart_contract"}\n          EOF\n          cat > outputs/BUG_BOUNTY_SCOPE.json <<EOF\n          {"in_scope_assets":["contracts/**/*.sol"],"spec_urls":[]}\n          EOF\n      - name: speca audit\n        env:\n          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n        run: |\n          uv run python scripts/run_phase.py \\\n            --target 04 \\\n            --workers 4 \\\n            --budget 50 \\\n            --json --no-tui > audit-events.ndjson\n      - name: upload artifacts\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: speca-${{ github.run_id }}\n          path: |\n            outputs/\n            audit-events.ndjson\n            .speca/runs/\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"--json"})," \u3067\u5410\u3044\u305F NDJSON \u306F ",(0,r.jsx)(n.code,{children:"speca-cli"})," (issue #3) \u3084 JS \u306E consumer \u304B\u3089\u578B\u4ED8\u304D\u3067\u8AAD\u3081\u307E\u3059\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"b-11-\u4E26\u5217\u3067\u5225\u306E-audit-\u3092\u8D70\u3089\u305B\u308B",children:"B-11. \u4E26\u5217\u3067\u5225\u306E audit \u3092\u8D70\u3089\u305B\u308B"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# \u30BF\u30FC\u30DF\u30CA\u30EB A\nexport SPECA_OUTPUT_DIR=outputs-target1\nmkdir -p $SPECA_OUTPUT_DIR\n# (target1 \u7528\u306E TARGET_INFO.json / BUG_BOUNTY_SCOPE.json \u3092\u914D\u7F6E)\nuv run python scripts/run_phase.py --target 04 --output-dir $SPECA_OUTPUT_DIR\n\n# \u30BF\u30FC\u30DF\u30CA\u30EB B\nexport SPECA_OUTPUT_DIR=outputs-target2\n# (...\u540C\u69D8)\nuv run python scripts/run_phase.py --target 04 --output-dir $SPECA_OUTPUT_DIR\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"SPECA_OUTPUT_DIR"})," (\u74B0\u5883\u5909\u6570) \u3068 ",(0,r.jsx)(n.code,{children:"--output-dir"})," (\u30D5\u30E9\u30B0) \u306F\u540C\u3058\u5F79\u5272\u3002Claude CLI \u306E subscription \u4E26\u5217\u4E0A\u9650\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044 (",(0,r.jsx)(n.a,{href:"/docs/operations/troubleshooting",children:"\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0 B"}),")\u3002"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u898B\u65B9-cli-tui",children:"\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u898B\u65B9 (CLI TUI)"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"SPECA \xb7 openzeppelin-ownable-walkthrough          cost: $1.42 / $50 budget\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n01a Spec Discovery     \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  done   23 sections   $0.18\n01b Subgraph Extract   \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  done   12 subgraphs  $0.24\n01e Property Gen       \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  done   18 props      $0.31\n02c Code Resolution    \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591  3 / 18 workers=4    $0.21\n03 Audit Map           \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591  pending             \u2014\n04 Review              \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591  pending             \u2014\n"})}),"\n",(0,r.jsxs)(n.p,{children:["\u5404 phase \u306E\u610F\u5473 \u2192 ",(0,r.jsx)(n.a,{href:"/docs/pipeline/overview",children:"\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u6982\u8981"}),"\u3002"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u30B3\u30B9\u30C8\u3068\u6240\u8981\u6642\u9593\u306E\u76EE\u5B89",children:"\u30B3\u30B9\u30C8\u3068\u6240\u8981\u6642\u9593\u306E\u76EE\u5B89"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"\u30B3\u30FC\u30C9\u30D9\u30FC\u30B9"}),(0,r.jsx)(n.th,{children:"\u5B9F\u6642\u9593"}),(0,r.jsx)(n.th,{children:"\u30B3\u30B9\u30C8 (Sonnet 4.5)"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"\u5C0F\u578B\u30B3\u30F3\u30C8\u30E9\u30AF\u30C8 (~1K LoC)"}),(0,r.jsx)(n.td,{children:"5\u301C10 \u5206"}),(0,r.jsx)(n.td,{children:"$1\u301C5"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"\u4E2D\u898F\u6A21\u30EA\u30DD\u30B8\u30C8\u30EA (~50K LoC)"}),(0,r.jsx)(n.td,{children:"15\u301C40 \u5206"}),(0,r.jsx)(n.td,{children:"$20\u301C50"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"\u672C\u756A\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8 (~500K LoC)"}),(0,r.jsx)(n.td,{children:"1\u301C3 \u6642\u9593"}),(0,r.jsx)(n.td,{children:"$50\u301C100"})]})]})]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Runtime"}),(0,r.jsx)(n.th,{children:"\u76F8\u5BFE\u30B3\u30B9\u30C8"}),(0,r.jsx)(n.th,{children:"\u901F\u5EA6"}),(0,r.jsx)(n.th,{children:"\u7CBE\u5EA6 (audit \u7528\u9014)"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Claude (Sonnet 4.5)"}),(0,r.jsx)(n.td,{children:"baseline"}),(0,r.jsx)(n.td,{children:"baseline"}),(0,r.jsx)(n.td,{children:"\u2605\u2605\u2605"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Claude Pro/
1Max OAuth"}),(0,r.jsx)(n.td,{children:"\u8AB2\u91D1\u306A\u3057 (subscription)"}),(0,r.jsx)(n.td,{children:"baseline"}),(0,r.jsx)(n.td,{children:"\u2605\u2605\u2605"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Codex (GPT-4o)"}),(0,r.jsx)(n.td,{children:"\u22480.5x"}),(0,r.jsx)(n.td,{children:"baseline"}),(0,r.jsx)(n.td,{children:"\u2605\u2605\u2606"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gemini (2.0 Flash)"}),(0,r.jsx)(n.td,{children:"\u22480.3x"}),(0,r.jsx)(n.td,{children:"\u26051.5x\u901F"}),(0,r.jsx)(n.td,{children:"\u2605\u2605\u2606"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Ollama (self-hosted llama3.2:70b)"}),(0,r.jsx)(n.td,{children:"0 (\u30ED\u30FC\u30AB\u30EB)"}),(0,r.jsx)(n.td,{children:"\u26050.3x\u9045"}),(0,r.jsx)(n.td,{children:"\u2605\u2606\u2606"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["\u30B3\u30B9\u30C8\u7BA1\u7406\u306E\u8A73\u7D30\u306F ",(0,r.jsx)(n.a,{href:"/docs/design-notes/model-benchmark-takeaways",children:"\u30E2\u30C7\u30EB\u9078\u5B9A\u306E\u8A2D\u8A08\u30CE\u30FC\u30C8"}),"\u3002"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u30AF\u30A4\u30C3\u30AF\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0",children:"\u30AF\u30A4\u30C3\u30AF\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0"}),"\n",(0,r.jsxs)(n.p,{children:["\u8A73\u7D30\u306F ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/operations/troubleshooting",children:"\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0"})})," \u30DA\u30FC\u30B8\u306B\u96C6\u7D04\u3057\u307E\u3057\u305F\u304C\u3001\u3053\u3053\u3067\u306F\u300C\u3068\u308A\u3042\u3048\u305A\u3053\u308C\u8A66\u3057\u3066\u300D\u3060\u3051\u5217\u6319:"]}),"\n",(0,r.jsx)(n.h3,{id:"phase-01a-\u3067empty-results",children:"Phase 01a \u3067\u300CEmpty results\u300D"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"outputs/BUG_BOUNTY_SCOPE.json"})," \u304C\u7121\u3044\u304B ",(0,r.jsx)(n.code,{children:"in_scope"})," \u304C\u7A7A\u3002\n",(0,r.jsx)(n.strong,{children:"\u4FEE\u6B63:"})," Wizard \u518D\u5B9F\u884C or \u624B\u66F8\u304D\u3067 ",(0,r.jsx)(n.code,{children:"outputs/BUG_BOUNTY_SCOPE.json"})," \u3092\u4F5C\u6210\u3002\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306F ",(0,r.jsx)(n.a,{href:"/docs/getting-started/config-files",children:"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB"}),"\u3002"]}),"\n",(0,r.jsx)(n.h3,{id:"\u7D42\u4E86\u30B3\u30FC\u30C9-64--65-\u3067\u505C\u6B62",children:"\u7D42\u4E86\u30B3\u30FC\u30C9 64 / 65 \u3067\u505C\u6B62"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"64"})," \u2014 ",(0,r.jsx)(n.code,{children:"--budget"})," \u5230\u9054 \u2192 \u5F15\u304D\u4E0A\u3052\u308B or scope \u3092\u72ED\u3081\u308B"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"65"})," \u2014 circuit breaker \u2192 ",(0,r.jsx)(n.code,{children:"outputs/logs/<phase>_*.jsonl"})," \u3067\u539F\u56E0\u78BA\u8A8D"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"chat-\u30D1\u30CD\u30EB\u3067\u5FDC\u7B54\u304C\u8FD4\u3063\u3066\u3053\u306A\u3044",children:"Chat \u30D1\u30CD\u30EB\u3067\u5FDC\u7B54\u304C\u8FD4\u3063\u3066\u3053\u306A\u3044"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\u30D8\u30C3\u30C0\u306E ",(0,r.jsx)(n.code,{children:"signed in as ..."})," \u304C\u51FA\u3066\u3044\u308B\u304B"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"/diagnostics"})," \u3067 claude / codex / gemini CLI \u306E availability \u3092\u78BA\u8A8D"]}),"\n",(0,r.jsx)(n.li,{children:"Settings \u3067 runtime \u3092\u5909\u3048\u3066\u307F\u308B (claude \u2192 ollama \u7B49)"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"web-ui-\u304C\u8868\u793A\u3055\u308C\u306A\u3044",children:"Web UI \u304C\u8868\u793A\u3055\u308C\u306A\u3044"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl http://127.0.0.1:7411/api/health\n# \u2192 {"status":"ok"} \u306A\u3089 API \u306F\u751F\u304D\u3066\u3044\u308B (frontend \u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u554F\u984C)\n'})}),"\n",(0,r.jsx)(n.p,{children:"\u30D6\u30E9\u30A6\u30B6\u3067 Ctrl+Shift+R (hard reload) \u3092\u8A66\u3059\u3002"}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u521D\u56DE\u76E3\u67FB\u304C\u7D42\u308F\u3063\u305F\u3042\u3068",children:"\u521D\u56DE\u76E3\u67FB\u304C\u7D42\u308F\u3063\u305F\u3042\u3068"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"speca browse"})," \u307E\u305F\u306F ",(0,r.jsx)(n.code,{children:"/runs/<id>/findings"})," \u3092\u958B\u304F\u3068 findings \u30EA\u30B9\u30C8\u304C\u624B\u5143\u306B\u6765\u3066\u3044\u307E\u3059\u3002\u6B21\u306E\u8
1CEA\u554F\u306F\u3060\u3044\u305F\u3044\u3053\u3046\u306A\u308A\u307E\u3059:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u300C\u3069\u308C\u304C\u672C\u7269?\u300D"})," \u2014 \u307E\u305A ",(0,r.jsx)(n.code,{children:'--severity High --filter "verdict:CONFIRMED_*"'}),"\u3002verdict \u306E\u610F\u5473\u306F ",(0,r.jsx)(n.a,{href:"/docs/concepts/gate-review",children:"3 \u30B2\u30FC\u30C8\u30EC\u30D3\u30E5\u30FC"}),"\u3002"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u300C\u306A\u305C X \u306F dismiss \u3055\u308C\u305F?\u300D"})," \u2014 ",(0,r.jsx)(n.code,{children:"DISPUTED_FP"})," \u306F\u5F3E\u3044\u305F\u30B2\u30FC\u30C8\u3092\u8A18\u9332\u3057\u3066\u3044\u307E\u3059\u3002",(0,r.jsx)(n.code,{children:"browse"})," \u306E ",(0,r.jsx)(n.code,{children:"Enter"})," \u3067\u5C55\u958B\u3067\u304D\u307E\u3059\u3002"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u300C\u8A3C\u660E\u306E\u3069\u306E\u30B9\u30C6\u30C3\u30D7\u304C\u5931\u6557\u3057\u305F\u306E\u304B?\u300D"})," \u2014 ",(0,r.jsx)(n.code,{children:"speca ask <property_id>"})," \u3067 finding \u306E\u30D5\u30EB\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4ED8\u304D\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u304D\u307E\u3059\u3002"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"\u300C\u3069\u3053\u304B\u3067\u672C\u7269\u306E\u4ED5\u69D8\u306E\u6587\u306B\u9061\u308C\u308B?\u300D"})," \u2014 \u306F\u3044\u3001\u3059\u3079\u3066\u306E finding \u304C\u9061\u308C\u307E\u3059\u3002\u9023\u9396\u306F ",(0,r.jsx)(n.a,{href:"/docs/concepts/worked-example",children:"\u30EF\u30FC\u30AF\u30C9\u30A8\u30B0\u30B6\u30F3\u30D7\u30EB"})," \u306B\u56F3\u793A\u3055\u308C\u3066\u3044\u307E\u3059\u3002"]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\u6B21\u306E\u30B9\u30C6\u30C3\u30D7",children:"\u6B21\u306E\u30B9\u30C6\u30C3\u30D7"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/getting-started/cli-reference",children:"CLI \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9"})," \u2014 \u5168\u30D5\u30E9\u30B0 + ",(0,r.jsx)(n.code,{children:"--runtime"})," \u5207\u66FF"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/operations/web-ui-features",children:"Web UI \u6A5F\u80FD"})," \u2014 \u30D6\u30E9\u30A6\u30B6\u753B\u9762\u306E\u5168\u6A5F\u80FD"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/operations/multi-runtime",children:"Multi-runtime \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"})," \u2014 Codex / Gemini / Ollama / Copilot \u306E\u4F7F\u3044\u65B9"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/operations/troubleshooting",children:"\u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0"})," \u2014 \u5931\u6557\u6642\u306E\u624B\u4F5C\u696D\u30EA\u30AB\u30D0\u30EA"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/pipeline/overview",children:"\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u6982\u8981"})," \u2014 \u5404\u30D5\u30A7\u30FC\u30BA\u306E\u5F79\u5272"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/concepts/spec-driven",children:"\u6982\u5FF5 / Spec-driven"})," \u2014 \u306A\u305C\u3053\u306E\u8A2D\u8A08\u304C\u6210\u7ACB\u3059\u308B\u304B"]}),"\n"]})]})}function a(e={}){let{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},209(e,n,s){s.d(n,{A:()=>i});let i=s.p+"assets/images/01_dashboard_default-5483de2c78e2d5910d8dccf478778573.png"},1160(e,n,s){s.d(n,{A:()=>i});let i=s.p+"assets/images/03_findings_list-040639a45fc307314c6c1c97b2599d7e.png"},2276(e,n,s){s.d(n,{A:()=>i});let i=s.p+"assets/images/04_finding_detail_code_highlight-561f403df02a8380c23f44a1420ff7ff.png"},5777(e,n,s){s.d(n,{A:()=>i});let i=s.p+"assets/images/05_run_detail_budget_phases-312c5cc5c181fbe770892f9c60d545e6.png"},8847(e,n,s){s.d(n,{A:()=>i});let i=s.p+"assets/images/06_budget_cap_bump_modal-8806008466a9ea503045109297dfc7ee.png"},9922(e,n,s){s.d(n,{A:()=>i});let i=s.p+"assets/images/11_runtime_selector-d588e98db4e4cfd0c6f9005de1623e91.png"},8453(e,n,s){s.d(n,{R:()=>t,x:()=>l});var i=s(6540);let r={},d=i.createContext(r);function t(e){let n=i.useContext(d);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(d.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.