Models & reasoning
Pick which Syntic model does the work, how hard it thinks, and what happens when a model is busy. Which models you can choose depends on your plan; see Plans & models.
Choose the model
| How | Lasts |
|---|---|
/model, highlight a row, Enter | Saved as your default. |
/model, highlight a row, s (or /model <name> --session) | This session only. |
Alt+P | Opens the same picker. |
syntic --model "Syntic Code Fast" | This run. |
SYNTIC_MODEL | Every run with that variable. |
"model" in a settings file | Every session that reads it. |
When several are set, the flag wins, then the environment variable, then settings, then the platform default.
The model list comes from the platform
/model lists the models the Syntic platform offers for Syntic Code, not a list built into the program. Each entry shows its description, context window, the plan tier it needs and, when known, its price. A model your plan does not include is still listed, marked with the plan it needs, as in (needs the <plan> plan), so you can see what an upgrade would add; the platform only serves models your plan includes.
The list is fetched in the background at start and refreshed while you work. If it arrives after the session started, the next turn picks up the model’s real context window. The header and the agent’s own idea of which model it is follow /model straight away.
Limit which models can be chosen
| Setting | Effect |
|---|---|
availableModels | Only these names can be chosen. A trailing * matches any ending ("Syntic Code*"). The strongest settings file that sets it wins, so managed policy has the last word. |
deniedModels | Names that can never be chosen. Entries from every file add up. |
modelPicker | The models /model lists, in order: plain names, or {"model": "...", "label": "..."} to show your own label. |
Names match without regard to case.
{
"availableModels": ["Syntic Code*"],
"deniedModels": ["Amara S2"],
"modelPicker": ["Syntic Code", { "model": "Syntic Code Fast", "label": "Quick" }]
}Helper and subagent models
| Setting | Flag / variable | Used for |
|---|---|---|
smallModel | --small-model, SYNTIC_SMALL_MODEL | Background chores: session titles, summaries, auto mode review, goal checks. |
SYNTIC_SUBAGENT_MODEL | Default model for subagents (a model named in an agent file still wins). | |
SYNTIC_SUBAGENT_MODEL_FORCE=1 | Make every subagent use SYNTIC_SUBAGENT_MODEL. |
Fallback models
{ "fallbackModel": ["Syntic Code Fast"] }When the main model is unavailable or overloaded, Syntic Code tries these in order (up to three). For one run: --fallback-model "Syntic Code Fast". When a switch happens, a line in the transcript and a short notice say which model took over; the fallback stays in use for the rest of that request.
Fast mode
/fast (or Alt+O) swaps to a lighter model for quick work and back again. See Fast mode.
Reasoning effort
Effort sets how much the model thinks before it answers. More effort helps with tricky bugs and design questions; less is faster and cheaper.
| How | Values |
|---|---|
/effort [level] (no level cycles to the next) | low, normal, high, xhigh, max |
syntic --effort <level> | low, medium, high, xhigh, max |
"effortLevel" | The level sessions start with. |
"maxEffortLevel" | The highest level allowed, overall or per model ({"*": "high"}). |
/effort saves the level to your user settings. Effort is remembered per model (effortByModel), so switching models brings back the level you last chose for that model; a model with no saved level uses effortLevel. /effort --session keeps the change to this session only.
{ "effortByModel": { "Syntic Code": "high", "Syntic Code Fast": "low" } }Words in a message such as ultrathink or think harder raise effort for that one turn only. /effort ultracode on is a separate switch: large requests are planned as workflows of parallel steps, at any effort level, and the status bar shows [ULTRACODE].
Thinking
| Control | Effect |
|---|---|
Alt+T or /thinking on · /thinking off | Switch reasoning on or off for the rest of the session. Models that always reason keep reasoning. |
/thinking | Show reasoning in full or as a one-line preview. |
--max-thinking-tokens <n> | Reasoning budget for a run (0 turns it off). |
"maxThinkingTokens" | Default budget (16,384). |
"alwaysThinkingEnabled": false | Start sessions with reasoning off. |
"showThinkingSummaries": true | Show reasoning in full by default. |
The advisor
With the experimental advisor on, the agent can ask a second model for a short recommendation on a hard decision. Turn it on with /advisor on; details are on The advisor.
When model changes take effect
/model, /fast and /effort apply from the next request. To have them apply immediately, even in the middle of a reply, set SYNTIC_IMMEDIATE_COMMAND=1. PreModelSwitch and PostModelSwitch hooks let you confirm, block or react to a model change.
Usage limits
When you reach a plan limit, Syntic Code tells you when it resets and what you can do (/rate-limit-options). By default it continues automatically once the window resets; set "autoContinueAfterUsageLimit": false to stop instead.
Context window and compaction
Each model has its own context window; the list from the platform carries it. When the conversation fills a share of the window (autoCompactThreshold, 0.8 by default), Syntic Code compacts older turns into a summary.
| Command or setting | Effect |
|---|---|
/autocompact | Shows whether automatic compaction is on and the window it measures against. |
/autocompact on · off | Switch it now and save the choice (autoCompact). |
/autocompact 200k | Compact against a smaller window for the current model (saved per model in autoCompactWindows). |
/autocompact default | Go back to the model’s own window. |
/compact | Compact right now. |
More on Context and compaction.
Context size is part of the model: the default model has a 256K-token window. For unknown models, contextWindow (or SYNTIC_CONTEXT_WINDOW) tells Syntic Code what to assume. See Context & compaction.