Repository navigation
v1.23.19
-
agents projects prs <project> --jsoncarriesmergeableandmergeableState(PHNX-4326).
Every open row had both null, because GitHub's REST PR list never computes them. Each open
PR the read lists is now read with RESTpulls/{n}(cached 60 seconds, at most eight at a
time), the same read and values as the cross-org form and--number(false/"dirty"on
a conflict). A PR whose read fails keeps both null and the failure is named inciError.
Source:src/lib/github/project-prs.ts. -
The Projects tab is retired from
menubar.menu.tabOrder(PHNX-4326).projectsis no
longer in the default order or required in a stored one; an order orhiddenTabslist that
still names it is accepted and kept in place, so older menus keep working. Source:
src/lib/device-config.ts. -
Cloud tasks nothing has confirmed for a day no longer show as working (PHNX-4326).
Aqueued/allocating/runningtask whose last update is over 24 hours old is left
out of the active list and the feed;agents cloud liststill asks the provider about
every unsettled task. Source:src/lib/cloud/store.ts. -
Previous sessions on
agents feed watch --jsonarrive with their card text (PHNX-4326).
A closed session's row now carrieslastAgentLine,request,todos,artifactsand
importantMessagelike a live row. Before, only 5 of 346 previous rows across the fleet
had a reply line; on this change's test machine 31 of 41 local previous rows have one
(the other 10 have no assistant text in their transcript). The text comes from the
preview digest cached against each transcript, so each transcript is parsed once per
change: the reset serves what is cached and the stream upserts the rest as it builds
them. Source:src/lib/session/remote/watch.ts,src/lib/session/preview-digest.ts. -
agents ps previewtakes several ids (PHNX-4326).agents ps preview <id> <id> --jsonprints one array in argument order, each element the single-id
envelope plusquery; an id that does not resolve is an element witherrorset.
One id still prints the single object. Seedocs/menubar.md. Source:
src/commands/ps.ts. -
agents ps preview --jsoncarriessubAgents,imagesand
producedArtifacts, andtodosfolds Claude's task tools (PHNX-4326).subAgentslists each spawned subagent with its
status and duration,imagesthe last six images the session was given, read or
wrote that still exist on disk, andtodosnow includesTaskCreate/TaskUpdate
checklists.producedArtifactsis the list a live feed row'sartifactsholds.
Seedocs/menubar.md. Source:src/lib/session/preview-digest.ts,
src/lib/session/glance-files.ts. -
Accounts added on your personal device reach the workers without a git pull (PHNX-4342).
agents accounts addwrites the account row to~/.agents/agents.yamland only
commits it locally. A worker learned the row only after a user-repo push and pull, so
a worker whose~/.agentshad diverged never saw it.agents accounts login <harness>#<name> --per-devicethen failed there withNo grok account '<name>'. A
personal or desktop device now publishes its per-device account rows in the fleet state
it already exchanges with peers. A worker adds any row
it lacks when the sender is headed and created that row; it never overwrites or
removes a local row. Only per-device accounts travel this way, and only their identity
fields; a credential reference never does. Rows added before theprovisioningfield
existed are not sent; workers already have those from earlier user-repo pulls. Each
worker still signs in for itself with--per-device.
Source:cli/src/lib/daemon/account-state-daemon-service.ts,
cli/src/lib/accounting/usage-sync.ts,cli/src/lib/account-registry.ts. -
A Grok account with no balance left reads as out of credits (PHNX-4342). When xAI
refuses a turn with402 Payment Required: Grok Build usage balance exhausted, that
account now showsout of creditsfor one hour, and rotation and--device autoskip
it instead of choosing it again. Before this, Grok usage came only from the last
billing: fetched credits configlog line, which could be days old, so an exhausted
account still read as ready. Only that balance message counts; another 402 does not.
Source:cli/src/lib/accounting/usage.ts. -
A Grok, Kimi or Muse version with no login of its own reads as signed out. The
launcher points these harnesses at their version home (GROK_HOME,KIMI_CODE_HOME,
XDG), so they never read the shared~/.grokor~/.kimi-codelogin. The account
check did read it, and listed a version as signed in with that account while the
harness itself saidNot signed in. Cursor, Droid and Antigravity keep their
shared-home lookup. Source:cli/src/lib/agent-spec/agents.ts. -
A Codex install whose platform binary npm skipped is now caught and repaired (PHNX-4342).
Codex 0.162 reports a missing platform package asMissing optional dependency @openai/codex-linux-x64, which the launch check did not recognize, so it passed a
dead binary. Updates committed it, the daemon never healed it, andagents run codex
launched it and exited 1 within a fraction of a second, which showed up as
Connection to <device> closed.after--device auto. The check now recognizes that
wording, so the run repairs the install before it launches, and an update that
produces one rolls back. Its message now quotes the matching line instead of a stack
frame. Source:cli/src/lib/installations/versions.ts. -
--device autono longer saysno ready harness accountwhen it never heard back (PHNX-4342).
When a worker's readiness probe ran past its 8 second budget, the refusal said the
worker had no ready account even when it had a signed-in one. It now says
readiness probe timed outand counts it in the retry hint, orreadiness probe did not answerfor any other silent failure. A worker that did answernot readynow
shows its own reason, for exampleno ready harness account (all signed_out). That
reason was being dropped before it reached the message.
Source:cli/src/lib/teams/placement-probe.ts,cli/src/lib/smart-launch.ts. -
agents ps focuson a headless session stops it before reopening it in a tab (PHNX-4344).
Focusing a session that was running headless used to resume a second copy in a new tab
while the headless process kept running, so two processes wrote to one conversation. Focus
now stops the headless process first (here, or withagents ps stop <id> --localon the
device that runs it) and clears its detach record, and opens nothing if that device cannot
be reached or itsps stopexits non-zero. The focus picker does the same for each headless
session it opens. If the tab then fails to open, the error says the headless run was stopped
and how to resume it. The tab now goes where your live sessions run (resolveLaunchBackend), so from
AGI Menu it opens in the project's VSCodium window instead of the first installed terminal
app. A session owned by another device opens a local tab running
agents run auto --resume <id> --interactivewhen there is no TTY, instead of an SSH hop
that needs one. A session that has already ended, focused with no TTY, now also opens in
such a tab instead of resuming in place inside the caller (which failed with no terminal and
still exited 0). When VSCodium never confirms the tab, focus exits 1 and says to approve the
"Allow 'Agents' extension to open this URI?" prompt. Source:cli/src/commands/focus.ts,
cli/src/commands/detach.ts,cli/src/lib/terminal/engine.ts. -
Sessions from another machine's home now match their project (PHNX-4344). A session
recorded on a Linux worker under/home/<user>/…now matches a project registered as
~/…on a Mac (and the other way round) when<user>is the same user name;/Users/Shared
and other users' homes are not rewritten, so AGI Menu groups those sessions under the right
project instead of Uncategorized. Source:cli/src/lib/project-root.ts(localizeHome),
cli/src/lib/projects.ts. -
agents projects todo list --project <name>andmenubar.menu.todoProject(PHNX-4344).
--projectlists every open issue in that Linear project (an agents project's Linear
project, or a Linear project name), due ones first, then the newest, at most 6, with
totalthe full count. The newmenubar.menu.todoProjectkey names the project AGI Menu
lists and files to-dos in, and ridesagents menubar snapshot --jsonmenuPreferences
when set. Source:cli/src/lib/quick-todo.ts,cli/src/commands/projects-todo.ts,
cli/src/lib/device-config.ts. -
AGI Menu shows draft pull requests by default (PHNX-4344).
menubar.menu.githubDrafts
now defaults totrue;githubBotsstaysfalse. Source:cli/src/lib/device-config.ts. -
agents ps stopon another device exits 1 when the remote stop fails (PHNX-4344). A
one-shot peer hop (runOnPeerwithout a TTY) now reports a non-zero remote exit asfailed
instead ofok. Source:cli/src/lib/session/remote/remote-list.ts,
cli/src/commands/sessions-stop.ts. -
agents upgradeworks again on a bun-installed copy. Every upgrade on a
bun install failed at the install step witherror: An internal error occurred (DependencyLoop)and left the CLI on the version it already had, because
bun add -g <tarball>refuses to resolve a tarball whose package name is
already pinned to an exact version in bun's globalpackage.json— it keeps
the old requirement alongside the tarball resolution and reports the package
as depending on itself (bun 1.3.14).installPackageWithBunnow clears that
entry before the install and writes it back as the version actually on disk
afterwards; the second half matters too, since bun otherwise records the
tarball's path under the upgrade's temp directory, which is deleted on the way
out and breaks the nextbun install -g. An install that fails or is aborted
puts the entry back, so a failed upgrade no longer leaves the CLI installed
but unpinned — a state in whichbun remove -greports success and removes
nothing. Neitherbun.locknortrustedDependenciesis involved, and the
npm install path is unchanged.
Source:cli/src/lib/self-update.ts,cli/src/lib/self-update.test.ts. -
An
out of creditsmark no longer strands a Claude account for good. A run
refused with "You've hit your monthly spend limit" or "out of usage credits"
writes a per-accountout_of_creditsmark in~/.agents/.cache/claude-usage.json,
and rotation (balanced,available) skips a marked account. The mark had no
expiry, and its only clear was a successful run on that account, which rotation
never launches. On one box three of four Claude accounts sat marked for up to 14
days while answering fine, and everyagents run claudelanded on the one login
that was actually refusing. The mark now records when it was noted and expires
after one hour (OUT_OF_CREDITS_REPROBE_MS), so rotation tries the account again;
a fresh refusal re-marks it. A mark written by an older CLI reads as expired.
agents viewshowsout of creditsonly while the mark is live.
Source:cli/src/lib/accounting/usage.ts,cli/src/lib/accounting/usage.test.ts. -
Fleet probes follow the configured
platform, not the discovered one. A box Tailscale
reports as Windows but whose sshd lands in WSL, configuredagents devices config <name> platform linux, was dialed as a bash login shell yet handed the PowerShell snippet — so
agents devices list --refreshshowed it offline, theagents psfleet roster skipped it as
"unreachable or no agents CLI", andagents ps watch/agents feed watch/
agents apply/agents doctor --checknever reached it, even thoughagents ssh <name>
worked. Each of those paths now resolves the operator profile before choosing the remote shell,
the same profile the dial already used. Source:cli/src/lib/devices/health.ts(buildProbeInvocation),
cli/src/lib/session/remote/{remote-list,watch}.ts,cli/src/lib/feed/watch.ts,
cli/src/lib/fleet/apply.ts,cli/src/lib/teams/placement-probe.ts,
cli/src/lib/accounting/usage-sync.ts,cli/src/lib/remote-agents-json.ts,
cli/src/commands/doctor.ts. -
A bare interactive
agents run <harness>runs on the machine you typed it on again.
Since PHNX-4083 a bare human-facing run (no prompt, real TTY) placed itself like
--device auto, soagents run claudeon a laptop landed on whichever fleet worker had
the most headroom, including a Windows box the operator never chose. Placement is now
opt-in:--device auto,--device <box>, or the<harness>@picker. Headless runs are
unchanged, and--localstill pins this machine against a--wheredefault. The
Run here insteadhint is gone with the default that needed it.
Source:cli/src/commands/exec.ts,cli/docs/hosts.md.