Skip to content
Back to skills

System One

ASecurity

Reference for System One decision models — Ollama's local POST /v1/systemone endpoint (nimble, clef, clef-flash) and TypeSafe's hosted Jev API (jev-latest / jev-1.13.0), plus the typesafe-sdk Python and @typesafe-ai/sdk JS clients. Covers the three question types (choice, score, noul), state shaping, structured instructions/criteria, confidence math, request limits and errors, the Ollama-vs-TypeSafe differences, Jev's known failure modes, and worked patterns from the official cookbooks (fan-o...

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 26, 2026
ai-agentspythonrustgobashrailsapi

Works with

  • cli
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 7 files and shows the line behind each finding

Scanned October 26, 2026

npx -y skills add digitaldreams/tuhin --skill system-one --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of System One?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for System One
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/digitaldreams-system-one/badge)](https://www.skillsdirectory.com/skills/digitaldreams-system-one)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: system-one
description: Reference for System One decision models — Ollama's local POST /v1/systemone endpoint (nimble, clef, clef-flash) and TypeSafe's hosted Jev API (jev-latest / jev-1.13.0), plus the typesafe-sdk Python and @typesafe-ai/sdk JS clients. Covers the three question types (choice, score, noul), state shaping, structured instructions/criteria, confidence math, request limits and errors, the Ollama-vs-TypeSafe differences, Jev's known failure modes, and worked patterns from the official cookbooks (fan-out, confidence gating, composite scoring, intent routing, guardrails, RAG gating, extraction, re-ranking, hierarchical beam search). Use whenever the work mentions System One, systemone, Ollama decision models, nimble, clef, TypeSafe, Jev, noul, or classifying/scoring/yes-no judgments that code consumes instead of generated text.
---

# System One — typed decisions, not text

A System One model takes one `state` + named typed `questions`, evaluates every question **independently and in parallel** against the state, returns typed answers + probabilities. It does **not** generate text, write code, reason step by step, or call tools. Code owns control flow; the model makes narrow judgments.

Two providers, same wire shape:

| | Ollama (local) | TypeSafe (hosted) |
|---|---|---|
| Endpoint | `POST http://localhost:11434/v1/systemone` | `POST https://api.typesafe.ai/v1/systemone` |
| Auth | none | `Authorization: Bearer $TYPESAFE_API_KEY` |
| Models | `nimble`, `clef`, `clef-flash`, Tev1 (Together AI) | `jev-latest` → `jev-1.13.0`, `jev-preview` |
| Min version | Ollama v0.35.0 (images v0.35.1) | — |
| Images | `images: [base64…]`, Clef models only | not supported (text only) |
| Score levels | 2–26 | 2–10 |
| Choice options | 2–26 per model pages (API schema says 255) | up to 255 |
| Questions/request | 1–64 | not stated |
| Size limit | 64 KiB body (32 MiB with images); must fit loaded context | 64k tokens total; 32k for state + longest question |
| Extra field | `keep_alive` (`"5m"`, seconds, `0` unload, negative = keep) | — |
| Cost | free | $0.042 / M input tokens, output free |

Details: [references/api.md](references/api.md) (both HTTP APIs + Python/JS SDKs). Worked examples: [references/examples.md](references/examples.md).
Real nimble runs on invented products (exact request + response, timings, ground truth): [examples/ollama/](examples/ollama/) — 10 object criteria → 400 · 11 structured e-commerce 11/11 · 12 weak spots (dates/math/negation/quantifiers) 7/10 · 13 support ticket routing + guardrail 6/7.

## Request

```json
{
  "model": "nimble",
  "state": {"ticket": "I was charged twice. Please refund the extra payment."},
  "questions": {
    "refund":   {"type": "noul",   "instructions": "Is the customer requesting a refund?"},
    "team":     {"type": "choice", "instructions": "Which team should handle this?",
                 "criteria": {"billing": "Payments and refunds", "bug": "Software errors", "account": null}},
    "urgency":  {"type": "score",  "instructions": "How urgently does this need a response?",
                 "criteria": ["Routine: no time pressure", "Soon: a customer is inconvenienced",
                              "Immediate: a critical service is unavailable"]}
  }
}
```

- `state`: non-empty string, JSON object, or array. Prefer an object with named parts.
- Question **ids are never sent to the model** — put the full question in `instructions`.
- `choice.criteria`: object `{option: description | null}`. `null` = bare label.
- `score.criteria`: array, index 0 = lowest. Scale is `0 … len-1`.
- `noul.criteria`: optional `{"true": …, "false": …}`; Ollama defaults `Yes`/`No`.
- `instructions` and every criteria entry may be string, object, or array on TypeSafe. **Ollama: only `instructions` may be structured; criteria must be strings (400 otherwise).**
- Answers are not passed between questions. Dependent question → second request.

## Response

```json
{
  "model": "nimble",
  "answers": {
    "refund":  {"type": "noul", "noul": 0.9989},
    "team":    {"type": "choice", "choice": "billing",
                "probabilities": {"billing": 0.97, "bug": 0.02, "account": 0.01}, "confidence": 0.95},
    "urgency": {"type": "score", "score": 0.83, "legend": {"0": "Routine…", "1": "Soon…", "2": "Immediate…"},
                "probabilities": {"0": 0.25, "1": 0.67, "2": 0.08}, "confidence": 0.4}
  },
  "usage": {"input_tokens": 174, "output_tokens": 1}
}
```

- `noul` = P(yes), a number, not a boolean. No `confidence`.
- `score` = Σ level × P(level); can land between levels; **not** normalized to 0–1.
- `probabilities`/`legend` keys for score are level indices as strings (Python SDK: ints).
- TypeSafe's `model` returns the resolved version (e.g. `jev-1.13.0`) — log it.
- Ties in choice follow option order.

## Confidence (Choice/Score only)

- Ollama spec: `1 − H(p)/ln(N)` (entropy). 0 = uniform, ~1 = one candidate dominates.
- TypeSafe docs: Choice `(p_max − 1/n)/(1 − 1/n)`; Score `max(0, 1 − Σ p_i|i−m| / MAD_unif)` with `MAD_unif = (1/n)Σ|i−(n−1)/2|`; noul-equivalent `|2p−1|`.
- The two providers document different formulas — don't port thresholds between them blindly.
- Confidence = peakedness, **not** correctness. Calibrate thresholds on your own data.
- Alternatives: top probability `p_max`, or top/second ratio.

## Design rules (from the docs, in priority order)

1. **Code first.** Anything deterministic (dates, arithmetic, regex, status checks) stays in code.
2. **Atomic questions.** One snap judgment each. "Is this spam?" → six nouls (credentials request, unexpected reward, time pressure, sender/domain mismatch, link mismatch, disguised link) combined in code.
3. **Batch everything in one request**, including speculative questions only some code paths read. Parallel → near-zero latency cost. Batching 13 questions: ~12× cheaper, ~10× faster, identical answers.
4. **Send only relevant state.** Irrelevant content lowers accuracy (context rot).
5. **Point at state parts with backtick paths**: ``"Does `ticket.messages[0].text` request a refund?"``.
6. **Pick the type by what code does next**: Choice → switch, Score → threshold/sort, Noul → `if`.
7. **Route on uncertainty**: high → act, middle → confirm/review, low → human or bigger model. Threshold scales with action risk.
8. **Composite scores**: normalize each Score by `len(criteria)-1`, weight in code; tune weights, not prompts.

## Writing good questions

- Noul: one condition; high value = yes ("contains personal data", not "is free of…"); statement or question both work; add `criteria` only when the boundary is subtle.
- Noul ≠ degree. "Strong in Python?" at 0.5 means *unsure*, not *medium*. Use a Score for degree.
- Score levels describe **situations**, not degrees. `["0","1","2"]` fails. Each level is judged alone — "worse than previous" means nothing. One dimension per Score. Give rare extremes their own top level.
- Choice: give the full option list; add `other`/`none` escape hatch; describe options so they separate. Confusable options → objects `{what, not_for, examples}`.
- Structure (any field): put the question in one key and data in others, reference by backtick name. Field names are free and seen by the model:
  ```json
  "instructions": {
    "potential_duplicate": {"name": "Jon Smith", "location": "Oakland, CA"},
    "question": "Is the resume for the same person as `potential_duplicate`?"
  }
  ```

## Known failure modes (Jev 1.13; assume similar for local models until tested)

| Failure | Do instead |
|---|---|
| Literal reading | State exact condition; boundary cases in criteria |
| Counting, math, hex/RGB, interpolating scores | Do it in code; ask one noul per item and sum |
| Date comparison/arithmetic | Extract parts via Choices, compute in code |
| Indirection / double negatives | Direct wording; name the state field |
| Large irrelevant state | Filter first |
| Adversarial/injected state | Precise criteria; test edge cases |
| instructions vs criteria contradict | Align them; never map `true` to "no" |
| First-option bias in Choice | Reorder options, check consistency |
| Generation | Use an LLM; let System One pick among candidates |

English is strongest; other languages work with lower accuracy.

## Ollama errors

`400` invalid request / unsupported model or runner / prompt exceeds context / cloud model · `404` model not pulled (`ollama pull nimble`) · `413` body over 64 KiB (32 MiB with images) · `500` load/render/scoring failed. Body: `{"error": "…"}`. No streaming, tools, video, or generation options. Input never truncated. Requires GGUF weights; MLX/Safetensors and cloud models unsupported. Not on Ollama Cloud.

## Ollama models (from ollama.com/library, read 2026-10-10)

| Model | Maker | Size | Input | Effective prompt limit | Notes |
|---|---|---|---|---|---|
| `nimble` (9b) | Bespoke Labs, from Qwen3.5-9B | 9.3–9.5 GB | text | **8,192 tokens** (full state + all questions per question) | <100 ms on M5 Max; contrastive-pair training |
| `clef-flash` (9b) | Cloudflare, from Qwen3.5-9B | 11–12 GB | text + image | 64K | 38.8 ms median, lowest latency in Cloudflare's runs |
| `clef` (27b) | Cloudflare, from Qwen3.8-27B | 18 GB | text + image | 64K | ~5× slower than clef-flash, "more accurate" |
| Tev1 (4B, 0.8B) | Together AI | — | text | — | 73.3% / 63.5% on Bespoke's suite |

Model pages say Choice/Score take **2–26 options** (API schema says 255 — trust the model page). Ties follow option order: put the preferred option first.

Vendor benchmarks (no shared head-to-head between nimble and clef-flash; each only vs Jev, different suites):
- Nimble vs Jev 1.13 (Bespoke, 13 public sets, 3,880 decisions): macro 74.8 vs 76.0; Choice 81.6 vs 82.9; Boolean 80.2 vs 84.6; **Score 54.6 vs 50.1**.
- Clef-flash / Clef / Jev (Cloudflare): BFCL 98.8/98.5/95.8; API-Bank 93.1/91.9/88.2; BANKING77 90.9/94.2/79.7; CLINC150+OOS 66.8/97.4/89.3; Home appliance 97.7/83.0/52.3; ANLI 59.1/69.8/74.8; RouterBench 79.9/79.7/79.9; When2Call 65.6/72.4/81.0; latency median 38.8/209.3/524.1 ms.

## Measured (2026-10-10, nimble q8_0, Ollama 0.40.2, CPU-only laptop: `size_vram 0`)

- 36 KB document as state → `400 {"error":"prompt 0 has 11282 tokens; expected 1–8194 (input is never truncated)"}`. Limit is per question prompt (state + questions).
- 17 KB (~5k-token) state + 5 questions → OK, but `usage.input_tokens` 26,657 (state re-scored per question) and **327 s** wall time on CPU.
- Real CPU throughput ≈ **18–20 uncached input tokens/s** (604-token section + 1 noul: 32 s warm; 698 tokens: 40 s incl. load). A 5-question run on a ~5k-token document fits this too (~6k unique tokens / 327 s): `usage.input_tokens` multiplies the state per question, but the shared state prefix seems to be computed once (prompt cache). Cost ≈ state once + each question, not state × questions.
- ~400-word state + 10 easy factual questions (warm): 10/10, **103 s**, `usage.input_tokens` 13,647 (≈ state × 10). ~8–10 s per extra question on CPU: cheaper than re-sending the state, not free.
- Same state, 10 hard questions: **7/10**, 70.7 s (state prefix cached). Failed exactly the documented weak spots: date math ("published more than one year ago?" → 0.41, wrong), double negative ("is it false that X never uses Y?" → 0.10, wrong), arithmetic (monthly price × 12 > threshold? → 0.32, wrong). Passed: counting 3 named items (0.99), multi-hop match, "not stated" trap, close options (0.89, conf 0.67), counting 4 items (> 3? → 0.61, right but unsure). Wrong answers sat at 0.1–0.4, not near 0: middling noul = warning sign. Keep math, dates, and negation in code.
- Harder non-math set (injection, misbinding, tense, NOT-choice, quantifier): 9/10. Miss: "does the state say **every** project uses language X?" → 0.96 yes (one project's language unstated; overgeneralized). Quantifiers ("every", "all") are a weak spot.
- **Ollama rejects object criteria**: `400 {"error":"question \"x\": choice criteria must map option keys to descriptions or null"}`. Flatten `{what, not_for, examples}` into one string (`"what. Not for: … Examples: a; b"`). **Structured `instructions` objects work** (`{"claim": …, "question": "Is `claim` supported by `product`?"}`).
- E-commerce product state (nested JSON, ~1k tokens) + 11 structured questions: **11/11**, 119.5 s. Passed: care-label misuse vs defect, sarcasm → angry, injection in `seller_notes` ignored, marketing "pure merino" vs 87% materials, variant pick (size + dark + in stock), health claim, EU→Germany, Kids listing ≠ adult listing.
- Product weak-spot run (12): date and sum-over-variants math wrong (0.28, 0.43); percent-off and double negative right only at ~0.55. Confidence on a wrong Choice can be 0.99 when the question word is ambiguous ("offered" vs "in stock").
- Support-ticket run (13): the one wrong route came back at confidence 0.32; all correct answers ≥ 0.76. Confidence gating works here — gate Choices below ~0.6.
- An identical repeat request returned in 0.48 s (prompt cache) — never benchmark with a repeated request.
- Tiny request: 10.5 s cold, 0.48 s warm. The "<100 ms" claim assumes a GPU (M5 Max). Check `GET /api/ps` → `size_vram` before blaming the model.
- Literal reading confirmed: the document said readers "already know the basics", the choice option said "new to the topic" → nimble picked `advanced` (0.98). Write options that match the text's own wording.

## TypeSafe SDK against Ollama (officially documented on ollama.com)

```bash
pip install typesafe-sdk
export TYPESAFE_BASE_URL=http://localhost:11434
export TYPESAFE_API_KEY=ollama          # required by SDK, ignored by Ollama
export TYPESAFE_DEFAULT_MODEL=nimble
```
Use `TypeSafeClient(timeout=120)` — local first load is slow. Decision models are not in the Ollama CLI or the `ollama` Python/JS libraries yet (model pages show `ollama.systemone(...)` snippets but say to use the API or TypeSafe SDK for now).

## Unverified

- Whether Jev itself runs on Ollama (not listed).

Files in this skill

  • SKILL.md13.8 KB
  • examples/ollama/10-shop-object-criteria-400.md6.5 KB
  • examples/ollama/11-shop-structured-11.md8 KB
  • examples/ollama/12-product-weak-spots.md5 KB
  • examples/ollama/13-product-support-ticket.md5.1 KB
  • references/api.md9.8 KB
  • references/examples.md12.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.