Modular Autonomous Runtime Core - Agent 1
M.A.R.C A1 ist ein lokaler, selbstgehosteter Coding- und Entwicklungsagent. Er ist bewusst nicht als allgemeiner Assistent gedacht, sondern fuer echte Entwicklungsarbeit: Repository verstehen, relevante Dateien finden, Code aendern, Tests und Checks ausfuehren, Fehler diagnostizieren, gezielt nachbessern und das Ergebnis sauber dokumentieren.
Die Hauptoberflaeche ist die Web-GUI. Die CLI bleibt fuer Debugging und Automatisierung erhalten, ist aber bewusst sekundar.
M.A.R.C A1 ist auf diesen Ablauf optimiert:
- Aufgabe verstehen
- Projektstruktur und bestehende Architektur analysieren
- relevante Dateien und Muster priorisieren
- gezielte Aenderungen an der richtigen Stelle vornehmen
- passende Tests, Linter, Typechecks oder Builds auswaehlen
- Fehlerausgaben und Logs diagnostizieren
- nachbessern und erneut pruefen
- Diffs, Logs, Diagnosen, Stop-Grund und Abschlussbericht liefern
Wenn die direkte Loesung blockiert ist, darf M.A.R.C A1 kleine Hilfsskripte, Parser oder Test-Harnesses im Workspace erzeugen, solange sie die eigentliche Entwicklungsaufgabe voranbringen und sauber nachvollziehbar bleiben.
Das Projekt hatte bereits gute Grundbausteine:
- Python-Backend mit FastAPI
- lokale Weboberflaeche
- Tool-Dispatcher fuer Filesystem, Search, Shell und Git
- Workspace-Sicherheitsgrenzen
- Session-Store und Logdateien
- erste Basistests
Die groessten Schwaechen lagen im agentischen Verhalten:
- zu lineare Agent-Schleife
- zu duenne Repo-Inspektion
- zu schwache Dateiauswahl
- zu wenig projektbezogene Validation
- kaum strukturierte Fehlerdiagnose
- zu wenig Repair-Iteration
- zu wenig sichtbarer Session- und Abschlusszustand
M.A.R.C A1 hebt diese Punkte an, ohne das Repo blind neu zu schreiben.
Die Runtime arbeitet entlang dieser Workflow-Stufen:
discoverplanactverifyrepairreport
Intern werden diese Stufen ueber konkrete Laufphasen wie planning, exploring, editing, verifying, repairing und reporting abgebildet.
Wichtige Regeln:
- keine verfruehte Finalisierung nach Codeaenderungen, solange noch sinnvolle Validierung offen ist
- Validation-Runs werden pro Edit-Generation verfolgt
- fehlgeschlagene Checks werden als Diagnosen mit Datei- und Aktionshinweisen gespeichert
- Repair-Versuche werden gezaehlt
- jede Session erzeugt einen strukturierten Abschlussbericht
- Tool-Calls, Shell-Kommandos, Diffs und Logs bleiben nachvollziehbar
M.A.R.C A1 baut vor relevanten Aenderungen gezielt Kontext auf, statt nur Dateien stumpf zu lesen.
Der Agent extrahiert unter anderem:
- priorisierte Dateien
- Fokus-Dateien passend zur Aufgabe
- File-Insights mit Kategorien und Gruenden
- Repo-Map und wichtige Top-Level-Bereiche
- Manifeste, Configs, Tests, Build- und Deploy-Dateien
- projektbezogene Validation- und Workflow-Kommandos
Damit wird das Verhalten deutlich naeher an einem starken Coding-Agenten als an einem einfachen Tool-Loop.
Die Runtime kennt drei klare Zugriffsmodi:
safeNur lesende Exploration und low-risk Verifikation. Schreibende Tools und mutierende Shell-Kommandos werden blockiert.approvalNormale Coding-Edits ueber File-Tools sind erlaubt. Medium- und High-Risk-Shell- oder Git-Mutationen werden blockiert.fullVoller lokaler Modus. Dateien und Shell-Kommandos duerfen auch ausserhalb vonworkspace_rootverwendet werden, solange keine Hard-Block-Sicherheitsregel greift.
Die zentrale Konfiguration ist:
{
"access_mode": "safe | approval | full"
}Legacy-Flags wie --read-only und --approval-mode werden weiter akzeptiert, intern aber auf access_mode normalisiert.
Wichtig:
approvalhat aktuell noch keinen interaktiven Freigabe-Dialog in der GUI- riskante Schritte werden dort derzeit sauber blockiert und im Session-State dokumentiert
fullist der Modus fuer moeglichst autonome lokale Entwicklungsarbeit
Die Web-GUI ist die Hauptoberflaeche fuer echte Agentenarbeit.
Sie zeigt unter anderem:
- neue Tasks starten und Sessions fortsetzen
- Access Mode und Dry Run
- Live-Status und aktuelle Workflow-Stufe
- Tool-Calls und Log-Ereignisse
- geaenderte Dateien und gespeicherte Diffs
- Validation-Runs
- Diagnostik aus fehlgeschlagenen Checks
- Workspace-Analyse mit Repo-Map und Validation-Plan
- strukturierten Abschlussbericht
Standardadresse nach dem Start:
http://127.0.0.1:8000
Die Web-GUI ist jetzt durch eine serverseitige Login-Schicht geschuetzt:
- Argon2id fuer Passwort-Hashes
- serverseitige Sessions mit HttpOnly-Cookies
- CSRF-Schutz fuer mutierende Requests
- Rate-Limits gegen Brute Force und Credential Stuffing
- optionale TOTP-2FA ueber
AUTH_INITIAL_ADMIN_TOTP_SECRET
Die konkrete Architektur, das Threat Model, die Security-Entscheidungen und die Pruefanleitung stehen in docs/auth-security.md.
Die Architektur ist modular, aber klar auf agentische Entwicklungsarbeit ausgerichtet.
Die Intent- und Tool-Logik ist jetzt sauber in zwei Phasen getrennt:
- Intent- und Goal-Interpretation
agent/router.pyruft den LLM-basierten Router auf und erzwingt ueberllm/schemas.pyein strikt validiertesRouterOutput-JSON. Diese Phase extrahiert Nutzerziel, Intent, Entitaeten, Rueckfragen, Safety-Signal und einen Action-Plan. - Execution und Tool-Ausfuehrung
agent/planner.pyarbeitet danach nur noch mit dem validierten Router-Output. Die Tool-Auswahl kommt nicht mehr direkt aus dem Rohprompt, sondern ausrouter_result -> validator -> executor.
Der Produktionspfad ist damit:
user text -> IntentRouter -> RouterOutput validation/repair -> Planner.execute_action_from_plan -> ToolDispatcher
Die restliche Architektur bleibt bewusst modular:
- Web-GUI
webui/ist die Hauptoberflaeche fuer Tasks, Sessions, Live-Status, Diffs, Logs und Reports. - Web-Backend
server/kapselt API, Session-Lifecycle und Live-Streams. - Agent-Core
agent/core.py,router.py,planner.py,memory.py,verification.py,diagnostics.pyundreporting.pysteuern Routing, Planung, Repo-Verstaendnis, Validation, Diagnose, Repair-Loop und Abschlussbericht. - Runtime
runtime/erzwingt Workspace-Grenzen, Tool-Dispatching und Logging. - Tools
tools/enthaelt Filesystem-, Search-, Shell-, Git- und Safety-Logik. - LLM-Schicht
llm/provider.pydefiniert die austauschbare Provider-Schnittstelle,llm/ollama_client.pyspricht mit Ollama,llm/schemas.pyerzwingt strukturierte Router- und Tool-Entscheidungen. - Optionale CLI
cli.pyist fuer Debugging, Automatisierung und schnelle lokale Nutzung da.
Der Router arbeitet mit einem strikt validierten Contract aus llm/schemas.py:
intent:inspect | create | update | delete | search | explain | plan | unknownentities: Zieltyp, Zielname, konkrete Zielpfade, Attribute und Constraintsaction_plan: nur erlaubte, ausfuehrbare Action-Namen aus einem festen Catalogneeds_clarification: gezielte Rueckfragen statt Blindflugsafe_to_execute: explizite Safety-Entscheidungconfidence: Float zwischen0.0und1.0
Wenn der LLM-Output das Schema verletzt, folgt ein Repair-Schritt. Erst danach darf die Execution-Phase starten.
Neue Intents oder Actions werden an genau diesen Stellen ergaenzt:
llm/schemas.pyNeues Enum-Mitglied im Intent- oder Action-Catalog plus Modellregeln.agent/prompts.pyRouter-Prompt und Action-Catalog erweitern, damit der LLM die neue Kategorie sauber ausgeben kann.agent/planner.pyExecution-Zweig fuer die neue Action implementieren. Diese Schicht arbeitet nur mit dem validierten Router-Output.tests/test_router.pyundtests/test_planner.pyNeue freie Formulierungen, Validierungsfaelle und Execution-Pfade absichern.
.
|-- README.md
|-- CONTRIBUTING.md
|-- bootstrap_runtime.py
|-- main.py
|-- cli.py
|-- start_marc_a1.bat
|-- requirements.txt
|-- requirements-runtime.txt
|-- agent
| |-- core.py
| |-- diagnostics.py
| |-- executor.py
| |-- memory.py
| |-- models.py
| |-- planner.py
| |-- prompts.py
| |-- reporting.py
| |-- router.py
| |-- session.py
| `-- verification.py
|-- config
| |-- agent.json.example
| `-- settings.py
|-- llm
| |-- provider.py
| |-- ollama_client.py
| `-- schemas.py
|-- runtime
| |-- logger.py
| |-- tool_dispatcher.py
| `-- workspace.py
|-- server
| |-- app.py
| |-- schemas.py
| `-- task_manager.py
|-- tools
| |-- difftools.py
| |-- filesystem.py
| |-- gittools.py
| |-- registry.py
| |-- safety.py
| |-- search.py
| `-- shell.py
|-- tests
| |-- test_access_modes.py
| |-- test_bootstrap.py
| |-- test_diagnostics.py
| |-- test_dispatcher.py
| |-- test_filesystem.py
| |-- test_planner.py
| |-- test_repo_inspection.py
| |-- test_reporting.py
| |-- test_router.py
| |-- test_safety.py
| |-- test_shell.py
| |-- test_validation_planner.py
| |-- test_web_api.py
| `-- test_workspace.py
`-- webui
|-- app.js
|-- index.html
`-- styles.css
Minimal:
python main.pyBeim Serverstart prueft M.A.R.C A1 jetzt immer zuerst die komplette Runtime-Anforderungsliste aus requirements-runtime.txt. Fehlende oder unpassende Python-Pakete werden automatisch installiert, danach startet die Web-App direkt weiter.
Beim ersten Aufruf der Weboberflaeche fuehrt jetzt ein integrierter Setup-Assistent durch die Ersteinrichtung. Er legt die .env an, erzeugt den ersten Admin-Zugang, speichert Runtime-Defaults wie Ollama-Host und Modelle und verbindet auf Wunsch direkt das erste Projekt, ohne dass diese Schritte manuell per Hand vorbereitet werden muessen.
Auf Windows prueft der Startpfad jetzt zusaetzlich, ob Ollama vorhanden ist. Wenn ollama fehlt, versucht M.A.R.C A1 die offizielle Windows-Installation automatisch anzustossen und wartet danach auf die lokale API unter OLLAMA_HOST. Sobald der Server steht, werden die empfohlenen Modelle serverseitig angestossen und ihr Download-Status ist in der Web-GUI sichtbar.
Wenn das System-Python extern verwaltet ist, zum Beispiel bei Homebrew-Python auf macOS oder aehnlichen PEP-668-Setups, weicht M.A.R.C A1 automatisch auf ein repo-lokales Runtime-Venv unter .marc_a1/runtime-venv aus. Folge-Starts verwenden dieses Runtime-Venv direkt weiter.
Unter Windows:
start_marc_a1.batMit eigener virtueller Umgebung:
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python main.pyNützliche Optionen:
python main.py --host 0.0.0.0 --port 8080
python main.py --access-mode safe
python main.py --access-mode approval
python main.py --access-mode full
python main.py --dry-runDie CLI ist vorhanden, aber bewusst nicht der Hauptfokus.
python cli.py task "Fuege JWT Login hinzu"
python cli.py inspect --focus auth
python cli.py diff
python cli.py config showStandardmodell:
qwen3-coder:30b
Lokaler Ollama-Start:
ollama serve
ollama pull qwen3-coder:30bWichtige Defaults:
OLLAMA_HOST=http://127.0.0.1:11434MODEL_NAME=qwen3-coder:30bWORKSPACE_ROOT=.ACCESS_MODE=approval
Wichtige Endpunkte:
GET /api/healthGET /api/configGET /api/workspace/inspectGET /api/sessionsGET /api/sessions/{session_id}GET /api/sessions/{session_id}/logsGET /api/sessions/{session_id}/eventsPOST /api/tasks
Session-Antworten enthalten unter anderem:
workflow_stagevalidation_planvalidation_runsdiagnosticsreport
/api/sessions/{session_id}/events streamt Live-Updates per SSE.
Interner Zustand liegt standardmaessig in:
.marc_a1/
Darin befinden sich unter anderem:
sessions/logs/memory/helpers/reports/
Der Report-Bereich speichert fuer jede Session einen strukturierten Abschlussbericht mit Status, Stop-Grund, Commands, Validation-Runs, Diagnosen, Blockern und geaenderten Dateien.
Die Runtime bleibt lokal, aber defensiv:
safeundapprovalbleiben auf den Workspace begrenztfullhebt die Pfadbegrenzung auf- harte Shell-Blocker fuer destruktive Kommandos bleiben aktiv
- Netzwerkzugriff ist standardmaessig deaktiviert
- alle Tool-Calls und Entscheidungen werden geloggt
- Diffs und Session-Aenderungen bleiben sichtbar
Bootstrap-Verhalten:
main.pyundcli.pyinstallieren fehlende Runtime-Abhaengigkeiten automatisch- ausserhalb eines
venvwird zuerst ein normaler lokaler Pip-Installationsversuch unternommen - falls das Host-Python extern verwaltet ist oder der direkte Installationsversuch scheitert, erstellt M.A.R.C A1 automatisch ein repo-lokales Runtime-Venv unter
.marc_a1/runtime-venv - dieses Runtime-Venv wird danach fuer weitere Starts wiederverwendet
- das Verhalten kann ueber
MARC_A1_PIP_SCOPE=user|global|autogesteuert werden - zusaetzliche Pip-Argumente koennen ueber
MARC_A1_PIP_EXTRA_ARGSgesetzt werden
Mit aktiver virtueller Umgebung oder installiertem pytest:
python -m pytest -qAbgedeckt sind aktuell unter anderem:
- Workspace-Sicherheit
- Tool-Argumentvalidierung
- File-Patching und Diffs
- Shell-Schutz und Timeout-Verhalten
- Access-Mode-Logik
- Repo-Inspektion
- Fehlerdiagnostik
- Validation-Planung
- Web-API und Session-Metadaten
Das Repo ist auf einen professionelleren Branching-Flow ausgelegt:
mainfuer stabile, releasbare Staendedevelopfuer laufende Integrationfeature/<topic>fuer neue Arbeitfix/<topic>fuer Fehlerbehebungenhotfix/<topic>fuer dringende Korrekturen aufmain
Details stehen in CONTRIBUTING.md.
M.A.R.C A1 ist jetzt deutlich naeher an einem starken lokalen Coding-Agenten, aber noch nicht fertig in jedem Punkt.
Aktuelle reale Grenzen:
- die eigentliche Codequalitaet haengt weiterhin stark vom lokalen Modell ab
approvalblockiert riskante Schritte derzeit, statt einen echten Freigabe-Dialog anzubieten- die Repo-Inspektion ist heuristisch, nicht symbolisch indexiert
- es gibt noch keine Multi-Agent-Orchestrierung
Sinnvolle naechste Ausbaustufen:
- Approval-UI fuer medium/high-risk Aktionen
- Repo-Index mit Symbol-Layer
- Multi-Agent-Orchestrierung fuer Explore/Edit/Verify
- persistente Hintergrund-Queue
- weitere projektbewusste Exec-Tools fuer Build-, Container- und interne Infrastruktur-Workflows