Unofficial. This project is not affiliated with, endorsed by, or supported by TypeSafe AI or OpenRouter. "TypeSafe", "Jev" and "OpenRouter" belong to their owners.
Unofficial command-line interface for TypeSafe AI System One models, on
TypeSafe or OpenRouter, built on
typesafe-sdk.
uv tool install typesafe-unofficial-cliIt needs Python 3.14 or newer. To work on the CLI from a checkout, run
make install.
Log in once per provider profile. The key is read from a hidden prompt:
typesafe auth login
typesafe -p openrouter auth login --provider openrouterAsk questions about some text. Each question is noul, choice or
score:
echo '{"billing": {"type": "noul", "instructions": "Is this billing?"}}' \
> questions.json
typesafe ask --state "I was charged twice." --questions-file questions.jsonThe file can be YAML too (.yaml/.yml, or standard input), and
--questions-template yaml prints a valid one to start from (see the
questions file):
typesafe ask --questions-template yaml > questions.yaml
typesafe ask --state "I was charged twice." --questions-file questions.yamlOr define the questions with flags, alone or beside a file (a flag replaces a file question of the same name; see question flags):
typesafe ask --state "I was charged twice." \
--noul 'billing=Is this billing?' \
--choice 'tone=What is the tone?' \
--criterion tone=calm --criterion 'tone=angry:Hostile or upset'Ask the same questions about many states, one JSON value per line, with several requests in flight (see batch ask):
typesafe ask --states-file states.jsonl --questions-file questions.json \
--concurrency 8ask and models list accept --timeout, --max-retries and repeatable
--header 'Name: value'; ask also takes --extra-body FILE (JSON or
YAML) with extra top-level request fields. The request id of each response is
printed on stderr and is a request_id field in the records.
Profile settings are managed with config set|get|unset (provider,
base_url, model, timeout, max_retries and the global output):
typesafe config set model jev-latestOther commands: models list (TypeSafe only), auth status|logout|token
and config path|list|use.
For automation set TYPESAFE_API_KEY or OPENROUTER_API_KEY; each
provider reads only its own variable. Global options go before the command:
-p/--profile, -o/--output (table, json, jsonl, csv, id) and
-v/--verbose.
Skills that give an agent the context to use typesafe without trial and
error (see install channels):
# Claude Code
/plugin marketplace add gajaguar/typesafe-cli
/plugin install typesafe-cli@typesafe-cli-skills
# Any Agent Skills-compatible agent
npx skills add gajaguar/typesafe-cli
npx skills add gajaguar/typesafe-cli -a opencode -y-
0.1.0: scaffold, auth, profiles,ask,models list -
0.2.0: request options,config set|get|unset, batchask, request ids -
1.0.0: every SDK capability covered, contracts frozen
Report a vulnerability privately through GitHub's advisory form, not a public issue.
See CONTRIBUTING.md.
See LICENSE.