grokbot-tui

Attachments and the file picker

Sending files, the attach button, downloads, and media playback.

Attachments

/attach <path…> (alias /file) attaches files to your next prompt, up to 6. Tab completes paths (cycling replaces the path, it never appends), and pasting a file path attaches the file. Uploads start right away. Chips above the input show each file's icon, name, size and progress (✓ done, ✗ failed). Click a chip to preview an image, and click ✕ to remove it and abort its upload. /attach remove <n>, /attach clear and /detach [n|all] remove from the keyboard. Sending waits for uploads to finish. A failed upload keeps your prompt in the input.

Any file type can be attached. The client checks sizes up front: images 25 MiB, video 1 GiB, everything else 250 MiB. The server has the final say and its refusal reason is shown. A bot that only takes files through the desktop app says so. Attachments need a Cursor session (/login desktop or /login cursor); plain gateway logins can't upload.

Sent prompts show their files as [🖼 name size ⤓] chips. Click the name to open an image in the viewer, or ⤓ for the download modal. The link is resolved when you click and is never shown. The gateway transcript doesn't record attachments, so the chips only appear on prompts sent from this grokbot-tui. Theme parts: attach_chip, attach_chip_error.

Downloads

Bot replies with images or file links (.pdf, .zip, .csv…; not web pages) get a row of [⤓] name buttons (theme part download_button). Click one, run /download [n|list] (alias /save), or press vim d (message.download) to open the download modal. Its path is prefilled with ~/Downloads/<name> (or ~/<name> without a Downloads folder). Tab completes paths, and Down moves into a folder browser (arrows/hjkl, Enter/l opens a folder, h goes to the parent). Overwriting a file and creating missing folders are confirmed first. Remote files stream in the background into <name>.part and are renamed when done. Local files are copied. The size is capped by downloads.max_mb (default 25). The result shows as a notification. Theme parts: download_path, download_dir.

Attach button (1.35.0)

The [📎 Attach] button on the input box's top border starts /attach and lists files to pick (Tab completes paths). If you're mid-draft it keeps your text; paste a file path or use /attach <path> instead. Theme part attach_button.

Video, GIFs and music (1.24.0)

Videos and animated GIFs play inside the bubble, scaled like images (capped at images.inline_max_rows), with a one-row bar under them: [▶]/[⏸] toggles playback, clicking the bar seeks, and the label shows elapsed/total time (GIFs: frame position). Clicking the picture opens the full-size player (Space play/pause, ←/→ seek 5 s, Home, Esc/q close). Music links and attachments get the same bar. Only one video or track plays at a time, and it pauses when scrolled out of view; GIFs loop on their own.

Build Decodes Download
standard GIF; H.264 MP4 (OpenH264, compiled in); MP3, AAC/M4A, FLAC, Vorbis, WAV. Other video codecs use a system ffmpeg if one is on PATH grokbot-tui-installer.sh/.ps1, .deb/.rpm/.msi/.pkg, Homebrew, AUR
-ffmpeg the above, plus FFmpeg linked in statically: nearly every codec and container, nothing to install grokbot-tui-ffmpeg-<target>.tar.xz/.zip

grokbot-tui-setup.sh / grokbot-tui-setup.ps1 (release assets) ask which build to install (--variant standard|ffmpeg / -Variant to skip the question).

Prefs: media.inline (on), media.fps (10, 1–30), media.decoder (auto|builtin|ffmpeg|system), media.gif_autoplay (on). /media pause|stop|decoders. Theme part: media_bar. On Linux, sound needs ALSA (libasound2).

Edit this page on GitHub