# ChatGPTEE: Solana sign-in opens an isolated workspace for every wallet. HOST=127.0.0.1 PORT=4310 DATABASE_PATH=data/opendots.sqlite USER_DATA_PATH=data/users # Supabase/Postgres user, sign-in challenge, and session database (server only). DATABASE_URL= # Optional Supabase integration aliases; a session-pooler URL on port 5432 fits # this long-running server. DATABASE_URL wins when both are configured. POSTGRES_URL_NON_POOLING= POSTGRES_URL= # Optional project API checks; the app's sign-in remains Privy/Better Auth. SUPABASE_URL= NEXT_PUBLIC_SUPABASE_URL= NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY= NEXT_PUBLIC_SUPABASE_ANON_KEY= # Server-only, for the verification script; never expose through VITE_. SUPABASE_SECRET_KEY= # Privy wallet-first sign-in. Only app ID and client ID are public. # Production ChatGPTee app: cm7mmxm7a01bs3i2ltojavlnl. # The app secret and client ID must belong to that same app. PRIVY_APP_ID= PRIVY_CLIENT_ID= PRIVY_APP_SECRET= # Set this to the custom authentication domain configured on your Privy app. # ChatGPTee production uses https://privy.chatgptee.ai. PRIVY_AUTH_ORIGIN=https://auth.privy.io # Device-code approval page; keep the wallet authorization key server-side. PRIVY_AUTH_URL=https://chatgptee.ai/authorize PRIVY_SIGNING_KEY= # OAuth callbacks (fixed values, not secrets): in Google Cloud and the X # developer console, the authorized redirect/callback URI for Privy is # https://auth.privy.io/api/v1/oauth/callback # The app's own OAuth return URL is https://chatgptee.ai/api/oauth/callback # (the server forwards it to /login, where Privy sign-in completes). # Privy 'solanadots' app client: identifier com.solanadots.app, URL scheme # solanadots (solanadots://). Its mobile client ID is the PRIVY_CLIENT_ID # value for that client; the app secret stays server-only in Railway. # The desktop app reads the same two public IDs from its Keychain settings # and falls back to the production app + 'solanadots' client when unset; it # verifies Privy tokens against the JWKS only and never holds the secret. # Better Auth shares this app's PostgreSQL pool. Never use a VITE_ secret. BETTER_AUTH_URL=https://chatgptee.ai # Required in production; store the same server-only secret in Railway and the Worker. # The Worker stamps a trusted client IP. The public origin rejects unauthenticated auth hops. CHATGPTEE_PROXY_SECRET= # Optional: otherwise a random 0600 secret is persisted beside DATABASE_PATH. BETTER_AUTH_SECRET= BETTER_AUTH_API_KEY= GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= # X uses Better Auth's twitter provider and /callback/twitter. TWITTER_CLIENT_ID= TWITTER_CLIENT_SECRET= # Keep OWNER_ID stable: it owns the persistent conversations. OWNER_ID=opendots-owner # Optional per-Dot long-term recall. Keep credentials on the server. # Permitted completed turns go to Mem0; the retry outbox/cache stay in SQLite. # Without MEM0_API_KEY, SUPERMEMORY_API_KEY (below) is used for Dot memory, # one Supermemory namespace per owner and Dot. Mem0 wins when both are set. # Optional override (HTTPS only): SUPERMEMORY_BASE_URL=https://api.supermemory.ai MEM0_API_KEY= MEM0_BASE_URL=https://api.mem0.ai MEM0_ORG_ID= MEM0_PROJECT_ID= # npm run dev uses http://localhost:3460 and http://127.0.0.1:3460. # APP_ORIGIN replaces these defaults with comma-separated exact origins. # Include scheme, hostname and port; omit paths and trailing slashes. # APP_ORIGIN=https://chatgptee.ai,https://www.chatgptee.ai # Required for an external HOST binding (24+ characters); enables local login too. # OWNER_TOKEN= # Optional cloud Threads, Learning and Slack; chats otherwise persist in SQLite. # `copilotkit project select` or `local connect` writes CPK_INTELLIGENCE_API_KEY. # The server accepts either name and prefers a non-empty CPK_INTELLIGENCE_API_KEY. INTELLIGENCE_API_KEY= # INTELLIGENCE_API_URL= # `local connect` writes this endpoint; it takes precedence over the legacy name. # INTELLIGENCE_GATEWAY_WS_URL= # INTELLIGENCE_WS_URL= # Muse Wonder on OpenRouter is the default shared model for every Dot. MODEL_PROVIDER=openrouter # Optional alternative chat: MODEL_PROVIDER=xai. Also used for avatars/X Search # and, by default, to drive Browser Use tasks with grok-4.7. XAI_API_KEY= XAI_MODEL=grok-4.7 XAI_IMAGE_MODEL=grok-imagine-image-2.0 # Optional alternative: MODEL_PROVIDER=openai OPENAI_API_KEY= OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_MODEL= # OpenRouter credentials stay on the server. OPENROUTER_API_KEY= OPENROUTER_MUSEMODEL=meta/muse-wonder # Legacy live-model override; used only when OPENROUTER_MUSEMODEL is empty. OPENROUTER_MODEL= # Batch model; independent from the live chat model above. OPENROUTER_CLAUDE_MODEL=anthropic/claude-haiku-5.5 # Keep the CLI-generated CPK_TELEMETRY_ID with its matching project key. # The SDK uses it to connect OpenDots usage to the Intelligence account. # CPK_TELEMETRY_ID= # SDK usage telemetry is enabled by default (separate from conversations). # See docs/TELEMETRY.md for signup reporting and validation. # Optional sampling override (default 1): # COPILOTKIT_TELEMETRY_SAMPLE_RATE=1 # Either flag below opts out: # COPILOTKIT_TELEMETRY_DISABLED=true # DO_NOT_TRACK=1 # Optional isolated read-only public-page browser for WEB_SEARCH_PROVIDER=browser. BROWSER_URL=http://127.0.0.1:4311 BROWSER_SECRET= BROWSER_HOST=127.0.0.1 BROWSER_PORT=4311 # Browser Use Cloud, separate from the isolated read-only research service. # The server accepts BROWSER_USE_API_KEY as an alias for BROWSERUSE_API_KEY. BROWSERUSE_API_KEY= CLAWD_PROFILE= # Optional existing HTTP(S) CDP endpoint; checked without stopping that browser. CDP_URL= BROWSER_USE_WORKSPACE_ID= # Who drives Browser Use tasks: xai (default) runs a local agent on xAI's # Responses API with XAI_API_KEY inside a Browser Use cloud browser. # browser-use uses the hosted V4 agent; V4 only offers its own model list # (grok-4.6 at most, no xAI key/BYOK), so grok-4.7 needs the xai mode. BROWSER_USE_LLM_PROVIDER=xai BROWSER_USE_XAI_MODEL=grok-4.7 # Hosted V4 model, used only when BROWSER_USE_LLM_PROVIDER=browser-use. BROWSER_USE_MODEL=gpt-6-luna # Use the same random 24+ character secret in app/browser. All redirects are blocked. # Supply canonical public URLs. Use the separate browser container for isolation. # Optional realtime speech; compute uses the same local or Intelligence thread. VOICE_API_KEY= VOICE_MODEL= VOICE_NAME=marin # Optional managed Slack channel; see docs/SETUP.md#slack. # Match the managed declaration name, not a Slack #conversation name. # OpenTag calls this INTELLIGENCE_CHANNEL_NAME; OpenDots uses SLACK_CHANNEL_NAME. # Allowlist both the Slack workspace and explicit Slack user IDs. SLACK_CHANNEL_NAME= SLACK_TEAM_ID= SLACK_USER_IDS= # SLACK_DOT_ID= (defaults to the initial Dot) # Default persistent desktop computer, isolated per Dot. COMPUTER_PROVIDER=e2b E2B_API_KEY= E2B_TEMPLATE=desktop E2B_TIMEOUT_MS=300000 # Wallet secrets are encrypted here by the official OWS implementation. OWS_VAULT_PATH=data/ows # Optional alternative: COMPUTER_PROVIDER=openbot, using OpenBot services. # See docs/COMPUTERS.md. Keep these two different random secrets on the server. COMPUTER_SUPERVISOR_URL= COMPUTER_SUPERVISOR_TOKEN= COMPUTER_TOKEN= # Keep stable: the namespace identifies existing containers and persistent volumes. COMPUTER_NAMESPACE=opendots # COMPUTER_MEMORY_BYTES=2147483648 # COMPUTER_RUNTIME=runsc # ENGINE_SOCKET=/var/run/docker.sock # Public-web provider. parallel (default), browser (URL-only), or disabled. # Queries and selected URLs are sent to Parallel; sample mode makes no provider calls. WEB_SEARCH_PROVIDER=parallel # Optional Bearer key for production/higher limits; anonymous MCP supports light use. PARALLEL_API_KEY= # Server-only mainnet RPC for Pump.fun/Jupiter reads, simulation and transaction checks. # Browser wallets still require explicit per-transaction review and signing. SOLANA_RPC_URL= # Server-only Jupiter Swap API V2 credential. Never use a VITE_ variable for this key. JUPITER_API_KEY= # Photon Stable: new ChatGPTEE project + bot only. Keep credentials server-side. # Disabled until ownership and webhook registration are deliberately approved. SPECTRUM_MESSAGING_ENABLED=false SPECTRUM_PROJECT_ID= SPECTRUM_PROJECT_SECRET= SPECTRUM_TELEGRAM_BOT_TOKEN= SPECTRUM_TELEGRAM_BOT_USERNAME= SPECTRUM_TELEGRAM_BOT_ID= SPECTRUM_TELEGRAM_WEBHOOK_SECRET= SPECTRUM_TELEGRAM_REGISTRATION_APPROVED=false SPECTRUM_IMESSAGE_ENABLED=false SPECTRUM_IMESSAGE_LINE_MODE=dedicated SPECTRUM_IMESSAGE_PHONE= SPECTRUM_IMESSAGE_LINE_OWNERSHIP_CONFIRMED=false # OpenMarket Data API: crypto charts, heatmaps and Polymarket research. Server-only. # Advanced datasets require the matching Data API entitlements. OPENMARKET_API_KEY= # Birdeye token/wallet research, official Beta MCP, and read-only Data API calls. # Shared server credential; endpoint access depends on your Birdeye subscription. # Never expose it through VITE_ variables or model prompts. BIRDEYE_API_KEY= # Optional private, per-Dot trading intelligence (server only). SUPERMEMORY_API_KEY= TYPESAFE_API_KEY= # Alias supported for existing Jupiter deployments. JUP_SWAP_V1_API_KEY=