bedda.tech logobedda.tech
← Back to blog

Local AI Agents at $0/Month: What's Good Enough?

Matthew J. Whitney
8 min read
artificial intelligencellmmachine learningai integration

Local AI agents running on consumer hardware versus cloud-hosted Claude and GPT is not an abstract debate in our shop. We made the switch, ran it in production across real engineering work, and have months of data on where the tradeoff actually lands. This post is the honest accounting of that experiment.

The short version: local is genuinely good enough for a significant slice of software engineering tasks, and the failure modes are specific and predictable. The long version follows.

Why We Ran This Experiment

The billing math got uncomfortable. When you're running AI-assisted development continuously across multiple projects, cloud API costs compound fast. Claude Opus and GPT-4o are excellent, but at sustained usage they're a recurring operational cost that scales with productivity, which is a strange thing to optimize against.

We also had a hardware angle. Our primary development machine is an ASUS ROG Flow Z13 running a Strix Halo APU with unified memory. That architecture is meaningfully different from a typical desktop GPU setup. Strix Halo gives you a large unified memory pool that the GPU and CPU share, which means you can load larger models than a discrete GPU with dedicated VRAM would allow. That changes the calculus on what "consumer hardware" can actually run.

So the question became: given this specific hardware, running llama.cpp with Vulkan backend, what models are good enough to replace cloud inference for real engineering tasks?

The Setup: llama.cpp + Vulkan on Strix Halo

llama.cpp with Vulkan is the relevant comparison point here, not CUDA. The Flow Z13's integrated GPU doesn't have NVIDIA CUDA support. Vulkan is the cross-platform compute path, and llama.cpp's Vulkan backend has matured considerably. It's not the same performance ceiling as a high-end CUDA setup, but it runs, and it runs models that would otherwise require a discrete GPU with 24GB+ VRAM.

The Strix Halo's unified memory means the model weights live in a pool shared between CPU and GPU. This is the architectural advantage. A discrete GPU with 8GB VRAM caps you at roughly 7B-13B parameter models in reasonable quantizations. On Strix Halo, the ceiling is much higher.

We tested primarily with Qwen2.5-Coder, Llama 3.1 variants, and Mistral-based models at Q4 and Q5 quantizations. The specific model versions matter because the quality gap between generations is real.

Cloud Claude/GPT: What You're Giving Up

Before declaring local good enough, you need an honest picture of what cloud models do that local models don't.

Context window and coherence. Claude 3.5 Sonnet handles 200K tokens with strong coherence throughout. Even the best local models at practical quantization levels degrade noticeably in long-context tasks. If your workflow involves feeding entire codebases as context, or maintaining coherent reasoning across a very long conversation, cloud models have a genuine edge that isn't closed by better quantization.

Instruction following on complex tasks. Cloud frontier models are better at reliably following multi-step, nested instructions. When I write a complex prompt that chains several constraints together, Claude hits it more consistently than any local model we tested. The gap is smaller than it was a year ago, but it's real.

Tool use and structured output. Claude and GPT-4o's function calling and JSON mode are reliable in a way that local models are not yet. When you're building agentic pipelines that depend on structured output from the model, local model failures here cause real downstream breakage. This is probably the biggest practical failure mode we hit.

Speed on long outputs. Cloud inference is fast. Local inference on consumer hardware is not. For long code generation tasks, the token-per-second rate on local hardware is noticeably slower. This matters for flow state.

Local AI Agents: Where They Actually Hold Up

Here's where the comparison gets interesting, because local is genuinely good enough for more than people assume.

Code completion and explanation. For the bread-and-butter of software engineering work, explaining what a function does, suggesting a refactor, writing tests for a given interface, generating boilerplate, Qwen2.5-Coder at Q5 is competitive with GPT-4o. Not identical, but competitive. The delta doesn't justify the API cost for these tasks.

