Why I Switched to Pi: A Terminal-First Coding Agent

⚡ Tools 🔧 TypeScript / AI 👤 Helmut Januschka

From Claude Code to Pi - why a shitty coding agent became my daily driver

The Discovery

A few weeks ago, I stumbled upon Pi by Mario Zechner (@badlogic) - yes, the same Mario behind libGDX, the cross-platform game framework. He's been building a terminal-based coding agent that's refreshingly different from the mainstream options.

The project doesn't take itself too seriously - its website is literally shittycodingagent.ai - but under the hood, it's become one of the most capable and extensible coding agents I've used.

Why Pi?

Multi-Model Freedom

The killer feature that first caught my attention: mid-session model switching. I can start a conversation with Claude Opus for exploration, switch to GPT-5.2 for a second opinion, then jump to Gemini for its massive context window - all in the same session.

# Press Ctrl+L to open model selector anytime
# Or use Ctrl+P to cycle through models

Pi supports basically every provider:

The Session Tree

Instead of linear chat history, Pi stores sessions as trees. Every conversation branch is preserved. Made a mistake 10 messages ago? Use /tree to navigate back, branch off, and try a different approach - without losing your original path.

This has saved me countless times when exploring different solutions to a problem.

Skills System

Pi implements the Agent Skills standard - self-contained capability packages the agent loads on-demand. Think of them as specialized "modes" - a skill might contain setup instructions, helper scripts, and workflow documentation for a specific task like browser automation, API integrations, or code review workflows.

The agent automatically detects when a skill is relevant based on its description. No manual activation needed.

Extensibility Done Right

The hook system is where Pi really shines. Want to customize behavior? Write a TypeScript hook:

// hooks/my-hook.ts
export default {
  name: "my-hook",
  before_agent_start: async (ctx) => {
    // Modify prompts, inject context, whatever you need
    return { systemPromptAppend: "Always be concise." };
  }
};

I've published my own hooks at shitty-extensions:

My Contributions

Getting Started

npm install -g @mariozechner/pi-coding-agent
pi

Contributing Back

Speaking of contributions - the project is actively developed and welcoming to PRs. The codebase is clean TypeScript, well-documented, and Mario is responsive to issues and pull requests.

My keybindings PR went from idea to merged in a few days. That's the kind of open source experience I appreciate.

The Philosophy

From Pi's README:

Pi is a terminal-native coding agent designed for developers who prefer keyboard-driven workflows. It emphasizes transparency, control, and extensibility over magic.

That resonates with me. I want to see what the agent is doing, control its behavior, and extend it when needed. Pi delivers on all three.

Try It

npm install -g @mariozechner/pi-coding-agent
export ANTHROPIC_API_KEY=sk-ant-...
pi

Or grab a standalone binary if you don't want Node.js.

The Discord community is active and helpful. And yes, the website is still shittycodingagent.ai - embrace it.


Links: