The best harness is the one that fits your need.

That's the honest answer. I started using pi.dev after reading through a lot of threads on r/LocalLLaMA/, watching people compare their setups, and realizing I wanted something I could shape myself. Here's what I've been running with:

Stack

100% local β€” nothing leaves the machine.
  • Model: Qwen3.6-27B-NGRAM-MTP (Q4_K_M), 128K context window
  • GPU: NVIDIA GeForce RTX 3090 (24 GB VRAM), driver 590.48.01
  • Inference: llama.cpp with a custom fixes branch (server-context fixes, router presets, chat template fixes, build script), running on localhost:5000 via OpenAI-completions API
  • Context management: Compaction enabled (keeps 32K recent tokens, reserves 13K)
  • RAG: llama-rag with hybrid retrieval against local docs
  • TTS: custom speak.ts via Supertonic 3, custom talk.ts with qwentts.cpp
  • STT: custom listen.ts extension with Qwen3-ASR (VAD-gated recording)
  • Session recall: Search and query past sessions by content
  • Web: custom web-search.ts (Brave Search) + custom web-resume.ts (Firefox fallback for JS/Cloudflare)
  • Core tools: read, write, edit, bash β€” enough to get most things done
  • Extensions: KISS .ts files loaded at startup β€” one file, one tool
  • Sandbox: bubblewrap, capable of running isolated app sessions with GPU, audio, display, and private D-Bus
  • Persistent config: APPEND_SYSTEM.md for cross-session instructions
Pi can also work with any model through API, but my setup is fully offline.

Why Pi for me?

It's the most customizable without the bloat. Pi is bare-metal β€” it gives you a clean slate and you add what you actually need. A fresh session starts with roughly 3-5K tokens of system context, leaving most of the 128K window for actual work. The real advantage is how easy it is to customize. You literally just ask the agent to:
  • Create extensions β€” drop a .ts file in ~/.pi/agent/extensions/ and it loads at startup. Need web search? TTS? RAG? Session recall? Voice input? There's already an extension for it, or you describe what you want and iterate until it's ready.
  • Customize APPEND_SYSTEM.md β€” this is your persistent system prompt layer. You tell it how you want to work, what conventions to follow, what tools are available, and it sticks across sessions. No fighting baked-in behavior you can't reach.
It's like the Arch Linux philosophy applied to AI harnesses: minimal core, maximum extensibility, you build what you need.

What I use it for

Coding (obviously), but also general-purpose agent work β€” researching topics, managing files, writing articles like this one using web_resume on a webpage and pulling content from it, voice input via STT, RAG queries against my own documents, session recall to pick up where I left off days later. It's not just "edit this file and run tests." Every statement in this article is mine β€” the AI just made sure I could back it up.

The trade-off

Pi doesn't hold your hand, but it has strong opinions β€” a clear philosophy (KISS), doc-driven design, and conventions that guide you. It helps you read its own documentation, understand the system, make it yours. Pi + Qwen 27B–35B are just good enough. Draft a PLAN.md, ask the model to review it, iterate with comments, then implement phase by phase in git. It works.

Biggest problem I face?

This setup is a productivity multiplier β€” the danger is spending too much time customizing it and running so many projects in parallel that you can easily lose focus. AI speeds things up x100, but someone still has to decide which way to go.
Source: Reddit r/LocalLLaMA β€” "What's the best local AI harness for coding + general use?"