2025-05-22 02:59:09 +08:00
---
title: CLI
2025-10-04 01:46:56 +08:00
description: OpenCode CLI options and commands.
2025-05-22 02:59:09 +08:00
---
2025-05-22 03:01:12 +08:00
2025-08-08 04:16:12 +08:00
import { Tabs, TabItem } from "@astrojs/starlight/components"
2025-10-04 01:46:56 +08:00
The OpenCode CLI by default starts the [TUI](/docs/tui) when run without any arguments.
2025-08-19 01:30:58 +08:00
```bash
opencode
```
2025-10-04 01:46:56 +08:00
But it also accepts commands as documented on this page. This allows you to interact with OpenCode programmatically.
2025-05-22 03:01:12 +08:00
```bash
2025-08-19 01:28:43 +08:00
opencode run "Explain how closures work in JavaScript"
2025-05-23 03:10:08 +08:00
```
2025-08-08 04:16:12 +08:00
---
2025-11-01 05:59:59 +08:00
### tui
Start the OpenCode terminal user interface.
```bash
opencode [project]
```
#### Flags
| Flag | Short | Description |
| ------------ | ----- | ------------------------------------------ |
| `--continue` | `-c` | Continue the last session |
| `--session` | `-s` | Session ID to continue |
| `--prompt` | `-p` | Prompt to use |
| `--model` | `-m` | Model to use in the form of provider/model |
| `--agent` | | Agent to use |
| `--port` | | Port to listen on |
| `--hostname` | | Hostname to listen on |
---
2025-06-20 04:26:58 +08:00
## Commands
2025-10-04 01:46:56 +08:00
The OpenCode CLI also has the following commands.
2025-06-20 04:26:58 +08:00
2025-07-03 06:44:01 +08:00
---
2025-08-08 07:24:08 +08:00
### agent
2025-06-20 04:26:58 +08:00
2025-10-04 01:46:56 +08:00
Manage agents for OpenCode.
2025-05-22 03:01:12 +08:00
2025-05-23 03:10:08 +08:00
```bash
2025-08-08 07:24:08 +08:00
opencode agent [command]
2025-05-22 03:01:12 +08:00
```
2025-08-08 07:24:08 +08:00
---
2025-06-20 04:26:58 +08:00
2025-08-08 07:24:08 +08:00
#### create
2025-05-22 07:34:50 +08:00
2025-08-08 07:24:08 +08:00
Create a new agent with custom configuration.
2025-05-22 07:34:50 +08:00
2025-08-08 07:24:08 +08:00
```bash
opencode agent create
```
This command will guide you through creating a new agent with a custom system prompt and tool configuration.
2025-05-23 03:10:08 +08:00
2025-06-20 04:26:58 +08:00
---
### auth
2025-05-23 03:10:08 +08:00
2025-06-20 04:26:58 +08:00
Command to manage credentials and login for providers.
```bash
opencode auth [command]
```
2025-05-23 03:10:08 +08:00
2025-07-03 06:44:01 +08:00
---
2025-06-20 04:26:58 +08:00
#### login
2025-05-23 03:10:08 +08:00
2025-10-04 01:46:56 +08:00
OpenCode is powered by the provider list at [Models.dev](https://models.dev), so you can use `opencode auth login` to configure API keys for any provider you'd like to use. This is stored in `~/.local/share/opencode/auth.json`.
2025-05-23 03:10:08 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode auth login
2025-05-23 03:10:08 +08:00
```
2025-05-22 07:34:50 +08:00
2025-10-04 01:46:56 +08:00
When OpenCode starts up it loads the providers from the credentials file. And if there are any keys defined in your environments or a `.env` file in your project.
2025-06-20 04:26:58 +08:00
2025-07-03 06:44:01 +08:00
---
2025-06-20 04:26:58 +08:00
#### list
Lists all the authenticated providers as stored in the credentials file.
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode auth list
2025-05-23 03:10:08 +08:00
```
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
Or the short version.
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode auth ls
```
2025-05-22 07:34:50 +08:00
2025-07-03 06:44:01 +08:00
---
2025-06-20 04:26:58 +08:00
#### logout
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
Logs you out of a provider by clearing it from the credentials file.
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode auth logout
```
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
---
2025-05-22 07:34:50 +08:00
2025-08-08 07:24:08 +08:00
### github
Manage the GitHub agent for repository automation.
```bash
opencode github [command]
```
---
#### install
Install the GitHub agent in your repository.
```bash
opencode github install
```
This sets up the necessary GitHub Actions workflow and guides you through the configuration process. [Learn more](/docs/github).
---
#### run
Run the GitHub agent. This is typically used in GitHub Actions.
```bash
opencode github run
```
##### Flags
2025-08-14 01:37:19 +08:00
| Flag | Description |
| --------- | -------------------------------------- |
| `--event` | GitHub mock event to run the agent for |
| `--token` | GitHub personal access token |
2025-08-08 07:24:08 +08:00
---
### models
List all available models from configured providers.
```bash
2025-12-16 08:04:47 +08:00
opencode models [provider]
2025-08-08 07:24:08 +08:00
```
This command displays all models available across your configured providers in the format `provider/model`.
2025-09-24 01:15:02 +08:00
This is useful for figuring out the exact model name to use in [your config](/docs/config/).
2025-12-16 08:04:47 +08:00
You can optionally pass a provider ID to filter models by that provider.
```bash
opencode models anthropic
```
#### Flags
| Flag | Description |
| ----------- | ------------------------------------------------------------ |
| `--refresh` | Refresh the models cache from models.dev |
| `--verbose` | Use more verbose model output (includes metadata like costs) |
Use the `--refresh` flag to update the cached model list. This is useful when new models have been added to a provider and you want to see them in OpenCode.
```bash
opencode models --refresh
```
2025-08-08 07:24:08 +08:00
---
### run
Run opencode in non-interactive mode by passing a prompt directly.
```bash
opencode run [message..]
```
This is useful for scripting, automation, or when you want a quick answer without launching the full TUI. For example.
```bash "opencode run"
opencode run Explain the use of context in Go
```
2025-11-06 01:31:01 +08:00
You can also attach to a running `opencode serve` instance to avoid MCP server cold boot times on every run:
```bash
# Start a headless server in one terminal
opencode serve
# In another terminal, run commands that attach to it
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
```
2025-08-08 07:24:08 +08:00
#### Flags
2025-11-01 05:59:59 +08:00
| Flag | Short | Description |
| ------------ | ----- | ------------------------------------------------------------------ |
| `--command` | | The command to run, use message for args |
| `--continue` | `-c` | Continue the last session |
| `--session` | `-s` | Session ID to continue |
| `--share` | | Share the session |
| `--model` | `-m` | Model to use in the form of provider/model |
| `--agent` | | Agent to use |
| `--file` | `-f` | File(s) to attach to message |
| `--format` | | Format: default (formatted) or json (raw JSON events) |
| `--title` | | Title for the session (uses truncated prompt if no value provided) |
2025-11-06 01:31:01 +08:00
| `--attach` | | Attach to a running opencode server (e.g., http://localhost:4096) |
| `--port` | | Port for the local server (defaults to random port) |
2025-08-08 07:24:08 +08:00
---
### serve
2025-08-20 06:11:36 +08:00
Start a headless opencode server for API access. Check out the [server docs](/docs/server) for the full HTTP interface.
2025-08-08 07:24:08 +08:00
```bash
opencode serve
```
This starts an HTTP server that provides API access to opencode functionality without the TUI interface.
#### Flags
2025-08-14 01:37:19 +08:00
| Flag | Short | Description |
| ------------ | ----- | --------------------- |
| `--port` | `-p` | Port to listen on |
2025-11-01 05:59:59 +08:00
| `--hostname` | | Hostname to listen on |
2025-08-08 07:24:08 +08:00
---
2025-06-20 04:26:58 +08:00
### upgrade
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
Updates opencode to the latest version or a specific version.
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode upgrade [target]
```
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
To upgrade to the latest version.
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode upgrade
```
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
To upgrade to a specific version.
2025-05-22 07:34:50 +08:00
2025-06-20 04:26:58 +08:00
```bash
opencode upgrade v0.1.48
2025-05-23 03:10:08 +08:00
```
2025-05-22 03:01:12 +08:00
2025-08-08 07:24:08 +08:00
#### Flags
2025-08-14 01:37:19 +08:00
| Flag | Short | Description |
| ---------- | ----- | ----------------------------------------------------------------- |
2025-08-08 07:24:08 +08:00
| `--method` | `-m` | The installation method that was used; curl, npm, pnpm, bun, brew |
2025-06-20 04:26:58 +08:00
---
2025-11-01 05:59:59 +08:00
## Global Flags
2025-06-20 04:26:58 +08:00
2025-08-08 07:24:08 +08:00
The opencode CLI takes the following global flags.
2025-06-20 04:26:58 +08:00
2025-11-01 05:59:59 +08:00
| Flag | Short | Description |
| -------------- | ----- | ------------------------------------ |
| `--help` | `-h` | Display help |
| `--version` | `-v` | Print version number |
| `--print-logs` | | Print logs to stderr |
| `--log-level` | | Log level (DEBUG, INFO, WARN, ERROR) |
2025-12-13 06:47:50 +08:00
---
## Environment variables
OpenCode can be configured using environment variables.
| Variable | Type | Description |
| ------------------------------------- | ------- | -------------------------------------- |
| `OPENCODE_AUTO_SHARE` | boolean | Automatically share sessions |
| `OPENCODE_GIT_BASH_PATH` | string | Path to Git Bash executable on Windows |
| `OPENCODE_CONFIG` | string | Path to config file |
| `OPENCODE_CONFIG_DIR` | string | Path to config directory |
| `OPENCODE_CONFIG_CONTENT` | string | Inline json config content |
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Disable automatic update checks |
| `OPENCODE_DISABLE_PRUNE` | boolean | Disable pruning of old data |
| `OPENCODE_PERMISSION` | string | Inlined json permissions config |
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Disable default plugins |
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Disable automatic LSP server downloads |
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Enable experimental models |
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Disable automatic context compaction |
| `OPENCODE_CLIENT` | string | Client identifier (defaults to `cli`) |
| `OPENCODE_ENABLE_EXA` | boolean | Enable Exa web search tools |
---
### Experimental
These environment variables enable experimental features that may change or be removed.
| Variable | Type | Description |
| ----------------------------------------------- | ------- | --------------------------------------- |
| `OPENCODE_EXPERIMENTAL` | boolean | Enable all experimental features |
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Enable icon discovery |
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Disable copy on select in TUI |
| `OPENCODE_EXPERIMENTAL_BASH_MAX_OUTPUT_LENGTH` | number | Max output length for bash commands |
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Default timeout for bash commands in ms |
2025-12-17 04:31:09 +08:00
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Enable file watcher for entire dir |
2025-12-17 04:43:14 +08:00
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Enable oxfmt formatter |