DOCUMENTATION
systemone.yaml
The manifest specification — the decision-native metadata that makes models on the registry comparable.
View as Markdown · for AI agents: llms.txt
Why a manifest
Storage does not make a model adoptable. Finding the right one does, and that needs metadata a machine can filter on: what the model decides, how well calibrated it is, how fast it responds, what it was built from.
systemone.yaml is deliberately small enough that authors write it by hand, and
closed where being closed is the point.
A complete example
spec_version: "0.1"
model: support-router
namespace: biplov
category: system-one
architecture: laya
base_model: acme/laya-base
license: apache-2.0
summary: Routes inbound support tickets to the right queue.
capabilities:
- choice
- route
tags:
- routing
- support
runtime:
framework: pytorch
entrypoint: support_router:load
python: ">=3.10"
hardware: cpu
artifacts:
- kind: huggingface
uri: https://huggingface.co/biplov/support-router/resolve/main/model.safetensors
filename: model.safetensors
sha256: 0000000000000000000000000000000000000000000000000000000000000000
evaluation:
suite: s1-decision-bench
suite_version: "0.1"
decision_accuracy: 0.943
calibration_error: 0.031
valid_action_rate: 0.999
median_latency_ms: 4.7
p95_latency_ms: 9.1
Fields
| Field | Required | Notes |
|---|---|---|
spec_version | yes | Currently "0.1". An unknown version is rejected rather than guessed at. |
model | yes | Repository name. Lowercase, 2–64 characters. |
namespace | yes | Your username or an organization you own. |
category | yes | Always system-one. |
architecture | yes | laya, jev, or another identifier. Free text until the field set is proven. |
capabilities | yes | One or more of choice, score, rank, classify, extract, route. |
runtime | yes | framework required; entrypoint, python, hardware optional. |
license | no | A curated SPDX subset, or other with license_name. |
base_model | no | namespace/name this was fine-tuned from. |
summary | no | One line, at most 280 characters. |
tags | no | Up to 20, lowercase. |
artifacts | no | Where the files live. Never uploads. |
evaluation | no | Strongly recommended. See below. |
Unknown fields are rejected, not ignored — a typo should fail loudly rather than silently drop the value you meant to set.
Capabilities are closed
capabilities is an enum, not free text. This is the field that makes the
registry filterable, and a field that accepts anything is a field nobody can
filter on. Six values cover the decision primitives:
choice— pick one option from a candidate setroute— choice, where the options are destinationsclassify— assign a category from a fixed taxonomyscore— return a number on a continuumrank— order a set of itemsextract— pull typed values out of an input
Evaluation is what earns trust
Accuracy alone does not describe a decision model.
decision_accuracy— how often it is right.calibration_error— whether its confidence means anything. A model that reports 0.95 on cases it gets right 70% of the time makes every threshold you set from it wrong.valid_action_rate— how often it picks an option that actually exists.median_latency_ms/p95_latency_ms— whether it can sit in a request path.
Publishing calibration beside accuracy is the single thing that makes your model easier to adopt than an otherwise identical one.
Validating
The API validates and returns every problem at once, rather than one per attempt:
curl -X POST https://api.systemonemodels.tech/v1/manifest/validate \
-H 'content-type: text/plain' \
--data-binary @systemone.yaml
{
"valid": false,
"issues": [
{ "path": "license", "message": "unknown license 'apache2'", "kind": "schema" },
{ "path": "capabilities", "message": "List should have at least 1 item", "kind": "schema" }
]
}
The machine-readable schema is at
/v1/manifest/spec.