# Unreleased (main) Status of the `main` branch. Changes prior to the next official version change will appear here. * Licensing: - **Breaking**: The Serena application (`src/serena`, `src/interprompt` and all other non-SolidLSP code) is now licensed under GPL-3.0-or-later. SolidLSP (`src/solidlsp`) remains MIT-licensed. The repository is now explicitly multi-licensed by component; see `LICENSE` for the overview, the historical cutoff and the rationale. The change is not retroactive: all earlier releases and commits remain available under MIT. - Source files now carry `SPDX-License-Identifier` headers - Contributions require acceptance of the new Contributor License Agreement (`CLA.md`), enforced via CLA assistant; see `CONTRIBUTING.md` * General: - Fix: MCP `initialize` now reports Serena's version instead of the installed mcp SDK version (#1889) - Fix: Parallel agents auto-registering projects could overwrite each other's changes to the global project list in `serena_config.yml` - Fix: `TextUtils.insert_text_at_position` returned a wrong position when the inserted text merged with an adjacent character into a single newline sequence (e.g. a `\n` inserted directly after an existing `\r`); the position is now determined from the resulting text - Fix: process-tree cleanup signaled descendant language-server processes without waiting for them, which could leave grandchildren as zombies; cleanup now waits for the discovered descendants (#1464) - Fix: `read_only` restriction in project definition was not applied to base tool set when in single-project context (#1938) * CLI: - Fix: `project health-check` reported `Health check passed - All tools working correctly` and exited 0 even when `FindReferencingSymbolsTool` had raised, because that failure was logged as a warning while the verdict checked `FindSymbolTool` only. A reference-search failure now fails the check; a symbol with no references is still a pass * Memories: - Fix: `save_memory`/`edit_memory` wrote directly to the memory file with `open(path, "w")`, which truncates it before the new content is written; a crash, OOM kill, or full disk partway through the write could destroy the previous, valid content instead of just losing the update. Both now write through a temp-file-plus-`os.replace` helper, matching the approach `save_yaml()` already uses for settings files (#1958) * JetBrains: - Fix: Concurrent Serena sessions activating different projects at the same time with `jetbrains_launch_command` set would each independently launch the IDE, racing each other for the IDE's own config-directory lock; JetBrains IDE launches are now serialized per launch command and Serena waits for the plugin server to become reachable before proceeding (#1864) * Hooks: - Fix: Codex's documented hook wiring only routes `remind` through `PreToolUse` on `Bash`, so its reset-on-Serena-tool-use branch was unreachable there and reminder counters never cleared after a successful Serena call. Add a `serena-hooks reset` command and a `PostToolUse` example matched to Serena's own tools to close the gap (#1852) * Language Servers: - Fix: TypeScript and VTS now disable automatic type acquisition as intended, while VTS preserves explicit user settings across initialization and configuration requests (#1989) VTS initialization options now override defaults per top-level key rather than replacing the entire configuration; a user-provided `typescript` block replaces the ATA default too. `initializationOptions` takes precedence over the legacy `initialization_options` alias. - Add FreeBSD mapping to platform detection - Remove unnecessary platform checks from the following language servers, expanding the set of supported platforms accordingly: Elixir Tools, Intelephense, Perl, TypeScript, VTS - Fix: the managed Solidity language server could report no diagnostics on macOS when Hardhat could not write its global state under ``~/Library``; Serena now gives the child process an isolated home-directory view via ``solidity_state_dir`` without changing the parent process's ``HOME`` (#1817) - Add Fatou support as an alternative Julia language server (`julia_fatou`) - Fix: Nextflow's `_flush_deferred_workspace_scan` marked the workspace scan flushed even when both of its `completion` probes failed, permanently skipping the flush (and silencing retries) for the rest of the session (#1871) - Fix: Exceptions raised during `LanguageServerManager.start` did not stop the language server subprocess if it was already started (#1949) - Add: Installed Python packages can provide generic external language-server adapters through the `serena.language_servers` entry-point group for explicit use in `project.yml` - Fix: Dart's `$/analyzerStatus` notifications were logged as unhandled-method warnings during analysis (#1855) - Fix: `DartLanguageServer._start_server` discarded both `$/analyzerStatus` and `experimental/serverStatus`, the two notifications the Dart analysis server sends to report indexing progress, and returned as soon as `initialized` was sent instead of waiting for either one; a request issued right after activation (`find_symbol`, `find_referencing_symbols`) could return before the workspace scan finished. Serena now waits (bounded by 60s) for either signal to report completion, matching the pattern already used for pyright, basedpyright and rust-analyzer - Fix: clojure-lsp was not told that Serena sends `workspace/didChangeWatchedFiles`, so changes made outside Serena's own edit tools (a git checkout, another editor, a build step) need not invalidate its analysis; symbol queries could then answer from a stale index, e.g. `find_symbol` returning a body from the position the symbol used to occupy (#1593) - Fix: Scala cross-file queries waited a fixed 5s after the first file was opened, which on a cold Metals is long before its build import, indexing and compilation have finished; the first `find_referencing_symbols` of a session could return a fraction of the references with nothing to indicate it was incomplete. Serena now declares work-done progress support and waits for the work Metals reports, bounded by the new `indexing_timeout`, `indexing_start_grace` and `indexing_quiet_period` settings - Fix: a `tsserver` crash mid-indexing (e.g. a V8 heap OOM) sent the same `$/progress` "end" event as a normal completion, so `find_referencing_symbols` and other cross-file queries silently returned an empty result instead of surfacing the crash. The crash is now detected independently via the `window/logMessage` notification tsserver already sends, and the affected wait now raises instead of reporting success (#1814) - Fix: two Serena instances activating the same project concurrently launched their Kotlin LSP processes against the same on-disk index storage location, so the second instance's requests were repeatedly cancelled by the first instance's server. A Kotlin LSP process now claims that storage directory via a lock; a single instance (including across restarts) still gets the same directory, and a second concurrent instance gets a directory of its own instead of contending for the first one's (#1966) - Fix: document symbol caching did not account for language-server-specific post-processing of symbols, which was applied outside the caches; the processing of language servers that post-process symbols (e.g. Go, Nix, Fortran, F#, Vue) was therefore repeated on every request or, if it mutated symbols in place, re-applied to already processed cached results CLI: - Fix `project index-file` command not using only the relevant language server to index the given file (#1965) * Dependencies: - Remove the redundant `dotenv` dependency; the `dotenv` module is provided by `python-dotenv` # v1.7.0 (2026-08-09) * General: - Fix: Race conditions in ProjectServer when used by multiple clients in parallel - Fix: `GitignoreParser` interpolated a directory's name unescaped into gitignore pattern position; a directory named with pattern metacharacters (e.g. a stray `***`) could turn a scoped pattern into one matching far more than intended, silently excluding most or all of the project from indexing #1806 - Fix: cleanup of an independently-started LSP process and its children required enumerating the system process table (`psutil`), which can be denied even for processes Serena owns in a sandboxed environment; cleanup now signals the known process group directly (#1818) - Fix: the README, the Language Support docs page and the project template omitted several already-supported language servers - Fix: a tool call exceeding the timeout blocked the task executor indefinitely; the executor now recovers without user-induced cancellation - Add Grok Build support (context `grok`, setup CLI, hooks) - The `languages` key in project configurations was changed to `language_servers` to better reflect the actual semantics (configurations are automatically migrated) - Fix: glob matching bare `*` and `?` in non-`**` patterns matched across `/`, contradicting documented behaviour #1732 - Project activation errors are now reported to the client in Serena's system prompt, instead of failures being visible only in the log. This applies both to a failed activation of an explicitly given project and to a failed `--project-from-cwd` auto-detection (#1773). - Enclose sub-prompts in XML-like tags to make scopes explicit - Prompts and prompt templates: - Allow initial project prompts and project-specific newly activated modes to use templating - Support function `embed_memory` in prompt templates to inline a memory's contents * Security: - ProjectServer: Configure trusted hosts (local hosts only) when listening on localhost - SerenaDashboardTrayManager: Configure trusted hosts (local hosts only) - Use sandboxed environment for prompt templating, preventing attackers from using custom prompts to execute commands in an uncontrolled manner * CLI: - Fix: `start-mcp-server` help text for `--project-from-cwd` falsely promised a fallback to the CWD, which was removed in v1.0.0 #1773 - Improve `project health-check`: - Fix: Process always exited with code 0, even when the check failed, so callers (CI, scripts) could not act on its verdict; it now exits with code 1 on failure. A `find_symbol` result without any matches is now reported as a failure rather than as a warning. - Disable symbol groupers, remove flawed pattern search test * Tools: - `find_symbol`, `jet_brains_find_symbol`: Change tool description to improve tool search results in clients that load tools dynamically - `get_current_config`: Result now includes language server status #1782 - More liberal handling of ignored paths in file access tools: - Tools that explicitly target a single file (`create_text_file`, `read_file`, `replace_content`) no longer consider ignored paths in general, i.e. all files can be accessed. When a path is explicitly accessed, we should not try to prevent it; the agent is assumed to have a good reason for doing so. - Tools that traverse a subtree of the project (`list_dir`, `find_file`, `search_for_pattern`) now all have an option `skip_ignored_files` (whether to skip ignored sub-paths). Note that if the base path is itself ignored, ignored paths cannot be considered. * JetBrains: - `jet_brains_find_symbol`: Disallow wildcard-only search, delegating to overview tool if request is for file * Language Servers: - Add Gleam language server support (via the `gleam lsp` server bundled with the Gleam compiler) - Allow language server priorities to be configured in `serena_config.yml` (for auto-detection during project creation) - **Add support for Nextflow** (language server `nextflow`), using the official [Nextflow language server](https://github.com/nextflow-io/language-server); the JAR is downloaded automatically, a Java 17+ runtime is required - Add `python_basedpyright` as an alternative Python language server - Java/JDTLS: stop downloading and loading the unused IntelliCode completion-ranking bundle; the retired `intellicode_version`, `intellicode_xmx` and `intellicode_xms` settings remain accepted but are ignored #1821 - Kotlin: update the managed Kotlin LSP from `261.13587.0` to `262.9593.0`, including support for the new platform-specific archive layout and Windows ARM64 builds - Add support for Wolfram Language via the official [WolframResearch LSPServer](https://github.com/WolframResearch/LSPServer) paclet. Requires Wolfram Mathematica 13.0+ or Wolfram Engine 12.1+. Set `WOLFRAM_PATH` environment variable or configure `ls_path` in `ls_specific_settings`. Supports .wl and .wls files with diagnostics, document symbols, within-file references, hover documentation, and formatting. - Nix/nixd: support custom `ls_path` launchers and external JSON settings through `config_path` #1737 - Fix: Nix/nixd diagnostics now use published diagnostics instead of the unsupported `textDocument/diagnostic` request, which terminated nixd #1802 - Fix: `get_diagnostics_for_file` crashed with `SolidLSPException` for any Ansible file with at least one lint finding, because `ansible-language-server` doesn't implement `textDocument/documentSymbol` and the request used to map diagnostics onto owning symbols just threw. `AnsibleLanguageServer` now overrides that request to return `None` directly, so diagnostics fall back to being grouped under the file-level path as already documented #1758 - Fix: pull-diagnostics fallback in `request_text_document_diagnostics` no longer swallows `LanguageServerTerminatedException`, so a crash during a diagnostics pull triggers the existing language-server restart path instead of silently returning no diagnostics #1770 - Fix: F#'s `module ` declarations reported a `selectionRange` pointing at the `module` keyword instead of at ``, so looking up hover/references from a module symbol's position returned the keyword's own docs instead of the module's #925 - Fix: Erlang functions could not be addressed by any tool taking an exact name path, because Erlang LS identifies them as `name/arity` and `/` separates name path components. The arity is now separated by `#` instead (e.g. `create_user#4`), so the reported name path round-trips and `find_referencing_symbols`/`replace_symbol_body`/`insert_after_symbol` work on Erlang functions #1797 - Fix: `LSPFileBuffer`: a stale content hash could be returned if files are kept open and file contents were not read before trying to retrieve the hash value - Fix: Change semantics of file opening (`open_file`) in the language server from "open file (if not already open)" to "ensure that the language server has the (current) contents of the file" (by sending `textDocument/didOpen` or `textDocument/didChange`), as this is always the intention of calling the method. If files were kept open in the language server (which the Svelte and Vue language servers did), the language server was not necessarily informed about updated contents. - Add Deno support (experimental; language server `deno`, backed by the Deno CLI's built-in `deno lsp`). Understands Deno module resolution (`npm:` / `jsr:` / `https:` imports) and the `Deno.*` globals, which the plain TypeScript language server does not. Overlaps TypeScript on file extensions, so it is not auto-detected and must be selected explicitly; requires the `deno` CLI on PATH - Fix: `find_referencing_symbols` reported file-level containers for references located inside Go struct bodies, interface bodies and `const` groups; improve the logic for finding the nearest enclosing symbol, adding the helper function `SymbolKind.is_container` (which is now also applied to identify high-level symbols that should appear in symbol overiews). - Rust: reduce rust-analyzer memory usage and reload churn by disabling cache priming and Cargo autoreload while preserving diagnostics. - `typescript`: Fix: on large projects, the first `find_referencing_symbols`/`request_references` call could silently race tsserver's project load and return incomplete results, because the fixed 2s grace for tsserver to *start* reporting `$/progress` (distinct from the separate, already configurable `indexing_timeout` used to wait for it to *drain*) was hardcoded and not large enough for projects where the initial project-graph resolution itself takes longer than that. The grace is now `indexing_start_grace` (default 5.0s), configurable the same way as `indexing_timeout` and `server_ready_timeout` #1586 - Fix: On Linux, a language server process spawned in its own session (the default) is no longer orphaned when Serena is killed without a chance to shut down cleanly (e.g. SIGKILL, OOM) #1490 - Language servers and their dependency providers now go through the `subprocess_run` helper instead of calling `subprocess.run` directly (e.g. for installation processes), so all such subprocesses get `stdin=DEVNULL` and can no longer interfere with the stdio MCP connection #1748 - `scala`: Fix: Metals asks via `window/showMessageRequest` whether to import a workspace it has not seen before, and Serena had no handler, so the request failed with `MethodNotFound` and Metals gave up on the import ("Unexpected error initializing server"). No build server was ever connected and every cross-file query fell back to the presentation compiler, which sees one file at a time, unless the project happened to have been imported beforehand by another editor. The three prompts that lead to a build server are now answered; anything else is dismissed, including the choice between several build definitions in one workspace. `ls_specific_settings.scala.auto_import_build: false` opts out - `scala`: Fix: in a repository whose builds live below its root, Metals was given only the repository root as a workspace folder, and its own one-level search takes just the first build it finds — so in a monorepo all but one build were served with no build target, silently returning no cross-file references. The build roots are now detected and passed as workspace folders, one Metals service per build; `ls_specific_settings.scala.project_roots` and `project_root_scan_depth` override the detection #1766 * Dashboard: - Fix: Serena PyPI version check triggered by callback on main thread could delay agent startup #1774 - Improvements in `tray_manager` interface mode: - Fix: on macOS, the `tray_manager` interface put an icon in the Dock and in the app switcher (should only use menu bar icon) - On Serena shutdown, message the tray manager before lengthy project shutdowns - Fix: When dead ports are detected (Serena instance gone), explicitly update the tray menu immediately (may not update automatically) - Use `tray_manager` interface as new default on macOS * Hooks: - Add `serena-hooks --client=grok`, including Grok-native PreToolUse allow/deny output. - Use `SessionEnd` for Codex 0.145.0+ cleanup hooks and document the known `Stop` compatibility issue affecting older Codex versions. - PreToolUse remind hook: coerce non-string shell command values instead of failing, and recognize `target_file`/`targetFile` file-path keys (shared payload parsing, applies to all hook clients). - Fix hook input parsing for clients that emit raw control characters in JSON string values #1743. # v1.6.1 (2026-07-21) * General: - Fix: `FileUtils.read_file`'s `charset_normalizer` fallback (used when a file cannot be decoded with the project's configured `encoding`) decoded the raw bytes directly and therefore skipped the universal-newline translation that the primary read path applies. CR characters from disk thus reached Serena's in-memory file contents, where the rest of the code assumes LF-normalized text and the `line_ending` setting is meant to be the single point of line-ending translation on write. The fallback now normalizes line endings to LF, consistently with the primary path. - Fix: a symbol whose LSP range ended exactly one line past EOF, at column 0 (the convention for a range covering whole lines through the end of the file), raised `IndexError` in `SymbolBody.get_text`. That one well-defined case is now corrected to end at the actual last line; any other out-of-range end position now raises `InvalidTextLocationError` instead, rather than guessing at a body that could be wrong #1498 * Language Servers: - Fix: Properly differentiate between raw and high-level symbol cache fingerprints, avoiding unnecessary invalidations of the raw cache when only the derived high-level representation changes - Fix: Language servers were not notified of external file system changes, causing some symbolic operations (such as `find_referencing_symbols`) to report stale information. An explicit file system polling mechanism is now used to detect changes prior to the affected tool executions. - Fix: Order of ignore patterns passed to language servers was not respected #1729 - Improve uv-based language server launch command compatibility: Use the more widely supported `uv tool run` instead of `uv x` #1721 - Java (JDT-LS): add `runtimes` to `ls_specific_settings.java`, a list of extra JRE/JDK entries (`name`, `path`, optional `default`/`sources`/`javadoc`) passed through to JDT-LS's `java.configuration.runtimes`. Fixes silently broken JDK type resolution (`java.lang.Object` and other JDK types reported as "cannot be resolved") for projects whose source/target level exceeds the bundled JDK 21 JRE JDT-LS registers by default; configured runtimes extend rather than replace that bundled default. #1478 - `gopls`: Fix `replace_symbol_body` corrupting single `type`/`var`/`const` declarations by duplicating the leading keyword (e.g. `type Foo` becoming `type type Foo`). gopls reports the symbol range of such declarations starting at the identifier rather than the keyword (unlike `func` declarations); the range is now extended to include the keyword so the body and the replacement range stay consistent. - `typescript` / `typescript_vts`: No longer ignore directories named `coverage`. This was intended to skip coverage-report output, but matched by bare dirname and so also hid legitimate source directories named `coverage` (e.g. `src/routes/coverage/`) from symbol tools. Generated report dirs are already covered by gitignore. Fixes #1523. - Fix: Restore `erlang` support (broken since v1.6.0 due to an implementation error) * Tools: - Fix: `search_for_pattern` marked one line too many as matched whenever a match ended with a line break, because the match's exclusive end index was mapped to a line number directly and therefore resolved to the start of the following line. The line the match ends on is now determined correctly, which also keeps `context_lines_after` aligned. - `safe_delete`: Add heuristic to delete superfluous empty lines after a deletion - `search_for_pattern`: on overflow, the shortening chain now emits each match's first line (full when it fits, otherwise truncated with a trailing '...' and a note) before falling back to bare line numbers, so agents can pick the right match without re-reading files. #1640 * Language Servers: - PHP: treat `.phtml` files as PHP sources by default (all PHP language servers) #1710 - PHP/Intelephense: expose `file_filter` via `ls_specific_settings["php"]`, so that additional extensions containing PHP sources (e.g. Drupal's `.module` / `.install` / `.inc` / `.theme`) become visible to the symbol tools and are indexed by the language server #1710 - Fix: an LSP `ContentModified` (-32801) response was surfaced as a hard `SolidLSPException` instead of being retried, as the spec expects for requests a client declared it will reissue. `send_request` now retries such responses for methods declared via a server's `retryOnContentModified` capability; rust-analyzer declares `textDocument/hover`, fixing the flaky `test_find_symbol[rust_add_function]` on windows-latest. #1724 * JetBrains: - Allow external files from dependencies (specified via references like "") to be - read via `ReadFileTool` - searched via `SearchForPatternTool` - used in `JetBrainsFindDeclarationTool` when using plugin version 2023.3.3+ * Dashboard: - The version display now indicates when a newer Serena version is available - Fix: the "Last Execution" panel stayed on "Loading..." forever when there was no logged execution (e.g. a fresh server / no tool run yet), because `loadLastExecution()` only rendered the panel when the backend returned a non-null execution; the empty state is now rendered via the existing `displayLastExecution(null)` path, mirroring the other panels #1713 * Dependencies: - Bump `mcp` from 1.27.0 to 1.28.1 - Bump `anthropic` from 0.59.0 to 0.117.0 # v1.6.0 (2026-07-16) * General: - Speed up MCP startup when auto-creating projects at startup (e.g. using `--project-from-cwd`) by determining the project's languages in a background thread #1683 - Fix: in `glob_to_regex` / `search_text(is_glob=True)`, a `?` wildcard matched two characters instead of one (it emitted `..` rather than `.`); it now matches a single character, consistent with the `?` semantics documented for `glob_match` and the `test_??.py` example in `search_text`'s docstring. - Add notion of trusted projects via new global configuration setting `trusted_project_path_patterns`. Current effects: - `ls_specific_settings` defined in project configurations will only be applied for trusted projects - `activation_command` (and `activation_command_timeout`) defined in project configurations will only be executed for trusted projects: an optional shell command run in the project root before the language backend initialises (e.g. to generate source files a language server needs to index). Exit code is the primary completion signal; `activation_command_timeout` (default 180s) is a safety backstop — on expiry the process is killed and activation continues. Failures and timeouts are logged but do not abort activation. - Fix: context or mode argument referencing a known name (e.g. `--context anitgravity`) could result in incorrect file access if a corresponding local file existed (e.g. `./antigravity` binary); file access is now guarded with path detection (file ending or path separator must be present) - Adjust prompt generation mechanism to use newly introduced tool name mapping `tool_names`, allowing prompts to directly use tool names that match the active language backend (and removing the need for additional prompts that explain tool name differences) - Improve quoting/escaping of arguments in shell executions on Windows (via `oslex` dependency) - Fix: a registered project whose root directory was deleted while Serena was already running could break `activate_project`/project lookup, raising `FileNotFoundError` in `RegisteredProject.matches_root_path` - Update prompts/instructions: Serena instructions manual, modes (editing, interactive) - Allow structured tool output to be configured on a per-context basis, disabling it for Claude Code (which does not correctly unpack structured output) #1042 - Fix: Project-specific filtering of files for source files ignored the language backend. The check is really only possible for LSP. - Fix: File system permission errors during gitignore scanning were not caught #1624 - During project creation, language composition percentages are now computed relative to the total number of recognised source files instead of all files, i.e. unrecognised files are ignored in the percentage computation. - Consider all LSP-compliant line endings ("\n", "\r\n" and "\r") in `TextUtils`, noting that only "\n" appears in files read by `FileUtils.read_file` (Serena's default reading mechanism) - Fix: Apply consistent line splitting across tools, uniformly applying the LSP splitting semantics; affects `search_text` used by `search_for_pattern` tool (reported in #1684) - Fix in `TextUtils` (used by editors): Deleting up to the end of the file, referencing the line one past the end of the file (particularly for files with no newline at end of file) raised `InvalidTextLocationError` instead of accepting the deletion (change in `TextUtils.delete_text_between_positions`, which now accepts the end position similar to `insert_text_at_position`). - Fix: glob pattern expansion in `expand_braces` did not terminate with empty or unbalanced braces #1690 * CLI: - Fix `--project-from-cwd` hijacking git worktrees nested under a Serena project. `find_project_root` now walks up in a single pass so the nearest project boundary wins (either a `.serena/project.yml` or a `.git`, including worktree/submodule pointer files), instead of preferring an ancestor's `.serena/project.yml` over a closer `.git`. This previously bound CLI agents (Claude Code, Codex, Gemini) launched from inside a worktree to the parent repo, causing stale reads and misdirected edits. - Fix: CLI flags on `start-mcp-server` could incorrectly be saved to the global configuration file if the list of projects was modified (triggering a save of the configuration with transient overrides applied) * Tools: - New tool: `replace_in_files` - `get_symbols_overview`, `jet_brains_get_symbols_overview`: Improved default for `depth` parameter - Add tool parameter alias support, adding `name_path` as an alias for `name_path_pattern` in `find_symbol` tools - Allow `query_project` tool to access read-only tools that are not enabled in the current configuration - Make tool call errors surface explicitly as errors at the MCP protocol level * Language Servers: - Fix: `SolidLanguageServer.is_ignored_path` raised `FileNotFoundError` for paths that are not present on disk, crashing symbol tools when a language server reported locations of generated files (e.g. JDTLS reporting Lombok-generated classes under `target/classes`). Missing paths are now classified by the usual ignore rules, and symbol locations resolving to non-existent files are skipped. - Solidity: fix diagnostics intermittently coming back empty on slow or cold environments (macOS/Windows CI). - Perl: expose `file_filter` and `ignore_dirs` via `ls_specific_settings["perl"]`, so projects with non-standard extensions (e.g. `.cgi`, `.psgi`) can make those files visible to Perl::LanguageServer. Configured extensions are also synced into the Perl source-file matcher (now a cached singleton), keeping `find_symbol` / symbol indexing consistent with the LS; the matcher is reset on every language server activation so one project's reconfiguration does not leak into the next. `FilenameMatcher` gains `add_extensions` / `reset` methods. Defaults are unchanged. #1449 - C/C++ (clangd): improve support and documentation for Unreal Engine 5 projects. - HLSL (`shader-language-server`): pass `--locked` to `cargo install` when building from source on macOS (and in the manual-install instructions), honoring the crate's packaged `Cargo.lock`. Without it, fresh dependency resolution pulled in shader-sense 1.4.0, which no longer compiles against the pinned shader_language_server 1.3.1, breaking the macOS CI job. - `typescript_vts`: Add `initialization_options` setting in `ls_specific_settings.typescript_vts`. Enables Yarn PnP setups with `typescript.tsdk` pointing at the Yarn-generated SDK. - TypeScript/VTS: disable automatic typing acquisition during initialization (no network downloads at startup) and replace the fixed 2-second cross-file reference wait with event-based `$/progress` indexing tracking (configurable `indexing_timeout`, default 30s) - C#: minor fixes in Omnisharp and Roslyn that prevented startup on some systems #1617 - `SvelteLanguageServer`: Fix diagnostics requests for TypeScript/JavaScript files incorrectly being processed by the Svelte LS instead of the TypeScript LS. - `SvelteLanguageServer`: Fix document-symbol requests for TypeScript/JavaScript files returning empty results in svelte-only mode (`languages: [svelte]`. #1552 - Svelte + TypeScript: make companion TypeScript server raise on readiness and indexing timeouts (instead of silent "proceeding anyway"), so that partial indexing surfaces as a clear failure instead of flaky/wrong cross-file results; add configurable timeouts (`server_ready_timeout`, `indexing_timeout`) and overridable timeout hooks (base TS stays permissive). Svelte test fixture now uses `npm ci` + committed `package-lock.json`. - `JuliaLanguageServer`: Fix the stdio MCP server exiting right after `initialize` ("tools fetch failed") when `julia` is enabled. #1577 - `Java`: invalidate JDTLS workspace cache when Java import settings change #1576 - `Java`: use `JAVA_HOME` for Gradle import when `use_system_java_home` is enabled and `gradle_java_home` is unset. #1657 - `Java`: stop hard-ignoring directories named `target`/`build`/`bin`/`out`/`classes`/`dist`/`lib` in `EclipseJDTLS`. These are all valid Java package identifiers, so ignoring them by name hid legitimate source from the symbol tools even when they were not gitignored. Removed the hardcoded override; real build output is already excluded via `.gitignore`. #1645 - Improve quoting of arguments in shell executions - Add **LaTeX** support (experimental) via [texlab](https://github.com/latex-lsp/texlab). - Add **QML** support via Qt's [`qmlls`](https://doc.qt.io/qt-6/qtqml-tool-qmlls.html) language server (requires Qt 6 with `qmlls`/`qmlls6` on PATH). #1381 - PHP: add support for PHPantom as alternative to the already supported PHP LS #1554. - Add new launch command customization options: `ls_args`, `ls_extra_args` and `ls_base_cmd` - Add new configuration option `ls_workspace_folders` to allow indexed source folders to be specified explicitly. In monorepos, this allows the set of indexed folders to be restricted to a subset of the repository. #1627 - Rename configuration option `additional_workspace_folders` to `ls_additional_workspace_folders` and support the option across all language servers (previously limited to TypeScript). - `Pyright`: bump timeout for waiting for initial analysis from 5s to 60s. * JetBrains: - Add configuration option `jetbrains_launch_command`, allowing Serena to spawn IDE instances automatically upon project activation - Fix: `jet_brains_list_inspections` failed when only default parameters were used #1615 - Fix: `jet_brains_run_inspections` returned incorrectly transformed data (malforming snake-case conversion applied to all keys) * Dashboard: - Make list of trusted hosts configurable, fixing host validation introduced in v1.5.2 allowing only default local hostnames, effectively preventing remote connections - Decouple configuration computation from the agent's task queue by introducing events for agent config/status updates. This allows the dashboard to display the configuration while the project provided at startup is still initialising. #1064 - Fix empty executions queue displaying "Loading..." - Tray manager: Add NixOS-support for AppIndicator-based trays (e.g., most Wayland-trays) to the package in flake.nix. - Fix: Wait for the subprocess that opens the browser window, preventing zombie processes #1488 * Hooks: - Handle tool_input passed as string gracefully instead of failing (Copilot CLI sends strings). * Memories: - Make memory iteration follow symbolic links - Fix: a memory name that was absolute (e.g. `/etc/cron.d/backdoor`) or contained empty path segments could write outside the `memories` folder. * Dependencies: - Add dependency `oslex` # v1.5.3 (2026-05-26) Add meta-data for the GitHub MCP registry # v1.5.2 (2026-05-26) * General: - Not existing paths return `False` on is ignored checks (instead of raising an error) - Add `serena-agent` CLI command so that `uvx serena-agent` can be used as entrypoint. - Fortls and pyright are now installed on the fly instead of being bundled in the serena-agent package. * Dashboard: - Add host validation * Hooks: - Extend list of extensions that are considered code files (affects the reminder hook counter). # v1.5.1 (2026-05-18) * General: - Fix `onboarding_tool`: Used incorrect path to bootstrap memory (regression in v1.5.0) * Language Servers: - Add **CUE** support via the LSP mode of the official [`cue` CLI](https://github.com/cue-lang/cue) (`cue lsp`). # v1.5.0 (2026-05-18) * General: - Make tool descriptions more amenable to tool search mechanisms as now used in several clients (e.g. avoid referencing other tools' names, etc.) - Onboarding is now less invasive (LLM is instructed to ask the user whether to proceed) * Language Servers: - No longer store temporary files (e.g. downloads) in `~/solidlsp_tmp`; instead, use OS-specific temporary directories - Add **GDScript** (Godot Engine) support. Serena connects over TCP to the Godot editor's built-in LSP server (port 6008, same for Godot 3 and 4) — no separate language server process to install. Godot major version is auto-detected from `config_version` in `project.godot`. Note: Godot's LSP does not implement `workspace/symbol`; first workspace-wide scans fall back to per-file requests and can be slow for large projects (results are cached to disk). See the [GDScript Setup Guide](https://oraios.github.io/serena/03-special-guides/godot_gdscript_setup_guide_for_serena.html) for details. Closes #1446. * Dashboard: - UI polish: switch UI font to Inter (with system fallbacks) and use JetBrains Mono only for code/logs/paths/identifiers; refine the light/dark palette with softer borders, clearer text hierarchy, and a more nuanced shadow/elevation system; introduce a consistent spacing scale; keep the orange accent. - Modal markup cleanup: extract shared CSS classes (`.modal-info`, `.modal-hint`, `.modal-prompt`, `.modal-field`, `.modal-input`, `.modal-select`, `.modal-textarea`, `.modal-actions`, `.btn-secondary`) and remove duplicated inline styles from all seven modals. Inputs and textareas get an accent-colored focus ring; the modal backdrop has a subtle blur. - Add Language: replace the native `