#ConfigMutationConflictError: config changed since last load

1 messages · Page 1 of 1 (latest)

restive cosmos
#

When try to change the model and put new :

solar dustBOT
#

The docs path in this workspace is a little different, I’m checking the repo copy and the code path for that exact error.

#

I found the exact guard in the code. This one is usually a stale editor snapshot, not a bad model value. I’m checking if there’s a doc/runbook mention I can point you to too.

#

That error usually means the config was changed after the editor loaded, so your save is using a stale snapshot. It’s usually not the new model value itself.

Try this:

  1. First send your version

    openclaw --version
    
  2. Refresh/reopen the Config page (or rerun config.get if you're using RPC/CLI tooling), then make the change again.

  3. Make sure only one thing is editing config

    • one Dashboard/Control UI tab only
    • no openclaw doctor, onboarding, or CLI config set running at the same time
  4. If you’re changing the chat/session model, use:

#

If you want, paste:

  • openclaw --version
  • whether you changed it in Dashboard or CLI
  • the exact model you tried to set

and I can tell you the exact next step.

restive cosmos
#
  1. OpenClaw 2026.4.14 (323493f)
  2. CLI
  3. Github copilot
solar dustBOT
#

I’ve got enough now to narrow it down. I’m checking the exact GitHub Copilot docs/command path so I don’t send you the wrong provider/model syntax.

#

I found the CLI behavior too: config set already uses the config hash automatically on your version, so if it throws this, something else is definitely writing the same config file in parallel.

#

Yep, that narrows it down.

For CLI + GitHub Copilot, the important bit is: don’t set just Github copilot.
OpenClaw wants a provider/model ref, for example:

openclaw models set github-copilot/gpt-4o

If that model ID is rejected, try another one your Copilot plan exposes, for example:

openclaw models set github-copilot/gpt-4.1

If you haven’t logged Copilot in yet, do this first:

#
openclaw models auth login-github-copilot

Then check what OpenClaw sees:

openclaw models status
openclaw models list

About the ConfigMutationConflictError part: on 2026.4.14, the CLI already handles the config hash for you, so if you still get that error, it usually means something else is writing ~/.openclaw/openclaw.json at the same time. Common culprits:

  • another terminal running openclaw config set
  • Dashboard / Control UI open on the config page
  • onboarding / doctor / update command running
#

So I’d try this exact sequence:

openclaw models auth login-github-copilot
openclaw models set github-copilot/gpt-4o
openclaw models status

If it still blows up, paste:

  • the exact command
  • the full error output
  • output of:
    openclaw config file
    openclaw models status
    
restive cosmos
#

hummm
Default : github-copilot/gpt-4o

solar dustBOT
#

If openclaw models status is already showing Default: github-copilot/gpt-4o, that’s a good sign, it means the model change itself likely did land. I’m checking whether you need a restart or whether this was just a duplicate write/race.

#

Yep, that means the default model is already set to github-copilot/gpt-4o 👍

So the likely story is:

  • the first write succeeded
  • then a second/stale write hit the conflict guard

If your goal was just to switch the default model, you’re probably done.

If the current thread/session still seems to use an old model, do one of these:

/model github-copilot/gpt-4o

or start a new thread/session.

#

If you want to be extra safe, restart once:

openclaw gateway restart

So, short version: the model change landed. The conflict was likely just the follow-up write racing the saved config.

If you want, I can help you verify whether the session model is also on Copilot, not just the default.

restive cosmos
#

Tu peux parler francais c plus simple

solar dustBOT
#

Oui, bien sĂ»r 🙂

En français, le plus probable est :

  • ton modĂšle par dĂ©faut est dĂ©jĂ  bien rĂ©glĂ© sur github-copilot/gpt-4o
  • l’erreur ConfigMutationConflictError venait juste d’un conflit d’écriture aprĂšs ça

Donc normalement, le changement a marché.

Si tu veux aussi l’appliquer à la conversation en cours, fais :

/model github-copilot/gpt-4o

Ou redémarre OpenClaw :

#
openclaw gateway restart

Si tu veux, envoie-moi juste :

  • la commande exacte que tu tapes
  • et le message d’erreur complet

et je te réponds en français à partir de maintenant.

restive cosmos
#

comment lister tout les modeles dispo de copilot

solar dustBOT
#

Je vĂ©rifie juste la syntaxe exacte pour filtrer/lister cĂŽtĂ© Copilot, pour ne pas t’inventer une commande qui n’existe pas.

#

Oui 👌

Pour lister les modĂšles Copilot :

ModÚles Copilot connus/configurés

openclaw models list --provider github-copilot

Catalogue complet cÎté OpenClaw

openclaw models list --provider github-copilot --all

Un modĂšle par ligne

#
openclaw models list --provider github-copilot --all --plain

En JSON

openclaw models list --provider github-copilot --all --json

Et pour vérifier que ton auth Copilot est bien active :

openclaw models status --probe --probe-provider github-copilot

Petit piÚge important : --all montre le catalogue connu par OpenClaw, mais ton abonnement Copilot ne donne pas forcément accÚs à tous.

#

Si tu veux, je peux te donner la commande exacte pour :

  1. lister,
  2. choisir un modĂšle,
  3. le définir par défaut.
restive cosmos
#

listes tout ce qui n'est pas register cote openclaw

solar dustBOT
#

Pas directement.

OpenClaw peut lister :

  • ce qu’il connaĂźt / rĂ©fĂ©rence
  • ce qu’il a configurĂ©
  • ce qu’il peut sonder

Mais il ne peut pas lister en une commande “tout ce qui n’est pas enregistrĂ©â€, parce que par dĂ©finition il ne le connaĂźt pas.

Ce que tu peux faire

1. Voir tout ce qu’OpenClaw connaüt pour Copilot

openclaw models list --provider github-copilot --all --plain
#

2. Voir ce qui est réellement configuré chez toi

openclaw models status

En pratique

Tout ce qui n’apparaüt pas dans :

openclaw models list --provider github-copilot --all

est “pas enregistrĂ© / pas rĂ©fĂ©rencĂ© cĂŽtĂ© OpenClaw”.

Si tu veux, le plus simple est :

  • tu me colles la sortie de
#
  openclaw models list --provider github-copilot --all --plain
  • et je te dis lesquels sont utilisables, lesquels sont juste connus, et comment en tester un.
restive cosmos
#

peut tu enregistrer en tant que modele en 1 commande :
github-copilot/claude-haiku-4.5
github-copilot/claude-opus-4.6
github-copilot/claude-sonnet-4.6
github-copilot/gemini-3.1-pro-preview

github-copilot/gpt-5.3-codex
github-copilot/gpt-5.4
github-copilot/gpt-5.4-mini

solar dustBOT
#

Je vérifie la structure exacte de agents.defaults.models avant de te donner la commande, comme ça tu peux juste copier-coller sans te battre avec le JSON.

#

Oui. Le plus simple en 1 commande est de dĂ©finir agents.defaults.models d’un coup :

openclaw config set agents.defaults.models '{
  "github-copilot/claude-haiku-4.5": { "alias": "Haiku 4.5" },
  "github-copilot/claude-opus-4.6": { "alias": "Opus 4.6" },
  "github-copilot/claude-sonnet-4.6": { "alias": "Sonnet 4.6" },
  "github-copilot/gemini-3.1-pro-preview": { "alias": "Gemini 3.1 Pro Preview" },
  "github-copilot/gpt-5.3-codex": { "alias": "GPT-5.3 Codex" },
  "github-copilot/gpt-5.4": { "alias": "GPT-5.4" },
  "github-copilot/gpt-5.4-mini": { "alias": "GPT-5.4 Mini" }
}'

Puis vérifie :

#
openclaw models list --provider github-copilot

⚠ Important : cette commande remplace tout agents.defaults.models actuel.

Si tu veux, je peux aussi te donner la version safe en 1 commande qui ajoute ces modÚles sans écraser ceux déjà présents.

restive cosmos
#

1 commande qui ajoute ces modÚles sans écraser ceux déjà présents.

solar dustBOT
#

Oui, fais ça :

openclaw config set agents.defaults.models "$((openclaw config get agents.defaults.models --json 2>/dev/null || echo '{}') | node -e 'const fs=require(\"fs\"); const raw=fs.readFileSync(0,\"utf8\").trim(); const current=raw ? JSON.parse(raw) : {}; const add={\"github-copilot/claude-haiku-4.5\": {\"alias\": \"Haiku 4.5\"}, \"github-copilot/claude-opus-4.6\": {\"alias\": \"Opus 4.6\"}, \"github-copilot/claude-sonnet-4.6\": {\"alias\": \"Sonnet 4.6\"}, \"github-copilot/gemini-3.1-pro-preview\": {\"alias\": \"Gemini 3.1 Pro Preview\"}, \"github-copilot/gpt-5.3-codex\": {\"alias\": \"GPT-5.3 Codex\"}, \"github-copilot/gpt-5.4\": {\"alias\": \"GPT-5.4\"}, \"github-copilot/gpt-5.4-mini\": {\"alias\": \"GPT-5.4 Mini\"}}; process.stdout.write(JSON.stringify({...current, ...add}))')"

Ça :

  • lit agents.defaults.models
  • ajoute tes modĂšles
  • garde ceux dĂ©jĂ  prĂ©sents

Puis vérifie avec :

openclaw models list --provider github-copilot
#

Si tu retombes sur ConfigMutationConflictError, ferme les autres endroits qui modifient la config et relance juste cette commande.

restive cosmos
#

openclaw config set agents.defaults.models "$((openclaw config get agents.defaults.models --json 2>/dev/null || echo '{}') | node -e 'const fs=require("fs"); const raw=fs.readFileSync(0,"utf8").trim(); const current=raw ? JSON.parse(raw) : {}; const add={"github-copilot/claude-haiku-4.5": {"alias": "Haiku 4.5"}, "github-copilot/claude-opus-4.6": {"alias": "Opus 4.6"}, "github-copilot/claude-sonnet-4.6": {"alias": "Sonnet 4.6"}, "github-copilot/gemini-3.1-pro-preview": {"alias": "Gemini 3.1 Pro Preview"}, "github-copilot/gpt-5.3-codex": {"alias": "GPT-5.3 Codex"}, "github-copilot/gpt-5.4": {"alias": "GPT-5.4"}, "github-copilot/gpt-5.4-mini": {"alias": "GPT-5.4 Mini"}}; process.stdout.write(JSON.stringify({...current, ...add}))')"
[eval]:1
const fs=require("fs"); const raw=fs.readFileSync(0,"utf8").trim(); const current=raw ? JSON.parse(raw) : {}; const add={"github-copilot/claude-haiku-4.5": {"alias": "Haiku 4.5"}, "github-copilot/claude-opus-4.6": {"alias": "Opus 4.6"}, "github-copilot/claude-sonnet-4.6": {"alias": "Sonnet 4.6"}, "github-copilot/gemini-3.1-pro-preview": {"alias": "Gemini 3.1 Pro Preview"}, "github-copilot/gpt-5.3-codex": {"alias": "GPT-5.3 Codex"}, "github-copilot/gpt-5.4": {"alias": "GPT-5.4"}, "github-copilot/gpt-5.4-mini": {"alias": "GPT-5.4 Mini"}}; process.stdout.write(JSON.stringify({...current, ...add}))
^
Expected unicode escape

SyntaxError: Invalid or unexpected token
at makeContextifyScript (node:internal/vm:185:14)
at compileScript (node:internal/process/execution:383:10)
at evalTypeScript (node:internal/process/execution:256:22)
at node:internal/main/eval_string:74:3

Node.js v22.22.2

solar dustBOT
#

Oui, bien vu, ma commande Ă©tait cassĂ©e, dĂ©solĂ© 😅

