CLI Options
Complete reference for janito command-line options.
Usage
janito [options] [prompt]
If no prompt is given, janito starts an interactive chat shell.
Prompt
| Argument |
Description |
prompt |
The prompt to send to the AI. If omitted, interactive chat starts. |
Configuration
| Option |
Description |
-c, --config-dir <dir> |
Directory for all janito config (config, auth, secrets, MCP, skills). Defaults to ~/.janito |
-l, --local |
Use the project-local config directory ./.janito (the current working directory) for --set, --set-api-key, --set-secret, etc. Reads resolve local values first and fall back to the global ~/.janito; list operations show both |
--config |
Open the interactive configuration wizard |
--show-config |
Display the configured provider and model |
--info |
Print resolved configuration (provider, model, API key) and exit |
--set <key=value> |
Set one or more config values in ~/.janito/config.json |
--unset <key> |
Remove one or more config keys from ~/.janito/config.json |
--get <key> |
Get one or more config values from ~/.janito/config.json |
--set-api-key <key> |
Set the API key for a provider. Uses --provider, or falls back to the configured default provider (--set provider=<name>) when --provider is omitted; errors if neither is available. If a key is already stored, janito warns and prompts for confirmation before overwriting; use -f/--force to overwrite without prompting. |
-f, --force |
Overwrite an existing API key without prompting (used with --set-api-key) |
-p, --provider <name> |
Provider name (e.g., openai, custom). Always validated against the supported providers; unknown names are rejected. |
-m, --model <name> |
Model name (overrides the provider's configured model). Validated against the provider's built-in models; openrouter and custom accept any name |
--list-keys |
List configured providers and keys (with -l/--local, shows both the local and the global auth files) |
--list-models |
List all config-available models for the active provider (--provider, or the provider defined in config.json) and exit |
--show-providers |
List all supported providers and their built-in defaults (model, API types, endpoint, token limits, thinking/reasoning, built-in tools per API type), followed by the registered provider variants |
Note: --set and --set-api-key must be used in separate commands, not together on the same line.
Provider Variants
| Option |
Description |
--create-variant <name> |
Register a provider variant <provider>-<word> (e.g. alibaba-tokenplan) in config.json. After creation the name behaves like any provider (--provider, --set provider=, --set-api-key), inheriting its base provider's built-in defaults with its own per-variant model/endpoint/API key |
--delete-variant <name> |
Delete a provider variant and its per-variant configuration (model, endpoint, API type, tokens, reasoning level, API key). Refuses to delete the configured default provider |
janito --create-variant alibaba-tokenplan
janito --provider alibaba-tokenplan --set model=qwen3.8-flash
janito --set-api-key sk-xxx --provider alibaba-tokenplan
janito --set provider=alibaba-tokenplan
janito --delete-variant alibaba-tokenplan
See Provider Variants for the full guide.
Secrets
| Option |
Description |
--set-secret <key=value> |
Set one or more secrets in ~/.janito/secrets.json |
--get-secret <key> |
Get one or more secret values |
--delete-secret <key> |
Delete one or more secrets |
--list-secrets |
List all configured secret keys (with -l/--local, shows both the local and the global secrets files) |
System Prompt
| Option |
Description |
-Z, --no-system-prompt |
Do not set a system prompt and do not pass any tools |
-S, --system-prompt <prompt> |
Override the system prompt (tools stay enabled) |
--no-tools |
Do not load tools (skill tools stay enabled) |
--no-tasks |
Do not load the tasks toolset (StartTask, StopTask, WaitForTask); all other tools stay enabled |
--show-system-prompt |
Display the resolved system prompt and exit |
-t, --thinking |
Enable thinking mode (sends extra_body={'enable_thinking': True}). DeepSeek, Alibaba/Qwen and MiniMax-M3 have thinking enabled by default. Gemini-flavored providers (google) do not accept this flag; thinking depth is controlled through --reasoning-effort instead. |
--reasoning-effort <level> |
Set the reasoning depth for the API call (sends reasoning_effort=<level>). Overrides the provider's configured value and built-in default. Values: none, minimal, low, medium, high, xhigh, max. |
API Type
| Option |
Description |
--api-type <type> |
Force the API type for the provider. Values: Responses, Completions, Anthropic, DashScope, Gemini. Overrides the provider's configured value (--set api-type=...) and the model's built-in default. Anthropic requires the optional anthropic package, DashScope the optional dashscope package (alibaba provider), and Gemini the optional google-genai package (google provider) — janito aborts the change with a message naming the missing package. |
Privileges
| Option |
Description |
-r, --read |
Grant READ privilege (the default when no -r/-w/-x flag is given) |
-w, --write |
Grant WRITE privilege |
-x, --exec |
Grant EXEC privilege |
--set privileges=<rwx> |
Persist the session's default privileges in config.json (issue #89) |
--unset privileges |
Remove the configured default, restoring the built-in read-only default |
The default privileges can be persisted in config.json so every session
starts with them without repeating the flags:
janito --set privileges=rwx # sessions default to full privileges
janito --set privileges=rw # sessions default to read+write
janito --unset privileges # back to the built-in read-only default
The value is a combination of r / w / x in any order and case
(rwx, xwr, RW, ...); it is canonicalized to the fixed r/w/x
order when stored and validated at set time — anything else (including an
empty value) is rejected. Like the flags, privileges=w means write-only
(it does not imply read).
Precedence: explicit -r/-w/-x flags always win over the configured
default, which wins over the built-in read-only default. If none of
-r, -w, -x are given and no privileges config is set, janito starts
read-only (READ granted, WRITE/EXEC not) and prints a hint right after
the version banner when an interactive session starts:
Started read-only, use /rwx <prompt>...with full privileges..
Explicit -r alone also leaves the session read-only, so the same hint is
printed. Sessions that grant WRITE or EXEC do not print the read-only hint.
In the interactive shell, /rwx <prompt> runs a single request with the
full toolset. Single-prompt runs (janito "prompt" or piped stdin) skip
the hint — /rwx is an interactive-shell command and does not apply
there.
| Option |
Description |
--list-tools |
List all available built-in tools and exit |
Skills
| Option |
Description |
--install-skill <url> |
Install a skill from a GitHub URL |
--list-skills |
List all installed skills |
--uninstall-skill <name> |
Uninstall a skill by name |
MCP
| Option |
Description |
--list-mcp |
List all MCP services and their tools |
Plugins
| Option |
Description |
--plugin <dir> |
Load a plugin package from dir (repeatable; its parent is temporarily added to sys.path so relative imports work). Plugin tools, commands and system-prompt sections are registered before the session starts |
--install-plugin <url> |
Install a plugin from a GitHub repository URL. Downloads the master zip and extracts it to ~/.janito/plugins/<repo-name> |
--uninstall-plugin <name> |
Uninstall an installed plugin by its plugin name (the name the plugin exports, as shown by --list-plugins; e.g. codesearch for the janito-codesearch-plugin). Removes the plugin's directory from the plugins dir; broken plugins that cannot be imported are matched by their directory name |
--no-plugins |
Do not autoload plugins from ~/.janito/plugins (plugins explicitly loaded with --plugin DIR are still loaded) |
--list-plugins |
List loaded plugins (from --plugin and autoloaded from ~/.janito/plugins) and their on_start errors, then exit |
Web UI (Alpha)
| Option |
Description |
--web |
Start the web UI server instead of the terminal chat (requires the [web] extra: pip install janito[web]) |
--web-port <port> |
Port for the web server (default: 8080, used with --web) |
--web-host <host> |
Bind address for the web server (default: 127.0.0.1 — localhost only, used with --web) |
--no-web-open |
Don't automatically open the browser (used with --web) |
All other Janito flags still apply in --web mode (they configure the
sessions the server runs). See Web UI for details.
Logging & Output
| Option |
Description |
--log=<levels> |
Enable logging (e.g., --log=info,debug or --log=warning,error; valid levels: debug, info, warning, error, critical) |
-v, --verbose |
Enable verbose output: model/backend/MCP info plus the API call parameters (messages shown as tail only) and a response summary |
--no-history |
Don't persist interactive input history to file |
--version |
Show version information and exit |
--help |
Show help message and exit |
Examples
janito --config
janito --show-config
janito --info
janito --show-providers # list every provider and variant with its defaults
janito --list-models # models available for the active provider
janito --set provider=openai --set model=gpt-5.6-luna
janito --set-api-key sk-your-key --provider openai
janito --set-api-key sk-your-key # uses the configured default provider
Project-local configuration
With -l/--local, configuration is stored in ./.janito (the current
working directory) instead of ~/.janito. Reads resolve local values first
and fall back to the global directory, and --list-keys / --list-secrets
show both:
janito -l --set model=gpt-5.6-luna # store config in ./.janito
janito -l --set-api-key sk-your-key --provider openai # store the key in ./.janito
janito -l --list-keys # show global and local keys
Secrets
janito --set-secret gmail_username=user@gmail.com
janito --set-secret gmail_password="xxxx xxxx xxxx xxxx"
janito --get-secret gmail_username
janito --list-secrets
janito --delete-secret gmail_password
Plugins
janito --plugin ../plugins/janito-gmail-plugin "Show my emails"
janito --plugin ../plugins/janito-onedrive-plugin "List my files"
janito --list-plugins
janito --install-plugin https://github.com/joaompinto/janito-codesearch-plugin
janito --uninstall-plugin codesearch
System Prompt & Privileges
janito -Z "Simple prompt without tools"
janito -S "You are a concise coding assistant" "Explain recursion"
janito -r -w "Refactor this file"
API Type
janito --api-type Completions "Your prompt" # force Chat Completions for one call
janito --provider google --set api-type=Gemini # persist the native Gemini SDK type
Logging
janito --log=info "prompt"
janito --log=debug "prompt"
janito --log=info,debug "prompt"
Configuration Keys
Values stored in ~/.janito/config.json via --set. Keys are scoped:
- flat keys live at the top level of
config.json;
- provider-scoped keys are stored as
providers.<provider>.<key> — the
active provider is taken from --provider or the configured provider
value (so each provider can keep its own model/endpoint);
- model-scoped keys are stored as
providers.<provider>.models.<model>.<key> — the model is resolved from
the provider's configured model, else its built-in default (so each
provider/model pair keeps its own limits and options).
| Key |
Scope |
Description |
Default |
provider |
flat |
Provider name (openai, google, custom, alibaba, deepseek, minimax, xiaomi, moonshot, zai, xai, anthropic, openrouter) |
openai |
model |
provider-scoped |
Model name |
provider built-in default |
endpoint |
provider-scoped |
API endpoint URL (required for custom) |
provider built-in default |
max-input-tokens |
model-scoped |
Maximum input tokens (context window) |
model built-in |
max-output-tokens |
model-scoped |
Maximum output tokens |
model built-in |
reasoning-effort |
model-scoped |
Reasoning depth (none…max) |
model built-in |
api-type |
model-scoped |
API type (Responses, Completions, Anthropic, DashScope, Gemini) |
model built-in default |
responses-in-server |
model-scoped |
Whether the Responses API keeps conversation state server-side (bool) |
model built-in default |
used-files |
flat |
Whether the end-of-turn Used files report is printed by the CLI/shell (bool, opt-in) |
false |
system-prompt |
flat |
Literal text used as the system prompt's start section |
built-in base prompt |
system-prompt-file |
flat |
Path to a file whose content becomes the start section (~ is expanded, relative paths resolve against the cwd); wins over system-prompt when both are set. Validated when set and at startup: janito fails (exit 1) with an actionable error when the file does not exist |
unset |
Note: for backward compatibility, a legacy top-level endpoint key is
still honored as a fallback when no provider-scoped endpoint is set.
See Configuration — System prompt
for the full semantics (-S/-Z precedence, per-session file re-read, the
project-local trust note).