π Devlog: Building "Carl" β My Powershell AI Sidekick

Powered by Google’s Notebook LM
Why I Built This
It started with a hackathon.
I was watching my peer John tear through a project, stringing together custom Mac bash scripts like a conductor leading an orchestra.
It wasn't flashy — it was effective. His scripts weren't about complexity. They were about velocity.
I wanted that same feeling — but in a way that matched my setup, my goals, and my voice.
Carl was born: a Powershell-driven AI sidekick that feels personal, dynamic, and damn useful inside the terminal.
What I Shipped
Carl is a Powershell app that wraps AI models (via ollama
) with a human touch:
🔥 Chat Mode: Interactive sessions that remember your convo history and "speak" like a mentor, not a machine.
📰 Hacker News Mode: Fetches top HN stories and auto-writes a full /build-grade roundup.
🎲 Quest Mode: Turns your terminal into an interactive, AI-driven text adventure.
✍️ Prompt Mode: Freeform one-off prompts to brainstorm or debug faster.
All with simple flags like -Chat
, -Quest
, or -HackerNews
, so you can jump between modes instantly.
What Broke (And How I Fixed It)
🔴 String Handling Was My Arch-Nemesis
Separating multi-line strings cleanly in Powershell (@" "@
blocks, embedded variables) wrecked me for days.
Especially when nesting dynamic $chatHistory
and $userInput
inside formatted prompts.
Fix:
Strictly separated raw templates from injected data.
Used
-join
and backticks (`) carefully to manage newlines without corrupting the AI context.
🔴 Error Handling Around Temp Filesollama
streams were flaky at times — I'd end up with hanging temp files or half-written outputs.
Fix:
Every temp operation wrapped in
try/finally
.Full cleanup with
Remove-Item -ErrorAction SilentlyContinue
.
🔴 User Input Validation in Quest Mode
Early builds would break if someone typed "potato" instead of "1/2/3."
Fix:
Strong input validation.
Friendly "pick 1/2/3 or type exit" reminders.
What I Learned
🧠 Good UX starts with predictability.
Even in a CLI, small touches like animated response output, clear help screens, and consistent colors make Carl feel stable.
🗣️ Voice matters more than features.
Carl isn’t "just another wrapper for an API call."
His persona — friendly, curious, optimistic — makes people want to talk to him.
🛠️ Start small, but leave hooks for more.
The way I built carl.psm1
— modular, function-based — leaves the door wide open for future tools (daily standups? code snippet generators? idea validators?).
What's Next
🧠 Internal Memory: Let Carl "remember" facts across sessions.
🎨 Voice Themes: Pick your Carl — serious mentor, chaotic good sidekick, tough-love coach.
📚 Content Drafting Mode: Auto-generate blog outlines or course modules from quick prompts.
🌐 Simple Web Export:
-ExportSite
mode that turns conversations into basic static pages.
🥚 Easter Egg: CLI Email Course Incoming
I'm already sketching out the next big evolution:
A full CLI-driven email course — teaching how to build your own personal terminal assistants like Carl.
The rough outline:
Lesson 1: "Why your terminal deserves a voice."
Lesson 2: "String-handling hell — and how to survive it."
Lesson 3: "Chat memory, state machines, and making AI feel human."
Lesson 4: "Bundling your own CLI utilities and modules."
Bonus: "Shipping CLI tools like a builder, not a brand manager."
All triggered inside the terminal, delivered piece-by-piece, builder-style.
Because the future of learning should feel as fast and friendly as the tools we're building.
👀 Stay tuned. If you’re reading this devlog — you're early.
📣 Bonus: "Ship, Don't Shill" Email Course Launches Next Week!
Learn how devlogs like this aren't just updates — they're weapons for trust and community.
Subscribe now and send it to a builder you believe in.