What the base model could do vs. what this harness adds
The local model is qwen3-coder:30b served by Ollama. We haven't fine-tuned or retrained its weights — everything below "added by local-ai" is tool/scaffolding code in this repo that wraps the same stock model.
Source of truth: lib/ollama.mjs, lib/agent.mjs, lib/tools.mjs, server.mjs in this repo.
Out of the box (Ollama + qwen3-coder:30b, no scaffolding)
| Capability | Notes |
|---|---|
| Chat / instruction following | Standard conversational completion over an HTTP API on localhost:11434. |
| Code generation, explanation, refactoring suggestions | As text only — it can write a diff or a command, not run one. |
| Structured tool-call output | Given a JSON tool schema, it can emit a tool_calls request — but nothing executes it. That's a model-level feature this project relies on, not something we added. |
| Single-turn context | No memory across sessions beyond whatever is replayed in the message list. |
| File system / shell / network access | None. A fresh ollama run cannot read a file, run a command, or start a server. |
Added by local-ai's harness
| Capability | Notes | Where |
|---|---|---|
| Sandboxed file read/write | Paths resolved and hard-checked against a cwd root; can't escape it. | lib/tools.mjs |
| Sandboxed shell execution | Runs real build/test/lint commands with a 120s timeout and a blocklist for destructive patterns (sudo, force-push, rm -rf /, fork bombs, …). | lib/tools.mjs |
| Agentic loop | Feeds tool results back to the model turn after turn, under a step/time budget, until it calls finish. | lib/agent.mjs |
| Git/publish safety rules | System prompt requires a read-only check before and after any mutating git command, and bans all force operations outright. | lib/agent.mjs |
| Background processes new | start_background launches a detached process (e.g. a dev server) instead of blocking like run_shell would; check_process / list_processes poll it; stop_process ends it. Anything still running is force-stopped when the task ends. | lib/tools.mjs |
| Local page/service verification new | fetch_url actually GETs a URL to confirm a page renders or an endpoint responds, before the agent is allowed to report success — restricted to localhost/127.0.0.1 so it can't be used to reach the outside network. | lib/tools.mjs |
| Cost/savings accounting | Logs local token counts per call and estimates the Claude spend avoided. | lib/costlog.mjs |
| MCP + CLI surface | Exposes all of the above to Claude Code as MCP tools, and standalone from a terminal. | server.mjs, cli.mjs |