Install the latest emacs release and you will be able to do `M-x eglot` – this by default knows about language servers for many programming languages, so if you e.g. do this while in a C++ file in some project, it will start clang or ccls (whatever's in PATH); the language server will then be active for all files in that project and you can use `M-.` (xref-find-definitions), `M-,` (xref-go-back), `M-?` (xref-find-references). Try also `M-x eglot-code-actions` on a symbol to see all available actions (renaming, add imports, refactoring etc.; what you get here depends on the language server).
I also use this plugin https://github.com/minad/consult which has the command `consult-ripgrep`, very useful for e.g. looking up all occurrences of the symbol at point (and text navigation across multiple files).
For "AI", start with https://github.com/karthink/gptel/ (its README lists alternative packages, as you can see there is no lack of llm support in emacs, both chat, "agents" and more specific use-cases)
To add to this, consult works great with embark, and orderless, which make for a wonderful emacs experience.
Also, on the llm point even though I know elisp, and use emacs heavily, they can be great for creating little personal commands that just make things a little nicer to use (lowering the barrier of "I'll write a command for this" from 15 minutes to 2 minutes is huge and means I can be bothered to do it for more marginal things which makes the editor even more pleasant to use).
I didn't know about M-? ... I like how if there's only 1 match it automatically jumps to that single reference. :)
Thank you for the pointers, I will explore them!
Regarding AI, I don't have a replacement, but for code/text navigation, eglot is a good option.
I think that the AI CLI agents are the response for AI, but for now, I am opening VSCode with an Emacs extension and some keybinding changes.