# Odysseus Codex Integration This directory contains the Codex plugin/skill bundle for Odysseus. ## User Flow 1. Open Odysseus Settings > Integrations. 2. Add a Codex Agent. 3. Copy the full setup commands shown after the generated token. 4. Toggle the tools Codex is allowed to use. 5. Configure the terminal Codex session: ```bash export ODYSSEUS_URL=http://your-odysseus-host:7000 export ODYSSEUS_API_TOKEN=ody_generated_token mkdir -p ~/plugins curl -fsSL -H "Authorization: Bearer $ODYSSEUS_API_TOKEN" "$ODYSSEUS_URL/api/codex/plugin.zip" -o /tmp/odysseus-codex-plugin.zip python3 -m zipfile -e /tmp/odysseus-codex-plugin.zip ~/plugins python3 - <<'PY' import json from pathlib import Path p = Path.home() / ".agents" / "plugins" / "marketplace.json" p.parent.mkdir(parents=True, exist_ok=True) if p.exists(): data = json.loads(p.read_text()) else: data = {"name": "personal", "interface": {"displayName": "Personal"}, "plugins": []} data.setdefault("name", "personal") data.setdefault("interface", {}).setdefault("displayName", "Personal") plugins = data.setdefault("plugins", []) entry = { "name": "odysseus", "source": {"source": "local", "path": "./plugins/odysseus"}, "policy": {"installation": "AVAILABLE", "authentication": "ON_INSTALL"}, "category": "Productivity", } data["plugins"] = [item for item in plugins if item.get("name") != "odysseus"] + [entry] p.write_text(json.dumps(data, indent=2) + "\n") PY codex plugin add odysseus@personal ``` 6. Verify: ```bash python3 ~/plugins/odysseus/scripts/odysseus_api.py capabilities ``` Codex must use `/api/codex/*` endpoints. SSH, Docker, direct Python imports, database queries, and MCP internals bypass Odysseus Settings and must not be used for user data access.