Shared chat engine for non-Claude sessions (unified turn engine)
Shared chat engine for non-Claude sessions makes Codex, Pi, Gemini, OpenClaw and the other non-Claude engines store and display a conversation the same way Claude does, so their chats look consistent. It has no switch: since 2026-10-02 the shared engine is the only path.
What it is
What it does
Shared chat engine for non-Claude sessions makes Codex, Pi, Gemini, OpenClaw and the other non-Claude engines store and display a conversation the same way Claude does, so their chats look consistent. It lives at Settings → Chat → "Shared chat engine for non-Claude sessions" and is on by default.
The most visible effect: when one of these engines continues a turn on its own (a "self-resume" — for example, after its own background tool finishes and the app re-invokes it), its new reply now opens a fresh chat message instead of being merged onto — and hiding — the previous reply. That hidden-final-message glitch, and the older "the dot stays amber while the engine is still typing" glitch, are what this fixes.
Claude is the gold standard the others are being brought up to. Claude itself is not changed by this toggle yet — it moves onto the same shared engine last, behind the same switch, so its hard-won behavior can always be restored instantly.
Where to find it
Settings → Chat — the toggle Shared chat engine for non-Claude sessions.
How it behaves
Why it exists
Each non-Claude engine used to run its own stripped-down copy of Claude's turn logic, which is why their chats rendered rougher and kept hitting the same class of bug. The shared engine routes them all through ONE "seal a turn" step that writes the same turn information Claude writes — so a fix lands once, for every engine.
Turning it off (rollback)
Not possible, and that is deliberate. The Settings toggle and the
AMC_DISABLE_UNIFIED_TURN_ENGINE=1 kill switch were REMOVED on 2026-10-02 (Slice 8 A2).
Both kept a second, older seal body alive as the thing to revert TO, and that body was never
the one production ran — it had been unreachable since this feature went live on
2026-06-14. A route nobody runs is not a rollback; the rollback for a deleted route is a
git revert.
For agents
Under the hood (for agents with repo access)
- No setting and no flag: the seal has ONE path since Slice 8 A2. The fork that chose
between the shared finalize and the legacy bare row, and the
unified-turn-engine-flag.tsmodule behind it, are deleted. - The shared "seal a turn" leaf is
external-turn-finalize.ts(finalizeExternalTurnRowbuildExternalTurnMetadata). The self-resume "new turn" marker (metadata.turnBoundary) is armed inmaybeResumeOnStream— on aneeds_youbounce ONLY, never astalledmid-turn bounce — inbase-external-session-manager.ts.
- Invariants the-unified-turn-path-is-a-kill-switch–no-new-hardcoded-provider-branch in
provider-registry-contract.md; program trackerdocs/plans/2026-06-11-unified-turn-lifecycle-design.md.
Related
Switching providers explains how a non-Claude engine is chosen in the first place, and AI providers is the landing page for the full provider matrix; this page covers how that conversation is then stored and displayed. The provider's own CLI keeps its own transcript.
Last verified 2026-10-06