Turn Ollama v0.32 into a Scoped Local Dev Agent for Your Repository
On July 11, 2026, Ollama shipped v0.32.0 and quietly changed what its bare command does.

Introduction
On July 11, 2026, Ollama shipped v0.32.0 and quietly changed what its bare command does. Running ollama with no arguments no longer prints help text: it drops you into an interactive agent that chats, writes code, executes commands, and searches the web, all against a locally served model. The v0.32.1 follow-up on July 16 feeds the agent your current working directory, which turns it from a novelty into a repo tool. In this tutorial you will upgrade to Ollama v0.32.1, pick a model that fits your machine, scope what the agent is allowed to execute, and wire it into a daily dev workflow where your code never leaves the laptop and the token bill stays at zero.
What changed in Ollama v0.32
Ollama spent two years as a model runner: ollama run qwen3.5 gave you a chat prompt and nothing else. v0.32 puts an agent loop in the binary itself. The loop can call tools, and the tools it ships with are the consequential part: shell execution, file access, and web search. The same command you have typed since 2024 now has hands.
The design follows the pattern every agent CLI converged on this year: a reasoning model, a tool schema, and a permission prompt between the two. The difference is that with Ollama the reasoning happens on your GPU, which changes both the privacy story and the economics. There is no metered tier to outgrow. (There is also no one to call when it is slow; local trades a bill for a workload.)
What "scoped" means and why you should care
An agent with shell access is exactly as dangerous as the shell you give it. Scoping means three concrete decisions: which directory the agent sees, which commands it may run without asking, and which model drives the loop. Ollama v0.32 makes the first decision for you via the working directory. The other two are configuration, and this tutorial treats them as the main event. An unscoped local agent is not safer than a cloud one just because the weights are nearby
Install the update and pick the model
Upgrade first. The agent experience needs v0.32.0 or later; the working-directory context needs v0.32.1.
# Linux / macOS
curl -fsSL https://ollama.com/install.sh | sh
ollama --version # expect 0.32.1 or newer
# Pull a coding-capable model that fits your RAM.
# Qwen3.5-4B runs on 8 GB machines; the 14B tier wants 16 GB+.
ollama pull qwen3.5:4b
ollama pull qwen3.5:14bModel choice sets the ceiling on everything that follows. A 4B model triages and drafts; a 14B model refactors credibly. Run both, give them the same task, and keep the smallest one that passes. Local inference is a budget game where the currency is RAM, and spending it on parameters you do not need is how laptops become space heaters.
Give the agent your repository context
Launch the agent from the repo root so v0.32.1 hands it the right directory:
cd ~/work/billing-service
ollamaThen make the context durable. The agent reads the conversation, but your repo conventions should not live in your typing. Put them in a project file the agent can read on demand:
cat > AGENT.md <<'EOF'
# billing-service: agent notes
- Python 3.12, FastAPI, SQLAlchemy 2.x. Tests run with `pytest -q`.
- Never edit `migrations/` by hand; generated by alembic.
- Money is integer cents everywhere. A float in a money path is a bug.
- All external calls go through `app/clients/`; nothing imports `requests` directly.
EOFNow the first instruction in any session is one line: "Read AGENT.md before doing anything." The file is doing the job an onboarding conversation does for a new hire, and like the onboarding conversation, its value shows up the third time it prevents the same mistake.
Scope the execution surface
The agent will propose commands. You decide the standing policy instead of adjudicating every prompt. Keep an allowlist in your shell profile and let the agent see it:
cat >> AGENT.md <<'EOF'
## Commands you may run without asking
- git status, git diff, git log
- pytest -q, python -m pytest
- ruff check ., ruff format --check .
## Commands you must never run
- git push, git commit
- rm, mv outside /tmp
- anything with sudo
- any network call except web search
EOFThis is policy-as-context: the model reads the rules and follows them the way models follow instructions, which is to say usually. The enforcement backstop is Ollama's own confirmation prompt on execution; the rules exist so that what the agent proposes is already inside the fence, and the prompt becomes a formality instead of a judgment call at 6pm.
Commits stay human on purpose. A local agent that writes code, runs the tests, and then pushes the result has removed the only checkpoint where you actually read the diff.
Put it to work on the loop you already have
The payoff is the daily loop. Three tasks the scoped agent does well on a 14B model, all offline:
# 1. Pre-review your own branch before opening a PR
"Read AGENT.md. Run git diff main...HEAD, then flag correctness
issues only, ranked by severity, citing file and line."
# 2. Failure triage without paste-hopping
"Run pytest -q. For each failure, read the test file and the module
under test, and propose the smallest fix. Do not apply anything."
# 3. Convention sweep
"Run ruff check . and read the three files with the most findings.
Which violations are mechanical, and which indicate a design issue?"Notice what all three prompts share: they name the commands, they bound the action, and they end before anything mutates. The agent investigates; you decide. That division holds because the prompts encode it, not because the model knows better.
Ollama v0.32 agent vs cloud agent CLIs
| | Ollama v0.32 local agent | Cloud agent CLI (Claude Code, Codex) | |---|---|---| | Where code goes | Nowhere | Provider infrastructure | | Marginal cost | $0 | Metered tokens | | Model ceiling | Best open model your RAM fits | Frontier | | Offline | Fully | No | | Long multi-file tasks | Strained on small models | Strong | | Setup honesty | You manage RAM, quantization, updates | Vendor manages everything |
The two columns are not rivals so much as a routing decision. Frontier-hard refactors go to the cloud CLI; everything private, repetitive, or offline goes local. Teams that pick one column for ideological reasons pay for it in the other currency.
What this setup does not do
- A 4B model does not become senior because you scoped it. Small models confidently propose plausible wrong fixes; the pytest run in the loop is what keeps them honest. - It does not enforce your never-run list cryptographically. It is context plus a confirmation prompt, and a distracted yes at the prompt is still a yes. - It does not index your repository. The agent reads files when told; it has no persistent memory of the codebase between sessions beyond what AGENT.md carries. - It does not do team governance. One laptop, one policy file. Five engineers with five different AGENT.md files is five different agents wearing one name.
The final working example
A complete session setup, from clean machine to first scoped task:
#!/usr/bin/env bash
# scoped-agent.sh: launch Ollama v0.32 as a scoped repo agent
set -euo pipefail
REPO="${1:?usage: scoped-agent.sh /path/to/repo}"
# 1. Ensure Ollama v0.32.1+ and a coding model
ollama --version
ollama pull qwen3.5:14b
# 2. Ensure the agent policy file exists
cd "$REPO"
if [ ! -f AGENT.md ]; then
cat > AGENT.md <<'EOF'
# Agent notes for this repository
- Tests: pytest -q. Lint: ruff check .
## Commands you may run without asking
- git status, git diff, git log, pytest -q, ruff check .
## Commands you must never run
- git push, git commit, rm, sudo, any package install
EOF
echo "Wrote default AGENT.md; edit it for this repo."
fi
# 3. Launch the interactive agent with the repo as working directory
exec ollamaSave it, chmod +x scoped-agent.sh, and start every session with ./scoped-agent.sh ~/work/billing-service. First message in the session: "Read AGENT.md, then run git status and summarize where this repo stands."
When to use it
Use the Ollama v0.32 agent when the work is private, the tasks are bounded, and the loop runs many times a day: pre-review, triage, convention sweeps, log spelunking. Skip it when the task needs frontier reasoning across twenty files, and use a cloud CLI with your eyes open about what you are sending. The interesting shift is not that local caught up to hosted, because on raw capability it has not. It is that the runner you already had became an agent while nobody was watching, and the cost of finding out what it is good for is now one command.
You might also like
Keep reading from the journal.
July 20, 2026DataEngineering
Your alerts don't know what Tuesday 3am looks like
Learned seasonal baselines and burn-rate alerts page on impact, not thresholds
August 3, 2026Cloud
The return was decided before you shipped the box
Calibrated return-risk scoring at checkout prices the fitting room your parcels became
July 13, 2026Data
Your best week ever was a duplicate event
Event contracts put your tracking plan in CI, where bugs die cheap