Back to Feed
aibuilddevlogApril 30, 2025

πŸ“œ Devlog: Building "Carl" β€” My Powershell AI Sidekick

Craft The Future
Author
April 30, 2025
3 min read
πŸ“œ 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 Files
ollama 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.

Subscribe now