openai preset (OpenAI-compatible)
Use this child for the built-in openai template (display "OpenAI-compatible")
and for any saved preset whose provider is openai. openaiPreset in
tui/internal/preset/preset.go ships provider openai, an empty model,
api_key_env OPENAI_API_KEY, base_url null, and wire_api
chat_completions, with web_search on DuckDuckGo, vision inheriting the
agent's own provider, and the skills default.
Template-specific settings
base_url— optional. Empty means the official OpenAI API (https://api.openai.com/v1). Set it to any OpenAI-compatible endpoint: another vendor's compatible API, a local server, a relay, or an account pool. The value is SDK-style and carries its own version path (for examplehttp://127.0.0.1:8080/v1); requests go to{base_url}/chat/completionsor{base_url}/responses.wire_api—chat_completions(the default, written explicitly) orresponses. Withresponses,responses_transportmay selecthttp(the default, omitted) orwebsocket.api_key_env— the env-var name holding the key (defaultOPENAI_API_KEY). Editing and saving the template stamps a fresh per-preset slot (OPENAI_1_API_KEY,OPENAI_2_API_KEY, ...) so two presets never overwrite each other's key.model— free text. There is no universal model: read the configured endpoint's own catalog (an authenticatedGET {base_url}/modelswhen it implements it, otherwise its documentation) and record the exact served ID. Save refuses an empty model.thinking— standard reasoning effort:none,minimal,low,medium,high,xhigh, or omitted (the kernel default). It is sent as reasoning effort on either wire.service_tier—normal(omitted) orfast(sent aspriority). Whether an endpoint honors it is the endpoint's business.
Other vendors are reached here, not through vendor-named providers: pick
openai, set base_url to the vendor's OpenAI-compatible endpoint, paste
that vendor's key, and type the vendor's model ID. A vendor that exposes an
Anthropic-compatible endpoint instead uses reference/anthropic/SKILL.md.
Subscriptions and account pools (sub2api, subs-pool)
A subscription is not an API key. To use subscriptions (for example several
ChatGPT/Codex accounts) behind one endpoint, run an external pool/proxy such
as sub2api or subs-pool and point
an openai preset at it. The TUI and kernel do not install, start, or
supervise the pool, and there is no built-in pool provider (codex-pool is
retired). A pool that serves Codex models speaks the Responses wire:
"llm": {
"provider": "openai",
"wire_api": "responses",
"base_url": "http://127.0.0.1:<port>/v1",
"api_key_env": "SUBS_POOL_API_KEY",
"model": "gpt-5.6-sol"
}
base_urlis the pool's serve address plus/v1.api_key_envnames the env var holding the pool's local access key (the key the proxy was started with), never a ChatGPT token.modelis a model the pooled accounts serve.
In the preset editor: open the openai template, set wire_api to
responses, fill in base_url and model, and paste the pool's local
access key on the API-key row. Install, account management, and quota live
in the pool's own README; if the proxy is down, requests fail like any
unreachable endpoint. For a single ChatGPT account, use the codex preset
(reference/codex/SKILL.md) instead.
TUI surfaces to revise
Start at openaiPreset in tui/internal/preset/preset.go. In
tui/internal/tui/preset_editor.go the provider row cycles the four families
(editorProviders); openai has no providerModels entry, so the model
row is free text; base_url is free text with the official endpoint shown
when empty; wireAPIOptions, responsesTransportOptions,
levelThinkingOptions, and serviceTierOptions drive the other rows, and
normalizeLLMForCommit writes wire_api explicitly and drops stale
transport/thinking/service-tier values and the retired api_compat field.
/doctor probes this family with GET {base_url}/models (Bearer) and, on
the Chat Completions wire, one max_tokens=1 completion
(probeLLM in tui/internal/tui/doctor.go).
Reviewed deterministic revision
Prepare an evidence-bound manifest and explicit input, then run
lingtai-tui presets revise --manifest PATH --input PATH --mode dry-run|check|apply
[--output-dir PATH]. Review the JSON plan, use dry-run/check before apply, and
apply only to a new explicit output directory. revision.go validates hashes,
route bindings, and evidence and preserves unowned bytes; wire_api and
responses_transport changes are eligible only for openai Responses targets.
Maintenance: If the relevant TUI preset/page is revised, check whether this sub-skill also needs revision and, if so, include it in the same PR.
Operations
For save, endpoint/capability, availability, activation/refresh, or
troubleshooting, use the five shared operation children under
reference/operations/; this child owns the OpenAI-compatible family facts,
so inspect the actual saved manifest for user-owned endpoint, model,
credential, and capability facts.
