On this page
Before you start Write the setup file Know what the file may carry Try it on your own account first Publish it What a member sees Change the file laterA lab or site that runs its own model gateway can connect every member's CLIO Coder with one small YAML file. You publish it once; each member imports it, sees where their prompts will go, and confirms. The file can name models and where to find a key, but it can never carry a key or change what CLIO Coder is allowed to do.
Before you start
- An OpenAI-compatible model gateway your members can reach, here
https://llm.lab.example.org/v1. - A way to give each member a key, which they keep in an environment variable.
- An
httpsaddress or a shared path where you can publish the file.
Write the setup file
lab-clio.yaml
notes: "Lab gateway. Ask #research-computing for a key; export it as LAB_API_KEY."
targets:
- id: lab
runtime: openai-compat
url: https://llm.lab.example.org/v1
defaultModel: qwen3-coder-480b
capabilities: { contextWindow: 131072 }
auth: { apiKeyEnvVar: LAB_API_KEY }
chat: { target: lab }
fleet: { target: lab, model: qwen3-coder-480b }targets lists the model endpoints. chat and fleet choose which target the main session and its workers use. notes is shown to the member before they confirm, so use it to say how to get a key.
Know what the file may carry
A setup file may hold only targets, chat, fleet and notes. A target may hold only id, runtime, url, defaultModel, wireModels, capabilities, pricing and auth, and auth only names an environment variable (apiKeyEnvVar) or an OAuth profile. Anything else refuses the whole file. A literal key is the usual mistake:
bad.yaml
targets:
- id: lab2
runtime: openai-compat
url: https://x/v1
auth: { apiKey: sk-123 }What you should see
error: setup file refused; nothing changed: followed by targets[0].auth.apiKey is not allowed in a setup file, and exit code 1.
The same rule refuses request headers and safety settings, so a member never has to read a setup file for hidden permissions.
Try it on your own account first
Shell
clio-coder configure --import lab-clio.yamlWhat you should see
Setup file lab-clio.yaml will:
Lab gateway. Ask #research-computing for a key; export it as LAB_API_KEY.
add target lab (openai-compat)
prompts go to https://llm.lab.example.org/v1
model qwen3-coder-480b; key from $LAB_API_KEY
chat uses lab / qwen3-coder-480b
fleet uses lab / qwen3-coder-480b
Apply these changes? [y/N]Answer n and nothing changes. Answer y and it prints Imported 1 target. and one line per target: lab: ready, or what is still missing, such as lab reads its key from LAB_API_KEY, which is not set in this shell.
A plain http address to anything other than this machine or a private network address adds a warning that prompts and keys cross the network unencrypted.
Importing saves the settings without sending a request to the model. Check the route yourself:
Shell
export LAB_API_KEY=...
clio-coder doctor
clio-coder targets --probe --target labThe chat row of doctor should end in endpoint reachable, and the probe's health column should not read down.
Publish it
Put the file at an https address or a path members can read. A fetched file must be https all the way, a redirect to anything else is refused, and the file may be at most 64 KiB.
What a member sees
A member who has never run CLIO Coder runs clio-coder. At What do you have? they choose A setup file from my lab or team, type the address at Where is the setup file?, and see the same preview under This setup file will: with Apply and Back. A member who already uses CLIO Coder runs:
Shell
clio-coder configure --import https://lab.example.org/clio-coder/setup.yamlOnly the lab target and the chat and fleet routes change. Their other targets, project settings and stored keys stay as they were.
Importing the same file again prints Setup file already imported; nothing changed with the status line, so it is safe to put in a login script with --yes. Without a terminal and without --yes, the command prints the preview and exits 2 without saving.
Change the file later
If you change the settings of a target a member already has, their import is refused with lab already saved with different settings; nothing changed. and the command to rerun with --replace. Tell members when you change it. A new target id imports without --replace.
Boundaries
- Importing does not test the model. Members should run
clio-coder doctorafter setting their key. - The file cannot hand out keys. Each member still gets a key and exports it in their shell.
- A member can change their route afterwards with
/modelorclio-coder configure; the file is not enforced.