Repository navigation
v7.79.0
Pairs with engine-service-v0.1.160 (REQUIRED_ENGINE_VERSION unchanged). The plugin starts its servers and hooks through a launcher and says plainly when the CLI is not installed (RDR-228 Phase 1). On Windows, nx programs no longer crash on a WMI query at import, and nx daemon service install-binary extracts the PostgreSQL bundle it installs. nx daemon service start starts an installed autostart unit through the OS manager.
Changed
- The conexus plugin starts its Nexus servers and hooks through a launcher, and a machine with the plugin and no CLI gets a true message in place of errors (RDR-228 Phase 1, nexus-sv2wx).
conexus/.mcp.jsonandconexus/hooks/hooks.jsonno longer namenx-mcp,nx-mcp-catalog,nx-hookandnx-session-end-launcherdirectly; each entry runsuv tool run ... launch/nx_launch.py <program>. With no CLI the two servers connect as stand-ins that offersetupandsetup_status(in this releasesetupinstalls nothing and answers with the install commands), one session-start message says Nexus is not installed, and every other hook entry writes one line. Before, that machine got six "Executable not found" hook errors, two failed servers and a message that an upgrade had been dispatched. What changes on a machine that has the CLI:uvis now needed for the Nexus servers. They used to start without it; the plugin's other hooks and its thinking server already needed it. A CLI installed withpiporpipxon a machine with nouvloses both servers untiluvis installed.- The plugin looks for the CLI in its install directory before
PATH. An install made after the application started is found without a restart. On a machine with a generation and anothernxearlier onPATH, the plugin's servers and hooks run the generation's programs; the/conexus:*commands still run thenxthatPATHfinds. - Each server has one resident
uvparent process, and each server start and hook gains oneuvlaunch (25 ms measured). - Claude Desktop picks this up only after the marketplace is removed and added again. Desktop keeps the plugin's earlier copy until then (RDR-228 Discovery 6).
Fixed
- On Windows, starting any
nxprogram no longer queries WMI, which could crash it with no error (nexus-f9bgu.55).import nexusloads truststore, whose import calledplatform.system(); on Windows that queries WMI, and CPython 3.12's_wmimodule crashes the process (0xC000070A) when the query times out, which happened under a session start's concurrent hook launches. Claude Code showed it as a conexus hook exiting 10, or 255 through the uv shim, with no stderr; it failed the Windows gate on every Home guest run and once on Pro.nxnow answersplatform.uname()fromsys.getwindowsversion()andPROCESSOR_ARCHITECTUREbefore truststore loads, with the build number WMI reports (10.0.26200 on Windows 11 25H2, where Python's own fallback says 26100). nx daemon service install-binarynow extracts the PostgreSQL bundle it installs (nexus-f9bgu.56). It placed the archive and stopped there, while the storage service finds PostgreSQL only in the extracted~/.config/nexus/pg-bundle: a restart kept the old PostgreSQL, and on a box whose extracted tree was gone the stack could not start untilnx initran. The same archive already extracted is left alone; a different one is extracted beside the running tree and swapped in.- On Windows, the logon task that starts the storage service now runs the current generation's interpreter (nexus-50l3e). It baked the interpreter of whatever ran
nx, sonx initrun through a legacyuvshim registered the legacy tree'spythonw, which a later session-start cleanup removes once nothing holds it. The task, itsnx doctorrow, the converge pass andnx self install's retarget now all name the generationcurrentpoints at, falling back to the running interpreter when there is no layout or the generation has nopython.exe. A task registered before this release keeps its interpreter until the nextnx self installor autostart install re-registers it. - The version-lockstep hook no longer says an upgrade was dispatched when there is nothing to upgrade or no
nxto run (nexus-sv2wx.8, nexus-sv2wx.9). With no CLI it says and does nothing. Its detached action now findsnxthe way the hook does, in the install directory and then onPATH. - The session handoff on
/clearand/resumefinds a Nexus server that the plugin started throughuv(nexus-sv2wx.8, RDR-228). The hook that hands the new session id to the running server looked only at direct children of the Claude process. The plugin's server entries are moving touv tool run ... launch/nx_launch.py nx-mcp, anduvstays alive as the parent of what it runs, so the server becomes a grandchild and was not found: the server's session scratch would have stayed on the old session after/clear, with no error. The lookup now also looks through a child that isuvor a Python running the plugin's launcher, and through nothing else, so one session still cannot reach another session's server. - On Linux and macOS, an autostart unit installed while
~/.local/binis not onPATHnow names thenxshim, not the running interpreter (nexus-wkkeq). WithnxoffPATH, the unit fell back topython -m nexus.cliwith the interpreter of the current generation, which a laternx self installreplaces and then deletes, leaving the unit pointing at a missing file. The shim follows the current generation. With no shim installed, the interpreter form is kept. nx daemon service start,nx init --serviceand the Windows upgrade restart now start an installed, enabled autostart unit through the OS manager (nexus-crwqm). With the unit installed and the service stopped, they used to spawn a detached supervisor itself, which left the unit inactive, so systemd or launchd never supervised or restarted the service. It now runssystemctl --user start,launchctl kickstartorschtasks /Runand waits for the endpoint the unit's supervisor publishes; that path never spawns a supervisor itself. A box with no unit, a unit installed for a different config dir (or one whose config dir cannot be read), aNEXUS_SERVICE_BINorNEXUS_SERVICE_JARset in the calling process (the unit's supervisor would not see it), a unit the manager does not report enabled, or a failing manager command keeps the detached spawn and prints one line saying why; that spawn can race a unit that is itself mid-start. A unit that does not become ready within 60 s is an error naming the unit's own log. A service that is already running is reported without asking the manager;--foregroundis unchanged.- Aspect extraction no longer waits 15 seconds per document for an MCP server it never starts. The extractor's
claude -pchild passed--strict-mcp-configbut still loaded the user's settings, so it ran every SessionStart hook, and the conexus plugin's own connection wait then timed out at its full bound on each call. The child now passes--setting-sources "", as the operator dispatch already did. Measured on a one-line prompt on 2026-10-13: 19 s and 12.3k context tokens before, 2 s and 6.7k after. Auth supplied by anapiKeyHelperin a settings file is not seen by the child any more; environment and keychain auth are unaffected. - The Claude Desktop bundle launcher and the hook scripts no longer take a
uv.exe,git.exeornx-hook.exefrom the working directory through aPATHentry on Windows (nexus-f9bgu.38). Both carry their own copy of thePATHlookup, because neither can import nexus. The bundle launcher skipped neither a relative entry (PATH=toolsreturnedtools\uv.exe) nor an entry that is the working directory; the hook copy skipped relative entries but not the working directory's own, and both trieduv.exe.cmdfor a name that already ended in.exe. They now follow the same rules asnexus.util.nx_argv, and one test runs all four copies over the same cases. These two copies also no longer return a.cmdor.bathit, whichnx_argvalready refused: a batch file runs throughcmd.exewith quoting Python does not escape for it, so auvornx-hookthat exists only as a batch file now counts as not found. The bundle launcher also no longer falls back to the bare nameuvwhen it finds none onPATH: that name was spawned foruv sync, andCreateProcesssearches the working directory first, so a planteduv.exewould have run. It now exits 127 with the launch step's message before spawning anything. All four copies also recognise aPATHentry that spells the working directory with.or..parts (C:\proj\sub\..); an 8.3 short name is not recognised. The off-cwd rules ran on a Windows host on 2026-10-13 (tests/test_off_cwd_resolver_real_windows.py).