Skip to main content

xcoding by @c7s89r — a local-model coding agent. Claude Code, but powered by Ollama or llama.cpp.

Project description

xcoding · by @c7s89r

A local-model coding agent by @c7s89r — like Claude Code, but it talks to a model running on your own machine instead of a cloud API.

✅ Works with Ollama for now. Just install Ollama, pull a tool-capable model, then pip install xcoding and run xcode. (llama.cpp support is in too, but Ollama is the tested path.)

It auto-detects whichever backend is running, gives the model tools to read/write files and run shell commands, and loops until your task is done. Every file write and every shell command asks for your approval first.

Quick start (Ollama)

ollama serve
ollama pull qwen2.5-coder     # a model that's good at tool use
pip install xcoding
xcode

Install

pip install xcoding

Then just run xcode from any project folder.

Or from source:

pip install -e .

(Python 3.9+. Pulls in openai, httpx, rich.)

Run a backend

Ollama (easiest — supports tool-calling natively):

ollama serve
ollama pull qwen2.5-coder        # a model that's good at tool use

llama.cpp (raw GGUF files):

llama-server -m your-model.gguf   # listens on :8080, OpenAI-compatible

Tool-calling quality depends heavily on the model. Use a model trained for it (e.g. qwen2.5-coder, llama3.1, mistral-nemo). Tiny models will struggle.

Use it

xcode
# or:  python -m xcode

Then just talk to it:

› add a /health endpoint to app.py that returns {"ok": true}

In-REPL commands: /help, /models, /model, /init, /todos, /perms, /compact, /sessions, /resume, /reset, /exit.

  • Replies stream live; the prompt shows a context meter (~3.2k/8k).
  • Writes/commands ask y / n / a; a ("always") is saved to .xcode/permissions.json. Edits show a colored diff preview.
  • Attach files inline with @path (e.g. explain @xcode/agent.py).
  • The agent tracks a todo list for multi-step work (/todos to view).
  • Old turns are auto-compacted when the context meter fills; /compact forces it. Conversations are saved per project — xcode --resume or /resume to pick up where you left off.
  • Drop an XCODE.md at the repo root (or run /init) and it's auto-loaded as project memory.

Modes (shift+tab to cycle)

  • ·· normal — asks before writes/commands
  • ⏵⏵ auto — runs & writes without asking
  • ◷ plan — read-only; explores but makes no changes

Sub-agents, web, MCP, hooks

  • spawn_agent lets the model delegate an isolated subtask to a fresh context.
  • web_search (DuckDuckGo) and web_fetch give it internet access.
  • Drop a .xcode/settings.json to add hooks (run a formatter after every edit), env vars, seed permissions, and declare MCP servers:
{
  "hooks": { "after_edit": ["ruff format {path}"] },
  "permissions": { "commands": ["git", "ls", "python"] },
  "mcpServers": {
    "fs": { "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "."] }
  }
}

MCP tools show up to the model as mcp__<server>__<tool>.

Headless / scripting

xcode -p "summarize what this repo does"          # read-only, prints, exits
xcode -p "bump the version to 0.2.0" --yes        # auto-approve writes
xcode -p "what changed?" --resume                 # continue last session

Configuration (env vars)

var meaning
XCODE_BASE_URL point straight at any OpenAI-compatible /v1 URL
XCODE_MODEL force a specific model name
XCODE_API_KEY token if your endpoint needs one (default local)
XCODE_MAX_STEPS max tool round-trips per turn (default 25)

How it works

cli.py       REPL + permission prompts (the only UI code)
agent.py     the loop: model ⇄ tools until it stops calling tools
backends.py  auto-detect Ollama (:11434) / llama.cpp (:8080)
tools.py     read_file, write_file, list_dir, run_command + JSON schemas
config.py    system prompt + knobs

Roadmap

  • Streaming token output
  • edit_file (targeted edits instead of full rewrites)
  • grep / glob_files search tools
  • Persistent permission rules ("always allow git …")
  • /model picker + smart default-model selection
  • Context compaction for long sessions + context meter
  • Diff-style preview when confirming edits
  • Project memory (XCODE.md) + /init
  • Todo/task tracking
  • Session save + --resume
  • Headless mode (-p) + @file mentions
  • Web fetch / web search tools
  • Sub-agents (delegate a subtask to a fresh context)
  • MCP server support
  • Hooks + settings.json
  • Themes + ghost logo, shift+tab mode cycling (normal/auto/plan)

Made by

Built by @c7s89r (nzv).

MIT licensed — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xcoding-0.1.1.tar.gz (40.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xcoding-0.1.1-py3-none-any.whl (42.7 kB view details)

Uploaded Python 3

File details

Details for the file xcoding-0.1.1.tar.gz.

File metadata

  • Download URL: xcoding-0.1.1.tar.gz
  • Upload date:
  • Size: 40.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for xcoding-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c8936f1411cf9451a16e94af2c4afa23f519f0bfda7aa9cf8cae37fcee8c0fbf
MD5 ae221962e927aec2aeb7678ea2e9b117
BLAKE2b-256 7c455eb52cec853d02dbd36be497f8ecb4a8ddd4cf3ada9205e92b9d61b4b7d3

See more details on using hashes here.

File details

Details for the file xcoding-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: xcoding-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 42.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for xcoding-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a2fb5c9e58590d1d5089ecf93b49a507c29f7cb5bd02b6d49854c9628b81b728
MD5 532e0c144a366596d4cfe99c02e6e56b
BLAKE2b-256 1519718b6d4e7fe7ab823047e4c7a79664c060d0acfaf0158c9c173b7af61b9c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page