Skip to content

About

Unofficial command-line interface for TypeSafe AI System One models, on TypeSafe or OpenRouter

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

45 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TypeSafe Unofficial CLI

python PyPI license

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.

Install

uv tool install typesafe-unofficial-cli

It needs Python 3.14 or newer. To work on the CLI from a checkout, run make install.

Usage

Log in once per provider profile. The key is read from a hidden prompt:

typesafe auth login
typesafe -p openrouter auth login --provider openrouter

Ask 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.json

The 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.yaml

Or 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 8

ask 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-latest

Other 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.

Agent skills

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

Roadmap

  • 0.1.0: scaffold, auth, profiles, ask, models list
  • 0.2.0: request options, config set|get|unset, batch ask, request ids
  • 1.0.0: every SDK capability covered, contracts frozen

Security

Report a vulnerability privately through GitHub's advisory form, not a public issue.

Contributing

See CONTRIBUTING.md.

License

See LICENSE.

About

Unofficial command-line interface for TypeSafe AI System One models, on TypeSafe or OpenRouter

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages