#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)" REPO_PYTHON="$REPO_ROOT/.venv/bin/python" CODEX_HOME="${CODEX_HOME:-$HOME/.codex}" BIN_DIR="$CODEX_HOME/bin" if [[ ! -x "$REPO_PYTHON" ]]; then echo "Missing OpenSpace Python runtime: $REPO_PYTHON" >&2 exit 1 fi mkdir -p "$BIN_DIR" cat > "$BIN_DIR/openspace-global-mcp" <&2 exit 1 fi workspace="\${OPENSPACE_WORKSPACE:-\$PWD}" workspace_explicit=0 if [[ -n "\${OPENSPACE_WORKSPACE:-}" ]]; then workspace_explicit=1 fi if git_root="\$(git -C "\$workspace" rev-parse --show-toplevel 2>/dev/null)"; then workspace="\$git_root" fi if [[ "\$workspace_explicit" == "0" && ( -z "\$workspace" || "\$workspace" == "/" || "\$workspace" == "." ) ]]; then project_skill_dir="\${HOME}/.codex/projects/default/skills" mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills" unset OPENSPACE_WORKSPACE export OPENSPACE_HOST_SKILL_DIRS="\${HOME}/.codex/projects/default/skills,\${HOME}/.codex/skills" export OPENSPACE_MCP_PROXY_MODE="direct" export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}" mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR" echo "Warning: Codex Desktop did not provide a usable workspace. Shared OpenSpace daemons were disabled for safety; workspace-aware tools must rely on explicit workspace_dir." >&2 exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind main --transport stdio fi project_name="\$(basename "\$workspace")" if [[ -z "\$project_name" || "\$project_name" == "/" || "\$project_name" == "." ]]; then project_name="default" fi project_skill_dir="\${HOME}/.codex/projects/\${project_name}/skills" mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills" export OPENSPACE_WORKSPACE="\$workspace" export OPENSPACE_HOST_SKILL_DIRS="\${OPENSPACE_HOST_SKILL_DIRS:-\${project_skill_dir},\${HOME}/.codex/skills}" export OPENSPACE_MCP_PROXY_MODE="\${OPENSPACE_MCP_PROXY_MODE:-daemon}" export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}" mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR" exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind main --transport stdio EOF cat > "$BIN_DIR/openspace-evolution-global-mcp" <&2 exit 1 fi workspace="\${OPENSPACE_WORKSPACE:-\$PWD}" workspace_explicit=0 if [[ -n "\${OPENSPACE_WORKSPACE:-}" ]]; then workspace_explicit=1 fi if git_root="\$(git -C "\$workspace" rev-parse --show-toplevel 2>/dev/null)"; then workspace="\$git_root" fi if [[ "\$workspace_explicit" == "0" && ( -z "\$workspace" || "\$workspace" == "/" || "\$workspace" == "." ) ]]; then project_skill_dir="\${HOME}/.codex/projects/default/skills" mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills" unset OPENSPACE_WORKSPACE export OPENSPACE_HOST_SKILL_DIRS="\${HOME}/.codex/projects/default/skills,\${HOME}/.codex/skills" export OPENSPACE_MCP_PROXY_MODE="direct" export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}" mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR" echo "Warning: Codex Desktop did not provide a usable workspace. Shared OpenSpace daemons were disabled for safety; workspace-aware tools must rely on explicit workspace_dir." >&2 exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind evolution --transport stdio fi export OPENSPACE_WORKSPACE="\$workspace" project_name="\$(basename "\$OPENSPACE_WORKSPACE")" if [[ -z "\$project_name" || "\$project_name" == "/" || "\$project_name" == "." ]]; then project_name="default" fi project_skill_dir="\${HOME}/.codex/projects/\${project_name}/skills" mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills" export OPENSPACE_HOST_SKILL_DIRS="\${OPENSPACE_HOST_SKILL_DIRS:-\${project_skill_dir},\${HOME}/.codex/skills}" export OPENSPACE_MCP_PROXY_MODE="\${OPENSPACE_MCP_PROXY_MODE:-daemon}" export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}" mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR" exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind evolution --transport stdio EOF chmod +x "$BIN_DIR/openspace-global-mcp" "$BIN_DIR/openspace-evolution-global-mcp" cat <