JARVIS Selection Service implementation for the ARP Standard (spec/v1).
Project description
JARVIS Selection Service
First-party OSS reference implementation of the ARP Selection Service.
The Selection Service produces bounded candidate sets for mapping subtasks to NodeTypes.
The selection strategy is intentionally implementation-defined; JARVIS uses LLM-assisted ranking by default
(via arp-llm) and returns an error if selection cannot be produced.
Implements: ARP Standard spec/v1 Selection API (contract: ARP_Standard/spec/v1/openapi/selection.openapi.yaml).
Requirements
- Python >= 3.10
Install
python3 -m pip install -e .
Local configuration (optional)
For local dev convenience, copy the example env file:
cp .env.example .env.local
src/scripts/dev_server.sh auto-loads .env.local (or .env).
Run
- Selection Service listens on
http://127.0.0.1:8085by default.
python3 -m pip install -e .
python3 -m jarvis_selection_service
[!TIP] Use
bash src/scripts/dev_server.sh --host ... --port ... --reloadfor dev convenience.
Using this repo
To build your own selection service, fork this repository and replace the selection strategy while preserving request/response semantics.
If all you need is to change selection strategy, edit:
src/jarvis_selection_service/strategy.py
Outgoing client wrapper (selection -> node registry):
src/jarvis_selection_service/node_registry_client.py
Default behavior
- Builds inventory from Node Registry (atomic-first).
- Uses
arp-llmto rank atomic candidates for a subtask. - Adds the composite planner node type when the LLM indicates the task does not fit a single atomic node.
- Planner NodeTypes are seeded by Node Registry (e.g.
jarvis.composite.planner.general). - Applies
constraints.candidates.allowed_node_type_ids/denied_node_type_idsif provided. - Applies
constraints.candidates.max_candidates_per_subtaskas the top-K bound when provided. - Returns an error if the LLM is unavailable or no candidates can be produced.
Extensions
The Selection API surfaces extensions in both inputs and outputs. This implementation uses them as follows:
Consumes NodeType.extensions from Node Registry inventory:
jarvis.role(planner detection)jarvis.side_effect,jarvis.egress_policy,jarvis.tags(enrich the LLM menu)
Writes CandidateSet.extensions for observability:
jarvis.selection.strategy(currentlyllm)jarvis.llm.provider,jarvis.llm.model,jarvis.llm.latency_ms
Passthrough:
- Any keys provided in
CandidateSetRequest.extensionsare copied intoCandidateSet.extensions(non-sensitive metadata only).
Reserved (accepted but not required in v0.3.x):
SubtaskSpec.extensions.jarvis.subtask.notesSubtaskSpec.extensions.jarvis.root_goal
Full cross-stack list: https://github.com/AgentRuntimeProtocol/BusinessDocs/blob/main/Business_Docs/JARVIS/Extensions.md.
Quick health check
curl http://127.0.0.1:8085/v1/health
Configuration
CLI flags:
--host(default127.0.0.1)--port(default8085)--reload(dev only)
Env vars (selected):
JARVIS_NODE_REGISTRY_URL(required)JARVIS_NODE_REGISTRY_AUDIENCE(optional; outbound token exchange audience)JARVIS_SELECTION_STRATEGY(defaultllm; other strategies are not supported yet)JARVIS_SELECTION_TOP_K_DEFAULT(optional)JARVIS_SELECTION_PLANNER_NODE_TYPE_ID(optional; planner fallback is auto-detected)
LLM (required when JARVIS_SELECTION_STRATEGY=llm):
ARP_LLM_PROFILE,ARP_LLM_CHAT_MODEL,ARP_LLM_API_KEY, ...- See
https://github.com/AgentRuntimeProtocol/BusinessDocs/blob/main/Business_Docs/JARVIS/LLMProvider/HLD.mdandhttps://github.com/AgentRuntimeProtocol/BusinessDocs/blob/main/Business_Docs/JARVIS/LLMProvider/LLD.md.
- See
Validate conformance (arp-conformance)
python3 -m pip install arp-conformance
arp-conformance check selection --url http://127.0.0.1:8085 --tier smoke
arp-conformance check selection --url http://127.0.0.1:8085 --tier surface
Helper scripts
-
src/scripts/dev_server.sh: run the server (flags:--host,--port,--reload). -
src/scripts/send_request.py: generate a candidate set from a JSON file.python3 src/scripts/send_request.py --request src/scripts/request.json
Authentication
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-selectionARP_AUTH_ISSUER=http://localhost:8080/realms/arp-dev
Outbound service-to-service calls (Node Registry / PDP) should use STS token exchange (no static bearer tokens). Configure the STS client credentials with:
ARP_AUTH_CLIENT_IDARP_AUTH_CLIENT_SECRETARP_AUTH_TOKEN_ENDPOINT
Upgrading
When upgrading to a new ARP Standard SDK release, bump pinned versions in pyproject.toml (arp-standard-*==...) and re-run conformance.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file arp_jarvis_selection_service-0.3.5.tar.gz.
File metadata
- Download URL: arp_jarvis_selection_service-0.3.5.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe01da53c9ebbe19f12a1dfb9c0b9c8c0d43473c193c4e3eef5db4db6ebe3e29
|
|
| MD5 |
bdbbb729329d72e9a5a52f74c0376f5d
|
|
| BLAKE2b-256 |
7dd3c53a30453dc3be73600cfe17cb33152bd62e6f18fe195d0ad2bcedac721b
|
Provenance
The following attestation bundles were made for arp_jarvis_selection_service-0.3.5.tar.gz:
Publisher:
release.yml on AgentRuntimeProtocol/JARVIS_SelectionService
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arp_jarvis_selection_service-0.3.5.tar.gz -
Subject digest:
fe01da53c9ebbe19f12a1dfb9c0b9c8c0d43473c193c4e3eef5db4db6ebe3e29 - Sigstore transparency entry: 789505876
- Sigstore integration time:
-
Permalink:
AgentRuntimeProtocol/JARVIS_SelectionService@5cab5eb6399f4c330e4a08be86f3b6dcab613828 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/AgentRuntimeProtocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5cab5eb6399f4c330e4a08be86f3b6dcab613828 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file arp_jarvis_selection_service-0.3.5-py3-none-any.whl.
File metadata
- Download URL: arp_jarvis_selection_service-0.3.5-py3-none-any.whl
- Upload date:
- Size: 14.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7d3e4409749f9d7a659e6934421a1c4e028a4610255433c63dd8d495bf0f7dd
|
|
| MD5 |
6e6172e66074662efe760bbc64285691
|
|
| BLAKE2b-256 |
b48e3f01d64b3d2c210e988025f2bb00203cb09f8f8725473ffa24e03764984d
|
Provenance
The following attestation bundles were made for arp_jarvis_selection_service-0.3.5-py3-none-any.whl:
Publisher:
release.yml on AgentRuntimeProtocol/JARVIS_SelectionService
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arp_jarvis_selection_service-0.3.5-py3-none-any.whl -
Subject digest:
a7d3e4409749f9d7a659e6934421a1c4e028a4610255433c63dd8d495bf0f7dd - Sigstore transparency entry: 789505880
- Sigstore integration time:
-
Permalink:
AgentRuntimeProtocol/JARVIS_SelectionService@5cab5eb6399f4c330e4a08be86f3b6dcab613828 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/AgentRuntimeProtocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5cab5eb6399f4c330e4a08be86f3b6dcab613828 -
Trigger Event:
workflow_run
-
Statement type: