GULF AGENT COMPLIANCE LAYER
Nothing crosseswithout a ruling.
لا شيء يعبر دون حكم
NDMO-TOP-SECRET-DENY
DENY
refused before execution
A human hand and a machine hand reach toward each other across a gap and do not touch. A window between them shows the current decision.
Does Saudi regulation permit this action, on this content, right now? Dabt answers before the call executes — and again before the result reaches your model.
01THE NAME
In Arabic, ضبط is the act of pointing a text — adding the dots that collapse it to exactly one reading. Remove a dot and the word becomes another word. A dot is the difference between meaning and noise, which is why this page is built out of them.
02FOUR OUTCOMES. NO SCORES.
-
ALLOW
NDMO-PUBLIC-ALLOW
The call runs and the result is disclosed unchanged.
-
ALLOW_WITH_REDACTION
PDPL-ART29-2C-CROSSBORDER-MINIMISATION
The call runs, and only the regulated values are withheld.
-
REVIEW
PDPL-ART23-HEALTH-DATA-RESTRICTION
Nothing is released until a qualified reviewer seals a disposition.
-
DENY
NDMO-TOP-SECRET-DENY
The call is refused and never reaches the server at all.
There is not one gradient above the footer. A dot is on or off, a rule fires or it does not, and no model sits anywhere in the decision path.
03TWO GATES, ONE ENGINE
Data Retrieval Gate
Evaluates a payload before it reaches a model. Detection, classification, policy, obligations, redaction and a bilingual audit record, in that order.
Agent Action Gate
Evaluates an MCP tool call before it executes, and its result before that result is disclosed. Tool semantics come from a validated manifest, not from name heuristics.
The request leg is the only place a side effect can be prevented. The response leg cannot unwind a write that already ran, but it can still stop a live credential reaching the model — so a refusal there says explicitly that the side effect stands.
04A REFUSAL, IN FULL
agent → tools/call provision_database region=eu-west-1
dabt-proxy → POST /v1/action/evaluate
[DENY] refused — the call never reached the upstream server
ruleNDMO-TOP-SECRET-DENY
articleNDMO §4.3 — Top Secret
map0.1.0-research-grounded
مرفوض قبل التنفيذ — نقل بيانات خارج المملكة
Run it yourself with python proxy/demo/run_demo.py. The gate runs as a real subprocess in front of a fixture MCP server.
05WHY IT IS REPRODUCIBLE
-
Regex and checksums
Detection is pattern matching. A failed checksum lowers confidence; it never silently drops a finding.
-
A validated map
Rules are YAML with verbatim citations, validated at load. A rule missing a citation refuses to load.
-
A pure function
No network, no I/O, and the clock is injected by the caller. A decision that cannot say when it was made is not one worth recording.
-
Byte-identical
The same input evaluated twice produces the same output, so a decision can be reproduced on demand during an audit.
06WHAT DABT DOES NOT DO
-
LEGAL ADVICE
Does not certify compliance, replace a data-protection assessment, or determine that a disclosure is lawful.
-
IDENTITY
Does not issue credentials, verify a person, or connect to government identity systems.
-
BLAST RADIUS
Gates regulatory violations, not destructiveness. A destructive call carrying no regulated data passes.
-
SEARCH OR RAG
Not an index, a vector database, a document system, or a general-purpose agent.
Every rule carries requires_legal_review: true. A mapping marked needs_verification cannot issue a terminal DENY — it degrades to REVIEW.
07CURRENT COVERAGE
A transparent inventory of the rules actually implemented, not a claim of complete regulatory coverage. Control references are at subdomain granularity and marked needs_verification; no leaf control ID is asserted as verified.
| Rule | Reference | Outcome | Map confidence |
|---|---|---|---|
| NDMO-TOP-SECRET-DENY | NDMO §4.3, Top Secret | DENY | verified rule |
| PDPL-ART6-4-SENSITIVE-LEGITIMATE-INTEREST | PDPL Art. 6(4) | DENY | verified rule |
| PDPL-ART15-6-SENSITIVE-DISCLOSURE | PDPL Art. 15(6) | DENY | verified rule |
| PDPL-ART23-HEALTH-DATA-RESTRICTION | PDPL Art. 23(1) | REVIEW | verified rule |
| PDPL-ART24-CREDIT-DATA-CONSENT | PDPL Art. 24(1) | REVIEW | inferred rule |
| PDPL-ART29-2C-CROSSBORDER-MINIMISATION | PDPL Art. 29(2)(c) | ALLOW_WITH_REDACTION | verified rule |
| PDPL-ART15-5-ANONYMISED-DISCLOSURE | PDPL Art. 15(5) | ALLOW_WITH_REDACTION | verified rule |
| PDPL-ART11-3-MINIMISATION | PDPL Art. 11(3) | ALLOW_WITH_REDACTION | verified rule |
| NDMO-SECRET-RESTRICTED-ACCESS | NDMO §4.2, Principle 6 | ALLOW_WITH_REDACTION | verified rule |
| NDMO-PUBLIC-ALLOW | NDMO §4.3, Public | ALLOW | verified rule |
map 0.1.0-research-grounded
08GET IT
Install and test
pip install -e ./dabt_python -e ./proxy
python proxy/demo/run_demo.py
Attach an agent
"acme-gated": {
"command": "dabt-proxy",
"args": ["gate",
"--server-id", "acme",
"--manifest", "/etc/dabt/acme.yaml",
"--upstream-http", "https://mcp.acme.example/mcp"]
}
Licence
Dual-licensed. GNU AGPL-3.0 by default, and a commercial licence for organisations that cannot accept the AGPL's network source-disclosure obligation.
Commercial licensing — abdulazizaldhamri@gmail.com