Repository navigation
v1.23.22
-
Secrets calls go through the published
@phnx-labs/secrets-cli/client, and an unsetSECRETS_HOMEis no longer forced to~/.agents(PHNX-4227). Requires thesecretsengine 0.4.0 or newer.
agents-cli kept a private copy of the process client forsecrets __serve; it
now imports the one secrets-cli 0.4.0 publishes (exact-pinned) and keeps only its
typed wrappers, so the two cannot drift. Timeouts, the
AGENTS_SECRETS_PASSPHRASEalias, onesecrets __serveprocess per request,
and engine stderr going tosecrets-serve.logunder the agents logs directory
(never the terminal) are unchanged. Every response now carries the engine's
contract, so an engine older than 0.4.0 fails every secrets read with
ENGINE_INCOMPATIBLEinstead of reporting a missing bundle from another root.
Upgrade each machine, fleet workers included, with
agents setup tools --tool secrets(ornpm i -g @phnx-labs/secrets-cli@0.4.0);
agents doctorreports an old engine as the critical
secrets-engine-incompatiblefinding, locally and for fleet devices. Every
internal secrets read and the agents launched byagents runleave an unset
SECRETS_HOMEunset, so the standalone uses its own default root
(~/.agents/.secrets, which adopts the earlier~/.agentsand~/.secrets
stores on first use and followsAGENTS_REAL_HOMEwhen a harness such as
Cursor swapsHOME); an explicitSECRETS_HOMEstill wins. A bundle push
(agents accounts login --fleet, the workerauth-syncprovisioning) likewise
stops pinning the receiver to~/.agents, so the bundle lands in the default
root the worker's agents-cli now reads; an explicitremoteSecretsHomestill
wins. The standaloneagents setup toolsinstalls is raised from 0.1.8 to
0.4.0.agents setup secretsenforces that floor through the same
ensureToolPinspath instead of accepting anysecretson PATH, and an
explicitSECRETS_BINbelow it fails with the version it read rather than
installing over PATH. Source:cli/src/lib/secrets-client.ts,
cli/src/lib/exec.ts,cli/src/lib/secrets-cli.ts,
cli/src/lib/standalone-tools.ts,cli/src/commands/setup-secrets.ts,
cli/src/commands/doctor.ts,cli/src/lib/devices/doctor-findings.ts,
cli/package.json,cli/tests/secrets-standalone.ts. -
Agent asks carry an urgency.
agents feed watch --jsonattention rows carryurgency
(urgent,high,normal,low) and, when there is one,urgencyReason
("Blocks a release (npm publish)", "High ticket PHNX-3890"). An ask that holds up a release,
deploy or merge is urgent; otherwise the linked ticket's Linear priority decides; otherwise
normal. A ticket's priority is read at most once per 30 minutes.
Source:cli/src/lib/feed/attention.ts,cli/src/lib/feed/ticket-priority.ts. -
Banner schedules per urgency, with reminders. New user-scope keys
menubar.menu.notifyUrgent,notifyHigh,notifyNormalandnotifyLowset when an ask's
Mac banner posts: times such as0m,15m,1hmeasured from when the ask opened (the
first posts the banner, later ones remind), plusstayandsound, or justsidebarfor no
banner. Defaults: urgent["0m","15m","30m","stay","sound"], high["0m","30m","stay"],
normal["5m","1h"], low["sidebar"].agents config setrejects anything else. The daemon
withdraws a banner when its ask resolves, and about 10 seconds after posting for a level
withoutstay. A reminder replaces the earlier banner and says "Still waiting · 15 min".
Source:cli/src/lib/daemon/attention-notify-service.ts,cli/src/lib/feed/notify-schedule.ts. -
Fleet asks reach the machine you sit at. With
interactive.hostset to this machine,
this machine posts banners for every device's asks, read from the daemon's shared fleet
stream; any other machine then posts none. Unset keeps each machine posting its own. -
AGI Menu argv. Banners now pass
--level,--soundand--reminder <n>, and a resolved
ask is withdrawn with"AGI Menu" --notify --withdraw <key>. Needs AGI Menu
1.19.0, which this release installs (themenubarfloor moves to 1.19.0). Source:cli/src/lib/menubar/notify-desktop.ts,cli/docs/menubar.md. -
Claude permission asks name their command. A Claude permission ask reads "Claude needs
approval to run Bash: " instead of "Claude needs your permission".
Source:cli/src/lib/feed/feed.ts(the nextagents feedrun rewrites the installed hook). -
Stale asks leave. The daemon runs the mailbox gc hourly, so an open ask whose session is
gone is removed a day later withoutagents feed --dispatch, andagents feedranking caps an
ask's idle time at 24 hours so a weeks-old ask no longer tops the list.
Source:cli/src/lib/daemon/attention-notify-service.ts,cli/src/lib/feed-ranking.ts. -
Session rows say what a session is still waiting on.
agents feed watch --json,
agents ps watch --jsonandagents ps --jsonrows carrypending
({subagents, shells, monitors}, each[{id, description, startedAtMs}]): only work running
now, read from the transcript — subagents whose status isrunning, Claude background shells
(run_in_background, or a call the harness moved to the background) with no completion
notification and no successfulTaskStop, andMonitorwatches that have not ended or
expired. It is absent when nothing is pending. Everything counts only while the harness
process is alive and only when that process started it, so a resumed or forked session does
not inherit a dead run's shell. Anidlerow withpendingis waiting on itself, not on you;subAgentCountis
still the cumulative total and says nothing about liveness.
Source:cli/src/lib/session/pending-work.ts,cli/src/lib/session/session-cache.ts. -
Rows carry
effortandfastwhen the transcript records them. Claude rows take
effortfrom the latest reply'seffortandfastfrom itsusage.speed; Codex rows take
effortfrom the latestturn_context. Each is absent when the session does not say;
effortis one oflow,medium,high,xhigh,max.
Source:cli/src/lib/session/pending-work.ts. -
Project aliases. A project definition may list
aliases:— former names of the project.
A session that resolves to a former name, or a peer row that still reports one, is filed under
the current name (confirmedProject, the path-derivedprojectkey, the feed's project
bucket,agents projects status). Matching is case-insensitive. An alias that names another
live project, forms a cycle, or is claimed by two definitions is ignored with a warning.
Source:cli/src/lib/projects.ts,cli/src/lib/feed/watch.ts,cli/src/lib/session/remote/watch.ts. -
--sinceaccepts weeks and rejects values it cannot read.agents daemon logs --since 1week
used to print nothing, because the parser had no week unit and an unreadable value silently
meant "now".daemon logsandeventsnow share one parser that takes1w/1week/2weeks
and ISO dates, and an unparseable--sinceexits non-zero withInvalid --since value. A bare
number now means seconds, soevents --since 2024is 2024 seconds ago, not 1 January 2024;
write the full ISO date (2024-01-01).
Source:cli/src/lib/hooks/cache.ts,cli/src/commands/daemon.ts,cli/src/commands/events.ts. -
A signal-killed process no longer exits 0. After a self-upgrade,
agentsre-runs your
command; if that child was killed by a signal, the CLI exited 0. It now exits 128+signal
(143 for SIGTERM), the same code thebrowserandcomputerforwarders report.
Source:cli/src/lib/platform/process.ts,cli/src/bootstrap.ts. -
The watchdog log follows
AGENTS_LOGS_DIR.watchdog.logwas always written to
~/.agents/.cache/logs, even whenAGENTS_LOGS_DIRpointed elsewhere;agents watchdog history
now reads and reports the same logs directory every other log uses.
Source:cli/src/lib/watchdog/log.ts. -
Smaller fixes.
agents cloudwith an unrunnablecodexbinary now fails with
could not run …instead of an unhandled spawn error; two background auto-pull workers no
longer both take a fresh repo lock (the lock is created withO_EXCL);agents teamspickers color a PR-open teammate the
same magenta everywhere;agents repo statuscolumns stay aligned with wide (CJK/emoji) names.
Source:cli/src/lib/cloud/codex.ts,cli/src/lib/auto-pull.ts,cli/src/lib/teams/delivery.ts,
cli/src/commands/repo.ts. -
agents lead: a warm per-project Lead you can ask, with an NDJSON stream for UIs.agents lead ask --project <name> [--voice <secs>] [--json] -- <text>sends one message to a long-lived headless Claude for that project and streamsturn,status,tool,text,confirm,done(withsummary,refsandtiming) anderrorevents. A detached host per project, started on demand, keeps the stream-json Claude process warm, resumes it with--resumeafter a crash, and rotates to a fresh session withmemory.mdpast 60% context. The Lead runs with isolated settings (no user or project settings, hooks or MCP servers), in~/.agents/lead/<project>/, with a minimal environment, and can only call fixed-shapeagents lead toolcommands (roster,dispatch,start,send,stop,linear,remember); compound shell commands are denied. A stop it requests becomes a confirm token foragents lead confirm <token>that expires after 10 minutes.agents lead history|status|stopcomplete the group, andlead.model(defaultsonnet) picks the model. Source:cli/src/commands/lead.ts,cli/src/lib/lead/,cli/docs/lead.md. -
Lead sessions no longer show up as ordinary sessions. A project Lead (
agents lead) runs a headless Claude session of its own, andagents ps,agents ps watch --jsonandagents feed watch --jsonlisted it like any other agent, so AGI EXT and the FastWispr bubble rendered it as a session card. Live and history rows for a session whose cwd is under~/.agents/lead, or whose id is a Lead host's session, now carrylead: true, and those three surfaces leave them out by default;--include-leadshows them for debugging. The session index is unchanged, sosessionsstill finds a Lead's transcript. Source:cli/src/lib/lead/visibility.ts,cli/src/lib/session/active.ts,cli/src/lib/session/remote/watch.ts,cli/src/commands/ps.ts,cli/src/commands/sessions-watch.ts,cli/src/commands/feed-watch.ts.