DEV Community

Cover image for I Was Tired of My Terminal Being Dumb — So I Built Termim

I Was Tired of My Terminal Being Dumb — So I Built Termim

Md Mim Akhtar on April 08, 2026

Ever tried to find a command in your terminal history by pressing ↑ the up arrow key repeatedly? If you use the terminal a lot, you’ve probably fa...
Collapse
 
itskondrat profile image
Mykola Kondratiuk

shell history without context is basically a log file you search by muscle memory. multi-project setups are where this breaks hardest - same command, completely different meaning depending on directory.

Collapse
 
itsmimakhtar profile image
Md Mim Akhtar

Hi Mykola!

You're right. The "muscle memory" search works fine until you have 5 projects all using npm run dev or make build.

Standard history doesn't know the difference between your Production API and your Side Project, which is how "Environment Bleeding" happens. Termim was built specifically to turn that "log file" into a contextual memory... so your Up-Arrow actually knows where you are standing.

Collapse
 
itskondrat profile image
Mykola Kondratiuk

contextual terminal history solves part of it. the harder case is when you're intentionally cross-pollinating - running a prod command to compare output against staging, or testing from project B while in project A's shell. path-based context breaks there because intent doesn't match working directory. curious how Termim handles that edge.

Thread Thread
 
itsmimakhtar profile image
Md Mim Akhtar

Good point.

Termim handles this specifically with The Escape Path. So when you press [Up Arrow], Termim prioritizes your local directory's history first.

But if you keep pressing up and exhaust that local context, Termim seamlessly "escapes" the boundary and hands off to your shell's native global history.

So it optimizes for the 90% local case, but never locks you out of your global history when your intent shifts...

Thread Thread
 
itskondrat profile image
Mykola Kondratiuk

the escape path solves the exhaust case cleanly. gap I keep hitting is intent mismatch - in project A but want project B's prod command intentionally, not as a fallback. directory-first still bakes in an assumption that breaks there.

Thread Thread
 
itsmimakhtar profile image
Md Mim Akhtar • Edited

You’re right... I was confused first, but now I've got it clear.

I actually just pushed an update (v1.1.3) to solve this exact "intent mismatch." The Ctrl+P search palette is now Layered (Local > Global).

It still prioritizes the current directory at the top to keep the noise out, but it now falls back to the global history for the rest of the searchable results. Now you can grab that Docker command from Project B while sitting in Project A without having to fight the directory filter.

Isolation for the noise, global for the search. And cheers for the sharp feedback!

Collapse
 
pengeszikra profile image
Peter Vivo • Edited
zoxide
alias h="history | rg"
# rg = rip-grep
# set history size to 100k
Enter fullscreen mode Exit fullscreen mode
Collapse
 
itsmimakhtar profile image
Md Mim Akhtar

Main difference with Termim is it’s not search-first, it’s context-first. So ideally you don’t even reach for history | rg.

Collapse
 
yogionbioinformatics profile image
Yogindra Raghav

@itsmimakhtar

Really cool stuff!
Do you mind jumping into a bit more detail about this vs Atuin?

Is there maybe any simple GIF or even you just listing out a few independent examples of this vs Atuin.

I'm really trying to give this a shot before using atuin so I would appreciate any insight!

Collapse
 
itsmimakhtar profile image
Md Mim Akhtar

Hi Raghav! Sorry for the late response. Thansk for asking the question.

Atuin is no doubt a powerful sync engine with a database, whereas Termim is a lightweight context engine designed for a different workflow:

Zero-Daemon: Termim is a sub ~5ms binary with no background services. It works with your native shell rather than replacing it with a full-screen UI.
Directory-First by Default: When you hit Up Arrow, Termim gives you the last command ran in this specific folder instantly. No searching required.
Predictive Intent: Hitting Down Arrow on a blank prompt suggests your "Next Move" (e.g., git push after git commit) using behavioral Markov models.
Privacy Sieve: It redacts secrets (API keys, JWTs) in-memory before they touch your history files.

In short: Atuin is for Global Sync; Termim is for Local Context & Flow.

It takes 3 seconds to install... give it a spin and see if the "context-switching" feel works for you...

Give it a try... Would love your feedback/suggestion...

Collapse
 
yogionbioinformatics profile image
Yogindra Raghav

Thanks so much for the info!

Collapse
 
d3d_snx_acb3b4176ee27d6eb profile image
d3d snx

Interesting stuff! As someone who has started spending more of my time in the terminal this is genuinely something that I could benefit from using! Thanks for sharing!

Collapse
 
itsmimakhtar profile image
Md Mim Akhtar

Most welcome. Do give it a try and share your feedback/suggestion. Appreciate your interest 🤍

Collapse
 
ezejah_chimkamma_06758a9b profile image
Ezejah Chimkamma

This is such a clean idea.

Terminal history always felt “off” but I never framed it as a context problem until now.

Project-aware commands + behavior learning is a real upgrade

Collapse
 
itsmimakhtar profile image
Md Mim Akhtar

Yeah that's what Termim aims to do 💯