typesafe

September 18, 2026 · View on GitHub

CLI for TypeSafe Jev. Run it from a shell, or let an agent run it.

Jev answers noul, choice, and score questions over JSON state. It does not chat, and it only sees what you send.

Install

Python 3.10+. API key: TypeSafe console.

curl -fsSL https://github.com/maddygoround/typesafeai-cli/releases/latest/download/install.sh | bash
pipx install typesafeai-cli

pip install typesafeai-cli is the same package.

export TYPESAFE_API_KEY=apikey_…

Usage

typesafe ask takes a state file and a questions file. Point each instruction at state with backticks.

{
  "message": "I was charged twice for order A-104. Please refund the duplicate.",
  "policy": "Duplicate charges are eligible for an immediate refund."
}
{
  "refund_requested": {
    "type": "noul",
    "instructions": "Does `message` request a refund?"
  },
  "intent": {
    "type": "choice",
    "instructions": "What does `message` ask for?",
    "criteria": {
      "refund": "The customer wants money returned",
      "information": "Explanation only",
      "other": "Something else"
    }
  }
}

examples/ticket and examples/code-change are full copies.

typesafe ask --state-file state.json --questions-file questions.json
typesafe noul "Does this request a refund?" --state "I was charged twice."

Keep those JSON files under ${TMPDIR:-/tmp}/codex/<project>/. typesafe skills install copies the typesafe-cli skill. typesafe auth status reports has_key and nothing else.

Commands

askState file + questions file
noul / choice / scoreOne question
findSearch a file
rankOrder a JSON shortlist
extractPick a span already in the text
verifyCheck a claim against a source
screenJailbreak / injection / sensitive-data / harm
suggest-skillAt most one skill name
decideMap answers to yes / no / uncertain (no HTTP)
modelsModel aliases
smokeLive docs quickstart
auth statusWhether a key is loaded
agent schemaJSON command tree
skills installOfficial TypeSafe skill + typesafe-cli

Exit 0 answered, 1 request failed, 2 bad flags or questions.