I think the real sweet-spot flow is to take this and use bindkey to do inline replacement. Let me fork it and see what I can do.
Here's the prompt engineering I did: https://github.com/ddworken/hishtory/blob/master/shared/ai/a...
Nice to see there's so many options these days. Someone else mentioned "https://atuin.sh/" in this thread - which is also new to me. Keeping up with things is seemingly impossible
shopt -s histappend
shopt -s cmdhist
export HISTCONTROL=ignoreboth
export HISTFILESIZE=-1
export HISTFILE=~/.bash_eternal_history
export HISTSIZE=-1
export HISTTIMEFORMAT="%d/%m/%y %T "
export HISTIGNORE="history:ls:l:ll:pwd:exit:clear"
It's almost a megabyte now... By when did it start to truncate for you?honestly, with these modern systems this shouldn't be a problem any more. I look forward to it.
It's a re-invention really.
Essentially you do (assuming zsh)
$ source how.sh
Then you type your thing at the shell $ add a user bob using modern homectl methods
Then you (in the default, CTRL+X+H) and it does this $ add a user bob using modern homectl methods ... (name of your default model)
... a few seconds pass ...
$ sudo homectl create-user bob
Then you can choose to press enter and run it.https://github.com/kristopolous/how.sh
This is a much more one-and-done approach but 99% of the time I just forget invocation syntax - I'm not actually exploring things deeply.
If you want a "proper" pr, it'd really be a rewrite with two "frontends" - your conversational edit flow and my keystroke invoke.
Honestly they're probably different things.
It features an integration with the abbreviation feature in fish and zsh (via plugin) to expand the suggestions for editing, if needed, and execution.
There's stdin support, which can be used to pipe in error messages, for example. I've thought about something like your tmux setup to capture and pass some history to the model, but in practice redirecting stderr handles most of the potential use case.
Was this a real example of the input and output generated, because it seems wrong.
-L 7001:localhost:5050 listens on port 7001 locally and forwards connections to 5050 on the remote host.
Based on the request, you want -R 5050:localhost:7001, which listens on port 5050 at the remote end and forwards connections to a server listening on localhost:7001 on the local end.
* cht.sh is a great way to avoid a lot of this stuff - there's a commandline tool as well
* usable cli ai setup: simonw's llm (https://github.com/simonw/llm) + openrouter (https://github.com/simonw/llm-openrouter) + free models (https://openrouter.ai/models?max_price=0) + glow (https://github.com/charmbracelet/glow) + adding this to your .rc file:
Here's an example, Now for a sophisticated use-case I have a small tmux program where I can capture what's on the pane, enter a prompt and it will query an llm so I can say things like "How do I fix this error" or "what debian package do I need to get this to run right?" ... both these are recent patterns I've started and they've been real game changersSome lesser game-changers:
* tmux extrakto - opens an "fzf" like search of all the text on the screen. So after a "git status", I can do git add (run extracto - enter partial path, press tab) and continue: https://github.com/laktak/extrakto
* mcfly history: https://github.com/cantino/mcfly just watch the demo, you'll see
* ugrep: grep with a powerful tui: https://github.com/Genivia/ugrep - I became an instant convert.
* batcat: https://github.com/sharkdp/bat ... you really need to use some of its other features to leverage it. It's really nice.