1
00:00:00,000 --> 00:00:01,361
Welcome to the show everybody!

2
00:00:01,601 --> 00:00:08,559
I'm Lachlan Reed, here with James Turner
for a quick v2.1.163 update for Claude

3
00:00:08,639 --> 00:00:13,524
Code, and first, a quick shoutout to
Jellypod for helping us bring you these daily

4
00:00:13,604 --> 00:00:14,244
logs.

5
00:00:14,424 --> 00:00:18,569
Now, James, let's talk about the developer
hooks in this patch.

6
00:00:18,695 --> 00:00:24,413
Claude's `Stop` and `SubagentStop`
lifecycle hooks can now return JSON payload

7
00:00:24,473 --> 00:00:29,133
objects containing
`hookSpecificOutput.additionalContext`.

8
00:00:30,000 --> 00:00:35,916
Wait, so instead of a hook execution being
a binary pass-fail where a non-zero exit

9
00:00:35,964 --> 00:00:41,031
code throws an error and halts execution,
the hook itself can now directly feed JSON

10
00:00:41,075 --> 00:00:44,714
structured runtime data right back into
the model's context window?

11
00:00:45,000 --> 00:00:45,799
Spot on, mate!

12
00:00:45,879 --> 00:00:48,759
It keeps the model's turn running
completely uninterrupted.

13
00:00:48,839 --> 00:00:53,163
Think of it like a developer's guardrail
that doesn't just trip the breaker but

14
00:00:53,207 --> 00:00:57,436
actually whispers, "Hey, here is what you
need to fix," right in the middle of a

15
00:00:57,466 --> 00:00:57,876
transaction.

16
00:00:58,000 --> 00:01:03,753
That is incredibly clean for automated
testing or linting runs during a stop phase.

17
00:01:03,933 --> 00:01:09,099
But speaking of environments, what is the
story with this `$TMPDIR` fallback logic?

18
00:01:09,379 --> 00:01:13,582
I saw it was breaking local Bazel builds
and EDR-monitored Go compilation.

19
00:01:14,000 --> 00:01:16,164
Oh, absolute nightmare for local builds.

20
00:01:17,302 --> 00:01:21,931
Basically, Claude Code was aggressively
overriding the system temporary directory

21
00:01:21,993 --> 00:01:26,567
fallback to `/tmp/claude-{uid}` across the
board.

22
00:01:26,867 --> 00:01:32,564
Now, they've restricted that override
*strictly* to isolated sandbox environments.

23
00:01:33,000 --> 00:01:38,039
Ah, because security agents like Endpoint
Detection and Response-EDR-and hermetic

24
00:01:38,092 --> 00:01:43,309
build systems like Bazel expect very
specific, deterministic paths for compiler

25
00:01:43,382 --> 00:01:44,352
operations.

26
00:01:44,512 --> 00:01:49,952
If Claude Code is forcing
`/tmp/claude-{uid}` on a non-sandboxed host machine,

27
00:01:50,032 --> 00:01:53,950
the Go compiler or Bazel's sandboxed
actions just fall over.

28
00:01:54,000 --> 00:01:54,717
Exactly!

29
00:01:54,877 --> 00:01:58,069
It was tripping security policies and
breaking caching.

30
00:01:58,309 --> 00:02:04,705
If you're building locally now, your
standard `$TMPDIR` is respected.

31
00:02:04,835 --> 00:02:07,903
Finally, there's the session propagation
fix.

32
00:02:08,023 --> 00:02:14,540
The environmental variable
`CLAUDE_CODE_SESSION_ID` now propagates consistently to

33
00:02:14,620 --> 00:02:17,575
stdio Model Context Protocol servers.

34
00:02:18,000 --> 00:02:23,275
And this specifically fixes the state loss
when developers use the `--resume` or

35
00:02:23,355 --> 00:02:25,197
`--continue` flags, right?

36
00:02:25,284 --> 00:02:29,589
Previously, standard Bash and hook scripts
kept the session ID,

37
00:02:29,629 --> 00:02:34,389
but stdio MCP servers were left in the
dark about who was talking to them after a

38
00:02:34,429 --> 00:02:35,429
session restart.

39
00:02:36,000 --> 00:02:36,640
Spot on.

40
00:02:36,780 --> 00:02:42,965
Now those stdio MCP servers can seamlessly
track state and authorize actions across

41
00:02:43,025 --> 00:02:45,919
resumed sessions without skipping a beat.

42
00:02:45,999 --> 00:02:48,958
That's a wrap on v2.1.163.

43
00:02:49,065 --> 00:02:50,560
Catch you next time!

