First-party OSS reference implementation of the ARP Policy Decision Point (PDP) service.
This reference implementation uses only the SDK packages:
arp-standard-server, arp-standard-model, and arp-standard-client, plus arp-policy and arp-auth.
It is designed to be a thin adapter to your real governance system (rules, OPA, internal policy services), while keeping a stable, spec-aligned request/response schema.
Implements: ARP Standard spec/v1 PDP API (contract: ARP_Standard/spec/v1/openapi/pdp.openapi.yaml).
- Python >= 3.11
python3 -m pip install -e .For local dev convenience, copy the example env file:
cp .env.example .env.localsrc/scripts/dev_server.sh auto-loads .env.local (or .env).
- PDP listens on
http://127.0.0.1:8086by default.
python3 -m pip install -e .
python3 -m jarvis_pdpTip
Use bash src/scripts/dev_server.sh --host ... --port ... --reload for dev convenience.
To build your own PDP, fork this repository and replace the decision logic while preserving request/response semantics.
If all you need is to change policy behavior, edit:
src/jarvis_pdp/service.py
- Deny-by-default when no profile or policy file is configured.
JARVIS_POLICY_PROFILE=dev-allowenables allow-all behavior for local dev.JARVIS_POLICY_PATHloads anarp-policyJSON policy file.- When a policy file is configured and a request includes
node_type_ref, PDP fetches theNodeTypefrom Node Registry and enriches the policy context (so callers do not need to embed NodeType metadata in the request).
This repo includes an example arp-policy file that allows:
- composite nodes (e.g.
jarvis.composite.planner.general) - atomic nodes only when
jarvis.trust_tier == "first_party"
See: src/scripts/policy.first_party_atomic_only.json
To use it:
export JARVIS_POLICY_PATH=src/scripts/policy.first_party_atomic_only.jsoncurl http://127.0.0.1:8086/v1/healthCLI flags:
--host(default127.0.0.1)--port(default8086)--reload(dev only)
Environment variables (Node Registry hydration):
JARVIS_NODE_REGISTRY_URL(enables NodeType metadata hydration for node-type policy decisions)JARVIS_NODE_REGISTRY_AUDIENCE(defaultarp-jarvis-noderegistry)- Outbound STS credentials (required when
JARVIS_NODE_REGISTRY_URLis set):ARP_AUTH_CLIENT_IDARP_AUTH_CLIENT_SECRETARP_AUTH_TOKEN_ENDPOINT(orARP_AUTH_ISSUER+ discovery)
python3 -m pip install arp-conformance
arp-conformance check pdp --url http://127.0.0.1:8086 --tier smoke
arp-conformance check pdp --url http://127.0.0.1:8086 --tier surface-
src/scripts/dev_server.sh: run the server (flags:--host,--port,--reload). -
src/scripts/send_request.py: send a policy decision request from a JSON file.python3 src/scripts/send_request.py --request src/scripts/request.json
Auth is enabled by default (JWT). To disable for local dev, set ARP_AUTH_PROFILE=dev-insecure.
To enable local Keycloak defaults, set:
ARP_AUTH_PROFILE=dev-secure-keycloakARP_AUTH_AUDIENCE=arp-pdpARP_AUTH_ISSUER=http://localhost:8080/realms/arp-dev
When upgrading to a new ARP Standard SDK release, bump pinned versions in pyproject.toml (arp-standard-*==...) and re-run conformance.