{"slug": "pi-more-than-a-coding-harness", "title": "Pi, more than a coding harness", "summary": "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.", "body_md": "# Pi, more than a coding harness\n\nI’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.\n\nPi 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.\n\nI’ve written a few extensions:\n\n[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\n\nSo, 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?\n\nIt was relatively straight-forward to do, and it works quite well. Now instead of building commands for each request I can simply use text:\n\n*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.*\n\nThe source is available at: [https://github.com/mkaz/halftrack](https://github.com/mkaz/halftrack)\n\nThough I recommend just using for inspiration and build out your tool however you want it to work.\n\n## How its built\n\nOne 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.\n\n### Launcher\n\nI created a custom launcher that disables all the built-in parts and specifies the system prompt, extension, and skills for the personal trainer app.\n\n```\nexec pi \\\n  --model \"$MODEL\" \\\n  --system-prompt \"$(<\"$ROOT/trainer/SYSTEM.md\")\" \\\n  --no-context-files \\\n  --no-builtin-tools \\\n  --no-extensions \\\n  --extension \"$ROOT/trainer/extensions/halftrack.ts\" \\\n  --no-skills \\\n  --skill \"$ROOT/trainer/skills/workout-tracking\" \\\n  --no-prompt-templates \\\n  --no-themes \\\n  --session-dir \"$SESSION_DIR\" \\\n  --name \"Halftrack\" \\\n  \"$@\"\n```\n\nUsing `$@`\n\nto pass in arguments even lets me one shot a request like so:\n\n```\nhalftrack.sh -p \"Log todays run of 3.5 miles in 37:48\"\n```\n\n### System Prompt\n\nHalftrack 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.\n\n### Skill\n\nI’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.\n\nOne 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.\n\n### Extension\n\nThe 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.\n\nIt 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.\n\nAgain, just tell Pi what you want in your extension and it’ll build it for you.\n\n## Summary\n\nA 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.\n\nIt makes it really easy to build mini-LLM apps that scratch a personal itch.", "url": "https://wpnews.pro/news/pi-more-than-a-coding-harness", "canonical_source": "https://mkaz.blog/code/pi-more-than-a-coding-harness/", "published_at": "2026-09-01 20:04:51+00:00", "updated_at": "2026-09-01 20:22:50.404073+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "artificial-intelligence"], "entities": ["Pi", "mkaz", "Halftrack", "OpenAI", "Fireworks", "Kimi", "Deepsek", "Qwen"], "alternates": {"html": "https://wpnews.pro/news/pi-more-than-a-coding-harness", "markdown": "https://wpnews.pro/news/pi-more-than-a-coding-harness.md", "text": "https://wpnews.pro/news/pi-more-than-a-coding-harness.txt", "jsonld": "https://wpnews.pro/news/pi-more-than-a-coding-harness.jsonld"}}