Pi, more than a coding harness Developer mkaz built Halftrack, a personal trainer app powered by the Pi coding harness, which uses natural language commands to log and query running workouts. The app, available on GitHub, demonstrates Pi's extensibility through custom launchers, system prompts, skills, and TypeScript extensions, all generated by Pi itself. Pi, more than a coding harness I’m a big fan of the Pi coding harness https://pi.dev . Pi is a coding tool like Claude Code, but minimalist and open, so can be completely customized to your liking. I primarily use gpt-5.6 through an OpenAI subscription with Pi, thank you OpenAI for being open to other tools. You can also connect directly to APIs. I’ve used Pi with Fireworks https://fireworks.ai/ to connect to open weight models like Kimi, Deepsek, or Qwen. Pi supports skills, prompts and most powerfully extensions. You write extensions in Typescript, or better put, Pi is built to understand Pi, so you ask it to build you the extensions you want. I’ve written a few extensions: pi-mkaz-sidebar https://github.com/mkaz/pi-mkaz-sidebar/ - a sidebar with info pi-modoro https://github.com/mkaz/pi-modoro - a pomodoro timer pi-mkaz-alert https://github.com/mkaz/pi-mkaz-alert/ - play a sound when done So, when I was about to build a simple command-line utility to help me track my runs I’m starting to train for a half-marathon, it’s close to 10 years since I ran my last I turned to Pi. So, instead of creating a script that accepts commands and parameters, can I make Pi be the app? It was relatively straight-forward to do, and it works quite well. Now instead of building commands for each request I can simply use text: Log run on the treadmill for 36:00 and 3.0 miles. Show my last five workouts. How many miles have I run in the last eight weeks? What was my average pace this month? Show my workout calendar for August 2026. The source is available at: https://github.com/mkaz/halftrack https://github.com/mkaz/halftrack Though I recommend just using for inspiration and build out your tool however you want it to work. How its built One of my favorite parts about Pi is it is self-aware, not in a dumb AI consciousness way, but it understands its own documentation, how to build prompts, skills, and extensions. So as everyone will tell you, just ask Pi for what you want it to do. Launcher I created a custom launcher that disables all the built-in parts and specifies the system prompt, extension, and skills for the personal trainer app. exec pi \ --model "$MODEL" \ --system-prompt "$ <"$ROOT/trainer/SYSTEM.md" " \ --no-context-files \ --no-builtin-tools \ --no-extensions \ --extension "$ROOT/trainer/extensions/halftrack.ts" \ --no-skills \ --skill "$ROOT/trainer/skills/workout-tracking" \ --no-prompt-templates \ --no-themes \ --session-dir "$SESSION DIR" \ --name "Halftrack" \ "$@" Using $@ to pass in arguments even lets me one shot a request like so: halftrack.sh -p "Log todays run of 3.5 miles in 37:48" System Prompt Halftrack loads its own system prompt which I will likely expand as I get further. I’ll include additional details on training plans and guidance. Right now the simple prompt is working well for me. Skill I’ve created a single skill so far for understanding and tracking runs. Right now it intertwines with the extension’s storage part. For better software design, I should probably separate the two into distinct pieces, but it’s all working now, and I’m not really looking to reuse parts. One future skill I’ll probably create is for termgraph https://github.com/mkaz/termgraph/ , a graphing tool for terminals I built. Termgraph was original built for graphing my runs, I would just record my runs in csv files and then pipe those into termgraph. So I’ll want some graphs and charts at some point, so I’ll integrate in. Extension The extension was all built by Pi. The extension creates the sidebar, suppresses the loading screen, modifies the status line, and includes the commands for storing the data. It is a bit of a catch-all extension. It was initially based off my coding sidebar, pi-mkaz-sidebar https://github.com/mkaz/pi-mkaz-sidebar , but now has expanded for the rest of the features of the personal trainer app. Again, just tell Pi what you want in your extension and it’ll build it for you. Summary A pretty simple tool and probably can be done with other coding harnesses to some degree. What I really like about Pi is I can disable all the pieces I don’t want, customize the interface, and tweak away. It makes it really easy to build mini-LLM apps that scratch a personal itch.