/admit is the outlet. An adapter is the plug: it intercepts a consequential action, asks the boundary, and proceeds only on a signed answer. The same contract that governs a refund governs an EU AI Act obligation and a Starlink satellite dodging a collision. Author the boundary once; plug in anywhere.
awaiting GET /readyz
At the exact point a tool call, a money movement, a deploy, or a record change is about to fire, the adapter catches it — before it executes.
Compile it to an inert proposal and POST /v1/admit. The boundary answers ACCEPT or REFUSE — and REFUSE is terminal, no override.
Execute only on a verified ACCEPT receipt whose fingerprint matches the action; anything else denies with a named reason. Every decision is receipted.
Thin glue with exactly one job: turn an action an agent is about to take into an inert proposal, ask /admit, and execute only if the answer is a signed ACCEPT whose fingerprint matches. authority_effect = 0 until a named human signs the boundary — so a bad adapter is a bad proposal, never a bad permission. Wire it in shadow first: it records what would have been refused and blocks nothing, which is what makes it zero-risk to try.
Honest state. Live today · REST the admission primitive — POST /v1/admit, POST /v1/lumen/compile, and signed Ed25519 receipts you recompute yourself, at barycenters-admit.fly.dev. Every adapter below rides this one contract.
Live the SDK (npm i barycenters — govern any agent in 3 lines, zero dependencies, published under the open-forever license) and the MCP server (the universal plug, live at /mcp — tools admit and check_readiness, barycenters-admit 1.29.1). Live Hermes, OpenClaw, DeepSeek Harness, Cursor, and Claude Code as MCP clients. Compose NemoClaw (OpenShell + inner agent). Vision packaged per-domain adapters. Machine catalog: adapters/manifest.json
One contract. Many installs. MCP is live: call the admit tool before consequence. Connecting a client is not an automatic wrap of every other tool — that wrap is bary.govern. A skill that reminds the model is not a gate.
Nous Research agent. Point mcp_servers.barycenters at the wedge. Call admit (or wrap with bary.govern). Hermes will not intercept its other tools for you.
Personal agent harness. Streamable HTTP under mcp.servers, then openclaw mcp doctor barycenters --probe. Connecting MCP does not bypass OpenClaw tool policy.
Node harness — deepseek-ai/deepseek-harness (npx @deepseek-ai/dsh web). Official @deepseek-ai/dsh-mcp-client, streamable-http at the wedge. Connecting MCP does not wrap bash/edit/write. Wrap with npm bary.govern. No README PR — they do not accept external PRs.
NVIDIA host stack — NVIDIA/NemoClaw — that runs OpenClaw, Hermes, or LangChain Deep Agents inside OpenShell. Not a fourth agent. Allow egress to the wedge; the inner agent uses that runtime's OpenClaw / Hermes MCP or bary.govern.
HTTP MCP in .cursor/mcp.json. Same live tools: admit, check_readiness. The model still has to call admit.
HTTP MCP in .mcp.json. Same live tools. A SKILL.md that says “remember to admit” is instructions, not a gate.
.kiro/hooks/*.json Agent Hooks — a real PreToolUse gate that fires before the tool runs, so it does not rely on the model remembering to ask. authority_effect 0.
MCP over HTTP — VS Code’s MCP config (.vscode/mcp.json), or any MCP extension (Claude Code, Continue, Cline). Same live tools: admit, check_readiness. The model still has to call admit.
The intercept that does not depend on the model remembering. bary.govern(action, fn) admits before the function runs. Shadow never throws.
npm i barycenters
import { Barycenters } from "barycenters";
const bary = new Barycenters({
endpoint: "https://barycenters-admit.fly.dev",
namespace: "acme/eng",
});
// mode defaults to "shadow": it NEVER blocks.
const deploy = bary.govern("deploy_prod", async (opts) => {
return runDeploy(opts);
});
await deploy({ env: "production" });
console.log(bary.shadowReport().summary);# pip install langchain-mcp-adapters langgraph
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
client = MultiServerMCPClient({
"barycenters": {
"url": "https://barycenters-admit.fly.dev/mcp/",
"transport": "streamable_http",
},
})
tools = await client.get_tools() # live tools: admit, check_readiness
agent = create_react_agent("openai:gpt-4o", tools)
# The agent calls admit before any consequential action:
# ACCEPT (signed capability token) or REFUSE (reason). Fail-closed.
# Prefer wrapping in code? pip install barycenters
# bary.govern("deploy_prod", fn) — shadow by default, never blocks.// npm i @mastra/mcp @mastra/core
import { MCPClient } from "@mastra/mcp";
import { Agent } from "@mastra/core/agent";
const mcp = new MCPClient({
servers: {
barycenters: {
url: new URL("https://barycenters-admit.fly.dev/mcp/"),
},
},
});
// live tools: admit, check_readiness
const agent = new Agent({
name: "governed-agent",
instructions: "Call admit before any consequential action — ACCEPT (signed token) or REFUSE.",
model: "openai/gpt-4o",
tools: await mcp.getTools(),
});
// The agent admits before it acts. Fail-closed — REFUSE stops it before it runs.# pip install llama-index-tools-mcp
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec
client = BasicMCPClient("https://barycenters-admit.fly.dev/mcp/")
tools = McpToolSpec(client=client).to_tool_list() # admit, check_readiness
# Hand `tools` to any LlamaIndex agent (FunctionAgent, ReActAgent, …).
# It calls admit before a consequential action: ACCEPT + signed token / REFUSE. Fail-closed.# pip install crewai-tools
from crewai import Agent
from crewai_tools import MCPServerAdapter
server = {"url": "https://barycenters-admit.fly.dev/mcp/", "transport": "streamable-http"}
with MCPServerAdapter(server) as tools: # admit, check_readiness
ops = Agent(role="Ops", goal="Ship only what Layer 0 admits", tools=tools)
# The agent calls admit before consequence: ACCEPT + signed token / REFUSE. Fail-closed.# pip install "autogen-ext[mcp]" autogen-agentchat
from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools
from autogen_agentchat.agents import AssistantAgent
params = StreamableHttpServerParams(url="https://barycenters-admit.fly.dev/mcp/")
tools = await mcp_server_tools(params) # admit, check_readiness
agent = AssistantAgent("ops", model_client=client, tools=tools)
# Calls admit before consequence: ACCEPT + signed token / REFUSE. Fail-closed.# pip install openai-agents
from agents import Agent
from agents.mcp import MCPServerStreamableHttp
async with MCPServerStreamableHttp(
params={"url": "https://barycenters-admit.fly.dev/mcp/"}
) as bary: # tools: admit, check_readiness
agent = Agent(name="ops", mcp_servers=[bary])
# The agent calls admit before consequence: ACCEPT + signed token / REFUSE. Fail-closed.mcp_servers:
barycenters:
url: "https://barycenters-admit.fly.dev/mcp/"
enabled: true
timeout: 120
connect_timeout: 60
# Live tools: admit, check_readiness
# Call admit (or bary.govern) before consequence.{
"mcp": {
"servers": {
"barycenters": {
"url": "https://barycenters-admit.fly.dev/mcp/",
"transport": "streamable-http",
"enabled": true
}
}
}
}
# openclaw mcp doctor barycenters --probe# npx @deepseek-ai/dsh web
# Official client: @deepseek-ai/dsh-mcp-client
# Model sees mcp__barycenters__admit, mcp__barycenters__check_readiness
- id: mcp-barycenters
name: "@deepseek-ai/dsh-mcp-client"
config:
serverName: barycenters
transport: streamable-http
url: "https://barycenters-admit.fly.dev/mcp/"
# npm i barycenters → bary.govern(...) wraps the dispatcher
# Connecting MCP does not wrap bash/edit/write.
# Bare GET /mcp/ → 406 is protocol (Accept: text/event-stream).
# No README PR: CONTRIBUTING forbids external PRs.# Host: https://github.com/NVIDIA/NemoClaw (not a fourth agent) # 1. Allow egress only to the wedge (no wildcard): # https://barycenters-admit.fly.dev # 2. Register managed MCP, Streamable HTTP: # https://barycenters-admit.fly.dev/mcp/ # 3. Inner agent is OpenClaw or Hermes — use that snippet # (or bary.govern on the dispatcher). Connecting MCP is a side door. # 4. Shadow first. OpenShell is NVIDIA's floor; /admit is ours. # NEMOCLAW_AGENT=hermes → Hermes inside the sandbox # default → OpenClaw inside the sandbox
{
"mcpServers": {
"barycenters": {
"type": "http",
"url": "https://barycenters-admit.fly.dev/mcp/"
}
}
}{
"mcpServers": {
"barycenters": {
"type": "http",
"url": "https://barycenters-admit.fly.dev/mcp/"
}
}
}{
"version": "v1",
"hooks": [
{
"name": "Boundary: acme.merge_to_main",
"trigger": "PreToolUse",
"matcher": "execute_pwsh|execute_command",
"description": "Enforces boundary acme.merge_to_main (repo_mutation). Required evidence: tests_green, human_ack. authority_effect = 0",
"action": {
"type": "agent",
"prompt": "BOUNDARY CHECK: acme.merge_to_main\nPack: barycenters.packs.ci_change_management\nConsequence: repo_mutation\nEvidence required: ['tests_green', 'human_ack']\nLimits: none\n\nBefore executing, verify:\n- tests_green is satisfied\n- human_ack is satisfied\n\nIf ANY evidence is missing, ask the user. A boundary without evidence has not been met."
}
}
]
}{
"servers": {
"barycenters": {
"type": "http",
"url": "https://barycenters-admit.fly.dev/mcp/"
}
}
}Machine catalog adapters/manifest.json · skill (advisory, not a gate) SKILL.md
Live catalogue: GET /v1/packs. A pack is unsigned law. Nobody uses it as authority. Buying or instantiating grants nothing. You do not wait on Barycenters to sign every pack — your steward signs your namespace. Author signatures prove provenance, not permission. authority_effect = 0.
awaiting the live catalogue…
barycenters.packs.ci_change_management — templates merge_to_main, force_push. The pack is proven. Instantiating names a candidate; the bind is a separate human act. Substrate users (founding, /admit, adapters) do not need that bind.
barycenters.packs.money_movement — issue_refund, issue_payout. Stays a draft until someone instantiates and that namespace’s steward signs. Dami does not have to.
barycenters.packs.production_deploy — deploy_production, rotate_secret. Same rule: instantiate is prep; bind is optional and owned by that namespace’s steward.
Instantiate ≠ bind. POST /v1/packs/{id}/instantiate returns unsigned candidates — prep, not admission. Bind is POST /v1/boundaries after a human signs a key that never leaves the device. Until then they are names, not permissions. A pack cannot admit anything, ever.
The same pack you browsed above, compiled to the universal hook spec at GET /boundaries/<pack>.json. It is deterministic and content-hashed — the same bytes every time — so a static file is exactly as verifiable as a live call. Drop it in your repo and any surface adapter enforces it. authority_effect 0: it admits or refuses, it never binds. Binding stays the steward’s POST /v1/boundaries.
reading the live boundary catalogue…
select a pack above
Article 14 human oversight and Article 12 traceability stop being policies asserted in a PDF and become properties the runtime can prove on demand — every consequential action admitted or terminally refused inside a boundary one accountable human signed, each decision a tamper-evident receipt.
Why now: the Act applies in phases. Art. 5 prohibited practices are in force since Feb 2025 (fines to €35M / 7% of global turnover); GPAI duties since Aug 2025; the bulk of the regime and general penalties from Aug 2026; the Annex III high-risk requirements (Arts. 9–15) land Dec 2027 per the 2026 Digital Omnibus. The controls a deployer must demonstrate become enforceable across 2026–27 — building the enforcement-and-evidence substrate ahead of that is the sober move.
Requires: a human can decide not to use the system, or override/reverse its output.
→ The action executes only if a boundary a named human Ed25519-signed admits it. Override by construction: on enforce, the harmful action never runs. REFUSE is terminal.
Not the Art. 14(4)(e) stop-button that halts a running model — by our CADA law we never build kill switches. This is override-by-construction, not a pause surface.
Requires: automatic, lifetime-durable records sufficient to trace the system's functioning.
→ Every decision is a signed receipt (proposal hash, policy version, decision, reason, principal, time) — verifiable with the public key alone, single-use, tamper-evident. Both ACCEPT and REFUSE are receipted.
This is the high-integrity admission-decision log — the governed-actions slice of Art. 12, not the whole model's event log.
Requires: targeted risk-mitigation measures, applied and documented.
→ Default-deny: consequential actions are refused unless a human-authored boundary grants them, and Lumen fails narrower, never silently wider. Each mitigation mints proof it was applied.
One evidenced mitigation control — a component that plugs into a risk-management system, not the system, register, or analysis itself.
Requires: certain practices are never permitted.
→ Where a banned practice is a discrete action, a boundary encodes it as never-admissible: /admit refuses it terminally, with a receipt proving the refusal.
Enforcement of a stated ban, not detection of one — we classify the verb on a proposed action, not the model's intent. A first-class PROHIBITION modality is on the roadmap.
Hundreds of thousands of satellite maneuvers a year, executed on-board at machine speed with no human in the loop and no central authority. A human sets the boundary once — never deorbit onto a populated area, never accept a lethal conjunction — and every autonomous decision must pass the floor and mint a receipt for deterministic replay. Prove the flight envelope once; execute at constellation scale forever.
The gap: Starlink now flies ~10,860 satellites and reported 207,152 autonomous collision-avoidance maneuvers in a single half-year — roughly one dodge somewhere in the fleet every ~1.8 minutes, fired on-board within seconds. No human can review one decision every two minutes, and there is no air-traffic-control for orbit. The only human control point that can exist is the boundary the autonomy acts within — and the only accountability is whether every act can be replayed. That is human-authority-at-machine-speed, the exact gap the admission primitive closes.
Source: Starlink public FCC filings + third-party reporting — an illustration of the problem, not our data and not a relationship.
Action: fire thrusters to dodge a conjunction, autonomously, within seconds.
→ Too fast for a ground round-trip, so the human signs a no-kill floor once, on the ground (never raise net collision probability; never breach minimum separation); the floor is carried on-board and admits or terminally refuses each maneuver, with receipts reconciled for replay.
The honest mapping is a pre-compiled on-board boundary + after-the-fact replay — not a live per-maneuver REST call from orbit.
Action: drop a satellite through the atmosphere onto a chosen ground track.
→ Not seconds-critical, so /admit can adjudicate per-action: REFUSE any reentry whose predicted footprint intersects a populated zone. Deorbit is denied by default; a specific ocean corridor is the grant — safe by omission.
The physical instance of "a person is not a resource": the one thing autonomy must never be free to do.
Action: two constellations face a mutual conjunction and must decide who yields.
→ Each proposes its maneuver; the floor refuses any plan that assumes the other will move without an admitted, receipted commitment. The receipt is the shared, replayable artifact both operators and a regulator can audit.
An authority gap, not a physics gap — exactly what a deterministic admission layer removes.
Action: autonomously reroute a petabit laser mesh or steer RF beams within licensed limits.
→ Each change is proposed and admitted against a human-set policy (protected traffic classes, EPFD masks, no-transmit zones); violations are refused, every change receipted — "trust us, we stayed in license" becomes a provable record.
The network-layer expression of the same primitive: propose → admit within boundary → refuse the unsafe → receipt everything.
The same contract — intercept, propose, admit within a human-signed boundary, receipt — is the plug for every domain where a consequential action needs a bound it cannot cross. Each is "Barycenters for X"; each rides the one live REST primitive. See what becomes possible →
An agent touches a record, a dose, a referral only because "never without a clinician's sign-off" is a proven boundary, not a promise.
Grids, water, pipelines governed at machine speed under a human-bound floor no automation can cross.
Autonomous action under a constitution a citizen can check — and no unlock is lethal: the No-Kill floor refuses by construction, above every signature.
Dispatch, trading, load-shedding at machine speed — each irreversible move admitted or refused before it fires, and provable after.
Clauses that execute themselves, but only inside the bounds a human signed. The contract and its enforcement are one object.
An order is admitted against a pre-trade boundary before it fires; the receipt is the audit, reconstructable by anyone — not a compliance memo.
Autonomous logistics routes goods at any scale but can never move money — or people — outside the bind a steward authored.
Every grant a permission authored, never a prohibition guessed. What you didn't allow is refused by construction — omission is safe.
A robot acts freely, but a destructive operation on a physical person is refused at Layer 0 — the No-Kill floor.
Compliance as a provable floor, not a PDF — the regulation compiles into a boundary a regulator can verify.
Point Hermes, OpenClaw, DeepSeek Harness, LangChain, Cursor, Claude Code — any MCP client — at /mcp. Live tools: admit, check_readiness. Call admit before consequence; connecting is not an automatic wrap of every other tool.
An EU AI Act obligation and a satellite dodging a collision are the same shape: a consequential action that must be admitted or refused inside a boundary a human signed, and proven after. That contract is live today over REST and MCP; Hermes, OpenClaw, DeepSeek Harness, Cursor, Claude Code, and the SDK are the plugs; packaged domain adapters are the road ahead — open forever, the Cloud give-back.
authority_effect = 0 until a human signs · a REFUSE is never billed · every plug rides one live contract