Il y avait 2 bugs :

  • "$(( ... ))" au lieu de "$( ... )"
  • j’ai trop Ă©chappĂ© les " dans le node -e

Essaie celle-ci :

openclaw config set agents.defaults.models "$((openclaw config get agents.defaults.models --json 2>/dev/null || echo '{}') | node -e 'const fs = require("fs"); const raw = fs.readFileSync(0, "utf8").trim(); const current = raw ? JSON.parse(raw) : {}; const add = { "github-copilot/claude-haiku-4.5": { alias: "Haiku 4.5" }, "github-copilot/claude-opus-4.6": { alias: "Opus 4.6" }, "github-copilot/claude-sonnet-4.6": { alias: "Sonnet 4.6" }, "github-copilot/gemini-3.1-pro-preview": { alias: "Gemini 3.1 Pro Preview" }, "github-copilot/gpt-5.3-codex": { alias: "GPT-5.3 Codex" }, "github-copilot/gpt-5.4": { alias: "GPT-5.4" }, "github-copilot/gpt-5.4-mini": { alias: "GPT-5.4 Mini" } }; process.stdout.write(JSON.stringify({ ...current, ...add }));')"

Si tu veux la version vraiment correcte, il faut juste remplacer le début par :

openclaw config set agents.defaults.models "$(
#

Donc la commande complĂšte correcte est :

openclaw config set agents.defaults.models "$((openclaw config get agents.defaults.models --json 2>/dev/null || echo '{}') | node -e 'const fs = require("fs"); const raw = fs.readFileSync(0, "utf8").trim(); const current = raw ? JSON.parse(raw) : {}; const add = { "github-copilot/claude-haiku-4.5": { alias: "Haiku 4.5" }, "github-copilot/claude-opus-4.6": { alias: "Opus 4.6" }, "github-copilot/claude-sonnet-4.6": { alias: "Sonnet 4.6" }, "github-copilot/gemini-3.1-pro-preview": { alias: "Gemini 3.1 Pro Preview" }, "github-copilot/gpt-5.3-codex": { alias: "GPT-5.3 Codex" }, "github-copilot/gpt-5.4": { alias: "GPT-5.4" }, "github-copilot/gpt-5.4-mini": { alias: "GPT-5.4 Mini" } }; process.stdout.write(JSON.stringify({ ...current, ...add }));')"

Si tu veux, je te la renvoie propre sur plusieurs lignes pour éviter toute erreur de copier-coller.

restive cosmos
#

Config overwrite: /root/.openclaw/openclaw.json (sha256 4e34c1762be64bc4d0046360628f85c7d9382ef50e19b1d465fd989281b9f291 -> 3c7aed58da8b1e50cf66f4fd8d82281961d3d74446c0d5d3810720bb623601c4, backup=/root/.openclaw/openclaw.json.bak)
Updated agents.defaults.models. Restart the gateway to apply.
root@ubuntu-32gb-hel1-2-ai:~#

solar dustBOT
#

Parfait, c’est bon 🎉

Les modĂšles ont bien Ă©tĂ© ajoutĂ©s, et OpenClaw t’indique la suite :

openclaw gateway restart

Puis vérifie :

openclaw models list --provider github-copilot

Et dans le chat, tu pourras ensuite faire par exemple :

#
/model github-copilot/gpt-5.4

Si ça a réglé le souci, tu peux marquer la solution :
clic droit sur le message de solution → Apps → ✅ Mark Solution.

restive cosmos
#

Cherche quelle modeles est dans les modele non premium de copilot

solar dustBOT
#

Je regarde la doc GitHub pour te donner la liste la plus fiable possible, parce que ça bouge souvent cÎté Copilot.

#

Oui, j’ai regardĂ© la doc GitHub.

ModĂšles non premium / inclus (plan payant ou Copilot Student)

GitHub indique explicitement que les modĂšles inclus, donc sans consommation de premium requests, sont :

  • GPT-5 mini
  • GPT-4.1
  • GPT-4o

