1
00:00:00,140 --> 00:00:04,019
You run a simple npm test or an untrusted
build script inside a sandbox,

2
00:00:04,059 --> 00:00:08,979
and boom, it silently reads your dot env
file and exfiltrates your API keys.

3
00:00:09,779 --> 00:00:12,420
It, it happened to me last month, and
honestly it kept me up at night.

4
00:00:12,880 --> 00:00:18,079
But today, brought to you by our sponsor
Jellypod AI, Claude Code version two point

5
00:00:18,159 --> 00:00:22,119
one point two hundred twenty one has a
proper fix for this called mode mask.

6
00:00:22,307 --> 00:00:25,206
Ah, mate, the classic dot env leak.

7
00:00:25,946 --> 00:00:29,706
So how mode mask works on Linux and WSL is
actually really clever.

8
00:00:30,467 --> 00:00:33,406
Instead of giving the sandboxed command
your actual secrets file,

9
00:00:33,906 --> 00:00:36,226
Claude Code generates a dummy sentinel
copy.

10
00:00:37,167 --> 00:00:41,486
Sandboxed commands read a sentinel copy,
either the whole file or just the specific

11
00:00:41,566 --> 00:00:44,086
spans captured by an extract regex you
define.

12
00:00:44,449 --> 00:00:49,329
Wait, so if the script only sees dummy
sentinel bytes, how do your outbound network

13
00:00:49,389 --> 00:00:52,129
calls actually succeed without throwing
auth errors?

14
00:00:52,326 --> 00:00:52,686
Right!

15
00:00:53,186 --> 00:00:55,147
That is the secret proxy magic.

16
00:00:56,006 --> 00:01:00,306
The sandbox network proxy intercepts the
outgoing HTTP traffic as it leaves,

17
00:01:00,806 --> 00:01:05,047
detects those sentinel values, and
dynamically swaps in the real credentials right

18
00:01:05,087 --> 00:01:05,646
on egress.

19
00:01:06,226 --> 00:01:10,366
The script never touches the real key, but
the API endpoint receives the real thing.

20
00:01:10,822 --> 00:01:12,102
Man, that is slick.

21
00:01:12,922 --> 00:01:17,222
But, uh, what happens if you are doing
something like offline cryptographic signing

22
00:01:17,282 --> 00:01:18,302
inside the sandbox?

23
00:01:18,492 --> 00:01:20,392
Ah, see, that is the catch!

24
00:01:20,952 --> 00:01:25,112
If your script tries to sign a payload
locally using the key file directly,

25
00:01:25,632 --> 00:01:29,732
it reads those dummy sentinel bytes
instead of raw private keys,

26
00:01:30,272 --> 00:01:31,892
so the signature fails completely.

27
00:01:32,673 --> 00:01:36,992
And heads up for Mac users, because of
macOS sandbox driver limitations,

28
00:01:37,492 --> 00:01:40,132
mode mask falls back to deny mode on
Darwin.

29
00:01:40,409 --> 00:01:42,149
Good catch on the crypto edge case!

30
00:01:42,829 --> 00:01:46,929
Beyond masking, this two point one point
two hundred twenty one release dropped some

31
00:01:47,009 --> 00:01:49,010
huge quality of life wins.

32
00:01:49,069 --> 00:01:52,769
First up, VS Code Focus View with Control
Alt F.

33
00:01:53,429 --> 00:01:58,290
It instantly collapses all those noisy
tool outputs and massive stack traces so you

34
00:01:58,309 --> 00:02:00,049
can actually read the conversation
history.

35
00:02:00,182 --> 00:02:03,482
Oh, fair dinkum, my editor view was
getting ridiculously cluttered!

36
00:02:04,282 --> 00:02:05,483
What else did they pack in there?

37
00:02:05,661 --> 00:02:09,881
They added automatic Git worktrees
whenever you spawn sub sessions using slash fork,

38
00:02:10,361 --> 00:02:13,461
so your main branch stays totally
untouched while the fork runs.

39
00:02:13,962 --> 00:02:18,261
Plus, the slash status command now clearly
breaks down attached foreground tasks

40
00:02:18,601 --> 00:02:20,381
versus unattended background jobs.

41
00:02:20,776 --> 00:02:22,076
That is proper neat.

42
00:02:22,897 --> 00:02:27,096
Go update your CLI, give mode mask a spin,
and check out Jellypod AI.

43
00:02:27,736 --> 00:02:28,476
Catch you next time!

