Answering questions about Neru
Neru is a keyboard-driven mouse replacement. A daemon watches global hotkeys
and draws overlays, and a CLI sends it commands over a socket. Modes take the
keyboard until a target is picked: hints label clickable elements, grid and
recursive grid divide the screen, scroll moves content, monitor select jumps
between displays. Actions click, scroll, and move the cursor without a mode.
Every answer should come from the installed version, since commands, flags,
and keys change between releases.
What every install has
Check these before anything remote. The install script, Homebrew, Nix, and a
source build all ship them.
neru --help, then neru <command> --help. The help lists the flags and
accepted values of the installed version.
man neru on macOS and Linux, and one page per subcommand such as
man neru-hints, man neru-config-set, and man neru-action-left_click.
apropos neru lists them. Windows has no man, and --help carries the
same text.
neru status for whether the daemon runs and which mode is open.
neru doctor for config validity, socket health, permissions, and which
capabilities this platform has. It runs without the daemon.
neru hints --debug for the elements hints would label in the focused
window, as a count and a sample, without drawing anything. Run it
first for any "hints show nothing in app X" report.
neru config dump for the config in force, defaults filled in.
neru roles --explain for the clickable roles and how each resolves here.
neru docs cli and neru docs config open the two references in a
browser at the installed version.
For anything the help does not cover, fetch the doc at the installed version:
tag=$(neru --version | sed -n '1s/^Neru version //p' | cut -d- -f1)
case $tag in v*.*.*) ;; *) tag=main ;; esac
curl -fsSL "https://raw.githubusercontent.com/y3owk1n/neru/$tag/docs/CLI.md"
A release build prints its tag. A dev build prints v1.2.3-14-gabcdef,
which the cut maps to the release it was built from. On Windows, where
sed and cut are usually absent, the same fetch in PowerShell:
$tag = (((neru --version)[0] -replace '^Neru version ', '') -split '-')[0]
if ($tag -notmatch '^v\d+\.\d+\.\d+$') { $tag = 'main' }
Invoke-RestMethod "https://raw.githubusercontent.com/y3owk1n/neru/$tag/docs/CLI.md"
The docs are CLI.md for every command, flag, and the IPC protocol,
CONFIGURATION.md for every key with its default and platform column,
TIPS_TRICKS.md for worked recipes such as Vimium-style click on select,
drag with any button, cycling modes on one key, and driving Neru from skhd,
TROUBLESHOOTING.md when something does not work, INSTALLATION.md for
install methods and login services, CROSS_PLATFORM.md for what each
platform supports, and LINUX_SETUP.md plus LINUX_DESKTOPS.md for Linux
permissions and per-compositor notes.
What Neru does
| Ask |
Answer with |
| Click something on screen by keyboard |
neru hints --action left_click, or right_click, middle_click |
| Click where hints find nothing |
neru grid or neru recursive_grid, or neru hints --strategy vision |
| Filter hints by typing |
neru hints --search, or / inside hints |
| Scroll without a mouse |
neru scroll, or neru action scroll_down --steps N |
| Move the cursor to a spot, display, or grid cell |
neru action move_mouse, move_monitor, move_cell |
| Nudge the cursor and keep it moving while held |
neru action move_mouse_relative, glide under [held_repeat] |
| Drag |
left_click --state down, move, left_click --state up |
| Jump between monitors |
neru monitor_select |
| Type text or press keys |
neru action feed |
| Click without moving the real cursor |
save_cursor_pos, then the click, then restore_cursor_pos |
| Chain steps as one unit |
neru run "..." "...", or [macros] in config, see neru-setup-config |
| Bind a key to any of the above |
[hotkeys] in config, see neru-setup-config |
| Change hint letters, colours, grid size |
neru config set <key> <value>, see neru-setup-config |
| Make one app behave differently |
[[hints.app_configs]] by bundle id, see neru-setup-config |
| Hide overlays while screen sharing |
neru toggle-screen-share |
| Run Neru at login |
neru services install, see neru-setup-config |
| Pause Neru without quitting |
neru stop, then neru start |
Things a user often does not know:
- Hints have three strategies.
axtree reads the accessibility tree
and is the default. vision recognises text on a screen capture, and on
macOS rectangles too. contour finds edges on every platform. An app
with a poor tree, such as an Electron app or a game, gets --strategy vision for one call or a per-app strategy in config.
- Grid modes need no accessibility tree. When hints show nothing in an
app, grid and recursive grid still work, because they divide the screen
rather than read elements.
- Hints only label roles in
hints.clickable_roles. A missing hint is
usually a role outside that list. neru hints --debug shows what was
collected, neru roles --explain shows what the platform can name, and
neru hints --role overrides the list for one call.
- Inside a mode the keys are bindable too. Each mode has its own
[<mode>.hotkeys] table, so Shift+L for a left click inside hints, Tab to
cycle, and the arrow keys to nudge are defaults, not fixed.
- Linux ships no default global hotkeys. The modes exist but nothing is
bound until
[hotkeys] or the compositor binds them. That is by design.
- One config works on every platform. A key, flag, or action the current
platform cannot act on loads with a warning, listed under
platform_support
in neru doctor. It is not an error.
- Runtime toggles do not persist.
toggle-scroll-invert,
toggle-cursor-follow-selection, and toggle-screen-share last until the
daemon restarts. The lasting form is the config key.
- The CLI needs the daemon for most things. Modes, actions,
config set,
config dump, and status all talk to it. config init, config validate,
doctor, and roles run without it.
- There is no log file by default.
logging.disable_file_logging is
true out of the box. Before telling a user to read the log, have them
set it to false and restart, then read ~/Library/Logs/neru/app.log
on macOS, ~/.local/state/neru/log/app.log on Linux, or
%LOCALAPPDATA%\neru\log\app.log on Windows.
Routing
- Config, hotkeys, macros, modes, per-app overrides, or service work goes to
neru-setup-config.
- A question with a one-command answer gets the command and the help page
that documents it.
- When something does not work, in this order:
neru status, neru doctor,
then neru hints --debug for a hints report or neru config validate for
a hotkey report, then the Troubleshooting doc as above, before guessing at
a cause. Its Permissions and Hotkeys Not Working sections cover most
reports. On macOS, a hotkey that never fires after an update is usually a
stale Accessibility grant: remove Neru from the list and add it again.
- A bug or a missing feature goes to a GitHub issue on
y3owk1n/neru.
Blank issues are disabled, so use the issue forms, and include
neru --version and neru doctor output. Questions and config help
belong in Discussions.
Do not answer flags or key names from memory. Run --help or read the man
page first.
1---2name: neru-ask3description: Answer a Neru user's question about what Neru does, which command, flag, or config key does a thing, why something does not work, or what to try next, from the help, man pages, and docs of their installed version rather than from memory. Routes config work to neru-setup-config. Use when a Neru user asks what Neru can do, how to do something with it, which command to run, why hints or a hotkey do nothing, or which skill to use.4---56# Answering questions about Neru78Neru is a keyboard-driven mouse replacement. A daemon watches global hotkeys9and draws overlays, and a CLI sends it commands over a socket. Modes take the10keyboard until a target is picked: hints label clickable elements, grid and11recursive grid divide the screen, scroll moves content, monitor select jumps12between displays. Actions click, scroll, and move the cursor without a mode.13Every answer should come from the installed version, since commands, flags,14and keys change between releases.1516## What every install has1718Check these before anything remote. The install script, Homebrew, Nix, and a19source build all ship them.2021- `neru --help`, then `neru <command> --help`. The help lists the flags and22 accepted values of the installed version.23- `man neru` on macOS and Linux, and one page per subcommand such as24 `man neru-hints`, `man neru-config-set`, and `man neru-action-left_click`.25 `apropos neru` lists them. Windows has no `man`, and `--help` carries the26 same text.27- `neru status` for whether the daemon runs and which mode is open.28- `neru doctor` for config validity, socket health, permissions, and which29 capabilities this platform has. It runs without the daemon.30- `neru hints --debug` for the elements hints would label in the focused31 window, as a count and a sample, without drawing anything. Run it32 first for any "hints show nothing in app X" report.33- `neru config dump` for the config in force, defaults filled in.34- `neru roles --explain` for the clickable roles and how each resolves here.35- `neru docs cli` and `neru docs config` open the two references in a36 browser at the installed version.3738For anything the help does not cover, fetch the doc at the installed version:3940```bash41tag=$(neru --version | sed -n '1s/^Neru version //p' | cut -d- -f1)42case $tag in v*.*.*) ;; *) tag=main ;; esac43curl -fsSL "https://raw.githubusercontent.com/y3owk1n/neru/$tag/docs/CLI.md"44```4546A release build prints its tag. A dev build prints `v1.2.3-14-gabcdef`,47which the `cut` maps to the release it was built from. On Windows, where48`sed` and `cut` are usually absent, the same fetch in PowerShell:4950```powershell51$tag = (((neru --version)[0] -replace '^Neru version ', '') -split '-')[0]52if ($tag -notmatch '^v\d+\.\d+\.\d+$') { $tag = 'main' }53Invoke-RestMethod "https://raw.githubusercontent.com/y3owk1n/neru/$tag/docs/CLI.md"54```5556The docs are `CLI.md` for every command, flag, and the IPC protocol,57`CONFIGURATION.md` for every key with its default and platform column,58`TIPS_TRICKS.md` for worked recipes such as Vimium-style click on select,59drag with any button, cycling modes on one key, and driving Neru from skhd,60`TROUBLESHOOTING.md` when something does not work, `INSTALLATION.md` for61install methods and login services, `CROSS_PLATFORM.md` for what each62platform supports, and `LINUX_SETUP.md` plus `LINUX_DESKTOPS.md` for Linux63permissions and per-compositor notes.6465## What Neru does6667| Ask | Answer with |68| --- | --- |69| Click something on screen by keyboard | `neru hints --action left_click`, or `right_click`, `middle_click` |70| Click where hints find nothing | `neru grid` or `neru recursive_grid`, or `neru hints --strategy vision` |71| Filter hints by typing | `neru hints --search`, or `/` inside hints |72| Scroll without a mouse | `neru scroll`, or `neru action scroll_down --steps N` |73| Move the cursor to a spot, display, or grid cell | `neru action move_mouse`, `move_monitor`, `move_cell` |74| Nudge the cursor and keep it moving while held | `neru action move_mouse_relative`, glide under `[held_repeat]` |75| Drag | `left_click --state down`, move, `left_click --state up` |76| Jump between monitors | `neru monitor_select` |77| Type text or press keys | `neru action feed` |78| Click without moving the real cursor | `save_cursor_pos`, then the click, then `restore_cursor_pos` |79| Chain steps as one unit | `neru run "..." "..."`, or `[macros]` in config, see `neru-setup-config` |80| Bind a key to any of the above | `[hotkeys]` in config, see `neru-setup-config` |81| Change hint letters, colours, grid size | `neru config set <key> <value>`, see `neru-setup-config` |82| Make one app behave differently | `[[hints.app_configs]]` by bundle id, see `neru-setup-config` |83| Hide overlays while screen sharing | `neru toggle-screen-share` |84| Run Neru at login | `neru services install`, see `neru-setup-config` |85| Pause Neru without quitting | `neru stop`, then `neru start` |8687Things a user often does not know:8889- **Hints have three strategies.** `axtree` reads the accessibility tree90 and is the default. `vision` recognises text on a screen capture, and on91 macOS rectangles too. `contour` finds edges on every platform. An app92 with a poor tree, such as an Electron app or a game, gets `--strategy93 vision` for one call or a per-app strategy in config.94- **Grid modes need no accessibility tree.** When hints show nothing in an95 app, grid and recursive grid still work, because they divide the screen96 rather than read elements.97- **Hints only label roles in `hints.clickable_roles`.** A missing hint is98 usually a role outside that list. `neru hints --debug` shows what was99 collected, `neru roles --explain` shows what the platform can name, and100 `neru hints --role` overrides the list for one call.101- **Inside a mode the keys are bindable too.** Each mode has its own102 `[<mode>.hotkeys]` table, so Shift+L for a left click inside hints, Tab to103 cycle, and the arrow keys to nudge are defaults, not fixed.104- **Linux ships no default global hotkeys.** The modes exist but nothing is105 bound until `[hotkeys]` or the compositor binds them. That is by design.106- **One config works on every platform.** A key, flag, or action the current107 platform cannot act on loads with a warning, listed under `platform_support`108 in `neru doctor`. It is not an error.109- **Runtime toggles do not persist.** `toggle-scroll-invert`,110 `toggle-cursor-follow-selection`, and `toggle-screen-share` last until the111 daemon restarts. The lasting form is the config key.112- **The CLI needs the daemon for most things.** Modes, actions, `config set`,113 `config dump`, and `status` all talk to it. `config init`, `config validate`,114 `doctor`, and `roles` run without it.115- **There is no log file by default.** `logging.disable_file_logging` is116 `true` out of the box. Before telling a user to read the log, have them117 set it to `false` and restart, then read `~/Library/Logs/neru/app.log`118 on macOS, `~/.local/state/neru/log/app.log` on Linux, or119 `%LOCALAPPDATA%\neru\log\app.log` on Windows.120121## Routing122123- Config, hotkeys, macros, modes, per-app overrides, or service work goes to124 `neru-setup-config`.125- A question with a one-command answer gets the command and the help page126 that documents it.127- When something does not work, in this order: `neru status`, `neru doctor`,128 then `neru hints --debug` for a hints report or `neru config validate` for129 a hotkey report, then the Troubleshooting doc as above, before guessing at130 a cause. Its Permissions and Hotkeys Not Working sections cover most131 reports. On macOS, a hotkey that never fires after an update is usually a132 stale Accessibility grant: remove Neru from the list and add it again.133- A bug or a missing feature goes to a GitHub issue on `y3owk1n/neru`.134 Blank issues are disabled, so use the issue forms, and include135 `neru --version` and `neru doctor` output. Questions and config help136 belong in Discussions.137138Do not answer flags or key names from memory. Run `--help` or read the man139page first.