Isolated, well-scoped tasks. Local models perform much better when the task is self-contained. "Write a TypeScript builder pattern implementation for this interface" is the kind of task where local and cloud outputs are hard to distinguish. The builder pattern discussion circulating in the community right now is a good example of the category: well-defined, bounded, pattern-oriented work. Local handles this well.

Privacy-sensitive codebases. This is underrated. Some of the work we do involves client codebases that shouldn't leave the building. Local inference is the only option there. The question isn't cloud versus local on quality grounds, it's local versus nothing.

Offline and latency-sensitive workflows. When you're on a plane or in an environment with unreliable connectivity, local inference keeps working. This sounds minor until you've lost half a flight's worth of productivity to API timeouts.

Cost at volume. At zero marginal cost per token, you can run local AI agents in ways that would be expensive to justify with cloud billing. Automated code review passes on every commit, continuous documentation generation, exploratory refactoring suggestions you'd never pay per-token for. The $0/month model changes what you're willing to run.

Direct Comparison: The Dimensions That Matter

DimensionCloud (Claude/GPT)Local (llama.cpp + Vulkan)
Long-context coherenceStrong at 200K tokensDegrades past 8-16K practical window
Structured output / tool useReliableInconsistent, requires prompt engineering
Code completion qualityExcellentGood to very good (model-dependent)
Instruction following complexityHighModerate
Tokens per secondFastSlower on consumer hardware
Cost at sustained useOngoing API billing$0 marginal
PrivacyData leaves your machineFully local
Offline availabilityNoYes
Context on large codebasesHandles itNeeds chunking strategies

The Honest Failure Modes

Local AI agents fail in specific ways, and knowing them in advance lets you design around them.

Structured output breaks pipelines. If you're building an agentic loop that expects JSON from the model, local models will occasionally produce malformed output, truncated JSON, or output that wraps the JSON in unexpected prose. Cloud models do this too, but less often. Build validation and retry logic into any local agent pipeline from day one.

Reasoning depth on novel problems. When I'm working through an unfamiliar architecture problem, something like the database programming rethinking that Acadia Engineering recently explored, the kind of reasoning that requires synthesizing across multiple unfamiliar domains, cloud frontier models are meaningfully better. Local models give shallower first-pass answers on genuinely hard problems.

Benchmark numbers lie about real use. Dan Luu's benchmarkpocalypse piece is relevant here. The published benchmarks for local models often measure narrow capability slices under conditions that don't reflect actual use. A model that scores well on HumanEval may still produce subtly wrong code on your specific codebase patterns. Our experience is that real-task quality diverges from benchmark rankings more than the leaderboards suggest.

Thermal and power constraints. Running inference continuously on a laptop APU generates heat and drains battery. Cloud inference has no thermal budget on your hardware. For sustained long sessions, this is a real consideration.

The Verdict: Use Local When, Use Cloud When

Don't hedge this. Here's the actual guidance from months of production use.

Run local AI agents when: the task is well-scoped and bounded, the codebase is privacy-sensitive, you're doing high-volume automated tasks where per-token cost matters, you need offline capability, or you're doing code completion and explanation work where the quality delta from cloud doesn't justify the cost.

Use cloud when: you need reliable structured output in an agentic pipeline, the task requires long-context coherence across a large codebase, you're doing novel architecture reasoning where depth matters, or you need consistent instruction following on complex multi-step prompts.

The practical answer for most engineering shops is a hybrid. Local handles the volume work at zero cost. Cloud handles the hard problems where quality is worth paying for. The mistake is treating this as binary.

One thing I'd add from our specific hardware setup: if you're evaluating local inference, the Strix Halo architecture is worth taking seriously. The unified memory pool changes what's possible on consumer hardware without discrete GPU VRAM constraints. The Vulkan backend in llama.cpp is stable enough for production use. This isn't a hobbyist experiment anymore.

The $0/month number is real. The quality ceiling is real too. The question is whether the tasks you're running hit that ceiling, and for a larger portion of engineering work than most people assume, they don't.

Have Questions or Need Help?

Our team is ready to assist you with your project needs.

Contact Us