Skip to content

Command help while you type

Added in 1.6.1.

Type a command into a session and the app works out what you are running, then offers the documentation for it beside the terminal. Not over it — the panel opens where the buttons and the assistant already live, and the session carries on behind it.

There is nothing to install and nothing to configure. You do not need a tldr client on the machine, and none of this runs on a remote host.

It reads the command, not the first word

Taking the first word finds sudo every time, on exactly the commands someone needs help with. So wrappers are stepped over, including their own options and the values those options take.

You typeIt looks up
tcpdump -i eth0 port 5060tcpdump
sudo -u root tcpdump -i eth0tcpdump
sudo systemctl restart nginxsystemctl
env FOO=bar curl https://example.comcurl
watch -n 5 kubectl get podskubectl
grep foo /var/log/messages | tail -20grep, and it notices tail
/usr/bin/tcpdump -Dtcpdump

A session is a real terminal, not a text box with a send button, so the line is reconstructed from what you type. History recall and tab completion change the line in ways nothing outside the shell can see; when that happens the app knows it has lost track and stops guessing rather than showing you the wrong page.

It stops watching at a password prompt

A password typed at a prompt is keystrokes like any other. When the far end asks for one — [sudo] password for…, Enter passphrase for key… — nothing is captured at all until the prompt has gone. Nothing typed there is held, shown, or sent anywhere.

The example is a builder

Documentation writes rsync {{path/to/source}} {{path/to/destination}}. Every other client renders that literally and leaves you to retype it with the braces taken out. Here each one becomes a field, and the command underneath is what will actually be sent.

Fields start pre-filled from the example, because the examples are usually real — {{eth0}} is a working default. A token that only describes a value, like {{path/to/file}}, is pre-filled too but flagged needs a real value, and Run stays disabled until you replace it. Copy and Insert do not, because neither of them runs anything.

The original template stays on screen next to the built command, so it is always clear what was substituted where.

Four buttons

  • Copy — the built command to the clipboard.
  • Insert — puts it on the terminal's command line and stops there. Read it, edit it, press Enter yourself. This is the one to reach for.
  • Run — sends it to the session named at the top of the panel.
  • Ask AI — hands the built command to the assistant, which explains the options, the risks and what output to expect. It carries the command you built, not the unresolved template, and never your terminal history.

It knows what it is talking to

Pages are organised by platform, and a Linux page shown at a PowerShell prompt is worse than no page at all — it looks authoritative. The platform comes from the connection you already set up.

ConnectionPages you get
SSHLinux, then common
Tagged ciscoCisco IOS, then common
Local shell: PowerShell or cmdWindows, then common
Local shell: WSLLinux, then common
Local shell on a MacmacOS, then common
SerialCommon only — nothing is assumed about a console cable

Tagging a connection cisco is what turns show into the switch page. Cisco IOS deliberately does not fall through to Linux: show, write and reload all exist there and mean something else entirely.

Nothing runs by accident

This is documentation, not a safety review. It describes rm -rf as cheerfully as it describes ls. So the command you built is checked before it can be sent, and anything that looks destructive becomes Review & Run:

You are about to run:

rm -rf /some/path

On:
server-prod-02 — admin@10.0.4.12:22

This removes files, and removes files recursively or without prompting.

[ Cancel ]  [ Run Command ]

That check is a speed bump, not a barrier — it is a pattern list, and you can type anything you like into the terminal regardless. The point is that a command you half-read in a documentation panel gets a second look before it is sent.

It goes to the session you opened it for

A command goes to the session named at the top of the panel — the one that was in front when you opened the page — and to no other. That is the whole reason the target is written there. If you switch terminals while the panel is open it says so and offers a button to retarget; it never quietly follows focus, and it never broadcasts. If the target disconnects, Insert and Run go grey and say why. Copy and Ask AI keep working.

Searching, when you have not typed anything

Ctrl+Shift+T opens a search over all ~7,400 pages. It searches command names, descriptions and the example text, which is the useful part — someone who already knows the command name rarely needs to look it up.

  • tcpdump — the obvious case.
  • restart service — finds systemctl and friends.
  • find large files, capture traffic, docker containers.
  • dkr — fuzzy, finds docker.

Pick a result and it opens in the same panel, builder and all. Star a command and it is waiting there next time you open the search.

Offline, and when it is not there

The page set downloads once, in the background, well after start-up — never between a keystroke and a lookup. After that it works with no network at all, and refreshes itself about weekly. No failure here can delay the app starting or stop a terminal working: if it cannot download, it says so and everything else behaves exactly as before.

Not everything is documented, and vendor CLIs are thin — there are seventeen Cisco IOS pages, not seventeen hundred. When there is no page, the panel says so and offers you the search and Ask AI, which has no such gap.

Settings → tldr shows what is cached — version, page count, platforms, size on disk, where it lives — with Update now, Rebuild index and Clear cache. Detection can be turned off there entirely; the panel and the search still work when you open them deliberately.

Command documentation comes from the tldr-pages project and is used under CC BY 4.0. Smartcom Revisited ships the integration, not the data — the pages are fetched from that project's own release archive and are not modified.