Skip to content

v1.23.19

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:01
· 173 commits to main since this release
  • agents projects prs <project> --json carries mergeable and mergeableState (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 REST pulls/{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 in ciError.
    Source: src/lib/github/project-prs.ts.

  • The Projects tab is retired from menubar.menu.tabOrder (PHNX-4326). projects is no
    longer in the default order or required in a stored one; an order or hiddenTabs list 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).
    A queued/allocating/running task whose last update is over 24 hours old is left
    out of the active list and the feed; agents cloud list still asks the provider about
    every unsettled task. Source: src/lib/cloud/store.ts.

  • Previous sessions on agents feed watch --json arrive with their card text (PHNX-4326).
    A closed session's row now carries lastAgentLine, request, todos, artifacts and
    importantMessage like 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 preview takes several ids (PHNX-4326). agents ps preview <id> <id> --json prints one array in argument order, each element the single-id
    envelope plus query; an id that does not resolve is an element with error set.
    One id still prints the single object. See docs/menubar.md. Source:
    src/commands/ps.ts.

  • agents ps preview --json carries subAgents, images and
    producedArtifacts, and todos folds Claude's task tools (PHNX-4326).
    subAgents lists each spawned subagent with its
    status and duration, images the last six images the session was given, read or
    wrote that still exist on disk, and todos now includes TaskCreate/TaskUpdate
    checklists. producedArtifacts is the list a live feed row's artifacts holds.
    See docs/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 add writes the account row to ~/.agents/agents.yaml and only
    commits it locally. A worker learned the row only after a user-repo push and pull, so
    a worker whose ~/.agents had diverged never saw it. agents accounts login <harness>#<name> --per-device then failed there with No 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 the provisioning field
    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 with 402 Payment Required: Grok Build usage balance exhausted, that
    account now shows out of credits for one hour, and rotation and --device auto skip
    it instead of choosing it again. Before this, Grok usage came only from the last
    billing: fetched credits config log 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 ~/.grok or ~/.kimi-code login. The account
    check did read it, and listed a version as signed in with that account while the
    harness itself said Not 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 as Missing 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, and agents 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 auto no longer says no ready harness account when 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 out and counts it in the retry hint, or readiness probe did not answer for any other silent failure. A worker that did answer not ready now
    shows its own reason, for example no 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 focus on 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 with agents ps stop <id> --local on the
    device that runs it) and clears its detach record, and opens nothing if that device cannot
    be reached or its ps stop exits 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> --interactive when 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> and menubar.menu.todoProject (PHNX-4344).
    --project lists 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
    total the full count. The new menubar.menu.todoProject key names the project AGI Menu
    lists and files to-dos in, and rides agents menubar snapshot --json menuPreferences
    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 to true; githubBots stays false. Source: cli/src/lib/device-config.ts.

  • agents ps stop on another device exits 1 when the remote stop fails (PHNX-4344). A
    one-shot peer hop (runOnPeer without a TTY) now reports a non-zero remote exit as failed
    instead of ok. Source: cli/src/lib/session/remote/remote-list.ts,
    cli/src/commands/sessions-stop.ts.

  • agents upgrade works again on a bun-installed copy. Every upgrade on a
    bun install failed at the install step with error: 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 global package.json — it keeps
    the old requirement alongside the tarball resolution and reports the package
    as depending on itself (bun 1.3.14). installPackageWithBun now 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 next bun 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 which bun remove -g reports success and removes
    nothing. Neither bun.lock nor trustedDependencies is 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 credits mark 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-account out_of_credits mark 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 every agents run claude landed 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 view shows out of credits only 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, configured agents devices config <name> platform linux, was dialed as a bash login shell yet handed the PowerShell snippet — so
    agents devices list --refresh showed it offline, the agents ps fleet roster skipped it as
    "unreachable or no agents CLI", and agents ps watch / agents feed watch /
    agents apply / agents doctor --check never reached it, even though agents 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, so agents run claude on 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 --local still pins this machine against a --where default. The
    Run here instead hint is gone with the default that needed it.
    Source: cli/src/commands/exec.ts, cli/docs/hosts.md.