OwA — Ollama Workspace Agent
A local, privacy‑first coding agent that understands your codebase and edits files on your machine.
Runs entirely on your own hardware via Ollama — no cloud, no telemetry, no external API keys.
- Chat with your project using a local LLM
- Semantic search across your codebase
- Safe, review‑before‑run shell commands
- Git‑aware workflow (status, diff, log)
- Optional HTTP API for integration with other tools
Quick Start
-
Install Ollama and models
# Install Ollama: https://ollama.com ollama pull llama3.1:8b ollama pull nomic-embed-text
-
Install OwA
pip install ollama-workspace-agent # or, for an isolated install: pipx install ollama-workspace-agent
-
Run in your project
cd your-project owa
-
Configure once
On first run, type
/setupand follow the prompts.
Config is saved to~/.config/owa/.env. -
Start coding
Try prompts like:
- “Where is the auth logic implemented?”
- “Add input validation to
app/api.pyand show me the diff.” - “Run the tests and summarize failures.”
Requirements
- Python 3.11+
- Ollama running on a reachable machine
- A chat model installed on Ollama, e.g.
llama3.1:8b - An embedding model installed on Ollama, e.g.
nomic-embed-text
Configuration
Run /setup inside OwA, or manually create ~/.config/owa/.env:
# ~/.config/owa/.env
# Ollama on the same machine
LLM_BASE_URL=http://127.0.0.1:11434/v1
EMBEDDING_BASE_URL=http://127.0.0.1:11434
# Or Ollama on another machine in your LAN
# LLM_BASE_URL=http://192.168.1.50:11434/v1
# EMBEDDING_BASE_URL=http://192.168.1.50:11434
LLM_MODEL=llama3.1:8b
EMBEDDING_MODEL=nomic-embed-text
# Optional: protect the HTTP API
API_KEY=choose-a-private-api-key
You can also place a .env in your project root to override the global config for that project.
LLM_BASE_URLuses Ollama’s OpenAI‑compatible/v1API.EMBEDDING_BASE_URLuses Ollama’s native/api/embedAPI.- If Ollama runs on the same machine, use
127.0.0.1as the host.
Troubleshooting config
-
Verify Ollama is running:
curl http://127.0.0.1:11434/api/tagsA successful response contains a
modelslist. -
Ensure the models in your config are installed:
ollama pull llama3.1:8b ollama pull nomic-embed-text
-
For remote Ollama, make sure the host’s firewall allows port
11434.
CLI Commands
| Command | Description |
|---|---|
/setup |
Configure Ollama connection |
/model |
Switch the active chat model |
/index |
Rebuild the project index |
/status |
Show index status |
/clear |
Clear conversation history |
/help |
Show available commands |
/quit |
Exit |
Indexing
OwA auto‑indexes your project on first run. Common directories are excluded automatically (node_modules, dist, build, .github, .git, .venv, etc.).
To exclude additional files or directories, create a .owaignore in your project root:
# .owaignore
secrets.json
fixtures/
*.min.js
The local index is stored in .owa/ and is automatically added to your .gitignore on first index.
Tools
The agent can call these workspace tools:
| Tool | Description |
|---|---|
list_dir |
List files and directories |
read_file |
Read UTF-8 text files |
patch_file |
Targeted search-and-replace edit on an existing file |
write_file |
Create or fully replace a file |
search_code |
Semantic search over the indexed codebase |
code_review |
Review Python files for common security risks |
run_command |
Run a shell command after user confirmation |
git_status |
Show Git branch and working tree status |
git_diff |
Show current Git diff |
git_log |
Show recent Git commits |
Example prompts:
- “Search for where we handle JWT expiration and suggest improvements.”
- “Patch
app/api.pyto add request validation using Pydantic.” - “Run
pytest -qand summarize failing tests.” - “Show me the current git diff and explain what changed.”
API Mode
Run the HTTP API:
uvicorn app.api:app --host 127.0.0.1 --port 8000
Use the CLI as an API client:
owa --api-url http://127.0.0.1:8000
Or call directly with curl:
curl -X POST http://127.0.0.1:8000/chat \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{"message": "Explain the main entry point in this project"}'
Available endpoints: GET /health, GET /status, POST /chat, POST /chat/stream, POST /clear, POST /index.
When API_KEY is configured, include it in the X-API-Key header for every endpoint except /health.
Privacy & Safety
- All inference and embeddings run on your own Ollama server.
- No code or conversation leaves your machine unless you explicitly call a remote API.
- Shell commands require explicit user confirmation before execution.
- Sensitive paths and common noise directories are excluded from indexing by default.
- The project index lives in
.owa/and is automatically added to.gitignore.
Why OwA?
OwA is designed for developers who want:
- Fully local inference: No cloud dependencies; just Ollama + your models.
- Codebase awareness: Automatic indexing and semantic search over your repo.
- Safe editing: Patch/write files and run commands only after your approval.
- Simple deployment: Single Python package, minimal config, works on laptop or server.
Compared to heavier frameworks, OwA aims to be:
- Easy to install and run (
pip install+owa) - Transparent and hackable (clear project layout, simple agent loop)
- Focused on day‑to‑day coding tasks rather than complex orchestration
Project Layout
.
├── app/
│ ├── agent/ Agent orchestration and system prompt
│ ├── api.py FastAPI endpoints and request models
│ ├── cli.py CLI entry point
│ ├── config.py Global config path resolution
│ ├── service.py Shared chat, indexing, and status service
│ ├── indexer/ Code indexing and semantic search
│ ├── llm/ OpenAI-compatible Ollama client
│ └── tools/ Workspace tool implementations and registry
├── demo/ Small demo code
├── main.py Thin shim for `python main.py`
├── CHANGELOG.md Project change history
└── README.md Project documentation
Development
Clone and install in editable mode:
git clone https://github.com/ZakaCoding/ollama-workspace-agent
cd ollama-workspace-agent
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Run tests:
pytest tests/ -v
Compile check:
python -m py_compile main.py app/agent/*.py app/indexer/*.py app/llm/*.py app/tools/*.py
Contributing
Contributions are welcome! Feel free to:
- Open issues for bugs, ideas, or questions
- Submit pull requests for improvements or new tools
- Share workflows or prompts that work well with OwA
License
Licensed under the MIT License. See LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ollama_workspace_agent-0.5.7.tar.gz.
File metadata
- Download URL: ollama_workspace_agent-0.5.7.tar.gz
- Upload date:
- Size: 38.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9510be066363f5dfe63767607952ebba635b378bc35589f6e31e056a03ea1072
|
|
| MD5 |
792543ca9d5e43af0754675dc94be669
|
|
| BLAKE2b-256 |
2a1e793a4c5d88c72973c0bde79c940edb99e3d4f88d65d7e30e248e7cac326b
|
File details
Details for the file ollama_workspace_agent-0.5.7-py3-none-any.whl.
File metadata
- Download URL: ollama_workspace_agent-0.5.7-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
892dcd80905afe6cbd720dc9b1bf0f8fbaac75ec206e3ce259623d7852182763
|
|
| MD5 |
00e011c58a10fb98f5ad023d2b6870b3
|
|
| BLAKE2b-256 |
2b6877213029afa4b4bc6c1283ee525c636fa8c347f47c0bcd97cfd74054a051
|