1
00:00:00,600 --> 00:00:07,040
Codex CLI 0.167.0 landed on November 6th,
and the one change I'd actually stop and

2
00:00:07,080 --> 00:00:12,100
try is this: you can now open the agent
command center from a plain terminal with

3
00:00:12,160 --> 00:00:14,340
`codex agents --no-daemon`.

4
00:00:14,900 --> 00:00:18,260
And before we get into it, thanks to
Jellypod AI for sponsoring this episode.

5
00:00:18,947 --> 00:00:20,007
Quick bit of context.

6
00:00:20,467 --> 00:00:24,567
We've covered background process
management before, the daemon auto start work

7
00:00:24,627 --> 00:00:30,627
around PR 59447 and the feature flag
features.daemon_auto_start.

8
00:00:31,067 --> 00:00:32,987
We've also covered connection
multiplexing.

9
00:00:33,727 --> 00:00:37,787
Those episodes were about keeping a long
lived process around so agents can keep

10
00:00:37,847 --> 00:00:38,147
running.

11
00:00:38,947 --> 00:00:40,107
This release goes the other way.

12
00:00:40,567 --> 00:00:44,407
It brings agent supervision to embedded,
daemonless CLI sessions.

13
00:00:45,318 --> 00:00:47,158
So what changed, exactly.

14
00:00:47,818 --> 00:00:53,198
In 0.167.0, pull requests 58238, 58239,

15
00:00:53,798 --> 00:00:59,718
58263 and 58264 enable the agent command
center for embedded sessions.

16
00:01:00,258 --> 00:01:05,518
You run `codex agents --no-daemon`, and
you get the command center without a managed

17
00:01:05,558 --> 00:01:06,378
background daemon.

18
00:01:06,958 --> 00:01:10,038
The command center and the session picker
also now mark unread results.

19
00:01:10,618 --> 00:01:13,698
That's the second half of this, and it's
the part that changes how you work.

20
00:01:14,562 --> 00:01:15,302
Why does it matter?

21
00:01:16,042 --> 00:01:20,302
If you run several agents in parallel, the
hard part is knowing which one finished

22
00:01:20,342 --> 00:01:21,522
while you were looking at another.

23
00:01:22,202 --> 00:01:24,542
Before, you'd guess, or tail logs.

24
00:01:25,162 --> 00:01:28,802
Now a session with a new completed result
gets flagged as unread.

25
00:01:29,582 --> 00:01:34,002
And no daemon means you can use this in
places where long lived background processes

26
00:01:34,062 --> 00:01:38,102
are unwanted, like a clean container, an
ephemeral cloud shell,

27
00:01:38,322 --> 00:01:39,462
or a locked down box.

28
00:01:40,322 --> 00:01:43,982
That's my read on the impact, the release
notes just describe the behavior.

29
00:01:44,837 --> 00:01:45,557
How to use it.

30
00:01:46,277 --> 00:01:48,937
Start with `codex agents --no-daemon`.

31
00:01:49,517 --> 00:01:52,217
Then in the session picker, which you
reach through resume,

32
00:01:52,697 --> 00:01:54,817
look for the unread markers next to your
sessions.

33
00:01:55,497 --> 00:01:58,757
Open a session and view its transcript,
and that acknowledges it.

34
00:01:59,317 --> 00:02:02,037
Also, the picker can now switch between
connected backends,

35
00:02:02,457 --> 00:02:04,357
and your unsent draft is kept when you
switch.

36
00:02:05,037 --> 00:02:08,777
That's pull requests 58280 and 58457.

37
00:02:09,585 --> 00:02:13,785
Now the protocol underneath, because if
you build clients, this is useful.

38
00:02:14,345 --> 00:02:17,685
The app server README documents an
experimental read state.

39
00:02:18,445 --> 00:02:22,525
Local durable user threads expose a
`readState` on `thread/read`,

40
00:02:23,145 --> 00:02:26,005
and `thread/list` returns a `readStates`
map.

