jpmschweitzerandClaude eb3467d06a fix(webber-api): clear ruff, and two things it was pointing at
97 findings to zero. Most were mechanical — 52 unsorted import blocks, 10
unsorted __all__, assorted pyupgrade and simplify hints. Two were not, and both
were visible only because the lint made me look.

`webber version` did not exist. src/cli/commands/version.py defines
show_version(), main.py imported it, and the registration line was never
written — the CLI exposed chat and explore only. The import carried
`# noqa: F401`, which is what kept the omission quiet: someone marked the
symptom as intentional instead of asking why it was unused. show_version is not
redundant with the --version flag; it prints the resolved Ollama URL, model and
debug state, which is the form worth having when something is misconfigured.
Registered, and the suppression dropped because the import is now genuinely used.

test_spawn_explore_agent asserted nothing. It built a mock RunContext, patched
get_agent, and stopped at the comment "For now, verify the explore agent would
be called correctly". It had been counted as a passing test. An AST sweep of all
238 test functions found it was the only one, which is worth knowing — the
problem was contained, not systemic. It is now skipped with a reason, so it
reports as unfinished rather than as passing. Reducing it rather than deleting
its imports was the point: tidying the imports would have made a hollow test
look clean.

Two findings were false positives, and both are recorded rather than silently
worked around:

B023 flagged run_agent closing over full_prompt and ctx. Traced: agent_task is
awaited at line 326 before `continue` reaches the next iteration, so neither
name can be rebound while the closure is pending, and the exception path
cancels and awaits too. Not a bug. Bound as defaults anyway, because that stays
true if the await ever moves. I had called it a live bug before tracing it,
which is the mistake Rule 5 exists for.

RUF012 flagged `rules: list[ApprovalRule] = []` on ApprovalRuleSet. Its
suggested fix — annotate ClassVar — would remove the field from the model.
ApprovalRuleSet is a pydantic model and pydantic deep-copies defaults per
instance; verified by constructing two and confirming their lists are distinct
objects. Suppressed with that evidence in the comment. Ruff cannot see the
pydantic base because BaseSchema is a local subclass of BaseModel.

Also moved a stray `from src.shared.logging import ...` that had drifted below
a function definition, and merged a nested if in the ollama provider.

215 passed, 23 skipped, unchanged except for the new skip. `webber version`
exercised end to end.

mypy is NOT addressed here and the gate still fails on it — 55 errors in 14
files, 35 of them no-any-return from pydantic_ai's untyped returns. That was
hidden behind ruff, because the gate stops at the first failing stage.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-11 15:05:02 +02:00
2026-01-15 07:54:33 +01:00
2026-01-15 07:54:33 +01:00

Webber - Multi-Agent AI Development System

A Claude Code-inspired development assistant powered by local LLMs via Ollama.

Features

  • 3 Agents - Explore (read-only), Plan (architecture), Task (orchestrator)
  • 8 Tools - File read/write/edit, glob, grep, bash, web search
  • Conversations - Multi-turn memory with context summarization
  • Streaming - Real-time response display
  • Self-hosted - Runs on your own hardware with Ollama

Structure

This is a monorepo containing three subprojects:

Directory Description
webber-api/ FastAPI backend server with agent orchestration
webber-cli/ Command-line client for interacting with the API
webber-sandbox/ Test project for functional testing

Additional Directories

Directory Description
sandbox-templates/ Reusable project templates for the sandbox
.gitea/workflows/ CI/CD workflows for releases

Quick Start

1. Start the API Server

cd webber-api
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -r requirements-dev.txt
./wakeup.sh

2. Set Up the CLI

cd webber-cli
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .

# Test connection
webber-cli status

3. Explore with Webber

# One-shot exploration
webber-cli explore "find all bugs in the code" -d /path/to/project

# Interactive chat
webber-cli chat -d /path/to/project

Available Tools

Tool Description
read_file Read file contents with line numbers
glob_files Find files by pattern
grep_content Search file contents with regex
bash_readonly Safe bash commands (ls, git status, etc.)
edit_file Find-and-replace editing
write_file Create/overwrite files
bash Full bash with safety controls
web_search Search web via SearXNG

Agents

Agent Purpose Tools
Explore Fast codebase navigation, search Read-only (glob, grep, read, bash_readonly)
Plan Design implementation strategies Read-only (same as Explore)
Task Autonomous multi-step execution All tools + spawn_agent

API Endpoints

# Stateless agent execution
POST /agents/run          # Execute agent, get response
POST /agents/stream       # Execute with SSE streaming
GET  /agents/             # List available agents

# Stateful conversations (multi-turn memory)
POST /conversations/              # Create conversation
GET  /conversations/              # List conversations
POST /conversations/{id}/messages # Add message, get agent response

Versioning

This project uses prefixed tags for independent release cycles:

  • api/v0.4.0 - Triggers API Docker build and deployment
  • cli/v0.1.0 - Triggers CLI installer build (future)

Requirements

  • Python 3.12+
  • Ollama running with gemma4:e2b model
  • Docker (for production deployment)
  • SearXNG (optional, for web search)

Documentation

  • CLAUDE.md - Agent development guidelines (repo-wide)
  • webber-api/docs/COVERAGE.md - Feature coverage and roadmap
  • webber-api/docs/architecture.md - System architecture
  • webber-cli/README.md - CLI usage guide

License

MIT

S
Description
Mrs. Webber
Readme
522 KiB
2026-08-11 16:30:09 +02:00
Languages
Python 97%
Shell 2%
Makefile 0.9%
Dockerfile 0.1%