[{"data":1,"prerenderedAt":871},["ShallowReactive",2],{"navigation":3,"doc-/go-agent-and-cli/cli":217,"docs-all-paths":817},[4,19,39,63,87,111,127,195,211],{"title":5,"path":6,"stem":7,"children":8},"Welcome","/welcome","01.welcome",[9,11,15],{"title":5,"path":6,"stem":10},"01.welcome/index",{"title":12,"path":13,"stem":14},"Astar とは（5分）","/welcome/product-in-5-min","01.welcome/01.product-in-5-min",{"title":16,"path":17,"stem":18},"事業文脈","/welcome/business-context","01.welcome/02.business-context",{"title":20,"path":21,"stem":22,"children":23},"Getting Started","/getting-started","02.getting-started",[24,27,31,35],{"title":25,"path":21,"stem":26},"はじめかた","02.getting-started/index",{"title":28,"path":29,"stem":30},"リポジトリ取得と環境構築","/getting-started/repo-setup","02.getting-started/01.repo-setup",{"title":32,"path":33,"stem":34},"日々の開発ループ","/getting-started/dev-loop","02.getting-started/02.dev-loop",{"title":36,"path":37,"stem":38},"検証の 4 層","/getting-started/verification-tiers","02.getting-started/03.verification-tiers",{"title":40,"path":41,"stem":42,"children":43},"Architecture","/architecture","03.architecture",[44,47,51,55,59],{"title":45,"path":41,"stem":46},"アーキテクチャ","03.architecture/index",{"title":48,"path":49,"stem":50},"マルチテナンシーと RLS","/architecture/multi-tenancy-rls","03.architecture/01.multi-tenancy-rls",{"title":52,"path":53,"stem":54},"認可モデル","/architecture/authorization","03.architecture/02.authorization",{"title":56,"path":57,"stem":58},"AI サブシステム","/architecture/ai-subsystem","03.architecture/03.ai-subsystem",{"title":60,"path":61,"stem":62},"データモデル","/architecture/data-model","03.architecture/04.data-model",{"title":64,"path":65,"stem":66,"children":67},"Backend","/backend","04.backend",[68,71,75,79,83],{"title":69,"path":65,"stem":70},"バックエンド","04.backend/index",{"title":72,"path":73,"stem":74},"層構造","/backend/layering","04.backend/01.layering",{"title":76,"path":77,"stem":78},"規約","/backend/conventions","04.backend/02.conventions",{"title":80,"path":81,"stem":82},"テスト","/backend/testing","04.backend/03.testing",{"title":84,"path":85,"stem":86},"マイグレーション","/backend/migrations","04.backend/04.migrations",{"title":88,"path":89,"stem":90,"children":91},"Frontend","/frontend","05.frontend",[92,95,99,103,107],{"title":93,"path":89,"stem":94},"フロントエンド","05.frontend/index",{"title":96,"path":97,"stem":98},"モジュール内部構造","/frontend/module-anatomy","05.frontend/01.module-anatomy",{"title":100,"path":101,"stem":102},"API アクセスの一本道","/frontend/api-access-chain","05.frontend/02.api-access-chain",{"title":104,"path":105,"stem":106},"i18n","/frontend/i18n","05.frontend/03.i18n",{"title":108,"path":109,"stem":110},"デザインシステム","/frontend/design-system","05.frontend/04.design-system",{"title":112,"path":113,"stem":114,"children":115},"Go Agent And Cli","/go-agent-and-cli","06.go-agent-and-cli",[116,119,123],{"title":117,"path":113,"stem":118},"Go agent と CLI","06.go-agent-and-cli/index",{"title":120,"path":121,"stem":122},"Go agent","/go-agent-and-cli/go-agent","06.go-agent-and-cli/01.go-agent",{"title":124,"path":125,"stem":126},"CLI","/go-agent-and-cli/cli","06.go-agent-and-cli/02.cli",{"title":128,"path":129,"stem":130,"children":131},"Modules","/modules","07.modules",[132,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191],{"title":133,"path":129,"stem":134},"モジュール","07.modules/index",{"title":136,"path":137,"stem":138},"テーブル","/modules/table","07.modules/01.table",{"title":140,"path":141,"stem":142},"ドキュメントツリー","/modules/document","07.modules/02.document",{"title":144,"path":145,"stem":146},"AIチャット","/modules/ai","07.modules/03.ai",{"title":148,"path":149,"stem":150},"認証・権限","/modules/auth","07.modules/04.auth",{"title":152,"path":153,"stem":154},"AI取込","/modules/organize","07.modules/05.organize",{"title":156,"path":157,"stem":158},"ストレージ","/modules/storage","07.modules/06.storage",{"title":160,"path":161,"stem":162},"NAS同期","/modules/sync","07.modules/07.sync",{"title":164,"path":165,"stem":166},"ワークスペース","/modules/workspace","07.modules/08.workspace",{"title":168,"path":169,"stem":170},"テナントとメンバーシップ","/modules/tenant-membership","07.modules/09.tenant-membership",{"title":172,"path":173,"stem":174},"検索","/modules/search","07.modules/10.search",{"title":176,"path":177,"stem":178},"表示ビュー","/modules/display","07.modules/11.display",{"title":180,"path":181,"stem":182},"テンプレート","/modules/template","07.modules/12.template",{"title":184,"path":185,"stem":186},"メール","/modules/mail","07.modules/13.mail",{"title":188,"path":189,"stem":190},"電話","/modules/phone","07.modules/14.phone",{"title":192,"path":193,"stem":194},"リアルタイム","/modules/realtime","07.modules/15.realtime",{"title":196,"path":197,"stem":198,"children":199},"Infra And Deploy","/infra-and-deploy","08.infra-and-deploy",[200,203,207],{"title":201,"path":197,"stem":202},"インフラとデプロイ","08.infra-and-deploy/index",{"title":204,"path":205,"stem":206},"環境の種類","/infra-and-deploy/environments","08.infra-and-deploy/01.environments",{"title":208,"path":209,"stem":210},"セルフホスト構成","/infra-and-deploy/self-host","08.infra-and-deploy/02.self-host",{"title":212,"path":213,"stem":214,"children":215},"docs-map","/docs-map","09.docs-map/index",[216],{"title":212,"path":213,"stem":214},{"id":218,"title":219,"body":220,"description":811,"extension":812,"meta":813,"navigation":814,"path":125,"seo":815,"stem":126,"__hash__":816},"docs/06.go-agent-and-cli/02.cli.md","astar CLI",{"type":221,"value":222,"toc":797},"minimark",[223,227,240,244,254,264,383,386,420,453,466,471,522,526,578,582,608,620,639,676,682,697,700,734,760,763,793],[224,225,219],"h1",{"id":226},"astar-cli",[228,229,230,234,235,239],"p",{},[231,232,233],"code",{},"astar"," は backend の Tool Router に対する",[236,237,238],"strong",{},"薄いターミナルクライアント","です。ローカルにロジックはほとんど無く、ほぼすべてのサブコマンドはそのまま backend に転送され、backend 側でレンダリングされます。",[241,242,243],"h2",{"id":243},"実パッケージ一覧",[245,246,251],"pre",{"className":247,"code":249,"language":250},[248],"language-text","cli/\n├── main.go                # サブコマンドの switch はここだけ\n├── internal/\n│   ├── agentbinary/         # astar-agent バイナリの解決\n│   ├── auth/                 # SA トークン・device flow OAuth\n│   ├── client/                # backend API クライアント\n│   ├── doctor/                # 接続診断\n│   ├── output/                 # --format/--fields レンダリング\n│   └── updater/                # 自己更新\n└── skills/astar/              # Claude Code / Codex 向け同梱 skill\n","text",[231,252,249],{"__ignoreMap":253},"",[228,255,256,259,260,263],{},[231,257,258],{},"internal/commands/"," のような verb 別パッケージ分割は存在しません。",[231,261,262],{},"main.go"," の switch がサブコマンドの全体です。",[265,266,267,280],"table",{},[268,269,270],"thead",{},[271,272,273,277],"tr",{},[274,275,276],"th",{},"パッケージ",[274,278,279],{},"役割",[281,282,283,313,327,337,349,370],"tbody",{},[271,284,285,291],{},[286,287,288],"td",{},[231,289,290],{},"agentbinary",[286,292,293,296,297,300,301,304,305,308,309,312],{},[231,294,295],{},"astar mount"," / ",[231,298,299],{},"astar unmount"," が exec 委譲する先の ",[231,302,303],{},"astar-agent"," バイナリを解決する。自分と同じディレクトリを優先し、次に ",[231,306,307],{},"$PATH"," を探す。",[231,310,311],{},"astar doctor"," のバイナリ有無報告にも使われる",[271,314,315,320],{},[286,316,317],{},[231,318,319],{},"auth",[286,321,322,323,326],{},"Service Account トークンと device flow OAuth（",[231,324,325],{},"deviceflow.go","）による認証、認証情報の保存",[271,328,329,334],{},[286,330,331],{},[231,332,333],{},"client",[286,335,336],{},"backend API へのリクエスト送信。env → header 変換（後述）もここ",[271,338,339,344],{},[286,340,341],{},[231,342,343],{},"doctor",[286,345,346,348],{},[231,347,311],{}," の接続診断ロジック",[271,350,351,356],{},[286,352,353],{},[231,354,355],{},"output",[286,357,358,361,362,365,366,369],{},[231,359,360],{},"--format","（json/table/tsv）・",[231,363,364],{},"--fields","・",[231,367,368],{},"--output","（ダウンロード先）のクライアント側レンダリング",[271,371,372,377],{},[286,373,374],{},[231,375,376],{},"updater",[286,378,379,382],{},[231,380,381],{},"astar update"," の自己更新（ダウンロード・検証・置換）",[241,384,385],{"id":385},"何ができるか",[228,387,388,394,395,296,398,296,401,296,404,407,408,296,410,296,413,296,416,419],{},[236,389,390,391,393],{},"ローカル実装（",[231,392,262],{}," の switch にある verb だけ）",": ",[231,396,397],{},"login",[231,399,400],{},"logout",[231,402,403],{},"update",[231,405,406],{},"use","（ワークスペース切り替え） / ",[231,409,343],{},[231,411,412],{},"mount",[231,414,415],{},"unmount",[231,417,418],{},"--version"," / 出力レンダリングフラグ。",[228,421,422,425,426,429,430,433,434,437,438,441,442,445,446,296,449,452],{},[236,423,424],{},"それ以外は全部 backend に生転送","されます。",[231,427,428],{},"POST /api/v1/cli","（",[231,431,432],{},"AstarCliController.kt","、",[231,435,436],{},"core/mcp/api/controller/","）が受け取り、AI エージェントと同じ ",[231,439,440],{},"AstarToolRouter"," を通します。コマンドは ",[231,443,444],{},"\u003Cgroup> \u003Csubcommand> [--arg value ...]"," の形式で、",[231,447,448],{},"help",[231,450,451],{},"\u003Cgroup> help"," で一覧を取得できます。",[454,455,457],"callout",{"type":456},"warning",[228,458,459,462,463,465],{},[236,460,461],{},"新しいサーバー側コマンドを追加するときは backend の router（Kotlin）に足す"," — ",[231,464,262],{}," に新しい switch case を足さないこと。この switch は上記のクライアント専用 verb のためだけに存在し、ここに server-side tool 用の case を足すと router のゲーティングを迂回し、backend 側と重複したロジックになる。",[467,468,470],"h3",{"id":469},"破壊的操作のセマンティクスsec-002-ここは直さない","破壊的操作のセマンティクス（SEC-002）— ここは「直さない」",[472,473,474,489,512],"ul",{},[475,476,477,484,485,488],"li",{},[236,478,479,480,483],{},"裸の ",[231,481,482],{},"delete"," はローカルで確認を挟まず即コミットされる","（Unix の ",[231,486,487],{},"rm"," と同じ意味論）。確認ヘビーな UI に慣れていると意外に見えるが、意図的な設計。",[475,490,491,494,495,498,499,429,502,296,505,296,508,511],{},[231,492,493],{},"CanonicalVerbs.DESTRUCTIVE_VERBS","（backend の ",[231,496,497],{},"core/mcp/infrastructure/annotation/CanonicalVerbs.kt","）と ",[231,500,501],{},"alwaysConfirm",[231,503,504],{},"ToolGate",[231,506,507],{},"AgentOrchestrator",[231,509,510],{},"AgentToolLoopPhase","）はすべて backend 側にあり、CLI にクライアント側の確認ロジックは存在しない。",[475,513,514,517,518,521],{},[231,515,516],{},"--dry-run"," でプレビューのみ、",[231,519,520],{},"--confirm false"," でその呼び出し限定のプレビューデフォルト動作に戻せる。",[241,523,525],{"id":524},"認証ヘッダ","認証・ヘッダ",[472,527,528,543],{},[475,529,530,531,538,539,542],{},"主認証は ",[236,532,533,534,537],{},"SA トークン、",[231,535,536],{},"Authorization: Bearer"," のみ","。CLI は ",[231,540,541],{},"X-Tenant-Id"," を送らず、テナントはトークンから backend 側で解決される。",[475,544,545,546,549,550,553,554,574,577],{},"go-agent が AI Member セッション用に CLI をスポーンするときだけ、",[231,547,548],{},"env → header"," パターンでアンビエントコンテキストを渡す（",[231,551,552],{},"internal/client/client.go","）:",[472,555,556,566],{},[475,557,558,561,562,565],{},[231,559,560],{},"ASTAR_CLI_SESSION_TICKET","（env） → ",[231,563,564],{},"X-Cli-Session-Ticket","（header）",[475,567,568,561,571,565],{},[231,569,570],{},"ASTAR_CURRENT_WORKSPACE_ID",[231,572,573],{},"X-Astar-Ambient-Workspace-Id",[575,576],"br",{},"新しいヘッドレス/アンビエントコンテキストを追加する場合も、この env-in → header-out パターンに合わせること。新しい ad-hoc フラグや設定ファイルを発明しない。",[241,579,581],{"id":580},"claude-code-codex-向け同梱-skill","Claude Code / Codex 向け同梱 skill",[228,583,584,587,588,296,591,296,594,597,598,601,602,604,605,607],{},[231,585,586],{},"cli/skills/astar/"," に ",[231,589,590],{},"SKILL.md.claude",[231,592,593],{},"SKILL.md.codex",[231,595,596],{},"CLAUDE.md.fragment"," があり、",[231,599,600],{},"cli/scripts/install-cli.sh"," が ",[231,603,233],{}," 本体と一緒にダウンロードして、ユーザーのローカル Claude Code / Codex の skill ディレクトリに配置します。これにより、事務員が「案件」「証拠説明書」などの話題を出したときにローカルの AI エージェントが ",[231,606,233],{}," コマンドの有無・接続状態を確認し、使い方を案内できるようになります。",[241,609,611,612,615,616,619],{"id":610},"backend-との関係-coremcp-であって-corecliexec-ではない","backend との関係 — ",[231,613,614],{},"core/mcp"," であって ",[231,617,618],{},"core/cliexec"," ではない",[228,621,622,624,625,629,630,429,633,635,636,638],{},[231,623,233],{}," CLI の実体は ",[236,626,627],{},[231,628,614],{}," モジュールです。",[231,631,632],{},"AstarCliController",[231,634,428],{},"）が ",[231,637,440],{}," を呼び出し、AI エージェントが使うのと同じツール群を CLI からも実行できるようにしています。",[228,640,641,642,650,651,653,654,657,658,296,661,664,665,668,669,433,672,675],{},"紛らわしいですが、",[236,643,644,646,647,649],{},[231,645,618],{}," は ",[231,648,233],{}," CLI とは別物","です。名前が似ていて実際に混同しやすいので明記します。",[231,652,618],{}," が扱うのは「",[236,655,656],{},"ローカル CLI プロバイダ（Claude Code / Codex）セッション","」——顧客の go-agent が AI Member のためにスポーンする ",[231,659,660],{},"claude",[231,662,663],{},"codex"," サブプロセスと、そのプロセスからの承認要求・",[231,666,667],{},"ask_user"," 呼び出しを backend にブリッジする仕組みです（",[231,670,671],{},"CliBridgeRequestDispatcher",[231,673,674],{},"CliSessionRegistry","）。フローはこうです。",[245,677,680],{"className":678,"code":679,"language":250},[248],"CLI subprocess (claude / codex)\n  │ MCP tool 呼び出し (astar__request_approval / astar__ask_user)\n  ▼\nGo-Agent stdio MCP bridge\n  │ WebSocket 経由で CliSessionMcpRequestMessage を転送\n  ▼\nAgentWebSocketHandler → core/cliexec (CliSessionRegistry / CliBridgeRequestDispatcher)\n",[231,681,679],{"__ignoreMap":253},[228,683,684,686,687,689,690,693,694,696],{},[231,685,233],{}," バイナリのユーザーが打つコマンドはこの経路を一切通りません。",[231,688,618],{}," の ",[231,691,692],{},"CliSession"," は「AI Member としてローカルで動く Claude Code/Codex の 1 会話」を指し、",[231,695,233],{}," CLI の「ターミナルから backend の tool router を叩く 1 リクエスト」とは無関係です。",[241,698,699],{"id":699},"ビルド",[245,701,705],{"className":702,"code":703,"language":704,"meta":253,"style":253},"language-bash shiki shiki-themes github-light github-dark","cd cli && go test ./...\n","bash",[231,706,707],{"__ignoreMap":253},[708,709,712,716,720,724,728,731],"span",{"class":710,"line":711},"line",1,[708,713,715],{"class":714},"sj4cs","cd",[708,717,719],{"class":718},"sZZnC"," cli",[708,721,723],{"class":722},"sVt8B"," && ",[708,725,727],{"class":726},"sScJk","go",[708,729,730],{"class":718}," test",[708,732,733],{"class":718}," ./...\n",[472,735,736,757],{},[475,737,738,601,741,744,745,748,749,752,753,756],{},[231,739,740],{},"cli-ci.yml",[231,742,743],{},"go test ./..."," に加えて、Auth0 の値を ldflags で焼き込んだリリースビルドを実行する（",[231,746,747],{},"-X astar-cli/internal/auth.Auth0Domain/ClientID/Audience","、値は ",[231,750,751],{},"cli/Makefile"," 経由で ",[231,754,755],{},"infrastructure/deploy.env"," から）。",[475,758,759],{},"新しいビルドパス（2 本目のバイナリターゲットなど）を追加する場合も同じ ldflags セットを注入すること。省略すると Auth0 設定なしでビルドされてしまう。",[241,761,762],{"id":762},"参照ソース",[472,764,765,770,782,787],{},[475,766,767],{},[231,768,769],{},"cli/CLAUDE.md",[475,771,772,775,776,296,778,781],{},[231,773,774],{},"cli/"," 実コード（",[231,777,262],{},[231,779,780],{},"internal/*","）",[475,783,784],{},[231,785,786],{},"backend/.../core/mcp/api/controller/AstarCliController.kt",[475,788,789,792],{},[231,790,791],{},"backend/.../core/cliexec/","（domain/model/CliSession.kt, domain/service/CliBridgeRequestDispatcher.kt, api/controller/CliSessionController.kt）",[794,795,796],"style",{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":253,"searchDepth":798,"depth":798,"links":799},2,[800,801,805,806,807,809,810],{"id":243,"depth":798,"text":243},{"id":385,"depth":798,"text":385,"children":802},[803],{"id":469,"depth":804,"text":470},3,{"id":524,"depth":798,"text":525},{"id":580,"depth":798,"text":581},{"id":610,"depth":798,"text":808},"backend との関係 — core/mcp であって core/cliexec ではない",{"id":699,"depth":798,"text":699},{"id":762,"depth":798,"text":762},"astar コマンドでできること、cli/internal 配下の実パッケージ、backend の core/mcp との関係、混同しやすい core/cliexec との違い。","md",{},{"title":124},{"title":219,"description":811},"TNMPTPIXcTioGfmSKoG6Cd4KI5Rx_AojS6eQZLkJwtc",[818,820,821,823,824,825,826,827,828,829,830,831,833,834,835,836,837,839,840,841,842,843,845,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,866,867,868,869],{"path":13,"title":819},"Astar とは何か（5分で）",{"path":17,"title":16},{"path":6,"title":822},"ようこそ",{"path":29,"title":28},{"path":33,"title":32},{"path":37,"title":36},{"path":21,"title":25},{"path":49,"title":48},{"path":53,"title":52},{"path":57,"title":56},{"path":61,"title":60},{"path":41,"title":832},"システムアーキテクチャ",{"path":73,"title":72},{"path":77,"title":76},{"path":81,"title":80},{"path":85,"title":84},{"path":65,"title":838},"バックエンドガイド",{"path":97,"title":96},{"path":101,"title":100},{"path":105,"title":104},{"path":109,"title":108},{"path":89,"title":844},"フロントエンドガイド",{"path":121,"title":846},"Go agent — NAS 同期エージェント",{"path":125,"title":219},{"path":113,"title":117},{"path":137,"title":136},{"path":141,"title":140},{"path":145,"title":144},{"path":149,"title":148},{"path":153,"title":152},{"path":157,"title":156},{"path":161,"title":160},{"path":165,"title":164},{"path":169,"title":168},{"path":173,"title":172},{"path":177,"title":176},{"path":181,"title":180},{"path":185,"title":184},{"path":189,"title":188},{"path":193,"title":192},{"path":129,"title":865},"モジュール索引",{"path":205,"title":204},{"path":209,"title":208},{"path":197,"title":201},{"path":213,"title":870},"docs/ 地図",1785452455206]