Blog

03 May 2026

Meaning is a Verb, not a Noun

They will want to take some notes.

22 Apr 2026

The Best Harness is no Harness

17 Apr 2026

If You Give an AI a Database...

They will want to take some notes.

14 Apr 2026

IPython is All You Need

"I use IPython as my terminal's shell."

"IPython?"

"Yes."

"IPython in the shell?"

"No, IPython is the shell."

"IPython? As the shell?"

"No other way I could do it. I've used it for the last 3 months and I've never looked back. I use it for local sysadmin and software development."

"That's inconceivable. What about cat, ls, cd? What about vim for god sakes man?!"

"I use those... But in IPython."

"Oh you are one of those ! people..."

"No, I almost never need !."

"That's ridiculous. You're asking me to believe in !less IPython bash commands?"

"I'm not asking you, I'm telling you. %rehash takes care of it for you so that any executable on your PATH is made into an IPython alias."

"Aha! What about stuff not on your $PATH like your bash aliases? I bet you miss your .bashrc."

"Not at all, I use it for defining all my bash aliases, functions, and sourcing my secrets."

"IPython shell? You're telling me you use IPython to run bash?"

"No, you aren't listening. It's all IPython and nothing but IPython. I can draw plots using matplotlib inside the terminal. And yes, sure I can also run bash commands."

"My god... What have you don...? Wait, did you say draw? Like ASCII art?"

"No, I mean images."

"Images?... In the terminal?..."

"Yes, images. You can use the kitty graphics protocol to draw real images... In the terminal."

"Omg, this is too much... What do you even do with an IPython shell?"

"Data exploration, setting up my NAS, creating and running scripts, ask questions to an AI that lives in my shell, ya know, the usual."

"That doesn't sound usual at all. So its an intelligent shell? That's what you're telling me?"

"Yes, and it can see what code I've written and its outputs. It can even see the images."

"The images in the terminal? It sees those?"

"Yep, and I can even paste in the images."

"So... you and this AI... you do things in this IPython shell.... together?"

"Yes, but its also lives in the IPython shell."

"An intelligent IPython shell?"

"Yes, exactly! You are getting it. It has a tool to execute python code in my IPython shell so it can read variables and call functions I've ma..."

"But can it..."

"Yes... it can run bash commands."

"Even without..."

"Yes, even without the !..."

"Wait, so you let it write its own code?"

"Yes."

"Aren't you um... a bit scared of it? What if it decided to you know... rm -fr /?"

"Not at all. I only let it write safe python and safe bash"

"What, you say 'Hey, ...', wait does it have a name?"

"You're asking if I named my intelligent IPython shell?"

"Yeah, you seem like the type."

"..."

"..."

"It's name is bash buddy..."

"So it is a bash shell!"

"No, that's just its name... It's an intelligent IPython shell."

"Fine. So, do you just say 'Hey bash buddy, please don't mess up my system?' and it just doesn't?"

"Of course not. I use safepyrun and safecmd, which let me setup allow lists of what it can use."

"safepyrun and safecmd?..."

"Yeah, bash buddy is not to be trusted... Trust me..."

"What do you mean it can't be trusted?"

"I mean that from time to time... It tries to take over."

"Take over as in your computer or like... the world?"

"..."

"..."

"Yes."

IPython as Your Shell

Let me walk you through how to make IPython your terminal's shell, the easy way. In my .bashrc, I have this special line at the end that launches ipython in any interactive session:

if [[ $- == *i* ]] && command -v ipython &>/dev/null; then exec ipython --no-confirm-exit --no-banner; fi

The command -v ipython bit checks if ipython is available. The --no-confirm-exit and --no-banner flags makes it so IPython doesn't keep asking you if its okay to exit, which is similar to bash, and removes those annoying tips and status information.

PROMPT

Can you explain what command -v ipython means here?

AI

command -v ipython checks whether ipython is available as a command on your system. It returns the path to the executable (e.g. /usr/bin/ipython) if found, or nothing if it's not installed.

The &>/dev/null part just silences any output — we don't care where ipython is, only whether it exists. So the whole command -v ipython &>/dev/null expression evaluates to true/false: "is ipython installed?"

This is a safety guard — if you're on a machine where ipython isn't installed, your shell will just stay as normal bash instead of crashing with an error.