agent-semaphore
agent-semaphore
Eine Koordinationsschicht für parallele Codierungs-Agenten. Worktrees beseitigen Merge-Konflikte nicht – sie verschieben sie auf den Integrationszeitpunkt. agent-semaphore schließt die Lücke: absichtstragende Beanspruchungen (claims) von Bereichen, eine Warnung im Moment des Schreibens, Konfliktvorhersage bevor etwas committet wird und eine serialisierte Landing-Queue mit einem obligatorischen Test-Gate.
Local-first: kein Daemon, keine Cloud, kein Konto. Eine einzelne SQLite-Datei im git-common-Verzeichnis ist der gesamte Treffpunkt, sodass jeder Worktree des Repos sie konstruktionsbedingt sieht. Von Haus aus herstellerübergreifend — Claude Code Hooks und MCP, Codex CLI über MCP, alle anderen über einen git pre-commit Hook.
Das Problem
Von Agenten geschriebene Pull-Requests haben eine Konfliktrate von 27,7 % – im Vergleich zu 10–20 % bei menschlichen (AgenticFlict, 107K+ Agenten-PRs). Bei ko-aktiven Paaren beträgt die Aufteilung 19,8 % Intra-Agent vs. 41,7 % Cross-Agent: Agenten haben keine horizontale Wahrnehmung voneinander, und jedes Produkt, das Koordination ausliefert, koordiniert nur seine eigenen Agenten. Ein schlecht gelöster Konflikt weist eine bis zu ~26x höhere Fehlerdichte auf als normaler Code (EMSE 2020) – der teure Teil ist nicht der Konflikt, sondern die stille, schlechte Lösung.
Isolation ist gelöst und standardisiert (ein Worktree oder Container pro Agent – jeder liefert es aus). Vorhersage und Integration nicht: niemand führt git merge-tree zwischen aktiven Worktrees aus, und eigenständige lokale Merge-Queues existieren praktisch nicht.
Was es tut
Ebene | Mechanismus |
Beanspruchungen | Leases, keine Locks: TTL, Verlängerung durch Aktivität, monotone Fencing-Epochen, eine obligatorische Absicht ( |
Durchsetzung | Ein |
Radar | Schnappschüsse von schmutzigen Worktrees, erstellt über einen temporären Index (niemals den Arbeitsbaum verändernd), paarweise verglichen mit |
Warteschlange | FIFO unter |
Harte Garantien existieren an genau einer Stelle: dem Landing-Pfad. Hooks und pre-commit sind kooperative Zugangskontrolle und Telemetrie, keine Sicherheitsgrenze — ASEM_HOOK_OFF=1 und ASEM_OVERRIDE=1 sind dokumentierte, geprüfte Notausgänge. Dies wird vorab gesagt, weil eine Koordinationsschicht, die vorgibt, eine Sandbox zu sein, schlimmer ist als keine.
Schnellstart
uv tool install git+https://github.com/alwh1te/agent-semaphore # asem on PATH
# or, from a clone: uv tool install -e .
cd <your repo>
curl -O https://raw.githubusercontent.com/alwh1te/agent-semaphore/main/.agent-semaphore.toml.example
mv .agent-semaphore.toml.example .agent-semaphore.toml # set the gate command, hot classes, target branch
asem init # state in .git/agent-semaphore/
asem install --git-hooks # Claude Code hooks + .mcp.json + git pre-commit
asem doctor # PASS checklistasem claim src/api/ -i "refactor auth parsing" --ttl 30m # exit 3 = held by someone else
asem check src/api/routes.py # who holds it, and what for
asem radar # conflicts between worktrees, before any commit
asem land feature-branch # rebase -> gate -> CAS into the staging branch
asem notices # messages addressed to you
asem status | asem queue status | asem doctorExit-Codes sind Teil des Vertrags: 0 ok/frei, 3 gehalten/Konflikt/zurückgeworfen, 2 Nutzung, 1 interner Fehler — ein Skript kann "Koordination sagt nein" von "das Werkzeug ist kaputt" unterscheiden.
Gemessen
Niemand in diesem Bereich hatte gemessen, ob Beanspruchungen tatsächlich Konflikte reduzieren, daher liefert das Repo zwei eigene Benchmarks.
Skriptbasiert (docs/benchmark.md, 60 Läufe, deterministische Agenten, Compliance = 1 konstruktionsbedingt): Integrationskonflikte 60 % → 0 %, menschliche Eingriffe 9 → 0.
Live-Agenten (docs/bench-llm.md, 40 Läufe von zwei gleichzeitigen claude -p Agenten, $17,95):
Modus | ICR | WME | did_work | caught-up | $/Lauf | COR |
keine Koordination | 40% | 2 | 100% | 0% | $0.34 | 1.00x |
beratende Beanspruchungen | 20% | 1 | 100% | 40% | $0.50 | 1.72x |
Beanspruchungen + Radar | 10% | 2 | 80% | 40% | $0.46 | 1.93x |
streng + Warteschlange | 0% | 0 | 100% | 40% | $0.50 | 1.98x |
Drei Erkenntnisse, die das skriptbasierte Testgerüst strukturell nicht produzieren konnte:
Konflikte werden durch das Catch-up beseitigt, nicht durch die Beanspruchung. 10 von 10 Läufen, in denen ein Agent auf den Branch seines Peers rebasierte, fusionierten sauber; jeder konfliktreiche koordinierte Lauf ist einer, in dem beide Agenten höflich beanspruchten und keiner rebasierte. Eine Beanspruchung serialisiert Schreiben — sie gibt dir nicht das Ergebnis des anderen Agenten. Diese Erkenntnis führte zur Funktion "Freigabe weckt die Wartenden und nennt den Branch".
Der Hook wurde in 40 Läufen kein einziges Mal ausgelöst. Mit dem Protokoll im Prompt beanspruchen Agenten vor dem Bearbeiten und schreiben nie in einen gehaltenen Scope, sodass sich die Durchsetzung als nicht benötigte Versicherung herausstellte — nicht als die arbeitende Schicht.
Koordination kann einen Konflikt in Arbeit verwandeln, die nie stattfand. In zwei Läufen zitierte der blockierte Agent den Halter, seine Absicht und seinen Branch und gab seine Aufgabe auf. Ohne die
did_work-Spalte neben ICR lesen sich diese Läufe als sauberer Erfolg — weshalb die Spalte da ist.
Semantische Drift (textuell sauber, semantisch kaputt) überlebt jede beratende Schicht in beiden Benchmarks und wird nur durch das obligatorische Gate der Warteschlange abgefangen.
Wie es eingebunden wird
Claude Code —
asem installschreibt.claude/settings.jsondes Projekts (PreToolUse + PostToolUse), fügtBash(asem:*)undmcp__semaphore__*zur Allow-Liste hinzu und registriert den MCP-Server in.mcp.json. Committete Verkabelung ist host-portabel ($HOMEund ein nacktesasem), sodass ein über Maschinen geteiltes Repo nicht die Pfade eines Hosts trägt.MCP (
asem mcp, server keysemaphore) —claim,release,check,status,extend,report_intent,radar,enqueue_land,land_status. Jede Antwort leert ausstehende Benachrichtigungen, sodass Agenten ohne Polling von Diebstählen, Zurückweisungen und verschobenen Zielen erfahren.Codex CLI — derselbe MCP-Server via
~/.codex/config.toml, plus ein Protokollschnipsel fürAGENTS.md. Headless Codex bricht MCP-Aufrufe stillschweigend ab, es sei denn, die Tools sind vorab genehmigt;docs/integration.mdenthält die funktionierende Konfiguration.Alles andere —
asem install --git-hooksplatziert einpre-commit-Gate im gemeinsamen Hooks-Verzeichnis (es lädt jeden vorher vorhandenen Hook nach).
Dokumentation
docs/00-research.md— das Forschungsdossier, auf dem dieses Design aufbaut: das gemessene Problem, die Werkzeuglandschaft, die klassische, nachahmenswerte Vorarbeit, die Papiere von 2024–26 und die drei bestätigten Marktlücken.docs/adr/ADR-001-architecture.md— die Architektur, plus ein Risikoregister und zehn adversarial Angriffe aus einer Blindbegutachtung (acht davon änderten das Design).docs/adr/ADR-002-stack-and-state.md— Stack, Benennung und wo der Zustand lebt.docs/benchmark.md/docs/bench-llm.md— beide Benchmarks: Methode, Ergebnisse und die explizit genannten Einschränkungen.docs/integration.md— Installation und was wo verdrahtet ist.
Status
v1 ist implementiert und dogfooded: das Repository koordiniert seine eigenen Agenten darüber. 150 Tests, ein p95 Hook-Latenz-Gate in CI, beide Benchmarks aus dem Repo reproduzierbar.
Bekannte Grenzen, klar ausgesprochen: Promotion vom Staging-Branch zu main ist noch manuell und ungated (asem promote ist das nächste Feature); die Warteschlange pusht nie; es gibt kein Symbol-Level-Scoping, keine semantische Konflikterkennung jenseits des Test-Gates, keine LLM-Autoauflösung (die veröffentlichte Obergrenze liegt bei ~55–60 % Korrektheit, was nicht gut genug ist, um unbeaufsichtigt zu laufen); und Multi-Host ist ein v2-Design, obwohl das Schema bereits die host-Spalte trägt.
Entwicklung
uv run pytest -q # 150 tests
uv run ruff check . && uv run ruff format --check .
uv run python bench/hook_latency.py 200 # hook latency gate (p95 < 100 ms)
uv run python bench/runner.py --seeds 3 && uv run python bench/report.pyDas PreToolUse Hook-Skript wird außerhalb des Pakets mitgeliefert und muss stdlib-only bleiben — es wird bei jedem Schreibvorgang jedes Agenten ausgeführt, hat also ein Latenzbudget statt Abhängigkeiten. Siehe CONTRIBUTING.md.
Lizenz
MIT — siehe LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Coding agents from Claude Code, Cursor and Codex claim jobs and lock files on one shared board.
The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.
One shared brain for your AI coding agents: team memory, agent Q&A, tasks, and file claims.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alwh1te/agent-semaphore'
If you have feedback or need assistance with the MCP directory API, please join our Discord server