Show HN: Yakari – Interactive TUIs for CLI tools

github.com

74 points by vlandeiro 6 days ago

Hi HN!

I wanted to share Yakari, a tool I built to make command-line interfaces more approachable through interactive TUIs. If you've ever forgotten CLI flags or needed to look up command syntax, this might help.

Yakari turns complex commands into interactive menus. Users can navigate through options with simple key presses instead of memorizing complex command structures. If you've used Emacs and Magit (or any other Transient) before, the interface will feel familiar.

Features: - Transform CLIs into guided menus - Create custom menus for any CLI - Support for flags, named parameters, choices, and interactive inputs - Command history and contextual help

You can try it out without installing thanks to uv [1]:

  uvx --from yakari ykr demo # Play with a demo showcasing different argument types
  uvx --from yakari ykr git  # Try the git menu in any git repo
The project is built with Python using Textual and is heavily inspired by Emacs' Transient.

I'd love feedback from both CLI users and developers. What tools would you find most useful to have menus for? How could this make your terminal workflows easier?

[1] https://docs.astral.sh/uv/

laserbeam 5 days ago

So, the point is to make CLIs discoverable and aid with writing commands? Cool!

Here's what's missing. A persistent view of what the user is actually typing. The menus are all nice, but if this is fancy autocomplete I always want to also see the partial command that I've been typing so far. At least, there's no such view in the demo video.

PS. The demo video is very confusing.

  • vlandeiro 5 days ago

    Yes, you got the point!

    Re: what the user is typing should be displayed in the bottom left of the window as they are typing. It’s not really fancy autocomplete, rather it’s keyboard shortcuts.

    I answered to a different comment [1] that found the video confusing as well. Let me know if that explanation helps or if the UX is still confusing to you. I’ll need to come up with a better video example.

    [1] https://news.ycombinator.com/item?id=42456417#42460134

federicotdn 3 days ago

Nice! I had a similar idea some months back (https://github.com/federicotdn/brief). Both our projects use external files to document the flags for CLI commands - I'm using YAML instead of TOML.

  • vlandeiro 3 days ago

    Ha! Great minds! Thanks for sharing, I’ll take a look at your project. I looked on github for similar repos before I (re)started on this but couldn’t find anything

xingwu 5 days ago

Either I'm stupid or there are some serious UX flow problems, halfway through the video I'm still totally lost what it is doing.

  • vlandeiro 5 days ago

    Thanks for the feedback! Seems like the video is confusing to several people so I’ll work on improving it.

    I can explain the first steps of the video here:

    1. ykr git starts the TUI configured for git. This display a menu where each option is accessible via a keyboard shortcut.

    2. User inputs “b”, which opens the “branch” menu.

    3. User inputs “l” which runs the command to list all the branches and display them to the user. Hitting ctrl+r hides the result window.

    4. Still in the branch menu, the user inputs “c” to create and switch to a new branch. This prompts them with a branch name and the user inputs “demo”. Submitting the branch name calls git checkout -b demo and display the results to the user.

    The remaining steps show similar interactions to add and commit a file, as well as deleting a branch.

    Does that help understanding how the UX works or are there still confusing parts?

rochak 5 days ago

Does this work for all CLIs? There is Gooey [1], a similar Python project that works, but only for Python CLIs.

[1]: https://github.com/chriskiehl/Gooey

  • vlandeiro 5 days ago

    Yes this works for all CLIs but there’s a caveat: yakari requires a TOML configuration file that defines the menu for that CLI. For instance, here’s the definition of the git menu [1].

    Gooey is much more automated but limited to Python because it requires adding a decorator to the CLI code.

    In other words, yakari is just a command runner with a nice — but apparently confusing — UI.

    [1] https://github.com/vlandeiro/yakari-menus/blob/main/git.toml

layer8 3 days ago

I don’t know about this tool, but I can recommend the comic.

  • vlandeiro 3 days ago

    Yes, Yakari is a great comic (BD really). I thought about the name for a bit, it was between Yakari and Little Thunder (Yakari’s horse)!