Ghostly is a bring-your-own-LLM system. It doesn’t hardwire a specific AI vendor — instead, it exposes a cleanDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Meza-dev/Ghostly/llms.txt
Use this file to discover all available pages before exploring further.
LlmProvider interface and lets you plug in any model you have access to, from OpenAI’s hosted API to a locally running Ollama instance to the Cursor Agent already installed on your developer machine. The LLM is used in three places inside every assisted run: the Strategist (planning step horizons), the Healer (proposing selector replacements), and the Observer (interpreting the page accessibility tree). Choosing the right provider for your environment directly affects run speed, cost, and reliability.
Two Provider Kinds
HTTP (OpenAI-Compatible)
Any endpoint that accepts chat completions in the OpenAI request format (POST /v1/chat/completions with messages, model, and optionally response_format: { type: "json_object" }). This covers:
- OpenAI —
gpt-4o,gpt-4o-mini,gpt-4.1-mini - Anthropic — via OpenRouter or LiteLLM proxy
- Mistral —
mistral-small-latest,mistral-large-latest,codestral-latest - OpenRouter — multi-model aggregator supporting dozens of providers
- Ollama — local inference at
http://127.0.0.1:11434/v1/chat/completions
providerId, model, apiKey (if the endpoint demands one), and baseUrl.
CLI (Cursor Agent)
Uses the localagent binary installed with Cursor — no API key required. Ghostly invokes it as a subprocess in headless mode:
result field.
| Flag | Purpose |
|---|---|
-p / --print | Headless script mode, no interactive TUI |
--output-format json | Machine-parseable response envelope |
--trust | Trust the workspace without a confirmation prompt |
--mode ask | Read-only — the agent never edits files or runs shell commands |
--model <id> | Explicit model selection for deterministic behavior |
Provider Catalog
The full provider catalog is defined inapps/api/src/llm/catalog.ts:
providerId | Kind | Default model | API key required |
|---|---|---|---|
cursor-cli | CLI | auto | No — uses agent login session |
openai | HTTP | gpt-4o-mini | Yes |
mistral | HTTP | mistral-small-latest | Yes |
anthropic | HTTP | anthropic/claude-sonnet-4 (via OpenRouter) | Yes |
ollama | HTTP | llama3 | No |
openrouter | HTTP | openai/gpt-4o-mini | Yes |
Configuration Methods
1. Interactive Wizard
Run the guided setup wizard from your terminal. It prompts for provider, model, API key, and base URL, then saves everything to~/.ghostly/auth.json:
2. Dashboard Settings Panel
Navigate to Settings → LLM Settings in the Ghostly web dashboard. Settings are stored per-user in theuser_llm_settings table and take precedence over environment variables.
3. Environment Variables
Environment variables are the fallback when no user settings are configured in the database:| Variable | Description | Default |
|---|---|---|
ASSIST_LLM_PROVIDER | http or cursor-cli | http |
ASSIST_LLM_API_URL | Full endpoint URL | — |
ASSIST_LLM_API_KEY | Bearer token / API key | — |
ASSIST_LLM_MODEL | Model ID | assist-fallback-v1 |
ASSIST_LLM_TIMEOUT_MS | Per-call timeout in ms | 45000 |
Provider Configuration Examples
- OpenAI (HTTP)
- Cursor CLI
- Ollama (Local)
- OpenRouter
Direct OpenAI API access using
gpt-4o. Best balance of speed and capability for most E2E flows.Per-User Settings in the Database
User LLM settings are stored in theuser_llm_settings table and scoped to the authenticated user. They override environment variables for that user’s runs:
- User database settings — highest priority; overrides everything
- Environment variables — fallback when no user settings exist
- Catalog defaults — model and endpoint defaults per provider