🔁

Proxy FastAPI pour cursor-agent

Dec 25, 2025

Summary

  • Proxy FastAPI exposant cursor-agent via une API REST compatible OpenAI/ChatGPT.
  • Permet d'utiliser cursor-agent avec clients OpenAI officiels et outils compatibles.
  • Supporte mapping automatique des noms de modèles OpenAI/Anthropic vers modèles cursor-agent.
  • Streaming SSE pris en charge; endpoints principaux: chat/completions, chat/completions-stream, models, health.

Architecture

  • Flux: Client -> cursor-openai-proxy (FastAPI) -> cursor-agent (CLI/HTTP/Library) -> LLM.
  • Proxy: authentification API_KEY, mapping modèles, formatage réponse OpenAI-compatible.
  • cursor-agent: utilise CURSOR_API_KEY, supporte modes cli/http/library.
  • LLM: GPT-5, Claude 4.5, Opus 4.1, Grok, etc.
ComposantRôle
Proxy FastAPIExpose API OpenAI-compatible, auth, mapping, formatage
cursor-agentInterface vers LLM (CLI/HTTP/Library)
LLMGénération (GPT-5, Sonnet, Opus, Grok...)

Prérequis et Installation

  • Prérequis: Python 3.8+, uv (gestionnaire), just (task runner), cursor-agent (ou mode HTTP).
  • Installation recommandée: uv sync ou just install.
  • Alternatives: création venv, activation, uv pip install -e .
  • Docker: image installe cursor-agent automatiquement.
ActionCommande / Remarque
Installer uvcurl https://astral.sh/uv/install.sh
Installer justscript d'installation, brew ou cargo
Installer cursor-agent (CLI)curl https://cursor.com/install -fsS
Mode HTTP (pas d'install)Définir CURSOR_AGENT_MODE=http dans .env

Configuration (.env)

  • Méthodes: just setup-env, scripts/setup-env.sh, ou copie manuelle .env.example -> .env.
  • Variables essentielles:
    • CURSOR_AGENT_MODE: cli / http / library.
    • CURSOR_AGENT_CLI_PATH (si CLI) ou CURSOR_AGENT_HTTP_URL (si HTTP).
    • API_KEY: protège le proxy (production).
  • Nota: API_KEY protège le proxy, pas cursor-agent.
VariableUsage
CURSOR_AGENT_MODEMode d'intégration: cli / http / library
CURSOR_AGENT_CLI_PATHChemin executable (mode CLI)
CURSOR_AGENT_HTTP_URLURL API cursor-agent (mode HTTP)
API_KEYAuthentification du proxy (production)

Modèles Supportés

  • Supporte tous les modèles disponibles dans cursor-agent.
  • Mapping automatique des alias OpenAI/Anthropic vers modèles natifs.
Alias OpenAI / AnthropicMappe vers
gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-4, gpt-3.5-turbogpt-5
claude-3-5-sonnet-20241022, claude-sonnet-4, claude-sonnet-4.0sonnet-4
  • Modèles natifs exemples: default, gpt-5, sonnet-4, sonnet-4-thinking.

Endpoints Principaux

  • POST /v1/chat/completions : requêtes chat compatibles OpenAI.
  • POST /v1/chat/completions-stream : streaming SSE.
  • GET /v1/models : liste des modèles disponibles.
  • GET /health : vérification de santé.
EndpointFonction
POST /v1/chat/completionsChat completion OpenAI-compatible
POST /v1/chat/completions-streamStreaming SSE des tokens
GET /v1/modelsRetourne liste des modèles
GET /healthVérifie l'état du service

Utilisation et Commandes

  • Démarrer serveur:
    • just dev (dev, reload, port 8001)
    • just run (production, port 8001)
    • uv run python main.py
    • ./run.sh ou uv run uvicorn main:app --host 0.0.0.0 --port 8001 --reload
    • Docker: just docker-build / just docker-up ou docker-compose up -d
  • Documentation: /docs (Swagger UI), /redoc; just docs ouvre la doc.
TâcheCommande type
Démarrer devjust dev
Démarrer productionjust run
Démarrer Dockerjust docker-up
Ouvrir docsjust docs

Exemples d'Usage

  • Exemple Python avec client OpenAI:
    • Configurer client OpenAI: base_url="http://localhost:8001/v1", api_key=ENV.
    • Utiliser model="gpt-4o" (mappé vers gpt-5) ou model="claude-3-5-sonnet-20241022" (mappé).
  • Exemple d'objet réponse compatible OpenAI inclus (id, object, choices, usage).

Tests

  • Architecture tests: unitaires, intégration local (port 8001), intégration Docker (port 8002), bash/curl.
  • Commandes:
    • just test (unitaires), just test-cov, just test-watch.
    • just test-integration-local (~21s), just test-integration-docker (~39s).
    • just test-integration-all, just test-all.
  • Ports: 8001 pour Python local, 8002 pour Docker.
Type de testCommande
Unitairesjust test
Intégration localjust test-integration-local
Intégration Dockerjust test-integration-docker
Tousjust test-all

Sécurité

  • En production: activer API_KEY, rate limiting (middleware), validation des entrées, logging, HTTPS/TLS.
  • Rate limiting désactivé par défaut (commenter/décommenter dans main.py).
  • Voir DEPLOYMENT.md et SECURITY.md pour détails.

Decisions

  • API conçue pour être entièrement compatible OpenAI afin d'utiliser clients existants.
  • Mapping automatique des alias OpenAI/Anthropic vers modèles cursor-agent retenu.
  • Support multi-mode pour cursor-agent: cli, http, library.

Action Items

  • (immédiat – développeur) Configurer .env avec CURSOR_AGENT_MODE et API_KEY selon le déploiement.
  • (avant release – équipe) Activer rate limiting et HTTPS pour production.
  • (pré-merge – CI) Exécuter just test-integration-local puis just test-integration-docker.
  • (optionnel – dev) Tester streaming SSE via /v1/chat/completions-stream.

Open Questions

  • Comment gérer précision du comptage de tokens en production (intégrer tiktoken) ?
  • Nécessité d'adapter le streaming simulé selon capacités réelles de cursor-agent ?
  • Politique recommandée pour rotation/gestion des API_KEY côté proxy et cursor-agent ?