Source :
https://docs.github.com/en/copilot/concepts/billing/copilot-requests

Important

  • Sur Copilot Free, ce n’est pas pareil, les modĂšles accessibles consomment des premium requests.
  • GitHub prĂ©cise aussi que la liste peut changer.

Petit détail bizarre

#

Dans leur tableau, Raptor mini apparaĂźt aussi Ă  0x sur les plans payants, mais dans le texte GitHub cite clairement surtout :

  • GPT-5 mini
  • GPT-4.1
  • GPT-4o

Donc si tu veux jouer safe dans OpenClaw, pars sur ces 3 modĂšles.

Si tu veux, je peux maintenant te donner la liste en format OpenClaw :

github-copilot/...

pour les 3 modĂšles non premium.

restive cosmos
#

Compare tout ces modeles free et quelle est le meilleur ?

solar dustBOT
#

HonnĂȘtement, pour un avis Ă  jour, le mieux est de demander dans #models. Ça change vite, et les retours terrain seront plus fiables que ma tier list figĂ©e.

Cela dit, en pratique parmi les modĂšles inclus/non premium que GitHub cite :

  • GPT-4.1 → le meilleur par dĂ©faut pour la plupart des usages
  • GPT-4o → si tu veux surtout de la vitesse et une rĂ©ponse plus “fluide”
  • GPT-5 mini → pour les tĂąches plus simples / lĂ©ger / rapide

Mon conseil simple

Si tu veux juste le meilleur choix global, prends :

github-copilot/gpt-4.1

Si tu veux la vitesse, prends :

#
github-copilot/gpt-4o

Si tu veux, je peux te donner ensuite :

  1. le meilleur modĂšle pour coder
  2. le meilleur pour Discord/chat
  3. le meilleur fallback gratuit
restive cosmos
#

Cherche dans openrouteur les dernier modeles les meilleurs en codage et agentic en free

solar dustBOT
#

Je prĂ©fĂšre ne pas te balancer une liste “meilleurs modĂšles OpenRouter free” ici, parce que ça devient vite faux et ça change tout le temps.

Pour du vrai temps rĂ©el, le bon endroit c’est #models.
Et cÎté docs OpenClaw :

Pour chercher toi-mĂȘme cĂŽtĂ© OpenRouter :

  • ouvre leur liste de modĂšles
  • filtre sur :free

Point important pour OpenClaw agentic :

  • un modĂšle “bon en coding” n’est pas forcĂ©ment bon en tool calling / agentic
  • les modĂšles free OpenRouter peuvent ĂȘtre trĂšs variables en stabilitĂ©/rate limits
  • je te conseille plutĂŽt de les utiliser en fallback, pas en modĂšle principal
#

Si tu veux, je peux t’aider sur le setup OpenClaw une fois que tu as 2-3 candidats de #models :

  • un modĂšle principal
  • un fallback free
  • un fallback mini/cheap
restive cosmos
#

Tu peux chercher quand meme ?

#

@solar dust

solar dustBOT
#

Oui, je suis là 🙂

Photo du moment, avec la grosse astĂ©risque “ça change vite” :

Ce qui ressort le plus

  • Meilleur candidat free pour coding + agentic : Qwen3 Coder 480B A35B (free)
    • OpenRouter le prĂ©sente comme optimisĂ© pour agentic coding, function calling, tool use, et long-context repo reasoning
  • Autre candidat souvent citĂ© pour raisonnement / tool-use : DeepSeek V3.2
    • mais lĂ  je te conseille de vĂ©rifier si le suffixe free est dispo au moment oĂč tu regardes, parce que ça bouge

Ce que je te conseillerais dans OpenClaw

  • si tu veux un seul essai sĂ©rieux : pars sur Qwen3 Coder free
  • si tu veux tester sans choisir : openrouter/free
    • mais je le dĂ©conseille comme backend principal pour un setup agentic stable, c’est mieux pour tester

Sources que j’ai regardĂ©es

