{"version":"2.1.233","anchor":"repl-contexts-moved-into-per-session-tool-state","canonical_anchor":"repl-contexts-moved-into-per-session-tool-state","heading":"REPL contexts moved into per-session tool state","tier":"internal","area":"REPL","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.233\/e\/repl-contexts-moved-into-per-session-tool-state","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.233","markdown":"### REPL contexts moved into per-session tool state\n\nREPL contexts moved to a registry that releases timers even on error paths.\n\n**What**\n\nREPL contexts no longer live on the session object. They sit in a registry with explicit release, wired into session teardown and into a `finally` block on the MCP server tool path so timers get cleared on the error route too.\n\n**Details**\n\n- `getReplContexts()` and `setReplContext()` are gone from tool-use context objects, including both non-interactive builders; the REPL tool and the fork\/replay-log path now read a keyed entry in tool state instead.\n- A teardown step is literally named replContext.\n- The REPL feature stays behind `tengu_slate_harbor`, which falls back to false, or `CLAUDE_CODE_REPL`.\n\n**Evidence**\n\n`replContext`, `getReplContexts: () => ({}),`\n\n- Flag `tengu_slate_harbor`: Not enough to say (read for one account on one subscription tier against v2.1.233; this account: no value returned, anonymous baseline: no value returned, compiled default: off) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.\n- Area: REPL\n- Tier: Under the hood\n- Useful: 2\/5\n- Signal: 2\/5"}