41
00:02:26,745 --> 00:02:30,185
A read state is an object with
`firstUnread` and `revision`.

42
00:02:30,225 --> 00:02:33,045
`firstUnread` is null when the thread is
read.

43
00:02:33,625 --> 00:02:38,545
It's `threadStart` for an explicit unread
mark, or a turn ID for the earliest unread

44
00:02:38,585 --> 00:02:39,485
completed result.

45
00:02:40,073 --> 00:02:45,313
To change it, you call
`thread/readState/update` with the thread ID,

46
00:02:45,733 --> 00:02:50,393
an expected revision, and an operation of
type read or type unread.

47
00:02:51,053 --> 00:02:53,413
The expected revision has to match
exactly.

48
00:02:54,133 --> 00:02:59,673
If it doesn't, you get JSON-RPC error
negative 32600 with the reason

49
00:02:59,813 --> 00:03:02,973
`readStateConflict`, and the current state
in the error data.

50
00:03:03,753 --> 00:03:08,353
The README says don't blindly retry,
because the original action may precede a

51
00:03:08,393 --> 00:03:11,373
result you haven't seen, or a mark from
another window.

52
00:03:12,173 --> 00:03:14,973
And revisions are equality tokens, not
clocks.

53
00:03:15,553 --> 00:03:18,113
Never compare or merge them across threads
or hosts.

54
00:03:18,758 --> 00:03:19,518
Caveats.

55
00:03:19,858 --> 00:03:25,978
This read state API is marked
experimental, and clients need the experimentalApi

56
00:03:26,038 --> 00:03:27,398
capability to update it.

57
00:03:28,138 --> 00:03:31,278
Forked history doesn't publish inherited
turns as new results.

58
00:03:32,158 --> 00:03:38,318
And one thing I'd verify yourself: I'd
expect `--no-daemon` not to combine with

59
00:03:38,338 --> 00:03:42,498
`--remote`, but check that against your
own build before relying on it.

60
00:03:43,338 --> 00:03:46,698
A few smaller things in 0.167.0 worth
knowing.

61
00:03:47,478 --> 00:03:49,318
First, inline patch review.

62
00:03:49,918 --> 00:03:53,498
While an approval prompt is open, you can
expand patch details right in the

63
00:03:53,538 --> 00:03:56,218
transcript, pull request 58281.

64
00:03:56,918 --> 00:03:59,078
No more dismissing the prompt just to read
the diff.

65
00:03:59,885 --> 00:04:01,145
Second, network approvals.

66
00:04:01,625 --> 00:04:05,945
Prompts now close when their request ends,
and concurrent requests to the same

67
00:04:06,005 --> 00:04:07,664
endpoint prompt one at a time.

68
00:04:08,205 --> 00:04:13,385
That's 58350 and 58351, and it should end
the stack of duplicate prompts.

69
00:04:14,005 --> 00:04:17,805
Third, Ctrl+L clears the display but keeps
earlier messages,

70
00:04:18,065 --> 00:04:19,245
reachable through Ctrl+T.

71
00:04:20,003 --> 00:04:24,623
Fourth, on supported terminals you get
thumbnail previews of local image attachments

72
00:04:24,683 --> 00:04:25,443
in the composer.

73
00:04:25,923 --> 00:04:30,823
And for cloud users, API key and provider
options now live under Sign in another

74
00:04:30,883 --> 00:04:36,583
way, with an opt in `gcp_setup_wizard` for
Vertex AI using Application Default

75
00:04:36,663 --> 00:04:38,463
Credentials or a credential file.

76
00:04:39,383 --> 00:04:44,283
Last, a compaction fix: automatic context
compaction now accounts for retained

77
00:04:44,343 --> 00:04:48,403
output from failed responses and responses
missing token usage data,

78
00:04:48,763 --> 00:04:50,903
pull request 58404.

79
00:04:51,663 --> 00:04:52,783
That's the changelog for today.

