MCP, MCP server
Agent Coherence Stale Write Guard (FS)
agent-coherence stops one agent from silently clobbering another's work on a shared plan.md, store key, or memory.json — a vendor-neutral MESI + optimistic-concurrency coordinator for agent state on a single host, with the safety invariants machine-checked in TLA+.
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 212bf222fb03.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
examples/coherent_volume/broken.py, line 64
shutil.rmtree(workspace, ignore_errors=True) - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
examples/ccsstore_read_side/demo.py, line 145
print(f" reviewer's 1st get : coordinator fetch (miss) → {act1['first_value']}") - SECRETS_PATH_DOTENV Low
Mentions a .env file.
scripts/run-q6-probe.sh, line 9
# 3. cp .env.op.example .env.op and edit the op:// references to match your items - OBFUSCATION_FILE_OVER_READ_CAP Note
A file was over the read cap and was not fully read.
CHANGELOG.md, line 1
# Changelog - OBFUSCATION_FILE_CAP_REACHED Note
The 400 file cap was reached before every file was read.
CHANGELOG.md, line 1
# Changelog
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
examples/coherent_volume/broken.py, line 64
shutil.rmtree(workspace, ignore_errors=True)
examples/coherent_volume/fixed.py, line 111
shutil.rmtree(workspace, ignore_errors=True)
examples/concurrent_writers/broken.py, line 81
shutil.rmtree(workspace, ignore_errors=True)
Show more
examples/concurrent_writers/fixed.py, line 123
shutil.rmtree(workspace, ignore_errors=True)
examples/cross_host/docker/client_entry.py, line 28
return subprocess.call([sys.executable, "/app/examples/cross_host/main.py"])
examples/divergent_memory/demo.py, line 124
shutil.rmtree(workspace, ignore_errors=True)
examples/divergent_memory/demo.py, line 172
shutil.rmtree(workspace, ignore_errors=True)
examples/mcp_stale_write_guard/broken.py, line 42
shutil.rmtree(workspace, ignore_errors=True)
examples/mcp_stale_write_guard/fixed.py, line 106
shutil.rmtree(workspace, ignore_errors=True)
examples/refactor_demo/main.py, line 172
proc = subprocess.run(
src/ccs/adapters/claude_code/foreign_write_detector.py, line 331
result = subprocess.run(
src/ccs/adapters/claude_code/foreign_write_detector.py, line 418
result = subprocess.run(
src/ccs/adapters/claude_code/resolver.py, line 112
result = subprocess.run(
src/ccs/cli/coherence_coordinator.py, line 22
2. Otherwise, parent spawns a detached child via :class:`subprocess.Popen`
src/ccs/cli/coherence_coordinator.py, line 317
# Use subprocess.Popen with start_new_session=True so the child runs
src/ccs/cli/coherence_coordinator.py, line 322
subprocess.Popen(
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
examples/ccsstore_read_side/demo.py, line 145
print(f" reviewer's 1st get : coordinator fetch (miss) → {act1['first_value']}")
src/ccs/adapters/claude_code/bash_write_detector.py, line 58
``curl -o``, ``wget -O``, ``prettier --write``, and any script run from a
src/ccs/agent/runtime.py, line 432
response = self.coordinator.fetch(
Show more
src/ccs/coordinator/registry_protocol.py, line 335
# sufficient: service.fetch() emits "fetch" on two legs -- the requester's own
src/ccs/coordinator/service.py, line 590
def fetch(self, request: FetchRequest) -> FetchResponse:
formal/tla/README.md, line 155
| `FetchAction` | `CoordinatorService.fetch()` in `src/ccs/coordinator/service.py` — the requester leg (I→S/E) plus the peer loop that downgrades M∪E holders to S. The peer loop is
src/ccs/coordinator/sqlite_registry.py, line 2676
content. The plugin hot path never calls fetch(), so this signature
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
scripts/run-q6-probe.sh, line 9
# 3. cp .env.op.example .env.op and edit the op:// references to match your items
scripts/run-q6-probe.sh, line 15
# COHERENCE_OP_ENV_FILE secret-reference env file (default: .env.op)
scripts/run-q6-probe.sh, line 36
echo " cp .env.op.example .env.op" >&2
Show more
src/ccs/adapters/claude_code/migrate_deny.py, line 19
- **NEVER scans .env or other private files.** Only the explicitly-named
src/ccs/adapters/claude_code/policy.py, line 804
# so ".env" → "env", ".gitignore" → "gitignore", silently making dotfile
src/ccs/mcp/uri.py, line 12
an ``lstrip`` slip silently untracks dotfiles like ``.env``);
.env.op.example, line 6
# commit; the working copy `.env.op` is git-ignored so per-user vault/item names
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
CHANGELOG.md, line 1
# Changelog
uv.lock, line 1
version = 1
docs/guide.md, line 1
# agent-coherence User Guide
Show more
formal/tla/lib/tla2tools.jar, line 1
PK
src/ccs/adapters/coherent_volume.py, line 1
# Copyright (c) 2026 agent-coherence contributors.
src/ccs/adapters/claude_code/coordinator_server.py, line 1
# Copyright (c) 2026 agent-coherence contributors.
src/ccs/coordinator/sqlite_registry.py, line 1
# Copyright (c) 2026 agent-coherence contributors.
tests/.test_durations, line 1
{
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 212bf222fb03. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: 212bf222fb03ceed409ebce5bb6ba4ba41297d6a
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.