improve readme readability and add some tutorials

This commit is contained in:
2026-07-06 12:48:03 +02:00
parent 1f357fe2e3
commit 48caec8669

147
README.md
View File

@@ -1,39 +1,140 @@
# app-opencode-experiment # app-opencode
[opencode](https://opencode.ai/) in a Docker container, wired to [weave](https://weave.redpencil.io) as the model provider. Default model `weave/glm-5.2`. LSP baked in for TypeScript/JS and Python. [opencode](https://opencode.ai/) packaged in a Docker container and wired to
[weave](https://weave.redpencil.io) as the model provider. It ships with an
LSP for TypeScript/JavaScript and Python baked in, so opencode gets real
type-aware navigation out of the box. The default model is `weave/glm-5.2`.
## Setup The docs below are split into three parts: a **Getting started** walkthrough to
run it the first time, **How-to guides** for specific tasks, and a **Reference**
for the moving parts.
Create a `docker-compose.override.yml` (gitignored) with your weave key and repo mount: > `drc` in the examples is shorthand for `docker compose`
> (`alias drc='docker compose'`). Substitute `docker compose` if you don't have
> the alias.
```yaml ## Getting started
services:
opencode:
environment:
WEAVE_API_KEY: "..."
volumes:
- /path/to/your/repo:/workspace/repo
```
Then: A first run from a clean checkout.
``` 1. **Get a weave API key.** You need an account on
drc up -d [weave.redpencil.io](https://weave.redpencil.io/ui/) and/or an API key (ask us!).
drc exec opencode opencode
```
## TUI 2. **Create your local override.** `docker-compose.override.yml` is gitignored
and holds your key plus the repo you want opencode to work on. Create it with
your key and mount:
In the TUI, type `/models` to select a model from the registered weave models. ```yaml
services:
opencode:
environment:
WEAVE_API_KEY: "your-key-here"
volumes:
- /path/to/your/repo:/workspace/repo
```
## Updating the config 3. **Start the container.**
`opencode.json` is mounted into the container. After editing: ```
drc up -d
```
4. **Open the TUI.**
```
drc exec opencode opencode
```
You're now in opencode, talking to `weave/glm-5.2`. Type `/models` to switch
models, or just start prompting.
## How-to guides
### Switch the model in a session
In the TUI, type `/models` and pick from the registered weave models. This only
changes the current session; to change the default for every session, edit
`opencode.json` (see below).
### Change the default model
Edit `model` (and optionally `small_model`) in
[`config/opencode/opencode.json`](config/opencode/opencode.json), then apply the
change:
``` ```
drc restart opencode drc restart opencode
``` ```
## Caveats `opencode.json` is mounted into the container, so a restart is all that's
needed.
- Copy from the TUI is weird over Docker: To copy text out of the opencode TUI running in a container, I have to do `Shift`+click to select the text, then `Ctrl`+`Shift`+`C` to copy. Plain `COPY` doesn't work. ### Register a new weave model
Add the model under `provider.weave.models` in `opencode.json`:
```json
"provider": {
"weave": {
"models": {
"my-new-model": { "tools": true }
}
}
}
```
Then `drc restart opencode`. It will show up in the `/models` picker.
See the [model list on weave](https://weave.redpencil.io/ui/models-and-endpoints/) for an overview of available models. Need another model, please let us know :)
### Copy text out of the TUI
Copying from the opencode TUI over Docker is fiddly: `Shift`+click to select the
text, then `Ctrl`+`Shift`+`C` to copy. A plain copy doesn't work.
### Connect opencode to a (backend) service
To let opencode call a service over HTTP, e.g. a stack you've brought up in dev
mode and want the agent to follow up against, have that stack join opencode's
network instead of publishing ports or going via the host.
opencode's stack creates a default network named `app-opencode_default`. Attach the
dev-mode service to it as an external network:
```yaml
# the dev-mode app stack
services:
app:
networks:
- default
- app-opencode_default
networks:
app-opencode_default:
external: true
```
opencode can then reach it at `http://app:<port>`, where `app` is the **service
name** from that stack's compose and `<port>` is the container's *internal* port —
no `ports:` publishing needed.
Note: Bring the opencode stack up first, so `app-opencode_default` exists before adding to your app.
## Reference
### `opencode.json` keys
- **`model` / `small_model`** — default model and the model used for lighter
tasks. Both default to `weave/glm-5.2`.
- **`provider.weave`** — the weave provider, using the
`@ai-sdk/openai-compatible` adapter against `https://weave.redpencil.io/v1`
with the key from `WEAVE_API_KEY`.
- **`provider.weave.models`** — the models offered in `/models`.
- **`lsp`** — language servers baked into the image:
`typescript-language-server` for TS/JS and `pyright` for Python.
- **`permission`** — set to `ask` for read, edit, bash, and external-directory
actions, so opencode prompts before acting.
### Caveats
- Copy from the TUI over Docker needs the `Shift`+click / `Ctrl`+`Shift`+`C`
dance described above.