All flags can be passed to the root kit command.
| Flag | Short | Default | Description |
|---|---|---|---|
--model |
-m |
anthropic/claude-sonnet-latest |
Model to use (provider/model format) |
--provider-api-key |
— | — | API key for the provider |
--provider-url |
— | — | Base URL for provider API |
--provider-wire |
— | — | Wire protocol for auto-routed providers: openai, openai-compat, anthropic, google (overrides the model database) |
--tls-skip-verify |
— | false |
Skip TLS certificate verification |
| Flag | Short | Default | Description |
|---|---|---|---|
--session |
-s |
— | Open specific JSONL session file |
--continue |
-c |
false |
Resume most recent session for current directory |
--resume |
-r |
false |
Interactive session picker |
--no-session |
— | false |
Ephemeral mode, no persistence |
These flags control Kit’s behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode.
| Flag | Short | Default | Description |
|---|---|---|---|
--quiet |
— | false |
Suppress all output (non-interactive only) |
--json |
— | false |
Output response as JSON (non-interactive only) |
--no-exit |
— | false |
Enter interactive mode after prompt completes |
--max-steps |
— | 0 |
Maximum agent steps (0 for unlimited) |
--stream |
— | true |
Enable streaming output |
--compact |
— | false |
Enable compact output mode |
--pick-dir |
— | false |
Choose a working directory with a picker before starting. The daemon uses this flag for any detachable session that has no directory of its own — kit attach --new, or a remote client |
--no-daemon |
— | false |
Run in this terminal even when the kit daemon could host a detachable session. KIT_NO_DAEMON=1 does the same; daemon-mode in the config file is the standing preference |
--auto-compact |
— | false |
Compact proactively when near the context limit (reactive compact-and-retry on provider overflow errors is always on) |
| Flag | Short | Default | Description |
|---|---|---|---|
--bare |
— | false |
No project context — skip all automatic discovery |
--bare starts Kit without reading anything from the directory it runs in, so
you can ask a question without first loading whatever project you happen to be
standing in. It disables:
AGENTS.md).kit.ymlYour home ~/.kit.yml still loads, so API keys and your default model keep
working, as do KIT_* environment variables and an explicit --config file.
Anything you name on the command line still applies — --extension,
--skill, --prompt-template, --system-prompt and @file attachments are
unaffected. Bare mode suppresses what Kit finds on its own, never what you
asked for.
Core tools stay enabled and the working directory is unchanged, so the agent
can still read files when you ask it to. Combine with --no-core-tools for a
pure question-answering session:
kit --bare "why does a TLS handshake fail with an SNI mismatch"
kit --bare --no-core-tools "explain the CAP theorem"
kit --bare -e ~/my-ext.go "..." # explicit extension still loads
Because a bare session is not tied to a directory, bare sessions share a
single store rather than the usual per-directory one. kit --bare -c resumes
your last bare conversation from anywhere on the filesystem.
--bare cannot be set from a config file. It exists to ignore project
configuration, so allowing a project config to enable it would be
self-defeating.
| Flag | Short | Default | Description |
|---|---|---|---|
--shell |
— | bash |
Shell the shell tool and the interactive ! commands run through: the shell plus its own leading arguments, e.g. /bin/dash or "busybox ash" |
--no-core-tools |
— | false |
Disable all built-in core tools |
--include-core-tools |
— | — | Comma-separated list of core tools to include (mutually exclusive with --exclude-core-tools) |
--exclude-core-tools |
— | — | Comma-separated list of core tools to exclude (mutually exclusive with --include-core-tools) |
--codemode |
— | true |
Use --codemode=false to disable. Enable code mode: the model can run JavaScript that calls the other tools |
--mcp |
— | — | Add an MCP server for this run (repeatable). name=command args... starts a local stdio server; name=https://... [-H "Key: Value"] connects to a remote server |
--mcp adds a server without a config file. Each value is name=spec. When
spec starts with http:// or https:// Kit connects to a remote server;
otherwise spec is a command line for a local stdio server. Quotes and
backslashes group arguments the way a shell does, so an argument can contain
spaces.
kit --mcp 'browser=lightpanda mcp' "open example.com and read the title"
kit --mcp 'docs=https://mcp.example.com/mcp' "..."
kit --mcp 'fs=npx -y @modelcontextprotocol/server-filesystem "/my dir"' \
--mcp 'browser=lightpanda mcp' "..."
A remote spec can carry HTTP headers after the URL, curl style. Use -H or
--header, once per header, with the header as one "Key: Value" string.
Header values support the same env-substitution as the config file, so an API
key stays out of the command line and out of the shell history:
kit --mcp 'docs=https://mcp.example.com/mcp -H "Authorization: Bearer ${env://API_KEY}"' "..."
kit --mcp 'docs=https://mcp.example.com/mcp -H "X-Api-Key: ${env://KEY}" -H "X-Tenant: acme"' "..."
kit --mcp 'docs=https://mcp.example.com/mcp --header="X-Api-Key: secret"' "..."
${env://VAR} fails at startup when VAR is not set; use
${env://VAR:-default} for an optional value. Headers apply to remote servers
only — after a local command, -H is passed to that command unchanged.
Headers are the credential for that server, so Kit switches OAuth off for it. Otherwise Kit would try dynamic client registration first and fail before it sends the headers. Two switches override this:
| Argument | Effect |
|---|---|
--oauth |
Keep OAuth on, even with headers (for a server that needs OAuth plus a routing header) |
--no-oauth |
Switch OAuth off without headers (for a public server) |
kit --mcp 'docs=https://mcp.example.com/mcp -H "X-Tenant: acme" --oauth' "..."
kit --mcp 'pubmed=https://mcp.example.com/mcp --no-oauth' "..."
A flag server with the same name as a mcpServers entry in .kit.yml
replaces that entry for the run. For environment, allowedTools and the
other per-server fields, use the config file.
| Flag | Short | Default | Description |
|---|---|---|---|
--extension |
-e |
— | Load additional extension file(s) (repeatable) |
--no-extensions |
— | false |
Disable all extensions |
--prompt-template |
— | — | Load a specific prompt template by name |
--no-prompt-templates |
— | false |
Disable prompt template loading |
| Flag | Short | Default | Description |
|---|---|---|---|
--skill |
— | — | Load skill file or directory (repeatable) |
--skills-dir |
— | — | Scan this directory directly for skills (overrides auto-discovery) |
--skill-disable |
— | — | Hide a skill from the model catalog by name (repeatable); still usable via /<name> |
--no-skills |
— | false |
Disable skill loading (auto-discovery and explicit) |
--no-agents |
— | false |
Disable named agent discovery (built-ins and definition files) |
| Flag | Short | Default | Description |
|---|---|---|---|
--max-tokens |
— | 8192 |
Base cap for output tokens. Auto-raised per-model up to 32768 when the model’s catalog ceiling is higher and no explicit value is set. |
--temperature |
— | 0.7 |
Randomness 0.0–1.0 |
--top-p |
— | 0.95 |
Nucleus sampling 0.0–1.0 |
--top-k |
— | 40 |
Limit top K tokens |
--stop-sequences |
— | — | Custom stop sequences (comma-separated) |
--frequency-penalty |
— | 0.0 |
Penalize frequent tokens (0.0–2.0) |
--presence-penalty |
— | 0.0 |
Penalize present tokens (0.0–2.0) |
--thinking-level |
— | off |
Model-specific reasoning effort (/thinking lists choices). off omits effort; none is literal |
| Flag | Short | Default | Description |
|---|---|---|---|
--config |
— | ~/.kit.yml |
Config file path |
--system-prompt |
— | — | System prompt text or file path |
--debug |
— | false |
Enable debug logging |