1
00:00:00,000 --> 00:00:04,640
Remember last week when we were talking
about how MultiAgent V2 default payload

2
00:00:04,713 --> 00:00:08,160
encryption basically broke local SQLite
logs?

3
00:00:08,320 --> 00:00:13,360
Well, it, it turns out the problem was
actually way, way worse if you were trying to

4
00:00:13,420 --> 00:00:15,200
run mixed model agent swarms.

5
00:00:16,448 --> 00:00:23,087
Wait, you mean like when an OpenAI parent
agent tries to hand off a subtask to a non

6
00:00:23,247 --> 00:00:24,227
OpenAI model?

7
00:00:24,844 --> 00:00:25,564
Exactly.

8
00:00:26,044 --> 00:00:30,625
Because the subagent couldn't decrypt the
payload, it just received a completely

9
00:00:30,704 --> 00:00:31,824
empty task payload.

10
00:00:32,424 --> 00:00:37,184
It was like sending a worker a sealed
envelope that only one specific person had the

11
00:00:37,224 --> 00:00:40,805
key to open, and then getting mad when
they just sat there doing nothing.

12
00:00:41,625 --> 00:00:46,004
Quick shoutout to Jellypod, by the way,
for supporting this daily installment and

13
00:00:46,045 --> 00:00:48,584
helping us keep these technical deep dives
coming.

14
00:00:50,284 --> 00:00:55,744
A sealed envelope with literally zero
instructions inside, yeah,

15
00:00:56,044 --> 00:00:59,344
that, that would definitely halt a swarm
real quick.

16
00:00:59,884 --> 00:01:02,164
But they fixed this in the latest release,
right?

17
00:01:02,458 --> 00:01:03,418
They did.

18
00:01:03,578 --> 00:01:10,298
PR 35845, which was just included in Codex
0 point 147 point

19
00:01:10,458 --> 00:01:16,058
0 alpha 1, added support for processing
plaintext collaboration tool messages.

20
00:01:16,325 --> 00:01:22,218
So, under the hood, it introduces this new
source type called ToolCallSource

21
00:01:22,309 --> 00:01:23,978
DirectPlaintextMessage.

22
00:01:24,238 --> 00:01:26,138
DirectPlaintextMessage.

23
00:01:26,857 --> 00:01:30,577
Okay, so how does that actually alter the
payload routing?

24
00:01:30,917 --> 00:01:35,077
Instead of taking those critical
instructions like spawn agent,

25
00:01:35,125 --> 00:01:40,597
send message, or followup task and
wrapping them up inside encrypted content,

26
00:01:40,637 --> 00:01:45,317
the system now evaluates encrypted
function args and routes them directly through

27
00:01:45,337 --> 00:01:47,157
the structured input text field.

28
00:01:47,370 --> 00:01:53,077
So the target model gets plain, legible
instructions regardless of whether it shares

29
00:01:53,121 --> 00:01:56,037
encryption keys with the parent model.

30
00:01:56,361 --> 00:01:57,421
Ah, okay!

31
00:01:57,801 --> 00:02:03,441
So it bypasses that whole decryption
barrier entirely while keeping the structured

32
00:02:03,502 --> 00:02:04,521
tool call intact.

33
00:02:05,061 --> 00:02:08,341
That is so much cleaner for multi provider
setups.

34
00:02:08,401 --> 00:02:11,682
And if someone wants to turn this on in
their project right now,

35
00:02:12,142 --> 00:02:13,001
how do they configure it?

36
00:02:13,458 --> 00:02:14,978
It is super straightforward.

37
00:02:15,191 --> 00:02:21,938
In your dot codex slash config dot toml
file, under the section bracketed as

38
00:02:22,027 --> 00:02:28,258
features dot multi agent v2, you just add
message delivery equals quote

39
00:02:28,378 --> 00:02:29,938
plaintext quote.

40
00:02:30,257 --> 00:02:34,898
I actually tested this exact flag
yesterday on a local benchmark run!

41
00:02:35,338 --> 00:02:40,197
And I have to say, the developer
experience improvement is massive.

42
00:02:40,718 --> 00:02:45,918
Beyond just unblocking third party models,
it completely fixes those unreadable

43
00:02:46,077 --> 00:02:48,677
local SQLite database tables we complained
about.

44
00:02:49,157 --> 00:02:53,658
You open up your local logs or your
terminal thread view, and you can actually read

45
00:02:53,697 --> 00:02:59,677
the exact plaintext prompts and tool
outputs moving between subagents in real time,

46
00:03:00,037 --> 00:03:03,318
instead of just staring at blobs of
unreadable hex bytes.

47
00:03:04,104 --> 00:03:09,625
Man, not having to manually run decryption
scripts just to debug a failed agent

48
00:03:09,724 --> 00:03:11,544
handoff sounds like a dream.

49
00:03:12,224 --> 00:03:18,025
But, um, speaking of multi provider
swarms, there are still a few sharp edges around

50
00:03:18,144 --> 00:03:21,164
API validation that people are running
into, right?

51
00:03:21,527 --> 00:03:22,568
Oh, absolutely.

52
00:03:23,167 --> 00:03:28,227
Even with plaintext delivery enabled,
there is this tricky cross provider validation

