{
  "schema_version": "setup-registry.v9",
  "summary_columns": [
    "tool",
    "type",
    "required",
    "dependency",
    "host_config",
    "project_bootstrap",
    "result",
    "next_action"
  ],
  "defaults": {
    "tool": {},
    "helper": {},
    "provider": {}
  },
  "install_mirrors": {
    "npm": {
      "endpoint": "https://registry.npmmirror.com",
      "environment": {
        "NPM_CONFIG_REGISTRY": "https://registry.npmmirror.com",
        "npm_config_registry": "https://registry.npmmirror.com"
      }
    }
  },
  "external_dependencies": [
    {
      "id": "codegraph",
      "ecosystem": "npm",
      "package": "@colbymchenry/codegraph",
      "version": "1.5.0",
      "command": "codegraph"
    },
    {
      "id": "graphify",
      "ecosystem": "pypi",
      "package": "graphifyy",
      "version": "0.9.29",
      "command": "graphify",
      "python": {
        "requires": ">=3.10",
        "allow_managed_download": false
      },
      "installers": {
        "preference": [
          "uv",
          "pipx"
        ],
        "plain_pip_allowed": false
      },
      "distribution": {
        "wheel_url": "https://files.pythonhosted.org/packages/f1/b1/0cbe4738ca9784850d40aae0d71c34547230e0445e52067f98b8d0b6c070/graphifyy-0.9.29-py3-none-any.whl",
        "sha256": "143f4002f40d5c302ae43bd58487ad604191f2d0ac8216429894c6a913ecf27b",
        "index_url": "https://pypi.org/simple"
      },
      "hook_normalization_contract": "graphify-python-hook-normalization.v1"
    }
  ],
  "hosts": {
    "claude": {
      "id": "claude",
      "defaults": {
        "tool": {
          "host_config": {
            "scope": "managed",
            "targets": {
              "managed": {
                "config_path": {
                  "macos": "/Library/Application Support/ClaudeCode/managed-mcp.json",
                  "linux": "/etc/claude-code/managed-mcp.json",
                  "wsl": "/etc/claude-code/managed-mcp.json",
                  "windows": "C:\\Program Files\\ClaudeCode\\managed-mcp.json"
                },
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.claude.json",
                "config_format": "json",
                "precedence": 10,
                "writable_check": "parent-or-file"
              }
            },
            "fallback_order": [
              "managed",
              "user"
            ],
            "uninstall_targets": [
              "managed",
              "user"
            ]
          }
        },
        "helper": {},
        "provider": {}
      }
    },
    "codex": {
      "id": "codex",
      "defaults": {
        "tool": {
          "host_config": {
            "scope": "user",
            "targets": {
              "user": {
                "config_path": "$HOME/.codex/config.toml",
                "config_format": "toml",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "system": {
                "config_path": "/etc/codex/config.toml",
                "config_format": "toml",
                "precedence": 100,
                "writable_check": "file-only"
              }
            },
            "fallback_order": [
              "user"
            ],
            "uninstall_targets": [
              "user",
              "system"
            ]
          }
        },
        "helper": {},
        "provider": {}
      }
    },
    "cursor": {
      "id": "cursor",
      "defaults": {
        "tool": {
          "host_config": {
            "scope": "project",
            "targets": {
              "project": {
                "config_path": ".cursor/mcp.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.cursor/mcp.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true
              }
            },
            "fallback_order": [
              "project"
            ],
            "uninstall_targets": [
              "project",
              "user"
            ]
          }
        },
        "helper": {},
        "provider": {}
      }
    },
    "kiro": {
      "id": "kiro",
      "defaults": {
        "tool": {
          "host_config": {
            "scope": "workspace",
            "targets": {
              "workspace": {
                "config_path": ".kiro/settings/mcp.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.kiro/settings/mcp.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true
              }
            },
            "fallback_order": [
              "workspace"
            ],
            "uninstall_targets": [
              "workspace",
              "user"
            ]
          }
        },
        "helper": {},
        "provider": {}
      }
    },
    "opencode": {
      "id": "opencode",
      "defaults": {
        "tool": {
          "host_config": {
            "scope": "project",
            "json_container_path": [
              "mcp"
            ],
            "server_representation": "opencode-local",
            "permission_policy": {
              "kind": "opencode-governed-assets-v1"
            },
            "targets": {
              "project": {
                "config_path": "opencode.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "precedence_guards": [
                  {
                    "config_path": "opencode.jsonc",
                    "config_format": "jsonc",
                    "precedence": 110,
                    "reason_code": "host-config-jsonc-precedence-blocked"
                  }
                ]
              },
              "user": {
                "config_path": "${XDG_CONFIG_HOME}/opencode/opencode.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true,
                "precedence_guards": [
                  {
                    "config_path": "${XDG_CONFIG_HOME}/opencode/opencode.jsonc",
                    "config_format": "jsonc",
                    "precedence": 60,
                    "reason_code": "host-config-jsonc-precedence-blocked"
                  }
                ]
              }
            },
            "fallback_order": [
              "project"
            ],
            "uninstall_targets": [
              "project",
              "user"
            ]
          }
        },
        "helper": {},
        "provider": {}
      }
    },
    "qoder": {
      "id": "qoder",
      "defaults": {
        "tool": {
          "host_config": {
            "scope": "local",
            "targets": {
              "local": {
                "config_path": ".qoder/settings.local.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.qoder/settings.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true
              }
            },
            "fallback_order": [
              "local"
            ],
            "uninstall_targets": [
              "local",
              "user"
            ]
          }
        },
        "helper": {},
        "provider": {}
      }
    }
  },
  "tools": [
    {
      "id": "sequential-thinking",
      "name": "Sequential Thinking",
      "summary_label": "Sequential Thinking",
      "required": true,
      "category": "mcp",
      "host_config_required": true,
      "description": "动态反思性问题解决，spec-first 全工作流通用依赖",
      "dependencies": [
        "node",
        "npx"
      ],
      "detection": {
        "kind": "host_config_exact",
        "key": "sequential-thinking"
      },
      "installation": {
        "kind": "warmup"
      },
      "project_bootstrap": {
        "kind": "none",
        "required": false
      },
      "host_overrides": {
        "claude": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest"
            ]
          }
        },
        "codex": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest"
            ]
          }
        },
        "kiro": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest"
            ]
          }
        },
        "opencode": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest"
            ]
          }
        },
        "qoder": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest"
            ]
          }
        },
        "cursor": {
          "host_config": {
            "type": "stdio",
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest"
            ]
          }
        }
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest",
              "--help"
            ]
          }
        },
        "linux": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest",
              "--help"
            ]
          }
        },
        "wsl": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest",
              "--help"
            ]
          }
        },
        "windows": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking@latest",
              "--help"
            ]
          }
        }
      }
    },
    {
      "id": "context7",
      "name": "Context7",
      "summary_label": "Context7",
      "required": true,
      "category": "mcp",
      "host_config_required": true,
      "description": "最新框架文档查询，spec-first 全工作流通用依赖",
      "dependencies": [
        "node",
        "npx"
      ],
      "detection": {
        "kind": "host_config_exact",
        "key": "context7"
      },
      "installation": {
        "kind": "warmup"
      },
      "project_bootstrap": {
        "kind": "none",
        "required": false
      },
      "host_overrides": {
        "claude": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest"
            ]
          }
        },
        "codex": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest"
            ]
          }
        },
        "kiro": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest"
            ]
          }
        },
        "opencode": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest"
            ]
          }
        },
        "qoder": {
          "host_config": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest"
            ]
          }
        },
        "cursor": {
          "host_config": {
            "type": "stdio",
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest"
            ]
          }
        }
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest",
              "--help"
            ]
          }
        },
        "linux": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest",
              "--help"
            ]
          }
        },
        "wsl": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest",
              "--help"
            ]
          }
        },
        "windows": {
          "installation": {
            "command": "npx",
            "args": [
              "-y",
              "@upstash/context7-mcp@latest",
              "--help"
            ]
          }
        }
      }
    },
    {
      "id": "codegraph",
      "name": "CodeGraph",
      "summary_label": "CodeGraph",
      "required": false,
      "setup_required": true,
      "category": "mcp",
      "host_config_required": true,
      "description": "标准 Runtime Setup 必备的 code-graph 能力工具；下游消费仍只把其输出当 advisory candidate。",
      "dependency_ref": "codegraph",
      "dependencies": [
        "node",
        "npm"
      ],
      "detection": {
        "kind": "host_config_exact",
        "key": "codegraph"
      },
      "provider_readiness": {
        "provider": "codegraph",
        "kind": "code-structure",
        "profile": "minimal",
        "capabilities": [
          "code-graph",
          "impact-candidates",
          "affected-tests-candidates"
        ],
        "native_interfaces": [
          "mcp",
          "cli"
        ],
        "first_generation": {
          "owner": "runtime-setup",
          "status": "not-run",
          "scope": "project",
          "requires_explicit_gate": false,
          "requirement_workspace_path": null,
          "artifact_root": ".codegraph"
        },
        "steady_state": {
          "refresh_owner": "provider-native",
          "refresh_mode": "watcher",
          "hook_default": false,
          "usage_owner": "downstream-skill"
        },
        "usage_note": "安装 package `{{package}}@{{version}}`，运行 `codegraph` CLI，并使用 CodeGraph MCP 工具获取 impact/call graph candidate。已确认的 setup 会在 status 报告 pending change 或建议 `codegraph index -f` 时先运行 `codegraph sync`；只有 full-rebuild advisory 仍存在时，才执行一次 bounded `codegraph index -f`。`codegraph serve --mcp` 负责 provider-native Auto-Sync freshness；结论需由 source/test/log/contract/user evidence 确认。",
        "fallback_methods": [
          "rg",
          "ast-grep",
          "direct-source-read"
        ],
        "fresh_self_report_maps_to": "unknown",
        "stale_self_report_maps_to": "stale",
        "lifecycle_display_only": [
          "installed",
          "configured",
          "indexed",
          "server_reachable",
          "query_verified"
        ]
      },
      "safety": {
        "risk_flags": [
          "global-npm-install",
          "single-maintainer-bus-factor"
        ],
        "version_policy": {
          "pin_status": "pinned"
        },
        "source": "npm",
        "source_repo": "https://www.npmjs.com/package/@colbymchenry/codegraph",
        "review_required": true
      },
      "installation": {
        "kind": "global-npm",
        "verify_command": {
          "command": "codegraph",
          "args": [
            "--version"
          ]
        }
      },
      "project_bootstrap": {
        "kind": "command",
        "required": true,
        "project_file": ".codegraph/codegraph.db",
        "status_probe": {
          "command": "codegraph",
          "args": [
            "status"
          ]
        }
      },
      "host_overrides": {
        "claude": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ]
          }
        },
        "codex": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ]
          }
        },
        "kiro": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ]
          }
        },
        "opencode": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ]
          }
        },
        "qoder": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ]
          }
        },
        "cursor": {
          "host_config": {
            "type": "stdio",
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ]
          }
        }
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        },
        "linux": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        },
        "wsl": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        },
        "windows": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        }
      }
    }
  ],
  "helpers": [
    {
      "id": "agent-browser",
      "kind": "browser-helper",
      "profiles": [
        "recommended",
        "platform"
      ],
      "surface_overlays": [
        "surface-ui"
      ],
      "required": true,
      "baseline_blocking": false,
      "required_for": [
        "surface-ui"
      ],
      "recommended_for": [
        "browser automation",
        "frontend polish",
        "e2e validation"
      ],
      "demand_signals": [
        "surface-ui"
      ],
      "detection": {
        "kind": "agent-browser",
        "command": "agent-browser",
        "skill_name": "agent-browser"
      },
      "usage_note": "Runtime Setup 分开报告 agent-browser dependency 安装状态与 browser execution readiness。CLI/runtime/global skill 齐全只证明 dependency ready；只有 spec-test-browser canonical probe 返回 Spec-First controlled exact-origin conformance passed 才能执行 browser actions。当前 provider 缺少 request-time exact-origin 时保持 report-only degraded，不把重复安装同版本当作 capability 修复。",
      "safety": {
        "risk_flags": [
          "global-npm-install",
          "browser-runtime-install",
          "unpinned-latest"
        ],
        "source": "npm",
        "source_repo": "https://github.com/vercel-labs/agent-browser",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": true,
        "install_effect": "global CLI, browser runtime, global skill"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "manual-command",
        "next_action": "运行 `spec-runtime-setup` 查看当前 agent-browser 安装命令；需要 browser automation 时再手动安装"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "CI=true npm install -g agent-browser@latest --no-audit --no-fund --loglevel=error && agent-browser install && npx -y skills@latest add https://github.com/vercel-labs/agent-browser --skill agent-browser -g -y"
          },
          "platform_required_tools": [
            "node",
            "npm",
            "npx"
          ]
        },
        "linux": {
          "installation": {
            "command": "CI=true npm install -g agent-browser@latest --no-audit --no-fund --loglevel=error && agent-browser install --with-deps && npx -y skills@latest add https://github.com/vercel-labs/agent-browser --skill agent-browser -g -y"
          },
          "platform_required_tools": [
            "node",
            "npm",
            "npx"
          ]
        },
        "wsl": {
          "installation": {
            "command": "CI=true npm install -g agent-browser@latest --no-audit --no-fund --loglevel=error && agent-browser install --with-deps && npx -y skills@latest add https://github.com/vercel-labs/agent-browser --skill agent-browser -g -y"
          },
          "platform_required_tools": [
            "node",
            "npm",
            "npx"
          ]
        },
        "windows": {
          "installation": {
            "command": "$env:CI='true'; npm install -g agent-browser@latest --no-audit --no-fund --loglevel=error; if ($LASTEXITCODE -eq 0) { agent-browser install }; if ($LASTEXITCODE -eq 0) { npx -y skills@latest add https://github.com/vercel-labs/agent-browser --skill agent-browser -g -y }"
          },
          "platform_required_tools": [
            "node",
            "npm",
            "npx"
          ]
        }
      }
    },
    {
      "id": "gh",
      "kind": "cli",
      "profiles": [
        "minimal",
        "recommended",
        "platform"
      ],
      "surface_overlays": [],
      "required": true,
      "baseline_blocking": true,
      "required_for": [
        "github issue and pull request workflows"
      ],
      "recommended_for": [
        "spec-code-review",
        "spec-work"
      ],
      "demand_signals": [],
      "detection": {
        "kind": "command",
        "command": "gh"
      },
      "safety": {
        "risk_flags": [
          "package-manager-install"
        ],
        "source": "package-manager",
        "source_repo": "https://cli.github.com",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": false,
        "install_effect": "system CLI"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "package-manager",
        "next_action": "安装 gh"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "brew install gh",
            "operations": [
              {
                "command": "brew",
                "args": [
                  "install",
                  "gh"
                ]
              }
            ]
          },
          "platform_required_tools": []
        },
        "linux": {
          "installation": {
            "command": "install gh from https://cli.github.com",
            "operations": []
          },
          "platform_required_tools": []
        },
        "wsl": {
          "installation": {
            "command": "install gh from https://cli.github.com",
            "operations": []
          },
          "platform_required_tools": []
        },
        "windows": {
          "installation": {
            "command": "winget install --id GitHub.cli -e",
            "operations": [
              {
                "command": "winget",
                "args": [
                  "install",
                  "--id",
                  "GitHub.cli",
                  "-e"
                ]
              }
            ]
          },
          "platform_required_tools": []
        }
      }
    },
    {
      "id": "vhs",
      "kind": "cli",
      "profiles": [
        "recommended",
        "platform"
      ],
      "surface_overlays": [],
      "required": true,
      "baseline_blocking": false,
      "required_for": [],
      "recommended_for": [
        "terminal demos"
      ],
      "demand_signals": [],
      "detection": {
        "kind": "command",
        "command": "vhs"
      },
      "safety": {
        "risk_flags": [
          "optional-helper",
          "unpinned-latest"
        ],
        "source": "package-manager",
        "source_repo": "https://github.com/charmbracelet/vhs",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": true,
        "install_effect": "system CLI"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "package-manager",
        "next_action": "安装 vhs"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "brew install vhs"
          },
          "platform_required_tools": []
        },
        "linux": {
          "installation": {
            "command": "go install github.com/charmbracelet/vhs@latest"
          },
          "platform_required_tools": []
        },
        "wsl": {
          "installation": {
            "command": "go install github.com/charmbracelet/vhs@latest"
          },
          "platform_required_tools": []
        },
        "windows": {
          "installation": {
            "command": "go install github.com/charmbracelet/vhs@latest"
          },
          "platform_required_tools": []
        }
      }
    },
    {
      "id": "silicon",
      "kind": "cli",
      "profiles": [
        "recommended",
        "platform"
      ],
      "surface_overlays": [],
      "required": true,
      "baseline_blocking": false,
      "required_for": [],
      "recommended_for": [
        "code screenshots"
      ],
      "demand_signals": [],
      "detection": {
        "kind": "command",
        "command": "silicon"
      },
      "safety": {
        "risk_flags": [
          "optional-helper",
          "global-cargo-install"
        ],
        "source": "package-manager",
        "source_repo": "https://github.com/Aloxaf/silicon",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": true,
        "install_effect": "system CLI"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "package-manager",
        "next_action": "安装 silicon"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "brew install silicon"
          },
          "platform_required_tools": []
        },
        "linux": {
          "installation": {
            "command": "cargo install silicon --force"
          },
          "platform_required_tools": []
        },
        "wsl": {
          "installation": {
            "command": "cargo install silicon --force"
          },
          "platform_required_tools": []
        },
        "windows": {
          "installation": {
            "command": "cargo install silicon --force"
          },
          "platform_required_tools": []
        }
      }
    },
    {
      "id": "ffmpeg",
      "kind": "cli",
      "profiles": [
        "recommended",
        "platform"
      ],
      "surface_overlays": [],
      "required": true,
      "baseline_blocking": true,
      "required_for": [],
      "recommended_for": [
        "video composition"
      ],
      "demand_signals": [],
      "detection": {
        "kind": "command",
        "command": "ffmpeg",
        "args": [
          "-version"
        ]
      },
      "safety": {
        "risk_flags": [
          "required-helper",
          "package-manager-install"
        ],
        "source": "package-manager",
        "source_repo": "https://ffmpeg.org/download.html",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": false,
        "install_effect": "system CLI"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "package-manager",
        "next_action": "安装 ffmpeg"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "strategy": "package-manager",
            "next_action": "安装 ffmpeg",
            "command": "brew install ffmpeg",
            "operations": [
              {
                "command": "brew",
                "args": [
                  "install",
                  "ffmpeg"
                ]
              }
            ]
          },
          "platform_required_tools": []
        },
        "linux": {
          "installation": {
            "command": "install ffmpeg with your package manager"
          },
          "platform_required_tools": []
        },
        "wsl": {
          "installation": {
            "command": "install ffmpeg with your package manager"
          },
          "platform_required_tools": []
        },
        "windows": {
          "installation": {
            "strategy": "package-manager",
            "next_action": "安装 ffmpeg",
            "command": "winget install --id Gyan.FFmpeg -e",
            "operations": [
              {
                "command": "winget",
                "args": [
                  "install",
                  "--id",
                  "Gyan.FFmpeg",
                  "-e"
                ]
              }
            ]
          },
          "platform_required_tools": []
        }
      }
    },
    {
      "id": "ast-grep",
      "kind": "cli",
      "profiles": [
        "minimal",
        "recommended",
        "platform"
      ],
      "surface_overlays": [],
      "required": true,
      "baseline_blocking": false,
      "required_for": [
        "structural code search"
      ],
      "recommended_for": [
        "spec-code-review",
        "spec-debug",
        "spec-work"
      ],
      "demand_signals": [],
      "detection": {
        "kind": "command",
        "command": "ast-grep",
        "fallback_command": "rg"
      },
      "safety": {
        "risk_flags": [
          "optional-helper",
          "global-install"
        ],
        "source": "package-manager",
        "source_repo": "https://ast-grep.github.io",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": true,
        "install_effect": "system CLI"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "package-manager",
        "next_action": "安装 ast-grep"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "brew install ast-grep"
          },
          "platform_required_tools": []
        },
        "linux": {
          "installation": {
            "command": "cargo install ast-grep --locked --force"
          },
          "platform_required_tools": []
        },
        "wsl": {
          "installation": {
            "command": "cargo install ast-grep --locked --force"
          },
          "platform_required_tools": []
        },
        "windows": {
          "installation": {
            "command": "npm install -g @ast-grep/cli@latest"
          },
          "platform_required_tools": []
        }
      }
    },
    {
      "id": "ast-grep-skill",
      "kind": "global-skill",
      "profiles": [
        "minimal",
        "recommended",
        "platform"
      ],
      "surface_overlays": [],
      "required": true,
      "baseline_blocking": true,
      "required_for": [
        "ast-grep usage guidance"
      ],
      "recommended_for": [
        "structural search guidance"
      ],
      "demand_signals": [],
      "detection": {
        "kind": "global-skill",
        "skill_name": "ast-grep"
      },
      "safety": {
        "risk_flags": [
          "global-skill-install",
          "unpinned-npx"
        ],
        "source": "npx",
        "source_repo": "https://ast-grep.github.io",
        "version_policy": {
          "pin_status": "latest"
        },
        "review_required": true,
        "install_effect": "global skill"
      },
      "runner_kind": "cross-platform",
      "installation": {
        "strategy": "skills-cli",
        "next_action": "安装全局 ast-grep skill"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "npx -y skills@latest add ast-grep/agent-skill -g -y",
            "operations": [
              {
                "command": "npx",
                "args": [
                  "-y",
                  "skills@latest",
                  "add",
                  "ast-grep/agent-skill",
                  "-g",
                  "-y"
                ]
              }
            ]
          },
          "platform_required_tools": [
            "node",
            "npx"
          ]
        },
        "linux": {
          "installation": {
            "command": "npx -y skills@latest add ast-grep/agent-skill -g -y",
            "operations": [
              {
                "command": "npx",
                "args": [
                  "-y",
                  "skills@latest",
                  "add",
                  "ast-grep/agent-skill",
                  "-g",
                  "-y"
                ]
              }
            ]
          },
          "platform_required_tools": [
            "node",
            "npx"
          ]
        },
        "wsl": {
          "installation": {
            "command": "npx -y skills@latest add ast-grep/agent-skill -g -y",
            "operations": [
              {
                "command": "npx",
                "args": [
                  "-y",
                  "skills@latest",
                  "add",
                  "ast-grep/agent-skill",
                  "-g",
                  "-y"
                ]
              }
            ]
          },
          "platform_required_tools": [
            "node",
            "npx"
          ]
        },
        "windows": {
          "installation": {
            "command": "npx -y skills@latest add ast-grep/agent-skill -g -y",
            "operations": [
              {
                "command": "npx",
                "args": [
                  "-y",
                  "skills@latest",
                  "add",
                  "ast-grep/agent-skill",
                  "-g",
                  "-y"
                ]
              }
            ]
          },
          "platform_required_tools": [
            "node",
            "npx"
          ]
        }
      }
    }
  ],
  "providers": [
    {
      "id": "codegraph",
      "name": "CodeGraph",
      "kind": "code-structure",
      "profile": "minimal",
      "setup_required": true,
      "capability_class": "code-structure",
      "native_interfaces": [
        "mcp",
        "cli"
      ],
      "first_generation": {
        "owner": "runtime-setup",
        "status": "not-run",
        "scope": "project",
        "requires_explicit_gate": false,
        "requirement_workspace_path": null,
        "artifact_root": ".codegraph"
      },
      "steady_state": {
        "refresh_owner": "provider-native",
        "refresh_mode": "watcher",
        "hook_default": false,
        "usage_owner": "downstream-skill"
      },
      "usage_note": "安装 package `{{package}}@{{version}}`，运行 `codegraph` CLI，并使用 CodeGraph MCP 工具获取 impact/call graph candidate。已确认的 setup 会在 status 报告 pending change 或建议 `codegraph index -f` 时先运行 `codegraph sync`；只有 full-rebuild advisory 仍存在时，才执行一次 bounded `codegraph index -f`。`codegraph serve --mcp` 负责 provider-native Auto-Sync freshness；结论需由 source/test/log/contract/user evidence 确认。",
      "dependency_ref": "codegraph",
      "detection": {
        "kind": "host_config_exact",
        "key": "codegraph"
      },
      "installation": {
        "kind": "global-npm",
        "verify_command": {
          "command": "codegraph",
          "args": [
            "--version"
          ]
        }
      },
      "project_bootstrap": {
        "kind": "command",
        "required": true,
        "project_file": ".codegraph/codegraph.db",
        "status_probe": {
          "command": "codegraph",
          "args": [
            "status"
          ]
        }
      },
      "safety": {
        "risk_flags": [
          "global-npm-install",
          "single-maintainer-bus-factor"
        ],
        "version_policy": {
          "pin_status": "pinned"
        },
        "source": "npm",
        "source_repo": "https://www.npmjs.com/package/@colbymchenry/codegraph",
        "review_required": true
      },
      "readiness": {
        "producer": "spec-runtime-setup",
        "fresh_self_report_maps_to": "unknown",
        "stale_self_report_maps_to": "stale",
        "lifecycle_display_only": [
          "installed",
          "configured",
          "indexed",
          "server_reachable",
          "query_verified"
        ]
      },
      "fallback": {
        "available": true,
        "methods": [
          "rg",
          "ast-grep",
          "direct-source-read"
        ],
        "reason_code": "codegraph-provider-unavailable"
      },
      "host_overrides": {
        "claude": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ],
            "scope": "managed",
            "targets": {
              "managed": {
                "config_path": {
                  "macos": "/Library/Application Support/ClaudeCode/managed-mcp.json",
                  "linux": "/etc/claude-code/managed-mcp.json",
                  "wsl": "/etc/claude-code/managed-mcp.json",
                  "windows": "C:\\Program Files\\ClaudeCode\\managed-mcp.json"
                },
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.claude.json",
                "config_format": "json",
                "precedence": 10,
                "writable_check": "parent-or-file"
              }
            },
            "fallback_order": [
              "managed",
              "user"
            ],
            "uninstall_targets": [
              "managed",
              "user"
            ]
          }
        },
        "codex": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ],
            "scope": "user",
            "targets": {
              "user": {
                "config_path": "$HOME/.codex/config.toml",
                "config_format": "toml",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "system": {
                "config_path": "/etc/codex/config.toml",
                "config_format": "toml",
                "precedence": 100,
                "writable_check": "file-only"
              }
            },
            "fallback_order": [
              "user"
            ],
            "uninstall_targets": [
              "user",
              "system"
            ]
          }
        },
        "kiro": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ],
            "scope": "workspace",
            "targets": {
              "workspace": {
                "config_path": ".kiro/settings/mcp.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.kiro/settings/mcp.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true
              }
            },
            "fallback_order": [
              "workspace"
            ],
            "uninstall_targets": [
              "workspace",
              "user"
            ]
          }
        },
        "opencode": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ],
            "scope": "project",
            "json_container_path": [
              "mcp"
            ],
            "server_representation": "opencode-local",
            "targets": {
              "project": {
                "config_path": "opencode.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "precedence_guards": [
                  {
                    "config_path": "opencode.jsonc",
                    "config_format": "jsonc",
                    "precedence": 110,
                    "reason_code": "host-config-jsonc-precedence-blocked"
                  }
                ]
              },
              "user": {
                "config_path": "${XDG_CONFIG_HOME}/opencode/opencode.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true,
                "precedence_guards": [
                  {
                    "config_path": "${XDG_CONFIG_HOME}/opencode/opencode.jsonc",
                    "config_format": "jsonc",
                    "precedence": 60,
                    "reason_code": "host-config-jsonc-precedence-blocked"
                  }
                ]
              }
            },
            "fallback_order": [
              "project"
            ],
            "uninstall_targets": [
              "project",
              "user"
            ]
          }
        },
        "qoder": {
          "host_config": {
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ],
            "scope": "local",
            "targets": {
              "local": {
                "config_path": ".qoder/settings.local.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.qoder/settings.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true
              }
            },
            "fallback_order": [
              "local"
            ],
            "uninstall_targets": [
              "local",
              "user"
            ]
          }
        },
        "cursor": {
          "host_config": {
            "type": "stdio",
            "command": "codegraph",
            "args": [
              "serve",
              "--mcp"
            ],
            "scope": "project",
            "targets": {
              "project": {
                "config_path": ".cursor/mcp.json",
                "config_format": "json",
                "precedence": 50,
                "writable_check": "parent-or-file"
              },
              "user": {
                "config_path": "$HOME/.cursor/mcp.json",
                "config_format": "json",
                "precedence": 100,
                "writable_check": "parent-or-file",
                "requires_user_scope_opt_in": true
              }
            },
            "fallback_order": [
              "project"
            ],
            "uninstall_targets": [
              "project",
              "user"
            ]
          }
        }
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        },
        "linux": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        },
        "wsl": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        },
        "windows": {
          "installation": {
            "command": "npm",
            "args": [
              "install",
              "-g",
              "{{package}}@{{version}}",
              "--no-audit",
              "--no-fund",
              "--loglevel=error"
            ]
          },
          "project_bootstrap": {
            "command": "codegraph",
            "args": [
              "init"
            ]
          }
        }
      }
    },
    {
      "id": "graphify",
      "name": "Graphify",
      "kind": "project-graph",
      "profile": "minimal",
      "setup_required": true,
      "capability_class": "project-graph",
      "native_interfaces": [
        "cli"
      ],
      "first_generation": {
        "owner": "runtime-setup",
        "status": "not-run",
        "scope": "project",
        "requires_explicit_gate": false,
        "requirement_workspace_path": null,
        "artifact_root": "graphify-out"
      },
      "steady_state": {
        "refresh_owner": "provider-native",
        "refresh_mode": "skill-cli-hook-on-demand",
        "hook_default": true,
        "usage_owner": "downstream-skill"
      },
      "usage_note": "标准 Runtime Setup（或高级子集 `spec-runtime-setup --only graphify`）优先使用已安装 uv、其次 pipx，将 pinned `graphifyy@0.9.29` direct wheel安装到隔离Python tool environment；缺少兼容Python或tool manager时返回action-required，不自动bootstrap、不使用plain pip。首次生成固定运行 Provider 原生 `graphify extract . --code-only`，唯一current artifact位于原生默认目录`graphify-out/`，不注入`GRAPHIFY_OUT`。仅有旧版spec-first适配目录`.graphify/`时，setup将其原子迁移到`graphify-out/`；两个目录同时存在则fail closed。已有`graphify-out/`时普通setup执行裸query；显式`--refresh`使用官方`graphify update <workspace>`原位更新代码索引，复用Provider lock、临时graph、shrink guard和未变节点保留能力，不创建spec-first顶层staging/backup。Claude/Codex/Cursor/Kiro使用Provider-native project integration，Qoder使用spec-first adapter；两个Git hook必须验证marker、interpreter和Provider原生默认输出，不依赖spec-first环境变量。Graphify mutation setup在Python package/artifact/query/host/hook全部verified后默认卸载已确认的全局npm incumbent，并只删除被证明归属该package的旧launcher symlink；诊断、plan、verify-only及未知PATH命令保持只读。Graphify MCP、watch与semantic extraction仍为opt-in。所有Graphify输出仅是provider_untrusted advisory candidate，结论必须回到source/test/log/contract或owner evidence。",
      "detection": {
        "kind": "command",
        "command": "graphify",
        "version_args": [
          "--version"
        ],
        "artifact_paths": [
          "graphify-out/graph.json",
          "graphify-out/GRAPH_REPORT.md",
          ".graphify/graph.json",
          ".graphify/GRAPH_REPORT.md"
        ]
      },
      "safety": {
        "risk_flags": [
          "isolated-python-tool-install",
          "python-interpreter-coupling",
          "same-name-cli-collision",
          "verified-direct-wheel",
          "third-party-executable-host-config",
          "single-maintainer-bus-factor",
          "project-runtime-skill-write",
          "git-hook-write"
        ],
        "source": "pypi",
        "source_repo": "https://pypi.org/project/graphifyy/0.9.29/",
        "version_policy": {
          "pin_status": "pinned"
        },
        "review_required": true,
        "install_effect": "Installs the release-reviewed `graphifyy@0.9.29` wheel with uv or pipx using compatible Python >=3.10, no managed Python download, official PyPI index and verified direct SHA-256. Resolves an absolute launcher and confirms importlib distribution identity plus CLI version. Project setup normalizes only recognized Provider-owned instruction/skill/rule/steering/hook surfaces to the Provider-native `graphify-out/` root and the selected launcher. First generation is local AST `extract --code-only` with no `GRAPHIFY_OUT` override; a legacy `.graphify/` tree is atomically migrated when it is the sole artifact root, while dual roots fail closed. Explicit refresh uses provider-native `graphify update` against the existing graph and does not create spec-first top-level staging or backup directories. Git hook readiness requires both Provider marker blocks, verified interpreter and allowed rebuild command without a spec-first output override. After Python package/artifact/query/host/hook readiness is fully verified, mutation setup removes a confirmed global `@sentropic/graphify` incumbent and only stale launcher symlinks proven to resolve into that package. Setup never installs MCP extras, never bootstraps Python/tool managers, never edits shell profiles, and never promotes Graphify output beyond advisory evidence."
      },
      "readiness": {
        "producer": "spec-runtime-setup",
        "fresh_self_report_maps_to": "unknown",
        "stale_self_report_maps_to": "stale"
      },
      "fallback": {
        "available": true,
        "methods": [
          "docs",
          "rg",
          "direct-source-read"
        ],
        "reason_code": "project-graph-provider-unavailable"
      },
      "installation": {
        "strategy": "python-isolated-tool",
        "dependency_ref": "graphify",
        "next_action": "准备 Python >=3.10 与 uv（优先）或 pipx，然后运行 `spec-runtime-setup --only graphify`。Setup会安装verified `{{package}}@{{version}}` wheel并完成当前host integration、`graphify-out/` code-only生成、裸query与hook验证。"
      },
      "platform_overrides": {
        "macos": {
          "installation": {
            "command_display": "uv tool install（优先）或 pipx install verified {{package}}@{{version}} wheel；禁止managed Python download/plain pip；验证identity/launcher后执行host integration、Provider原生graphify-out extract --code-only、裸query与双hook结构检查；显式 --refresh 使用provider-native graphify update"
          }
        },
        "linux": {
          "installation": {
            "command_display": "uv tool install（优先）或 pipx install verified {{package}}@{{version}} wheel；禁止managed Python download/plain pip；验证identity/launcher后执行host integration、Provider原生graphify-out extract --code-only、裸query与双hook结构检查；显式 --refresh 使用provider-native graphify update"
          }
        },
        "wsl": {
          "installation": {
            "command_display": "uv tool install（优先）或 pipx install verified {{package}}@{{version}} wheel；禁止managed Python download/plain pip；验证identity/launcher后执行host integration、Provider原生graphify-out extract --code-only、裸query与双hook结构检查；显式 --refresh 使用provider-native graphify update"
          }
        },
        "windows": {
          "installation": {
            "command_display": "uv tool install（优先）或 pipx install verified {{package}}@{{version}} wheel；禁止managed Python download/plain pip；验证identity/launcher后执行host integration、Provider原生graphify-out extract --code-only、裸query与双hook结构检查；显式 --refresh 使用provider-native graphify update"
          }
        }
      }
    }
  ],
  "provider_readiness_defaults": {
    "schema_version": "provider-readiness.v2",
    "readiness_status_values": [
      "fresh",
      "stale",
      "degraded",
      "not-run",
      "unknown"
    ],
    "fallback_methods": [
      "rg",
      "direct-source-read"
    ]
  },
  "artifact_contracts": [
    {
      "id": "install-plan",
      "schema_version": "setup-install-plan.v1",
      "path": "stdout",
      "producer": "mode-policy+renderer",
      "consumers": [
        "user",
        "approval-surface"
      ]
    },
    {
      "id": "diagnostic-snapshot",
      "schema_version": "spec-runtime-setup-diagnostic-snapshot.v1",
      "path": "stdout",
      "producer": "diagnostic-path",
      "consumers": [
        "user",
        "ci"
      ]
    },
    {
      "id": "preflight",
      "schema_version": "spec-runtime-setup-preflight.v2",
      "path": "stdout",
      "producer": "diagnostic-path",
      "consumers": [
        "user",
        "ci"
      ]
    },
    {
      "id": "tool-facts",
      "schema_version": "tool-facts.v2",
      "path": ".spec-first/config/tool-facts.json",
      "producer": "facts-reconciliation",
      "consumers": [
        "using-spec-first",
        "spec-plan",
        "spec-work",
        "spec-debug",
        "spec-code-review"
      ]
    },
    {
      "id": "runtime-capabilities",
      "schema_version": "runtime-capabilities.v1",
      "path": ".spec-first/config/runtime-capabilities.json",
      "producer": "facts-reconciliation",
      "consumers": [
        "spec-plan",
        "spec-work",
        "spec-debug",
        "spec-code-review"
      ]
    },
    {
      "id": "workspace-setup-summary",
      "schema_version": "workspace-mcp-setup-summary.v1",
      "path": ".spec-first/workspace/mcp-setup-summary.json",
      "producer": "parent-batch-executor",
      "consumers": [
        "parent-workspace-consumer"
      ]
    },
    {
      "id": "workspace-verify-summary",
      "schema_version": "workspace-mcp-verify-summary.v1",
      "path": ".spec-first/workspace/mcp-verify-summary.json",
      "producer": "verification-path",
      "consumers": [
        "parent-workspace-consumer"
      ]
    },
    {
      "id": "verify-child-result",
      "schema_version": "mcp-verify-child-result.v1",
      "path": "embedded:workspace-mcp-verify-summary.v1.children[]",
      "producer": "verification-path",
      "consumers": [
        "workspace-mcp-verify-summary.v1"
      ]
    },
    {
      "id": "parent-artifact-quarantine",
      "schema_version": "parent-artifact-quarantine.v1",
      "path": ".spec-first/workspace/parent-artifact-quarantine.json",
      "producer": "verification-path",
      "consumers": [
        "parent-workspace-consumer",
        "spec-first-clean"
      ]
    },
    {
      "id": "project-config-bootstrap",
      "schema_version": "project-config-bootstrap.v1",
      "path": "stdout",
      "producer": "project-config",
      "consumers": [
        "project-bootstrap",
        "user"
      ]
    },
    {
      "id": "workspace-project-config-bootstrap-summary",
      "schema_version": "workspace-project-config-bootstrap-summary.v1",
      "path": ".spec-first/workspace/project-config-bootstrap-summary.json",
      "producer": "project-config",
      "consumers": [
        "parent-workspace-consumer",
        "user"
      ]
    },
    {
      "id": "project-local-config-status",
      "schema_version": "project-local-config-status.v1",
      "path": "embedded:project-config-result",
      "producer": "project-config",
      "consumers": [
        "project-bootstrap",
        "user"
      ]
    },
    {
      "id": "provider-readiness",
      "schema_version": "provider-readiness.v2",
      "path": "embedded:tool-facts.v2.provider_readiness[]",
      "producer": "provider-verify+facts",
      "consumers": [
        "setup-consumers"
      ]
    }
  ]
}
