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)

CapabilityNotes
Chat / instruction followingStandard conversational completion over an HTTP API on localhost:11434.
Code generation, explanation, refactoring suggestionsAs text only — it can write a diff or a command, not run one.
Structured tool-call outputGiven 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 contextNo memory across sessions beyond whatever is replayed in the message list.
File system / shell / network accessNone. A fresh ollama run cannot read a file, run a command, or start a server.

Added by local-ai's harness

CapabilityNotesWhere
Sandboxed file read/writePaths resolved and hard-checked against a cwd root; can't escape it.lib/tools.mjs
Sandboxed shell executionRuns 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 loopFeeds tool results back to the model turn after turn, under a step/time budget, until it calls finish.lib/agent.mjs
Git/publish safety rulesSystem prompt requires a read-only check before and after any mutating git command, and bans all force operations outright.lib/agent.mjs
Background processes newstart_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 newfetch_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 accountingLogs local token counts per call and estimates the Claude spend avoided.lib/costlog.mjs
MCP + CLI surfaceExposes all of the above to Claude Code as MCP tools, and standalone from a terminal.server.mjs, cli.mjs