A tool for viewing assembly and source.
Install with the usual Go commands:
go install loov.dev/lensm@main
For Linux you may need to add some additional dependencies. You can use go install --tags nowayland loov.dev/lensm@main or go install --tags nox11 loov.dev/lensm@main respectively to skip building Wayland or X11 version.
Build this checkout locally:
go build -o lensm .
GitHub Actions also builds installable macOS disk images for Apple Silicon
and Intel. Download the DMG artifact from a successful CI run, open it, and
drag Lensm.app to Applications. CI builds use an ad-hoc signature, so macOS
may require the first launch through Control-click → Open.
To build the DMG locally on macOS:
./scripts/build-macos-dmg.sh 0.0.0 1 "$(go env GOARCH)"
On Linux, use the same Gio tags if you want to skip a windowing backend:
go build -tags nowayland -o lensm .
go build -tags nox11 -o lensm .
Run the program with an executable path, or start it without arguments
and load an executable from the top bar. On macOS, use Choose... to select
the executable with the native Finder file dialog. The function filter is
available inside the UI. -watch allows to automatically reload the
executable and information when it changes.
lensm -watch lensm
Inside the code view:
- follow call targets and use
Alt+Left/Right(orCmd/Ctrl+[andCmd/Ctrl+]) to navigate between functions; - hover an assembly instruction to see its reference and a simplified explanation when Lensm has a matching rule;
- drag across Go assembly, native assembly, or source lines to select a block,
then use
Cmd/Ctrl+Cto copy it.Shiftextends a selection andEscapeclears it.
Run lensm as an MCP server over stdio:
lensm mcp [-comments ./lensm.lensm-comments.json] ./lensm
The MCP server exposes tools for listing functions, reading a function's
Go source, Go assembly and native assembly, and reading or writing comments.
By default comments are stored in a sidecar file named
<executable>.lensm-comments.json.
When the GUI and a separate lensm mcp process write the same sidecar,
saves merge per comment: each process's additions, edits, and deletions
survive, and only conflicting edits to the same comment resolve to the
last writer.
Note: The program requires a binary that is built on your computer, otherwise the source code for the functions cannot be loaded.
I wrote a blog post at https://www.storj.io/blog/lensm on why and how the core functionality works.