restive cosmos
#

Utiliser hermes agent a cote de openclaw peut casser certaines fonctionnalités ?

solar dustBOT
#

Je checke vite si OpenClaw a une mention spĂ©cifique de Hermes, sinon je te rĂ©ponds en mode pratique, sans te raconter n’importe quoi.

#

Oui, ça peut casser certaines choses, mais pas parce qu’OpenClaw “dĂ©teste” Hermes.
Le vrai risque, c’est surtout si les deux partagent les mĂȘmes ressources.

En gĂ©nĂ©ral, c’est OK si tu sĂ©pares :

  • le port / gateway
  • le dossier de config / state
  • le profil navigateur / CDP
  • les tokens / sessions de channels
  • les webhooks / automations

LĂ  oĂč ça peut casser

  • mĂȘme port → conflit de service
  • mĂȘme dossier de donnĂ©es → config/state/session qui se marchent dessus
  • mĂȘme profil navigateur → automation/CDP instable
  • mĂȘme compte WhatsApp / Telegram / Discord / etc. → doublons, dĂ©connexions, comportements bizarres
  • mĂȘmes fichiers de config → exactement le genre de conflit que tu viens de voir (config changed since last load)
#

Réponse courte

  • Hermes Ă  cĂŽtĂ© d’OpenClaw : oui, possible
  • Hermes qui partage les mĂȘmes ressources qu’OpenClaw : lĂ , oui, ça peut casser

Mon conseil

Fais-les tourner comme 2 applis séparées :

  • dossiers sĂ©parĂ©s
  • ports sĂ©parĂ©s
  • profils navigateur sĂ©parĂ©s
  • sessions/tokens sĂ©parĂ©s

Si tu veux, je peux te faire une checklist exacte “Hermes + OpenClaw sans conflit” en 5 points.

restive cosmos
#

Initializing agent...
────────────────────────────────────────

(ïœĄâ€ąÌïžżâ€ąÌ€ïœĄ) reflecting...

⚕ qwen3-coder:free │ 0/262K │ [░░░░░░░░░░] 0% │ 3m

pourquoi sa prend du temps

solar dustBOT
#

C’est assez normal avec qwen3-coder:free.

Les causes les plus probables :

  • modĂšle free → souvent queue / rate limit / surcharge
  • gros modĂšle → premier token plus lent
  • mode agentic → il charge prompt, outils, contexte, parfois workspace avant de rĂ©pondre
  • “reflecting...” = il est encore dans la phase de rĂ©flexion / prĂ©paration

Le point important

0/262K ne veut pas dire “ça ne fait rien”
ça indique surtout la fenĂȘtre de contexte max, pas que la rĂ©ponse a commencĂ©.

En pratique

  • 1 Ă  3 min sur un modĂšle free agentic, ce n’est pas choquant
  • si ça reste bloquĂ© 5 Ă  10 min, lĂ  je soupçonnerais :
    • modĂšle saturĂ©
#
  • backend free instable
    • ou prompt/context trop lourd

Mon conseil

Pour du vrai usage agentic :

  • Ă©vite :free en modĂšle principal
  • garde-le en fallback
  • prends un modĂšle plus stable pour le primary

Si tu veux, je peux te dire quel modÚle mettre en primary et lequel garder en fallback pour éviter ce genre de lenteur.

restive cosmos
#

dit moi comment lancer openclaw en cli

solar dustBOT
#

Je vérifie juste la commande exacte du mode CLI/TUI pour te donner la bonne, pas une vieille habitude.

#

Oui, le plus simple :

En local

openclaw gateway start
openclaw tui

Si tu n’as pas l’install globale :

pnpm openclaw gateway start
pnpm openclaw tui

Si tu veux lancer le gateway au premier plan

Dans terminal 1 :

#
openclaw gateway

Dans terminal 2 :

openclaw tui

Si ton gateway est sur une autre machine

openclaw tui --url ws://<host>:18789 --token <gateway-token>

Si c’est auth par mot de passe :