Models, roles, and profiles
Concepts
| Concept | Meaning |
|---|---|
| Default model | The model used for the main conversation, and the one a new session starts on. Chosen with /model or --model, or in /settings under Model. Persisted under modelRoles.default, which is a slot rather than a selectable role, so it does not appear in role pickers. |
| Role | A named model assignment for a kind of work (smol, plan, advisor, and others). Configure it in modelRoles or Settings → Model → Roles. |
| Subagent policy | The blanket model and effort plus per-agent enabled, model, thinkingLevel, and maxNestedSpawnDepth choices under subagent. |
| Profile | User config tree at ~/.veyyon/profiles/<name>/ (including default). |
Interactive model
- Set live with
/modelor the model picker; set for a run with--model <provider/id>. - On “set as default” / persist paths, the value is stored as
modelRoles.defaultin the active profile’sconfig.yml. - There is no separate top-level
model:settings key in the schema. Prefer the picker ormodelRoles.defaultin config.
# ~/.veyyon/profiles/default/agent/config.yml
modelRoles:
default: anthropic/claude-sonnet-5 # interactive model (persisted default)
smol: openai/gpt-4.1-mini
slow: anthropic/claude-opus-4-5:high
plan: anthropic/claude-sonnet-5
advisor: anthropic/claude-sonnet-5:medium
Role values may include a thinking suffix (:off, :auto, :minimal, :low, :medium, :high, :xhigh, :max). The model picker shows only variants the selected model supports. If a provider publishes effort tiers as separate upstream IDs, Veyyon presents one logical model and routes the chosen effort to the matching ID.
Built-in roles
From packages/coding-agent/src/config/model-roles.ts:
| Role id | UI name | Notes |
|---|---|---|
default | (hidden) | Storage key for the interactive model only; not shown in role pickers or default cycleOrder |
smol | Fast | Cheap / fast work; --smol or env VEYYON_SMOL_MODEL |
slow | Thinking | Heavier reasoning; --slow or env VEYYON_SLOW_MODEL |
vision | Vision | Multimodal work |
plan | Architect | Plan mode; --plan or env VEYYON_PLAN_MODEL |
designer | Designer | Design-oriented work |
commit | Commit | Commit / changelog generation |
tiny | Tiny | Lightweight background work: titles, classifiers |
advisor | Advisor | Advisor runtime; set in Settings → Model → Advisor → Advisor Model, not in the Roles table |
Custom role names can appear via modelRoles, modelTags, or cycleOrder entries.
Unset selectable roles, advisor included, inherit the live interactive model at use time. No role has a built-in model chain: a role you have not set specifies no model of its own, so nothing you did not choose ends up running.
The Roles table lists smol, slow, vision, plan, designer, commit and tiny. advisor is a real slot with the same resolution, and @advisor names it, but it is edited from the Advisor group instead, beside the toggle that turns the feature on.
A caller may still request several roles in order. Title generation, for example, requests tiny, then commit, then smol, and takes the first one you have set. That order belongs to the caller, not to the role: tiny does not fall back to smol, the title generator prefers tiny and accepts smol. If you have set none of them, the whole list is unset and the caller inherits the interactive model like any other unset role.
There is no task role. The model your subagents run is set in the Subagents settings area, which sets it on its own; see Settings: Subagents.
To return an assigned role or model policy to its unset state, open its picker in /settings and choose the first row, (inherit main model) (the default model’s picker reads (auto-select on launch)). Del or Backspace with an empty search does the same.
Subagent policy and compaction overrides
| Setting | Effect |
|---|---|
subagent.sharedModel | Which scope decides a subagent’s model and effort. Off, each agent’s own row does. On, the two rows below do, for every agent. |
subagent.model | Ordered model chain every subagent runs while subagent.sharedModel is on. The first entry is primary and later entries are fallbacks. Unset runs every agent on the default model role. |
subagent.thinkingLevel | Effort every subagent runs at while subagent.sharedModel is on. |
subagent.agents | Per-agent enabled, model, thinkingLevel, and maxNestedSpawnDepth choices. The model and thinkingLevel on a row decide while subagent.sharedModel is off, and are not read while it is on. |
subagent.delegation | How strongly the model is prompted to delegate: allowed, preferred, or required. |
compaction.model | Ordered model chain for compaction. Unset inherits the interactive model. |
subagent:
sharedModel: true
model: deepseek/deepseek-chat:high,anthropic/claude-sonnet-5:low
agents:
scout:
enabled: false
reviewer:
thinkingLevel: auto
compaction:
model: openai/gpt-5-mini:low,anthropic/claude-haiku-4-5
strategy: summary
threshold: "80%"
In Settings, Enter edits the highlighted chain position. Add fallback appends a position. Delete removes only the highlighted position.
Cycling roles (Ctrl+P)
cycleOrder lists which roles the model switcher cycles (app.model.cycleForward / cycleBackward, default chords often Ctrl+P / Shift+Ctrl+P).
- Schema default:
["smol", "slow"](seeDEFAULT_CYCLE_ORDER). - The string
defaultis stripped fromcycleOrderon load; the interactive model is not cycled as a role entry. - Scoped models (
--models/ enabled model list) can also drive cycling when configured.
cycleOrder:
- smol
- slow
- plan
Profiles
Every profile including default:
~/.veyyon/profiles/<name>/agent/ # config.yml, sessions, MCP, skills, …
Instruction Files: Global vs Per-Profile (AGENTS.md)
Veyyon discovers exactly two user-level instruction layers before every session:
- Global User Layer (
~/.veyyon/AGENTS.md): Applies across EVERY profile and workspace. Reserved for cross-profile standing rules. - Active Profile Layer (
~/.veyyon/profiles/<profile_name>/...): Applies ONLY to the active profile. Scanned in descending priority order (first match wins; exactly 1 file loaded per profile to prevent duplication):~/.veyyon/profiles/<name>/agent/AGENTS.md(Highest)~/.veyyon/profiles/<name>/AGENTS.md~/.veyyon/profiles/<name>/agent/agent.md~/.veyyon/profiles/<name>/agent.md(Lowest)
Global ~/.veyyon/config.yml holds cross-profile keys such as defaultProfile.
Activate: --profile, VEYYON_PROFILE, veyyon profile default <name>, TUI /profiles picker or /profile <name> (relaunch).
See Profiles, File locations.
Approvals
tools.approvalMode: plan | ask | ask-command | auto | yolo (schema default auto).
Aliases: always-ask → ask, write and auto-edit → ask-command.
See Approvals.
Related
- Models and providers
- Settings: models (repo
docs/handbook/src/reference/settings.md) - Compaction