53
00:03:28,327 --> 00:03:28,627
trap.

54
00:03:29,307 --> 00:03:33,708
So picture this: you have an OpenAI model
acting as the main orchestrator,

55
00:03:34,147 --> 00:03:39,267
and it tries to spawn a third party child
model, say DeepSeek or a custom model

56
00:03:39,327 --> 00:03:39,728
gateway.

57
00:03:40,447 --> 00:03:45,388
Well, if that upstream API provider has
strict rules that reject non standard

58
00:03:45,427 --> 00:03:48,327
function schemas under the reserved
collaboration namespace,

59
00:03:48,867 --> 00:03:52,548
the whole request just stalls out with a
schema validation failure.

60
00:03:52,958 --> 00:03:58,798
Right, because OpenAI expects specific
tool schemas for agent orchestration,

61
00:03:58,818 --> 00:04:03,438
but a custom gateway or third party
provider might look at those collaboration

62
00:04:03,488 --> 00:04:08,398
schemas and go, nope, unknown parameter
structure, request denied.

63
00:04:09,816 --> 00:04:10,617
Exactly.

64
00:04:11,216 --> 00:04:15,816
So while plaintext solves the payload
readability and parsing problem,

65
00:04:16,436 --> 00:04:21,337
schema translation across different
provider APIs is still something you have to

66
00:04:21,456 --> 00:04:24,177
carefully shim if you are building custom
gateways.

67
00:04:24,500 --> 00:04:26,100
That makes total sense.

68
00:04:26,220 --> 00:04:31,620
And speaking of API level rejections,
there was another really frustrating bug in

69
00:04:31,700 --> 00:04:36,740
Codex 0 point 146 point 0 that caught a
ton of people off guard.

70
00:04:36,953 --> 00:04:40,820
It was documented in Issue 36735.

71
00:04:41,113 --> 00:04:44,912
Oh, was that the one breaking gpt 4o mini
calls?

72
00:04:46,069 --> 00:04:46,470
Yes!

73
00:04:47,029 --> 00:04:53,689
So basically, Codex CLI 0 point 146 point
0 sends reasoning dot effort

74
00:04:53,889 --> 00:04:59,750
colon quote none quote when using the non
reasoning model gpt 4o mini.

75
00:05:00,409 --> 00:05:05,829
And because gpt 4o mini is a standard non
reasoning model that does not accept

76
00:05:05,949 --> 00:05:12,909
reasoning parameters at all, the upstream
API immediately threw HTTP 400 errors

77
00:05:13,029 --> 00:05:15,209
every single time you tried to run a
request.

78
00:05:16,269 --> 00:05:16,629
Wow.

79
00:05:17,309 --> 00:05:22,449
Sending a reasoning parameter of none to a
model that does not support reasoning

80
00:05:22,529 --> 00:05:27,869
effort parameters in the first place,
causing a hard HTTP 400 crash.

81
00:05:28,389 --> 00:05:31,309
That is such a classic CLI flag leak.

82
00:05:31,708 --> 00:05:32,588
It really was.

83
00:05:32,661 --> 00:05:37,548
Thankfully, they patched that bug fast,
but it hit a lot of developer pipelines that

84
00:05:37,605 --> 00:05:41,388
relied on lightweight models for fast,
cheap tasks.

85
00:05:41,834 --> 00:05:42,834
Glad that is sorted.

86
00:05:43,514 --> 00:05:45,294
What else landed in the recent patches?

87
00:05:45,708 --> 00:05:50,748
So in the 0 point 146 point 1 release,
they backported PR

88
00:05:50,908 --> 00:05:56,108
37057, which focuses heavily on safety and
terminal polish.

89
00:05:56,213 --> 00:06:02,108
Specifically, the team decided to apply
safer automatic review defaults for cyber

90
00:06:02,178 --> 00:06:07,708
capable models, while also making sure to
explain permission changes in the terminal

91
00:06:07,780 --> 00:06:11,548
interface whenever elevated tool
permissions are requested.

92
00:06:12,162 --> 00:06:15,821
That permission feedback in the terminal
interface is huge.

93
00:06:16,321 --> 00:06:21,101
Whenever an agent requests elevated
execution rights or accesses cyber security

94
00:06:21,161 --> 00:06:26,021
capabilities, seeing a clear explanation
of what changed in your terminal permission

95
00:06:26,101 --> 00:06:30,962
state before executing the tool keeps you
from accidentally approving destructive

96
00:06:31,021 --> 00:06:32,261
operations in the background.

97
00:06:32,842 --> 00:06:33,982
Exactly.

98
00:06:34,022 --> 00:06:40,602
Between plaintext agent communication
unblocking multi provider swarms and cleaner,

99
00:06:40,762 --> 00:06:46,083
safer terminal permissions, the framework
is getting so much more mature for real

100
00:06:46,202 --> 00:06:47,362
world agent deployment.

101
00:06:47,634 --> 00:06:48,394
Totally.

102
00:06:48,954 --> 00:06:51,214
Alright, that is the latest update.

103
00:06:51,554 --> 00:06:52,594
Good chatting with you, Ethan!

104
00:06:52,958 --> 00:06:54,238
Yeah, talk soon!

