wip(docs): i18n (#12681)

This commit is contained in:
Adam
2026-02-09 11:34:35 -06:00
committed by GitHub
parent f74c0339cc
commit dc53086c1e
642 changed files with 192745 additions and 509 deletions

View File

@@ -0,0 +1,67 @@
---
title: Migrerer til 1.0
description: Hva er nytt i OpenCode 1.0.
---
OpenCode 1.0 er en fullstendig omskrivning av TUI.
Vi gikk fra den go+bubbletea-baserte TUI som hadde ytelses- og kapasitetsproblemer til et internt rammeverk (OpenTUI) skrevet i zig+solidjs.
Den nye TUI fungerer som den gamle siden den kobles til den samme opencode-serveren.
---
## Oppgradering
Du bør ikke autooppgraderes til 1.0 hvis du bruker en tidligere
versjon. Men noen eldre versjoner av OpenCode henter alltid den nyeste.
For å oppgradere manuelt, kjør
```bash
$ opencode upgrade 1.0.0
```
For å nedgradere tilbake til 0.x, kjør
```bash
$ opencode upgrade 0.15.31
```
---
## UX endringer
Sesjonshistorikken er mer komprimert, og viser bare fullstendige detaljer om redigerings- og bash-verktøyet.
Vi la til en kommandolinje som nesten alt flyter gjennom. Trykk ctrl+p for å få det opp i en hvilken som helst sammenheng og se alt du kan gjøre.
Lagt til en øktsidelinje (kan byttes) med nyttig informasjon.
Vi fjernet noe funksjonalitet som vi ikke var sikre på at noen faktisk brukte. Hvis noe viktig mangler, åpne et problem, så legger vi det til raskt igjen.
---
## Brytende endringer
### Keybindings omdøpt
- meldinger_tilbake -> meldinger_angre
- switch_agent -> agent_cycle
- switch_agent_reverse -> agent_cycle_reverse
- switch_mode -> agent_cycle
- switch_mode_reverse -> agent_cycle_reverse
### Keybindings fjernet
- messages_layout_toggle
- meldinger_neste
- meldinger_forrige
- file_diff_toggle
- filsøk
- fil_lukk
- fil_liste
- app_hjelp
- prosjekt_init
- tool_details
- tenkeblokker

View File

@@ -0,0 +1,156 @@
---
title: ACP Støtte
description: Bruk OpenCode i en hvilken som helst ACP-kompatibel editor.
---
OpenCode støtter [Agent Client Protocol](https://agentclientprotocol.com) eller (ACP), slik at du kan bruke den direkte i kompatible redaktører og IDE-er.
:::tupp
For en liste over redaktører og verktøy som støtter ACP, sjekk ut [ACP fremdriftsrapport](https://zed.dev/blog/acp-progress-report#available-now).
:::
ACP er en åpen protokoll som standardiserer kommunikasjon mellom koderedigerere og AI kodeagenter.
---
## Konfigurer
For å bruke OpenCode via ACP, konfigurer redigeringsprogrammet til å kjøre kommandoen `opencode acp`.
Kommandoen starter OpenCode som en ACP-kompatibel underprosess som kommuniserer med redaktøren din over JSON-RPC via stdio.
Nedenfor er eksempler på populære redaktører som støtter ACP.
---
### Zed
Legg til i [Zed](https://zed.dev)-konfigurasjonen (`~/.config/zed/settings.json`):
```json title="~/.config/zed/settings.json"
{
"agent_servers": {
"OpenCode": {
"command": "opencode",
"args": ["acp"]
}
}
}
```
For å åpne den, bruk handlingen `agent: new thread` i **Kommandopaletten**.
Du kan også binde en hurtigtast ved å redigere `keymap.json`:
```json title="keymap.json"
[
{
"bindings": {
"cmd-alt-o": [
"agent::NewExternalAgentThread",
{
"agent": {
"custom": {
"name": "OpenCode",
"command": {
"command": "opencode",
"args": ["acp"]
}
}
}
}
]
}
}
]
```
---
### JetBrains IDE-er
Legg til [JetBrains IDE](https://www.jetbrains.com/) acp.json i henhold til [dokumentasjonen](https://www.jetbrains.com/help/ai-assistant/acp.html):
```json title="acp.json"
{
"agent_servers": {
"OpenCode": {
"command": "/absolute/path/bin/opencode",
"args": ["acp"]
}
}
}
```
For å åpne den, bruk den nye 'OpenCode'-agenten i AI Chat-agentvelgeren.
---
### Avante.nvim
Legg til i [Avante.nvim](https://github.com/yetone/avante.nvim)-konfigurasjonen:
```lua
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" }
}
}
}
```
Hvis du trenger å sende miljøvariabler:
```lua {6-8}
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" },
env = {
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
}
}
}
}
```
---
### CodeCompanion.nvim
For å bruke OpenCode som en ACP-agent i [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), legg til følgende i Neovim-konfigurasjonen:
```lua
require("codecompanion").setup({
interactions = {
chat = {
adapter = {
name = "opencode",
model = "claude-sonnet-4",
},
},
},
})
```
Denne konfigurasjonen setter opp CodeCompanion til å bruke OpenCode som ACP-agent for chat.
Hvis du trenger å sende miljøvariabler (som `OPENCODE_API_KEY`), se [Konfigurere adaptere: miljøvariabler](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) i CodeCompanion.nvim-dokumentasjonen for fullstendige detaljer.
## Støtte
OpenCode fungerer på samme måte via ACP som i terminalen. Alle funksjoner støttes:
:::note
Noen innebygde skråstrekkommandoer som `/undo` og `/redo` støttes for øyeblikket ikke.
:::
- Innebygde verktøy (filoperasjoner, terminalkommandoer, etc.)
- Egendefinerte verktøy og skråstrekkommandoer
- MCP servere konfigurert i OpenCode-konfigurasjonen
- Prosjektspesifikke regler fra `AGENTS.md`
- Tilpassede formatere og linters
- Agenter og tillatelsessystem

View File

@@ -0,0 +1,747 @@
---
title: Agenter
description: Konfigurer og bruk spesialiserte agenter.
---
Agenter er spesialiserte AI-assistenter som kan konfigureres for spesifikke oppgaver og arbeidsflyter. De lar deg lage fokuserte verktøy med tilpassede meldinger, modeller og verktøytilgang.
:::tupp
Bruk planagenten til å analysere kode og gjennomgå forslag uten å gjøre noen kodeendringer.
:::
Du kan bytte mellom agenter under en økt eller påkalle dem med `@`-omtalen.
---
## Typer
Det er to typer agenter i OpenCode; primære agenter og subagenter.
---
### Primæragenter
Primæragenter er de viktigste assistentene du samhandler direkte med. Du kan bla gjennom dem ved å bruke **Tab**-tasten, eller din konfigurerte `switch_agent`-tastebinding. Disse agentene håndterer hovedsamtalen din. Verktøytilgang konfigureres via tillatelser - for eksempel har Build alle verktøy aktivert mens Plan er begrenset.
:::tupp
Du kan bruke **Tab**-tasten for å bytte mellom primære agenter under en økt.
:::
OpenCode kommer med to innebygde primære agenter, **Build** og **Plan**. Godt
se på disse nedenfor.
---
### Subagenter
Subagenter er spesialiserte assistenter som primære agenter kan påkalle for spesifikke oppgaver. Du kan også starte dem manuelt ved å **@ nevne** dem i meldingene dine.
OpenCode kommer med to innebygde subagenter, **General** og **Explore**. Vi skal se på dette nedenfor.
---
## Innebygd
OpenCode kommer med to innebygde primære agenter og to innebygde subagenter.
---
### Bruk build
_Modus_: `primary`
Bygg er **standard** primæragent med alle verktøy aktivert. Dette er standardagenten for utviklingsarbeid der du trenger full tilgang til filoperasjoner og systemkommandoer.
---
### Bruk plan
_Modus_: `primary`
En begrenset agent designet for planlegging og analyse. Vi bruker et tillatelsessystem for å gi deg mer kontroll og forhindre utilsiktede endringer.
Som standard er alt av følgende satt til `ask`:
- `file edits`: Alle skrivinger, patcher og redigeringer
- `bash`: Alle bash-kommandoer
Denne agenten er nyttig når du vil at LLM skal analysere kode, foreslå endringer eller lage planer uten å gjøre noen faktiske endringer i kodebasen.
---
### Bruk generelt
_Modus_: `subagent`
En generell agent for å undersøke komplekse spørsmål og utføre flertrinnsoppgaver. Har full verktøytilgang (unntatt todo), slik at den kan gjøre filendringer når det er nødvendig. Bruk denne til å kjøre flere arbeidsenheter parallelt.
---
### Bruk utforske
_Modus_: `subagent`
En rask, skrivebeskyttet agent for å utforske kodebaser. Kan ikke endre filer. Bruk dette når du raskt trenger å finne filer etter mønstre, søke i kode etter nøkkelord eller svare på spørsmål om kodebasen.
---
### Bruk komprimering
_Modus_: `primary`
Skjult systemagent som komprimerer lang kontekst til et mindre sammendrag. Den kjører automatisk ved behov og kan ikke velges i UI.
---
### Bruk tittel
_Modus_: `primary`
Skjult systemagent som genererer korte økttitler. Den kjører automatisk og kan ikke velges i UI.
---
### Bruk sammendrag
_Modus_: `primary`
Skjult systemagent som lager øktsammendrag. Den kjører automatisk og kan ikke velges i UI.
---
## Bruk
1. For primære agenter, bruk **Tab**-tasten for å bla gjennom dem under en økt. Du kan også bruke din konfigurerte `switch_agent` nøkkelbinding.
2. Subagenter kan påkalles:
- **Automatisk** av primære agenter for spesialiserte oppgaver basert på deres beskrivelser.
- Manuelt ved å **@ nevne** en underagent i meldingen. For eksempel.
```txt frame="none"
@general help me search for this function
```
3. **Navigering mellom økter**: Når underagenter oppretter sine egne underordnede økter, kan du navigere mellom overordnede økter og alle underordnede økter ved å bruke:
- **\<Leader>+Høyre** (eller din konfigurerte `session_child_cycle`-tastebinding) for å gå videre gjennom forelder → barn1 → barn2 → ... → forelder
- **\<Leader>+Venstre** (eller din konfigurerte `session_child_cycle_reverse`-tastebinding) for å gå bakover gjennom forelder ← barn1 ← barn2 ← ... ← forelder
Dette lar deg sømløst bytte mellom hovedsamtalen og spesialisert underagentarbeid.
---
## Konfigurer
Du kan tilpasse de innebygde agentene eller lage dine egne gjennom konfigurasjon. Agenter kan konfigureres på to måter:
---
### JSON
Konfigurer agenter i konfigurasjonsfilen `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"mode": "primary",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"mode": "primary",
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
},
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"mode": "subagent",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
"write": false,
"edit": false
}
}
}
}
```
---
### Markdown
Du kan også definere agenter ved å bruke markdown-filer. Plasser dem i:
- Globalt: `~/.config/opencode/agents/`
- Per prosjekt: `.opencode/agents/`
```markdown title="~/.config/opencode/agents/review.md"
---
description: Reviews code for quality and best practices
mode: subagent
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
tools:
write: false
edit: false
bash: false
---
You are in code review mode. Focus on:
- Code quality and best practices
- Potential bugs and edge cases
- Performance implications
- Security considerations
Provide constructive feedback without making direct changes.
```
Markdown-filnavnet blir agentnavnet. For eksempel oppretter `review.md` en `review`-agent.
---
## Alternativer
La oss se på disse konfigurasjonsalternativene i detalj.
---
### Beskrivelse
Bruk alternativet `description` for å gi en kort beskrivelse av hva agenten gjør og når den skal brukes.
```json title="opencode.json"
{
"agent": {
"review": {
"description": "Reviews code for best practices and potential issues"
}
}
}
```
Dette er et **obligatorisk** konfigurasjonsalternativ.
---
### Temperatur
Kontroller tilfeldigheten og kreativiteten til LLMs svar med `temperature`-konfigurasjonen.
Lavere verdier gjør svarene mer fokuserte og deterministiske, mens høyere verdier øker kreativiteten og variasjonen.
```json title="opencode.json"
{
"agent": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Temperaturverdier varierer vanligvis fra 0,0 til 1,0:
- **0.0-0.2**: Veldig fokuserte og deterministiske svar, ideell for kodeanalyse og planlegging
- **0,3-0,5**: Balanserte svar med litt kreativitet, bra for generelle utviklingsoppgaver
- **0.6-1.0**: Mer kreative og varierte svar, nyttig for idédugnad og utforskning
```json title="opencode.json"
{
"agent": {
"analyze": {
"temperature": 0.1,
"prompt": "{file:./prompts/analysis.txt}"
},
"build": {
"temperature": 0.3
},
"brainstorm": {
"temperature": 0.7,
"prompt": "{file:./prompts/creative.txt}"
}
}
}
```
Hvis ingen temperatur er spesifisert, bruker OpenCode modellspesifikke standardinnstillinger; typisk 0 for de fleste modeller, 0,55 for Qwen-modeller.
---
### Maks trinn
Kontroller det maksimale antallet agentiske iterasjoner en agent kan utføre før den blir tvunget til å svare kun med tekst. Dette lar brukere som ønsker å kontrollere kostnadene sette en grense for agenthandlinger.
Hvis dette ikke er satt, vil agenten fortsette å iterere til modellen velger å stoppe eller brukeren avbryter økten.
```json title="opencode.json"
{
"agent": {
"quick-thinker": {
"description": "Fast reasoning with limited iterations",
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
"steps": 5
}
}
}
```
Når grensen er nådd, mottar agenten en spesiell systemmelding som instruerer den om å svare med en oppsummering av arbeidet og anbefalte gjenværende oppgaver.
:::forsiktighet
Det gamle `maxSteps`-feltet er avviklet. Bruk `steps` i stedet.
:::
---
### Deaktiver
Sett til `true` for å deaktivere agenten.
```json title="opencode.json"
{
"agent": {
"review": {
"disable": true
}
}
}
```
---
### Spør
Spesifiser en tilpasset systemmeldingsfil for denne agenten med `prompt`-konfigurasjonen. Spørrefilen skal inneholde instruksjoner som er spesifikke for agentens formål.
```json title="opencode.json"
{
"agent": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Denne banen er i forhold til hvor konfigurasjonsfilen er plassert. Så dette fungerer for både den globale OpenCode-konfigurasjonen og den prosjektspesifikke konfigurasjonen.
---
### Modell
Bruk `model`-konfigurasjonen for å overstyre modellen for denne agenten. Nyttig for bruk av ulike modeller optimalisert for ulike oppgaver. For eksempel en raskere modell for planlegging, en mer kapabel modell for implementering.
:::tupp
Hvis du ikke spesifiserer en modell, bruker primæragenter [modell globalt konfigurert](/docs/config#models) mens subagenter vil bruke modellen til primæragenten som påkalte subagenten.
:::
```json title="opencode.json"
{
"agent": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
Modellen ID i OpenCode-konfigurasjonen din bruker formatet `provider/model-id`. For eksempel, hvis du bruker [OpenCode Zen](/docs/zen), vil du bruke `opencode/gpt-5.1-codex` for GPT 5.1 Codex.
---
### Verktøy
Kontroller hvilke verktøy som er tilgjengelige i denne agenten med `tools`-konfigurasjonen. Du kan aktivere eller deaktivere spesifikke verktøy ved å sette dem til `true` eller `false`.
```json title="opencode.json" {3-6,9-12}
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": true,
"bash": true
},
"agent": {
"plan": {
"tools": {
"write": false,
"bash": false
}
}
}
}
```
:::note
Den agentspesifikke konfigurasjonen overstyrer den globale konfigurasjonen.
:::
Du kan også bruke jokertegn for å kontrollere flere verktøy samtidig. For eksempel, for å deaktivere alle verktøy fra en MCP-server:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"readonly": {
"tools": {
"mymcp_*": false,
"write": false,
"edit": false
}
}
}
}
```
[Finn ut mer om verktøy](/docs/tools).
---
### Tillatelser
Du kan konfigurere tillatelser for å administrere hvilke handlinger en agent kan utføre. For øyeblikket kan tillatelsene for verktøyene `edit`, `bash` og `webfetch` konfigureres til:
- `"ask"` — Be om godkjenning før du kjører verktøyet
- `"allow"` — Tillat alle operasjoner uten godkjenning
- `"deny"` — Deaktiver verktøyet
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
}
}
```
Du kan overstyre disse tillatelsene per agent.
```json title="opencode.json" {3-5,8-10}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
},
"agent": {
"build": {
"permission": {
"edit": "ask"
}
}
}
}
```
Du kan også angi tillatelser i Markdown-agenter.
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash:
"*": ask
"git diff": allow
"git log*": allow
"grep *": allow
webfetch: deny
---
Only analyze code and suggest changes.
```
Du kan angi tillatelser for spesifikke bash-kommandoer.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git push": "ask",
"grep *": "allow"
}
}
}
}
}
```
Dette kan ta et globmønster.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git *": "ask"
}
}
}
}
}
```
Og du kan også bruke jokertegnet `*` for å administrere tillatelser for alle kommandoer.
Siden den siste samsvarsregelen har forrang, setter du jokertegnet `*` først og spesifikke regler etter.
```json title="opencode.json" {8}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status *": "allow"
}
}
}
}
}
```
[Finn ut mer om tillatelser](/docs/permissions).
---
### Modus
Kontroller agentens modus med `mode`-konfigurasjonen. Alternativet `mode` brukes til å bestemme hvordan agenten kan brukes.
```json title="opencode.json"
{
"agent": {
"review": {
"mode": "subagent"
}
}
}
```
Alternativet `mode` kan settes til `primary`, `subagent` eller `all`. Hvis ingen `mode` er spesifisert, er den standard til `all`.
---
### Skjult
Skjul en underagent fra `@` autofullføringsmenyen med `hidden: true`. Nyttig for interne underagenter som bare skal påkalles programmatisk av andre agenter via oppgaveverktøyet.
```json title="opencode.json"
{
"agent": {
"internal-helper": {
"mode": "subagent",
"hidden": true
}
}
}
```
Dette påvirker kun brukersynlighet i autofullfør-menyen. Skjulte agenter kan fortsatt påkalles av modellen via oppgaveverktøyet hvis tillatelser tillater det.
:::note
Gjelder kun `mode: subagent`-agenter.
:::
---
### Oppgavetillatelser
Kontroller hvilke subagenter en agent kan påkalle via oppgaveverktøyet med `permission.task`. Bruker glob-mønstre for fleksibel matching.
```json title="opencode.json"
{
"agent": {
"orchestrator": {
"mode": "primary",
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}
```
Når den er satt til `deny`, fjernes subagenten fullstendig fra oppgaveverktøybeskrivelsen, så modellen vil ikke forsøke å starte den.
:::tupp
Reglene evalueres i rekkefølge, og den **siste samsvarsregelen vinner**. I eksemplet ovenfor samsvarer `orchestrator-planner` med både `*` (avslå) og `orchestrator-*` (tillat), men siden `orchestrator-*` kommer etter `*`, er resultatet `allow`.
:::
:::tupp
Brukere kan alltid starte en hvilken som helst underagent direkte via `@` autofullføringsmenyen, selv om agentens oppgavetillatelser ville nekte det.
:::
---
### Farge
Tilpass agentens visuelle utseende i UI med alternativet `color`. Dette påvirker hvordan agenten vises i grensesnittet.
Bruk en gyldig sekskantfarge (f.eks. `#FF5733`) eller temafarge: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
```json title="opencode.json"
{
"agent": {
"creative": {
"color": "#ff6b6b"
},
"code-reviewer": {
"color": "accent"
}
}
}
```
---
### Topp P
Kontroller responsmangfoldet med alternativet `top_p`. Alternativ til temperatur for å kontrollere tilfeldighet.
```json title="opencode.json"
{
"agent": {
"brainstorm": {
"top_p": 0.9
}
}
}
```
Verdiene varierer fra 0,0 til 1,0. Lavere verdier er mer fokuserte, høyere verdier mer mangfoldige.
---
### Tillegg
Eventuelle andre alternativer du spesifiserer i agentkonfigurasjonen vil bli **overført direkte** til leverandøren som modellalternativer. Dette lar deg bruke leverandørspesifikke funksjoner og parametere.
For eksempel, med OpenAIs resonneringsmodeller kan du kontrollere resonnementinnsatsen:
```json title="opencode.json" {6,7}
{
"agent": {
"deep-thinker": {
"description": "Agent that uses high reasoning effort for complex problems",
"model": "openai/gpt-5",
"reasoningEffort": "high",
"textVerbosity": "low"
}
}
}
```
Disse tilleggsalternativene er modell- og leverandørspesifikke. Sjekk leverandørens dokumentasjon for tilgjengelige parametere.
:::tupp
Kjør `opencode models` for å se en liste over tilgjengelige modeller.
:::
---
## Opprett agenter
Du kan opprette nye agenter ved å bruke følgende kommando:
```bash
opencode agent create
```
Denne interaktive kommandoen vil:
1. Spør hvor du skal lagre agenten; global eller prosjektspesifikk.
2. Beskrivelse av hva agenten skal gjøre.
3. Generer en passende systemmelding og identifikator.
4. La deg velge hvilke verktøy agenten har tilgang til.
5. Lag til slutt en nedmerkingsfil med agentkonfigurasjonen.
---
## Brukstilfeller
Her er noen vanlige brukstilfeller for forskjellige agenter.
- **Byggagent**: Fullstendig utviklingsarbeid med alle verktøy aktivert
- **Planagent**: Analyse og planlegging uten å gjøre endringer
- **Anmeldelsesagent**: Kodegjennomgang med skrivebeskyttet tilgang pluss dokumentasjonsverktøy
- **Feilsøkingsagent**: Fokusert på etterforskning med bash og leseverktøy aktivert
- **Docs-agent**: Dokumentasjonsskriving med filoperasjoner, men ingen systemkommandoer
---
## Eksempler
Her er noen eksempler på agenter du kan finne nyttige.
:::tupp
Har du en agent du vil dele? [Send inn en PR](https://github.com/anomalyco/opencode).
:::
---
### Dokumentasjonsagent
```markdown title="~/.config/opencode/agents/docs-writer.md"
---
description: Writes and maintains project documentation
mode: subagent
tools:
bash: false
---
You are a technical writer. Create clear, comprehensive documentation.
Focus on:
- Clear explanations
- Proper structure
- Code examples
- User-friendly language
```
---
### Sikkerhetsrevisor
```markdown title="~/.config/opencode/agents/security-auditor.md"
---
description: Performs security audits and identifies vulnerabilities
mode: subagent
tools:
write: false
edit: false
---
You are a security expert. Focus on identifying potential security issues.
Look for:
- Input validation vulnerabilities
- Authentication and authorization flaws
- Data exposure risks
- Dependency vulnerabilities
- Configuration security issues
```

View File

@@ -0,0 +1,601 @@
---
title: CLI
description: OpenCode CLI alternativer og kommandoer.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
OpenCode CLI starter som standard [TUI](/docs/tui) når den kjøres uten noen argumenter.
```bash
opencode
```
Men den godtar også kommandoer som dokumentert på denne siden. Dette lar deg samhandle med OpenCode programmatisk.
```bash
opencode run "Explain how closures work in JavaScript"
```
---
### tui
Start OpenCode-terminalbrukergrensesnittet.
```bash
opencode [project]
```
#### Flagg
| Flagg | Kort | Beskrivelse |
| ------------ | ----- | ------------------------------------------ |
| `--continue` | `-c` | Fortsett siste økt |
| `--session` | `-s` | Økt ID for å fortsette |
| `--prompt` | | Spør om å bruke |
| `--model` | `-m` | Modell å bruke i form av tilbyder/modell |
| `--agent` | | Agent å bruke |
| `--port` | | Port å lytte på |
| `--hostname` | | Vertsnavn å lytte på |
---
## Kommandoer
OpenCode CLI har også følgende kommandoer.
---
### agent
Administrer agenter for OpenCode.
```bash
opencode agent [command]
```
---
### legg ved
Koble en terminal til en allerede kjørende OpenCode-backend-server startet via `serve` eller `web` kommandoer.
```bash
opencode attach [url]
```
Dette gjør det mulig å bruke TUI med en ekstern OpenCode-backend. For eksempel:
```bash
# Start the backend server for web/mobile access
opencode web --port 4096 --hostname 0.0.0.0
# In another terminal, attach the TUI to the running backend
opencode attach http://10.20.30.40:4096
```
#### Flagg
| Flagg | Kort | Beskrivelse |
| ----------- | ----- | --------------------------------- |
| `--dir` | | Arbeidskatalog for å starte TUI i |
| `--session` | `-s` | Økt ID for å fortsette |
---
#### opprette
Opprett en ny agent med tilpasset konfigurasjon.
```bash
opencode agent create
```
Denne kommandoen vil veilede deg gjennom å lage en ny agent med en tilpasset systemmelding og verktøykonfigurasjon.
---
#### liste
List opp alle tilgjengelige agenter.
```bash
opencode agent list
```
---
### auth
Kommando for å administrere legitimasjon og pålogging for leverandører.
```bash
opencode auth [command]
```
---
#### pålogging
OpenCode drives av leverandørlisten på [Models.dev](https://models.dev), så du kan bruke `opencode auth login` til å konfigurere API-nøkler for enhver leverandør du vil bruke. Dette er lagret i `~/.local/share/opencode/auth.json`.
```bash
opencode auth login
```
Når OpenCode starter opp, laster den leverandørene fra legitimasjonsfilen. Og hvis det er noen nøkler definert i miljøene dine eller en `.env`-fil i prosjektet ditt.
---
#### liste
Viser alle de autentiserte leverandørene som er lagret i legitimasjonsfilen.
```bash
opencode auth list
```
Eller kortversjonen.
```bash
opencode auth ls
```
---
#### logge ut
Logger deg ut av en leverandør ved å fjerne den fra legitimasjonsfilen.
```bash
opencode auth logout
```
---
### github
Administrer GitHub-agenten for depotautomatisering.
```bash
opencode github [command]
```
---
#### installer
Installer GitHub-agenten i depotet ditt.
```bash
opencode github install
```
Dette setter opp den nødvendige GitHub Actions-arbeidsflyten og veileder deg gjennom konfigurasjonsprosessen. [Finn ut mer](/docs/github).
---
#### løp
Kjør GitHub-agenten. Dette brukes vanligvis i GitHub Actions.
```bash
opencode github run
```
##### Flagg
| Flagg | Beskrivelse |
| --------- | -------------------------------------- |
| `--event` | GitHub mock event for å kjøre agenten for |
| `--token` | GitHub personlig tilgangstoken |
---
### mcp
Administrer Model Context Protocol-servere.
```bash
opencode mcp [command]
```
---
#### legg til
Legg til en MCP-server til konfigurasjonen.
```bash
opencode mcp add
```
Denne kommandoen vil veilede deg gjennom å legge til enten en lokal eller ekstern MCP-server.
---
#### liste
Liste alle konfigurerte MCP-servere og deres tilkoblingsstatus.
```bash
opencode mcp list
```
Eller bruk den korte versjonen.
```bash
opencode mcp ls
```
---
#### auth
Autentiser med en OAuth-aktivert MCP-server.
```bash
opencode mcp auth [name]
```
Hvis du ikke oppgir et servernavn, blir du bedt om å velge blant tilgjengelige OAuth-kompatible servere.
Du kan også liste opp OAuth-kompatible servere og deres autentiseringsstatus.
```bash
opencode mcp auth list
```
Eller bruk den korte versjonen.
```bash
opencode mcp auth ls
```
---
#### logge ut
Fjern OAuth-legitimasjon for en MCP-server.
```bash
opencode mcp logout [name]
```
---
#### feilsøking
Feilsøk OAuth-tilkoblingsproblemer for en MCP-server.
```bash
opencode mcp debug <name>
```
---
### modeller
List opp alle tilgjengelige modeller fra konfigurerte leverandører.
```bash
opencode models [provider]
```
Denne kommandoen viser alle modeller som er tilgjengelige på tvers av dine konfigurerte leverandører i formatet `provider/model`.
Dette er nyttig for å finne ut det eksakte modellnavnet som skal brukes i [din konfigurasjon](/docs/config/).
Du kan eventuelt sende en leverandør ID for å filtrere modeller etter den leverandøren.
```bash
opencode models anthropic
```
#### Flagg
| Flagg | Beskrivelse |
| ----------- | ------------------------------------------------------------ |
| `--refresh` | Oppdater modellbufferen fra models.dev |
| `--verbose` | Bruk mer detaljert modellutdata (inkluderer metadata som kostnader) |
Bruk `--refresh`-flagget for å oppdatere den bufrede modelllisten. Dette er nyttig når nye modeller er lagt til en leverandør og du vil se dem i OpenCode.
```bash
opencode models --refresh
```
---
### løp
Kjør opencode i ikke-interaktiv modus ved å sende en melding direkte.
```bash
opencode run [message..]
```
Dette er nyttig for skripting, automatisering eller når du vil ha et raskt svar uten å starte hele TUI. For eksempel.
```bash "opencode run"
opencode run Explain the use of context in Go
```
Du kan også koble til en kjørende `opencode serve`-forekomst for å unngå MCP-tjenerkaldoppstartstider ved hver kjøring:
```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"
```
#### Flagg
| Flagg | Kort | Beskrivelse |
| ------------ | ----- | ------------------------------------------------------------------ |
| `--command` | | Kommandoen for å kjøre, bruk melding for args |
| `--continue` | `-c` | Fortsett siste økt |
| `--session` | `-s` | Økt ID for å fortsette |
| `--share` | | Del økten |
| `--model` | `-m` | Modell å bruke i form av tilbyder/modell |
| `--agent` | | Agent å bruke |
| `--file` | `-f` | Fil(er) som skal legges ved melding |
| `--format` | | Format: standard (formatert) eller json (rå JSON hendelser) |
| `--title` | | Tittel for økten (bruker avkortet ledetekst hvis ingen verdi er oppgitt) |
| `--attach` | | Koble til en åpen kodeserver som kjører (f.eks. http://localhost:4096) |
| `--port` | | Port for den lokale serveren (standard til tilfeldig port) |
---
### server
Start en hodeløs OpenCode-server for API-tilgang. Sjekk ut [server-dokumentene](/docs/server) for hele HTTP-grensesnittet.
```bash
opencode serve
```
Dette starter en HTTP-server som gir API tilgang til OpenCode-funksjonalitet uten TUI-grensesnittet. Sett `OPENCODE_SERVER_PASSWORD` for å aktivere HTTP grunnleggende autentisering (brukernavn er standard til `opencode`).
#### Flagg
| Flagg | Beskrivelse |
| ------------ | ------------------------------------------ |
| `--port` | Port å lytte på |
| `--hostname` | Vertsnavn å lytte på |
| `--mdns` | Aktiver mDNS-oppdagelse |
| `--cors` | Ytterligere nettleseropprinnelse for å tillate CORS |
---
### økt
Administrer OpenCode-økter.
```bash
opencode session [command]
```
---
#### liste
List opp alle OpenCode-økter.
```bash
opencode session list
```
##### Flagg
| Flagg | Kort | Beskrivelse |
| ------------- | ----- | ------------------------------------ |
| `--max-count` | `-n` | Begrens til N siste økter |
| `--format` | | Utdataformat: tabell eller json (tabell) |
---
### statistikk
Vis tokenbruk og kostnadsstatistikk for OpenCode-øktene dine.
```bash
opencode stats
```
#### Flagg
| Flagg | Beskrivelse |
| ----------- | --------------------------------------------------------------------------- |
| `--days` | Vis statistikk for de siste N dagene (hele tiden) |
| `--tools` | Antall verktøy som skal vises (alle) |
| `--models` | Vis oversikt over modellbruk (skjult som standard). Gi et tall for å vise topp N |
| `--project` | Filtrer etter prosjekt (alle prosjekter, tom streng: gjeldende prosjekt) |
---
### eksport
Eksporter øktdata som JSON.
```bash
opencode export [sessionID]
```
Hvis du ikke gir en økt ID, blir du bedt om å velge fra tilgjengelige økter.
---
### import
Importer øktdata fra en JSON-fil eller OpenCode-andel URL.
```bash
opencode import <file>
```
Du kan importere fra en lokal fil eller en OpenCode-andel URL.
```bash
opencode import session.json
opencode import https://opncd.ai/s/abc123
```
---
### web
Start en hodeløs OpenCode-server med et webgrensesnitt.
```bash
opencode web
```
Dette starter en HTTP-server og åpner en nettleser for å få tilgang til OpenCode via et nettgrensesnitt. Sett `OPENCODE_SERVER_PASSWORD` for å aktivere HTTP grunnleggende autentisering (brukernavn er standard til `opencode`).
#### Flagg
| Flagg | Beskrivelse |
| ------------ | ------------------------------------------ |
| `--port` | Port å lytte på |
| `--hostname` | Vertsnavn å lytte på |
| `--mdns` | Aktiver mDNS-oppdagelse |
| `--cors` | Ytterligere nettleseropprinnelse for å tillate CORS |
---
### acp
Start en ACP (Agent Client Protocol) server.
```bash
opencode acp
```
Denne kommandoen starter en ACP-server som kommuniserer via stdin/stdout ved å bruke nd-JSON.
#### Flagg
| Flagg | Beskrivelse |
| ------------ | --------------------- |
| `--cwd` | Arbeidskatalog |
| `--port` | Port å lytte på |
| `--hostname` | Vertsnavn å lytte på |
---
### avinstaller
Avinstaller OpenCode og fjern alle relaterte filer.
```bash
opencode uninstall
```
#### Flagg
| Flagg | Kort | Beskrivelse |
| --------------- | ----- | ------------------------------------------- |
| `--keep-config` | `-c` | Behold konfigurasjonsfiler |
| `--keep-data` | `-d` | Behold øktdata og øyeblikksbilder |
| `--dry-run` | | Vis hva som ville blitt fjernet uten å fjerne |
| `--force` | `-f` | Hopp over bekreftelsesforespørsler |
---
### oppgradering
Oppdaterer opencode til siste versjon eller en spesifikk versjon.
```bash
opencode upgrade [target]
```
For å oppgradere til siste versjon.
```bash
opencode upgrade
```
For å oppgradere til en bestemt versjon.
```bash
opencode upgrade v0.1.48
```
#### Flagg
| Flagg | Kort | Beskrivelse |
| ---------- | ----- | ----------------------------------------------------------------- |
| `--method` | `-m` | Installasjonsmetoden som ble brukt; krølle, npm, pnpm, bolle, brygg |
---
## Globale flagg
Åpenkoden CLI tar følgende globale flagg.
| Flagg | Kort | Beskrivelse |
| -------------- | ----- | ------------------------------------ |
| `--help` | `-h` | Vis hjelp |
| `--version` | `-v` | Utskriftsnummer |
| `--print-logs` | | Skriv ut logger til stderr |
| `--log-level` | | Loggnivå (DEBUG, INFO, WARN, ERROR) |
---
## Miljøvariabler
OpenCode kan konfigureres ved hjelp av miljøvariabler.
| Variabel | Skriv | Beskrivelse |
| ------------------------------------- | ------- | ------------------------------------------------- |
| `OPENCODE_AUTO_SHARE` | boolsk | Del økter automatisk |
| `OPENCODE_GIT_BASH_PATH` | streng | Path to Git Bash kjørbar på Windows |
| `OPENCODE_CONFIG` | streng | Bane til konfigurasjonsfil |
| `OPENCODE_CONFIG_DIR` | streng | Bane til konfigurasjonskatalog |
| `OPENCODE_CONFIG_CONTENT` | streng | Innebygd json-konfigurasjonsinnhold |
| `OPENCODE_DISABLE_AUTOUPDATE` | boolsk | Deaktiver automatiske oppdateringskontroller |
| `OPENCODE_DISABLE_PRUNE` | boolsk | Deaktiver beskjæring av gamle data |
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolsk | Deaktiver automatiske terminaltitteloppdateringer |
| `OPENCODE_PERMISSION` | streng | Innebygd json-tillatelseskonfigurasjon |
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolsk | Deaktiver standard plugins |
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolsk | Deaktiver automatiske LSP servernedlastinger |
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolsk | Aktiver eksperimentelle modeller |
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolsk | Deaktiver automatisk kontekstkomprimering |
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolsk | Deaktiver lesing fra `.claude` (spørsmål + ferdigheter) |
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolsk | Deaktiver lesing `~/.claude/CLAUDE.md` |
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolsk | Deaktiver innlasting av `.claude/skills` |
| `OPENCODE_DISABLE_MODELS_FETCH` | boolsk | Deaktiver henting av modeller fra eksterne kilder |
| `OPENCODE_FAKE_VCS` | streng | Falsk VCS-leverandør for testformål |
| `OPENCODE_DISABLE_FILETIME_CHECK` | boolsk | Deaktiver filtidskontroll for optimalisering |
| `OPENCODE_CLIENT` | streng | Klientidentifikator (standard til `cli`) |
| `OPENCODE_ENABLE_EXA` | boolsk | Aktiver Exa-nettsøkeverktøy |
| `OPENCODE_SERVER_PASSWORD` | streng | Aktiver grunnleggende autentisering for `serve`/`web` |
| `OPENCODE_SERVER_USERNAME` | streng | Overstyr grunnleggende autentiseringsbrukernavn (standard `opencode`) |
| `OPENCODE_MODELS_URL` | streng | Egendefinert URL for henting av modellkonfigurasjon |
---
### Eksperimentell
Disse miljøvariablene muliggjør eksperimentelle funksjoner som kan endres eller fjernes.
| Variabel | Skriv | Beskrivelse |
| ----------------------------------------------- | ------- | --------------------------------------- |
| `OPENCODE_EXPERIMENTAL` | boolsk | Aktiver alle eksperimentelle funksjoner |
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolsk | Aktiver ikonoppdagelse |
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolsk | Deaktiver kopi ved valg i TUI |
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | nummer | Standard tidsavbrudd for bash-kommandoer i ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | nummer | Maks utgangstokener for LLM-svar |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolsk | Aktiver filovervåker for hele dir |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolsk | Aktiver oxfmt formatter |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolsk | Aktiver eksperimentelt LSP-verktøy |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolsk | Deaktiver filovervåking |
| `OPENCODE_EXPERIMENTAL_EXA` | boolsk | Aktiver eksperimentelle Exa-funksjoner |
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolsk | Aktiver eksperimentell LSP-typekontroll |
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolsk | Aktiver eksperimentelle markdown-funksjoner |
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolsk | Aktiver planmodus |

View File

@@ -0,0 +1,323 @@
---
title: Kommandoer
description: Lag egendefinerte kommandoer for repeterende oppgaver.
---
Egendefinerte kommandoer lar deg spesifisere en ledetekst du vil kjøre når kommandoen utføres i TUI.
```bash frame="none"
/my-command
```
Egendefinerte kommandoer kommer i tillegg til de innebygde kommandoene som `/init`, `/undo`, `/redo`, `/share`, `/help`. [Finn ut mer](/docs/tui#commands).
---
## Lag kommandofiler
Lag nedmerkingsfiler i `commands/`-katalogen for å definere egendefinerte kommandoer.
Opprett `.opencode/commands/test.md`:
```md title=".opencode/commands/test.md"
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---
Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
```
Frontmatter definerer kommandoegenskaper. Innholdet blir malen.
Bruk kommandoen ved å skrive `/` etterfulgt av kommandonavnet.
```bash frame="none"
"/test"
```
---
## Konfigurer
Du kan legge til egendefinerte kommandoer gjennom OpenCode-konfigurasjonen eller ved å lage markdown-filer i katalogen `commands/`.
---
### JSON
Bruk alternativet `command` i OpenCode [config](/docs/config):
```json title="opencode.jsonc" {4-12}
{
"$schema": "https://opencode.ai/config.json",
"command": {
// This becomes the name of the command
"test": {
// This is the prompt that will be sent to the LLM
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
// This is shown as the description in the TUI
"description": "Run tests with coverage",
"agent": "build",
"model": "anthropic/claude-3-5-sonnet-20241022"
}
}
}
```
Nå kan du kjøre denne kommandoen i TUI:
```bash frame="none"
/test
```
---
### Markdown
Du kan også definere kommandoer ved å bruke markdown-filer. Plasser dem i:
- Globalt: `~/.config/opencode/commands/`
- Per prosjekt: `.opencode/commands/`
```markdown title="~/.config/opencode/commands/test.md"
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---
Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
```
Markdown-filnavnet blir kommandonavnet. For eksempel lar `test.md`
du løper:
```bash frame="none"
/test
```
---
## Spør config
Spørringene for de egendefinerte kommandoene støtter flere spesielle plassholdere og syntaks.
---
### Argumenter
Send argumenter til kommandoer ved å bruke plassholderen `$ARGUMENTS`.
```md title=".opencode/commands/component.md"
---
description: Create a new component
---
Create a new React component named $ARGUMENTS with TypeScript support.
Include proper typing and basic structure.
```
Kjør kommandoen med argumenter:
```bash frame="none"
/component Button
```
Og `$ARGUMENTS` vil bli erstattet med `Button`.
Du kan også få tilgang til individuelle argumenter ved å bruke posisjonelle parametere:
- `$1` - Første argument
- `$2` - Andre argument
- `$3` - Tredje argument
- Og så videre...
For eksempel:
```md title=".opencode/commands/create-file.md"
---
description: Create a new file with content
---
Create a file named $1 in the directory $2
with the following content: $3
```
Kjør kommandoen:
```bash frame="none"
/create-file config.json src "{ \"key\": \"value\" }"
```
Dette erstatter:
- `$1` med `config.json`
- `$2` med `src`
- `$3` med `{ "key": "value" }`
---
### Shell-utgang
Bruk _!`command`_ for å injisere [bash-kommando](/docs/tui#bash-commands)-utdata i ledeteksten.
For eksempel, for å lage en egendefinert kommando som analyserer testdekning:
```md title=".opencode/commands/analyze-coverage.md"
---
description: Analyze test coverage
---
Here are the current test results:
!`npm test`
Based on these results, suggest improvements to increase coverage.
```
Eller for å se gjennom nylige endringer:
```md title=".opencode/commands/review-changes.md"
---
description: Review recent changes
---
Recent git commits:
!`git log --oneline -10`
Review these changes and suggest any improvements.
```
Kommandoer kjøres i prosjektets rotkatalog og utdataene deres blir en del av ledeteksten.
---
### Filreferanser
Inkluder filer i kommandoen din ved å bruke `@` etterfulgt av filnavnet.
```md title=".opencode/commands/review-component.md"
---
description: Review component
---
Review the component in @src/components/Button.tsx.
Check for performance issues and suggest improvements.
```
Filinnholdet blir automatisk inkludert i ledeteksten.
---
## Alternativer
La oss se på konfigurasjonsalternativene i detalj.
---
### Mal
Alternativet `template` definerer ledeteksten som vil bli sendt til LLM når kommandoen utføres.
```json title="opencode.json"
{
"command": {
"test": {
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
}
}
}
```
Dette er et **obligatorisk** konfigurasjonsalternativ.
---
### Beskrivelse
Bruk alternativet `description` for å gi en kort beskrivelse av hva kommandoen gjør.
```json title="opencode.json"
{
"command": {
"test": {
"description": "Run tests with coverage"
}
}
}
```
Dette vises som beskrivelsen i TUI når du skriver inn kommandoen.
---
### Agent
Bruk `agent`-konfigurasjonen for å spesifisere hvilken [agent](/docs/agents) som skal utføre denne kommandoen.
Hvis dette er en [subagent](/docs/agents/#subagents), vil kommandoen utløse en subagent påkalling som standard.
For å deaktivere denne virkemåten, sett `subtask` til `false`.
```json title="opencode.json"
{
"command": {
"review": {
"agent": "plan"
}
}
}
```
Dette er et **valgfritt** konfigurasjonsalternativ. Hvis det ikke er spesifisert, brukes din nåværende agent som standard.
---
### Deloppgave
Bruk `subtask` boolsk for å tvinge kommandoen til å utløse en [subagent](/docs/agents/#subagents) påkalling.
Dette er nyttig hvis du vil at kommandoen ikke skal forurense din primære kontekst og vil **tvinge** agenten til å fungere som en underagent,
selv om `mode` er satt til `primary` på [agent](/docs/agents) konfigurasjonen.
```json title="opencode.json"
{
"command": {
"analyze": {
"subtask": true
}
}
}
```
Dette er et **valgfritt** konfigurasjonsalternativ.
---
### Modell
Bruk `model`-konfigurasjonen for å overstyre standardmodellen for denne kommandoen.
```json title="opencode.json"
{
"command": {
"analyze": {
"model": "anthropic/claude-3-5-sonnet-20241022"
}
}
}
```
Dette er et **valgfritt** konfigurasjonsalternativ.
---
## Innebygd
opencode inkluderer flere innebygde kommandoer som `/init`, `/undo`, `/redo`, `/share`, `/help`; [finn ut mer](/docs/tui#commands).
:::note
Egendefinerte kommandoer kan overstyre innebygde kommandoer.
:::
Hvis du definerer en egendefinert kommando med samme navn, vil den overstyre den innebygde kommandoen.

View File

@@ -0,0 +1,685 @@
---
title: Konfig
description: Ved å bruke OpenCode JSON-konfigurasjonen.
---
Du kan konfigurere OpenCode ved å bruke en JSON konfigurasjonsfil.
---
## Format
OpenCode støtter både **JSON** og **JSONC** (JSON med kommentarer) formater.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
// Theme configuration
"theme": "opencode",
"model": "anthropic/claude-sonnet-4-5",
"autoupdate": true,
}
```
---
## Steder
Du kan plassere konfigurasjonen på et par forskjellige steder, og de har en
annen rekkefølge.
:::note
Konfigurasjonsfiler er **slått sammen**, ikke erstattet.
:::
Konfigurasjonsfiler slås sammen, ikke erstattes. Innstillinger fra følgende konfigurasjonsplasseringer kombineres. Senere konfigurasjoner overstyrer tidligere kun for motstridende nøkler. Ikke-motstridende innstillinger fra alle konfigurasjoner er bevart.
For eksempel, hvis dine globale konfigurasjonssett `theme: "opencode"` og `autoupdate: true`, og prosjektkonfigurasjonen setter `model: "anthropic/claude-sonnet-4-5"`, vil den endelige konfigurasjonen inkludere alle tre innstillingene.
---
### Forrangsrekkefølge
Konfigurasjonskilder lastes inn i denne rekkefølgen (senere kilder overstyrer tidligere):
1. **Ekstern konfig** (fra `.well-known/opencode`) - organisasjonsstandarder
2. **Global konfig** (`~/.config/opencode/opencode.json`) - brukerinnstillinger
3. **Egendefinert konfigurasjon** (`OPENCODE_CONFIG` env var) - egendefinerte overstyringer
4. **Prosjektkonfigurasjon** (`opencode.json` i prosjekt) - prosjektspesifikke innstillinger
5. **`.opencode` kataloger** - agenter, kommandoer, plugins
6. **Inline config** (`OPENCODE_CONFIG_CONTENT` env var) - kjøretidsoverstyringer
Dette betyr at prosjektkonfigurasjoner kan overstyre globale standardinnstillinger, og globale konfigurasjoner kan overstyre eksterne organisasjonsstandarder.
:::note
`.opencode` og `~/.config/opencode` katalogene bruker **flertallsnavn** for underkataloger: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` og `themes/`. Enkeltnavn (f.eks. `agent/`) støttes også for bakoverkompatibilitet.
:::
---
### Fjernkontroll
Organisasjoner kan gi standardkonfigurasjon via `.well-known/opencode`-endepunktet. Dette hentes automatisk når du autentiserer med en leverandør som støtter det.
Ekstern konfigurasjon lastes først, og fungerer som basislaget. Alle andre konfigurasjonskilder (global, prosjekt) kan overstyre disse standardinnstillingene.
For eksempel, hvis organisasjonen din tilbyr MCP servere som er deaktivert som standard:
```json title="Remote config from .well-known/opencode"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}
```
Du kan aktivere spesifikke servere i din lokale konfigurasjon:
```json title="opencode.json"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
---
### Globalt
Plasser din globale OpenCode-konfigurasjon i `~/.config/opencode/opencode.json`. Bruk global konfigurasjon for brukeromfattende preferanser som temaer, leverandører eller nøkkelbindinger.
Global konfigurasjon overstyrer eksterne organisasjonsstandarder.
---
### Per prosjekt
Legg til `opencode.json` i prosjektroten din. Project config har den høyeste prioritet blant standard config-filer - den overstyrer både globale og eksterne konfigurasjoner.
:::tupp
Plasser prosjektspesifikk konfigurasjon i roten til prosjektet ditt.
:::
Når OpenCode starter opp, ser den etter en konfigurasjonsfil i gjeldende katalog eller går opp til nærmeste Git-katalog.
Dette er også trygt å bli sjekket inn i Git og bruker samme skjema som det globale.
---
### Egendefinert bane
Spesifiser en tilpasset konfigurasjonsfilbane ved å bruke miljøvariabelen `OPENCODE_CONFIG`.
```bash
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"
```
Egendefinert konfigurasjon lastes inn mellom globale og prosjektkonfigurasjoner i prioritetsrekkefølge.
---
### Egendefinert katalog
Spesifiser en tilpasset konfigurasjonskatalog ved å bruke `OPENCODE_CONFIG_DIR`
miljøvariabel. Denne katalogen vil bli søkt etter agenter, kommandoer,
moduser og plugins akkurat som standard `.opencode` katalog, og bør
følge samme struktur.
```bash
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"
```
Den egendefinerte katalogen lastes inn etter den globale konfigurasjonen og `.opencode`-katalogene, slik at den **kan overstyre** innstillingene deres.
---
## Skjema
Konfigurasjonsfilen har et skjema som er definert i [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
Redaktøren din skal kunne validere og autofullføre basert på skjemaet.
---
### TUI
Du kan konfigurere TUI-spesifikke innstillinger gjennom alternativet `tui`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}
}
```
Tilgjengelige alternativer:
- `scroll_acceleration.enabled` - Aktiver rulleakselerasjon i macOS-stil. **Tar forrang over `scroll_speed`.**
- `scroll_speed` - Egendefinert rullehastighetsmultiplikator (standard: `3`, minimum: `1`). Ignorert hvis `scroll_acceleration.enabled` er `true`.
- `diff_style` - Kontroller diff-gjengivelse. `"auto"` tilpasser seg terminalbredden, `"stacked"` viser alltid en kolonne.
[Les mer om bruk av TUI her](/docs/tui).
---
### Server
Du kan konfigurere serverinnstillinger for kommandoene `opencode serve` og `opencode web` gjennom alternativet `server`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"mdnsDomain": "myproject.local",
"cors": ["http://localhost:5173"]
}
}
```
Tilgjengelige alternativer:
- `port` - Port for å lytte på.
- `hostname` - Vertsnavn å lytte på. Når `mdns` er aktivert og ingen vertsnavn er angitt, er standard `0.0.0.0`.
- `mdns` - Aktiver mDNS-tjenesteoppdagelse. Dette lar andre enheter på nettverket oppdage OpenCode-serveren din.
- `mdnsDomain` - Egendefinert domenenavn for mDNS-tjeneste. Standard er `opencode.local`. Nyttig for å kjøre flere forekomster på samme nettverk.
- `cors` - Ytterligere opprinnelser for å tillate CORS når du bruker HTTP-serveren fra en nettleserbasert klient. Verdiene må være fullstendige opprinnelser (skjema + vert + valgfri port), f.eks. `https://app.example.com`.
[Les mer om serveren her](/docs/server).
---
### Verktøy
Du kan administrere verktøyene en LLM kan bruke gjennom alternativet `tools`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}
```
[Les mer om verktøy her](/docs/tools).
---
### Modeller
Du kan konfigurere leverandørene og modellene du vil bruke i OpenCode-konfigurasjonen gjennom alternativene `provider`, `model` og `small_model`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {},
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5"
}
```
Alternativet `small_model` konfigurerer en egen modell for lette oppgaver som tittelgenerering. Som standard prøver OpenCode å bruke en billigere modell hvis en er tilgjengelig fra leverandøren din, ellers faller den tilbake til hovedmodellen din.
Leverandøralternativer kan inkludere `timeout` og `setCacheKey`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"setCacheKey": true
}
}
}
}
```
- `timeout` - Be om tidsavbrudd i millisekunder (standard: 300 000). Sett til `false` for å deaktivere.
- `setCacheKey` - Sørg for at en hurtigbuffernøkkel alltid er angitt for utpekt leverandør.
Du kan også konfigurere [lokale modeller](/docs/models#local). [Finn ut mer](/docs/models).
---
#### Leverandørspesifikke alternativer
Noen leverandører støtter flere konfigurasjonsalternativer utover de generiske innstillingene `timeout` og `apiKey`.
##### Amazonas grunnfjell
Amazon Bedrock støtter AWS-spesifikk konfigurasjon:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"amazon-bedrock": {
"options": {
"region": "us-east-1",
"profile": "my-aws-profile",
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
}
}
}
}
```
- `region` - AWS region for grunnfjell (standard til `AWS_REGION` env var eller `us-east-1`)
- `profile` - AWS navngitt profil fra `~/.aws/credentials` (standard til `AWS_PROFILE` env var)
- `endpoint` - Egendefinert endepunkt URL for VPC endepunkter. Dette er et alias for det generiske `baseURL`-alternativet som bruker AWS-spesifikk terminologi. Hvis begge er spesifisert, har `endpoint` forrang.
:::note
Bærer-tokens (`AWS_BEARER_TOKEN_BEDROCK` eller `/connect`) har forrang over profilbasert autentisering. Se [godkjenningsprioritet](/docs/providers#authentication-precedence) for detaljer.
:::
[Les mer om konfigurasjon av Amazons grunnfjell](/docs/providers#amazon-bedrock).
---
### Temaer
Du kan konfigurere temaet du vil bruke i OpenCode-konfigurasjonen gjennom alternativet `theme`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"theme": ""
}
```
[Les mer her](/docs/themes).
---
### Agenter
Du kan konfigurere spesialiserte agenter for spesifikke oppgaver gjennom alternativet `agent`.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
// Disable file modification tools for review-only agent
"write": false,
"edit": false,
},
},
},
}
```
Du kan også definere agenter ved å bruke markdown-filer i `~/.config/opencode/agents/` eller `.opencode/agents/`. [Les mer her](/docs/agents).
---
### Standard agent
Du kan angi standard agent ved å bruke alternativet `default_agent`. Dette bestemmer hvilken agent som brukes når ingen er eksplisitt spesifisert.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}
```
Standardagenten må være en primæragent (ikke en underagent). Dette kan være en innebygd agent som `"build"` eller `"plan"`, eller en [egendefinert agent](/docs/agents) du har definert. Hvis den angitte agenten ikke eksisterer eller er en subagent, vil OpenCode falle tilbake til `"build"` med en advarsel.
Denne innstillingen gjelder for alle grensesnitt: TUI, CLI (`opencode run`), skrivebordsapp og GitHub Action.
---
### Deling
Du kan konfigurere [share](/docs/share)-funksjonen gjennom alternativet `share`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}
```
Dette krever:
- `"manual"` - Tillat manuell deling via kommandoer (standard)
- `"auto"` - Del nye samtaler automatisk
- `"disabled"` - Deaktiver deling helt
Som standard er deling satt til manuell modus der du eksplisitt må dele samtaler ved å bruke kommandoen `/share`.
---
### Kommandoer
Du kan konfigurere egendefinerte kommandoer for repeterende oppgaver gjennom alternativet `command`.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"command": {
"test": {
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
"description": "Run tests with coverage",
"agent": "build",
"model": "anthropic/claude-haiku-4-5",
},
"component": {
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
"description": "Create a new component",
},
},
}
```
Du kan også definere kommandoer ved å bruke markdown-filer i `~/.config/opencode/commands/` eller `.opencode/commands/`. [Les mer her](/docs/commands).
---
### Nøkkelbindinger
Du kan tilpasse nøkkelbindingene dine gjennom alternativet `keybinds`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {}
}
```
[Les mer her](/docs/keybinds).
---
### Autooppdatering
OpenCode vil automatisk laste ned eventuelle nye oppdateringer når den starter opp. Du kan deaktivere dette med alternativet `autoupdate`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}
```
Hvis du ikke vil ha oppdateringer, men ønsker å bli varslet når en ny versjon er tilgjengelig, sett `autoupdate` til `"notify"`.
Legg merke til at dette bare fungerer hvis det ikke ble installert med en pakkebehandling som Homebrew.
---
### Formatere
Du kan konfigurere kodeformatere gjennom alternativet `formatter`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
},
"custom-prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
}
}
}
```
[Les mer om formattere her](/docs/formatters).
---
### Tillatelser
Som standard **tillater opencode alle operasjoner** uten å kreve eksplisitt godkjenning. Du kan endre dette ved å bruke alternativet `permission`.
For å sikre at verktøyene `edit` og `bash` krever brukergodkjenning:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}
```
[Les mer om tillatelser her](/docs/permissions).
---
### Komprimering
Du kan kontrollere atferden for kontekstkomprimering gjennom alternativet `compaction`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true
}
}
```
- `auto` - Komprimer økten automatisk når konteksten er full (standard: `true`).
- `prune` - Fjern gamle verktøyutganger for å lagre tokens (standard: `true`).
---
### Overvåker
Du kan konfigurere ignoreringsmønstre for filovervåking gjennom alternativet `watcher`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}
```
Mønstre følger glob-syntaks. Bruk dette for å ekskludere støyende kataloger fra filvisning.
---
### MCP servere
Du kan konfigurere MCP-servere du vil bruke gjennom alternativet `mcp`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}
```
[Les mer her](/docs/mcp-servers).
---
### Plugins
[Plugins](/docs/plugins) utvider OpenCode med tilpassede verktøy, kroker og integrasjoner.
Plasser plugin-filer i `.opencode/plugins/` eller `~/.config/opencode/plugins/`. Du kan også laste inn plugins fra npm gjennom alternativet `plugin`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}
```
[Les mer her](/docs/plugins).
---
### Instruksjoner
Du kan konfigurere instruksjonene for modellen du bruker gjennom alternativet `instructions`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
Dette krever en rekke baner og globmønstre til instruksjonsfiler. [Les mer
om regler her](/docs/rules).
---
### Deaktiverte leverandører
Du kan deaktivere leverandører som lastes automatisk gjennom alternativet `disabled_providers`. Dette er nyttig når du vil forhindre at enkelte leverandører lastes inn selv om deres legitimasjon er tilgjengelig.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}
```
:::note
`disabled_providers` har prioritet over `enabled_providers`.
:::
Alternativet `disabled_providers` godtar en rekke leverandør-ID-er. Når en leverandør er deaktivert:
- Den blir ikke lastet selv om miljøvariabler er angitt.
- Den vil ikke bli lastet inn selv om API-nøkler er konfigurert gjennom `/connect`-kommandoen.
- Leverandørens modeller vises ikke i modellvalglisten.
---
### Aktiverte leverandører
Du kan spesifisere en godkjenningsliste over leverandører gjennom alternativet `enabled_providers`. Når angitt, vil bare de angitte leverandørene være aktivert og alle andre vil bli ignorert.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}
```
Dette er nyttig når du vil begrense OpenCode til kun å bruke spesifikke leverandører i stedet for å deaktivere dem én etter én.
:::note
`disabled_providers` har prioritet over `enabled_providers`.
:::
Hvis en leverandør vises i både `enabled_providers` og `disabled_providers`, har `disabled_providers` prioritet for bakoverkompatibilitet.
---
### Eksperimentell
`experimental`-nøkkelen inneholder alternativer som er under aktiv utvikling.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}
```
:::forsiktighet
Eksperimentelle alternativer er ikke stabile. De kan endres eller fjernes uten varsel.
:::
---
## Variabler
Du kan bruke variabelerstatning i konfigurasjonsfilene dine for å referere til miljøvariabler og filinnhold.
---
### Env vars
Bruk `{env:VARIABLE_NAME}` for å erstatte miljøvariabler:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "{env:OPENCODE_MODEL}",
"provider": {
"anthropic": {
"models": {},
"options": {
"apiKey": "{env:ANTHROPIC_API_KEY}"
}
}
}
}
```
Hvis miljøvariabelen ikke er angitt, vil den bli erstattet med en tom streng.
---
### Filer
Bruk `{file:path/to/file}` for å erstatte innholdet i en fil:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}
```
Filbaner kan være:
- I forhold til konfigurasjonsfilkatalogen
- Eller absolutte baner som begynner med `/` eller `~`
Disse er nyttige for:
- Oppbevaring av sensitive data som API-nøkler i separate filer.
- Inkludert store instruksjonsfiler uten å rote konfigurasjonen din.
- Deling av vanlige konfigurasjonsbiter på tvers av flere konfigurasjonsfiler.

View File

@@ -0,0 +1,170 @@
---
title: Egendefinerte verktøy
description: Lag verktøy som LLM kan kalle inn opencode.
---
Egendefinerte verktøy er funksjoner du oppretter som LLM kan ringe under samtaler. De fungerer sammen med opencodes [innebygde verktøy](/docs/tools) som `read`, `write` og `bash`.
---
## Opprette et verktøy
Verktøy er definert som **TypeScript**- eller **JavaScript**-filer. Verktøydefinisjonen kan imidlertid påkalle skript skrevet på **alle språk** - TypeScript eller JavaScript brukes bare for selve verktøydefinisjonen.
---
### Plassering
De kan defineres:
- Lokalt ved å plassere dem i `.opencode/tools/`-katalogen til prosjektet ditt.
- Eller globalt, ved å plassere dem i `~/.config/opencode/tools/`.
---
### Struktur
Den enkleste måten å lage verktøy på er å bruke `tool()`-hjelperen som gir typesikkerhet og validering.
```ts title=".opencode/tools/database.ts" {1}
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Query the project database",
args: {
query: tool.schema.string().describe("SQL query to execute"),
},
async execute(args) {
// Your database logic here
return `Executed query: ${args.query}`
},
})
```
**filnavnet** blir **verktøynavnet**. Ovennevnte oppretter et `database`-verktøy.
---
#### Flere verktøy per fil
Du kan også eksportere flere verktøy fra en enkelt fil. Hver eksport blir **et eget verktøy** med navnet **`<filename>_<exportname>`**:
```ts title=".opencode/tools/math.ts"
import { tool } from "@opencode-ai/plugin"
export const add = tool({
description: "Add two numbers",
args: {
a: tool.schema.number().describe("First number"),
b: tool.schema.number().describe("Second number"),
},
async execute(args) {
return args.a + args.b
},
})
export const multiply = tool({
description: "Multiply two numbers",
args: {
a: tool.schema.number().describe("First number"),
b: tool.schema.number().describe("Second number"),
},
async execute(args) {
return args.a * args.b
},
})
```
Dette lager to verktøy: `math_add` og `math_multiply`.
---
### Argumenter
Du kan bruke `tool.schema`, som bare er [Zod](https://zod.dev), for å definere argumenttyper.
```ts "tool.schema"
args: {
query: tool.schema.string().describe("SQL query to execute")
}
```
Du kan også importere [Zod](https://zod.dev) direkte og returnere et vanlig objekt:
```ts {6}
import { z } from "zod"
export default {
description: "Tool description",
args: {
param: z.string().describe("Parameter description"),
},
async execute(args, context) {
// Tool implementation
return "result"
},
}
```
---
### Kontekst
Verktøy mottar kontekst om gjeldende økt:
```ts title=".opencode/tools/project.ts" {8}
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Get project information",
args: {},
async execute(args, context) {
// Access context information
const { agent, sessionID, messageID, directory, worktree } = context
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
},
})
```
Bruk `context.directory` for øktens arbeidskatalog.
Bruk `context.worktree` for git-arbeidstreroten.
---
## Eksempler
### Skriv et verktøy i Python
Du kan skrive verktøyene dine på hvilket som helst språk du vil. Her er et eksempel som legger til to tall ved hjelp av Python.
Først lager du verktøyet som et Python-skript:
```python title=".opencode/tools/add.py"
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)
```
Lag deretter verktøydefinisjonen som påkaller den:
```ts title=".opencode/tools/python-add.ts" {10}
import { tool } from "@opencode-ai/plugin"
import path from "path"
export default tool({
description: "Add two numbers using Python",
args: {
a: tool.schema.number().describe("First number"),
b: tool.schema.number().describe("Second number"),
},
async execute(args, context) {
const script = path.join(context.worktree, ".opencode/tools/add.py")
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
return result.trim()
},
})
```
Her bruker vi [`Bun.$`](https://bun.com/docs/runtime/shell)-verktøyet for å kjøre Python-skriptet.

View File

@@ -0,0 +1,76 @@
---
title: Økosystem
description: Prosjekter og integrasjoner bygget med OpenCode.
---
En samling fellesskapsprosjekter bygget på OpenCode.
:::note
Vil du legge til ditt OpenCode-relaterte prosjekt til denne listen? Send inn en PR.
:::
Du kan også sjekke ut [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) og [opencode.cafe](https://opencode.cafe), et fellesskap som samler økosystemet og fellesskapet.
---
## Plugins
| Navn | Beskrivelse |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | Kjør OpenCode-økter automatisk i isolerte Daytona-sandkasser med git-synkronisering og live forhåndsvisninger |
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injiser automatisk Helicone-økthoder for forespørselsgruppering |
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Auto-injiser TypeScript/Svelte-typer i fillesninger med oppslagsverktøy |
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Bruk ChatGPT Plus/Pro-abonnementet ditt i stedet for API kreditter |
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Bruk din eksisterende Gemini-plan i stedet for API-fakturering |
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Bruk Antigravitys gratis modeller i stedet for API fakturering |
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Multi-branch devcontainer-isolasjon med grunne kloner og automatisk tildelte porter |
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Antigravity OAuth-plugin, med støtte for Google Søk og mer robust API-håndtering |
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimaliser bruken av token ved å beskjære utdaterte verktøy |
| [opencode-websearch-sitert](https://github.com/ghoulr/opencode-websearch-cited.git) | Legg til innebygd nettsøk-støtte for støttede leverandører med Googles jordet stil |
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Gjør det mulig for AI-agenter å kjøre bakgrunnsprosesser i en PTY, sende interaktive input til dem. |
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instruksjoner for ikke-interaktive skallkommandoer - forhindrer henger fra TTY-avhengige operasjoner |
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Spor OpenCode-bruk med Wakatime |
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Rydd opp avslagstabeller produsert av LLMs |
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | 10 ganger raskere koderedigering med Morph Fast Apply API og late redigeringsmarkører |
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Bakgrunnsagenter, forhåndsbygde LSP/AST/MCP verktøy, kurerte agenter, Claude Code-kompatibel |
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Skrivebordsvarsler og lydvarsler for OpenCode-økter |
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Skrivebordsvarsler og lydvarsler for tillatelse, fullføring og feilhendelser |
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | AI-drevet automatisk Zellij-sesjonsnavn basert på OpenCode-kontekst |
| [åpenkode-dyktig](https://github.com/zenobi-us/opencode-skillful) | Tillat OpenCode-agenter til late load-meldinger på forespørsel med ferdighetsoppdagelse og injeksjon |
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Vedvarende minne på tvers av økter ved hjelp av Supermemory |
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktiv plangjennomgang med visuell merknad og privat/offline deling |
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Utvid opencode /kommandoer til et kraftig orkestreringssystem med granulær flytkontroll |
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planlegg gjentakende jobber ved hjelp av launchd (Mac) eller systemd (Linux) med cron-syntaks |
| [mikokode](https://github.com/vtemian/micode) | Strukturert brainstorm → Plan → Implementer arbeidsflyt med øktkontinuitet |
| [oktto](https://github.com/vtemian/octto) | Interaktiv nettleser UI for AI idédugnad med flerspørsmålsskjemaer |
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Claude Bakgrunnsagenter i kodestil med asynkrondelegering og kontekstutholdenhet |
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Innfødte OS-varsler for OpenCode vet når oppgaver fullføres |
| [opencode-arbeidsområde](https://github.com/kdcokenny/opencode-workspace) | Medfølgende multi-agent orkestreringssele 16 komponenter, én installasjon |
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Nullfriksjon git-arbeidstre for OpenCode |
---
## Prosjekter
| Navn | Beskrivelse |
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| [kimaki](https://github.com/remorses/kimaki) | Discord-bot for å kontrollere OpenCode-økter, bygget på SDK |
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim-plugin for redaktørbevisste meldinger, bygget på API |
| [portal](https://github.com/hosenur/portal) | Mobile-first web UI for OpenCode over Tailscale/VPN |
| [opencode plugin-mal](https://github.com/zenobi-us/opencode-plugin-template/) | Mal for å bygge OpenCode-plugins |
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim-grensesnitt for opencode - en terminalbasert AI-kodingsagent |
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK leverandør for bruk av OpenCode via @opencode-ai/sdk |
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web-/skrivebordsapp og VS kodeutvidelse for OpenCode |
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian-plugin som bygger inn OpenCode i Obsidians UI |
| [OpenWork](https://github.com/different-ai/openwork) | Et åpen kildekode-alternativ til Claude Cowork, drevet av OpenCode |
| [ocx](https://github.com/kdcokenny/ocx) | OpenCode utvidelsesbehandler med bærbare, isolerte profiler. |
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop, Web, Mobile og Remote Client App for OpenCode |
---
## Agenter
| Navn | Beskrivelse |
| ----------------------------------------------------------------- | ------------------------------------------------------------ |
| [Agentic](https://github.com/Cluster444/agentic) | Modulære AI agenter og kommandoer for strukturert utvikling |
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfigurasjoner, meldinger, agenter og plugins for forbedrede arbeidsflyter |

View File

@@ -0,0 +1,170 @@
---
title: Enterprise
description: Sikker bruk av OpenCode i din organisasjon.
---
import config from "../../../../config.mjs"
export const email = `mailto:${config.email}`
OpenCode Enterprise er for organisasjoner som ønsker å sikre at deres kode og data aldri forlater deres infrastruktur. Den kan gjøre dette ved å bruke en sentralisert konfigurasjon som integreres med din SSO og interne AI gateway.
:::note
OpenCode lagrer ingen av koden eller kontekstdataene dine.
:::
For å komme i gang med OpenCode Enterprise:
1. Gjør en prøveversjon internt med teamet ditt.
2. **<a href={email}>Kontakt oss</a>** for å diskutere priser og implementeringsalternativer.
---
## Prøve
OpenCode er åpen kildekode og lagrer ingen av koden eller kontekstdataene dine, så utviklerne dine kan ganske enkelt [komme i gang](/docs/) og utføre en prøveversjon.
---
### Datahåndtering
**OpenCode lagrer ikke koden eller kontekstdataene dine.** All behandling skjer lokalt eller gjennom direkte API-anrop til AI-leverandøren din.
Dette betyr at så lenge du bruker en leverandør du stoler på, eller en intern
AI gateway, kan du bruke OpenCode sikkert.
Det eneste forbeholdet her er den valgfrie `/share`-funksjonen.
---
#### Deler samtaler
Hvis en bruker aktiverer funksjonen `/share`, sendes samtalen og dataene knyttet til den til tjenesten vi bruker til å være vert for disse delesidene på opencode.ai.
Dataene leveres for øyeblikket gjennom vårt CDNs edge-nettverk, og bufres på kanten nær brukerne dine.
Vi anbefaler at du deaktiverer dette for prøveversjonen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled"
}
```
[Finn ut mer om deling](/docs/share).
---
### Kodeeierskap
**Du eier all kode produsert av OpenCode.** Det er ingen lisensieringsbegrensninger eller eierskapskrav.
---
## Priser
Vi bruker en per-sete-modell for OpenCode Enterprise. Hvis du har din egen LLM-gateway, tar vi ikke betalt for tokens som brukes. For mer informasjon om priser og implementeringsalternativer, **<a href={email}>kontakt oss</a>**.
---
## Implementering
Når du har fullført prøveversjonen og du er klar til å bruke OpenCode på
organisasjonen din, kan du **<a href={email}>kontakte oss</a>** for å diskutere
prissetting og implementeringsalternativer.
---
### Sentral konfig
Vi kan sette opp OpenCode for å bruke en enkelt sentral konfigurasjon for hele organisasjonen din.
Denne sentraliserte konfigurasjonen kan integreres med SSO-leverandøren din og sikrer at alle brukere kun får tilgang til din interne AI-gateway.
---
### SSO integrasjon
Gjennom den sentrale konfigurasjonen kan OpenCode integreres med organisasjonens SSO-leverandør for autentisering.
Dette lar OpenCode få legitimasjon for din interne AI-gateway gjennom ditt eksisterende identitetsadministrasjonssystem.
---
### Intern AI gateway
Med den sentrale konfigurasjonen kan OpenCode også konfigureres til kun å bruke din interne AI-gateway.
Du kan også deaktivere alle andre AI-leverandører, og sikre at alle forespørsler går gjennom organisasjonens godkjente infrastruktur.
---
### Selvhosting
Selv om vi anbefaler å deaktivere delingssidene for å sikre at dataene dine aldri forsvinner
organisasjonen din, kan vi også hjelpe deg med å være vert for dem på din infrastruktur.
Dette er nå på veikartet vårt. Hvis du er interessert, **<a href={email}>gi oss beskjed</a>**.
---
## FAQ
<details>
<summary>What is OpenCode Enterprise?</summary>
OpenCode Enterprise er for organisasjoner som ønsker å sikre at deres kode og data aldri forlater deres infrastruktur. Den kan gjøre dette ved å bruke en sentralisert konfigurasjon som integreres med din SSO og interne AI gateway.
</details>
<details>
<summary>How do I get started with OpenCode Enterprise?</summary>
Bare start med en intern prøveversjon med teamet ditt. OpenCode lagrer som standard ikke koden eller kontekstdataene dine, noe som gjør det enkelt å komme i gang.
Så **<a href={email}>kontakt oss</a>** for å diskutere priser og implementeringsalternativer.
</details>
<details>
<summary>How does enterprise pricing work?</summary>
Vi tilbyr bedriftspriser per sete. Hvis du har din egen LLM-gateway, tar vi ikke betalt for tokens som brukes. For ytterligere detaljer, **<a href={email}>kontakt oss</a>** for et tilpasset tilbud basert på organisasjonens behov.
</details>
<details>
<summary>Is my data secure with OpenCode Enterprise?</summary>
Ja. OpenCode lagrer ikke koden eller kontekstdataene dine. All behandling skjer lokalt eller gjennom direkte API-anrop til AI-leverandøren din. Med sentral konfigurasjon og SSO-integrasjon forblir dataene dine sikre i organisasjonens infrastruktur.
</details>
<details>
<summary>Can we use our own private NPM registry?</summary>
OpenCode støtter private npm-registre gjennom Buns opprinnelige `.npmrc`-filstøtte. Hvis organisasjonen din bruker et privat register, som JFrog Artifactory, Nexus eller lignende, sørg for at utviklerne er autentisert før du kjører OpenCode.
Slik setter du opp autentisering med ditt private register:
```bash
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
```
Dette oppretter `~/.npmrc` med autentiseringsdetaljer. OpenCode vil automatisk
plukke opp dette.
:::forsiktighet
Du må være logget inn i det private registeret før du kjører OpenCode.
:::
Alternativt kan du konfigurere en `.npmrc`-fil manuelt:
```bash title="~/.npmrc"
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
```
Utviklere må være logget på det private registeret før de kjører OpenCode for å sikre at pakker kan installeres fra bedriftsregisteret.
</details>

View File

@@ -0,0 +1,130 @@
---
title: Formatere
description: OpenCode bruker språkspesifikke formatere.
---
OpenCode formaterer automatisk filer etter at de er skrevet eller redigert ved hjelp av språkspesifikke formatere. Dette sikrer at koden som genereres følger kodestilene til prosjektet ditt.
---
## Innebygd
OpenCode kommer med flere innebygde formatere for populære språk og rammeverk. Nedenfor er en liste over formatere, støttede filutvidelser og kommandoer eller konfigurasjonsalternativer den trenger.
| Formater | Utvidelser | Krav |
| -------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| gofmt | .go | `gofmt` kommando tilgjengelig |
| blande | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` kommando tilgjengelig |
| penere | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml og [mer](https://prettier.io/docs/en/index.html) | `prettier` avhengighet i `package.json` |
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml og [mer](https://biomejs.dev/) | `biome.json(c)` konfigurasjonsfil |
| sikk | .zig, .zon | `zig` kommando tilgjengelig |
| klang-format | .c, .cpp, .h, .hpp, .ino og [mer](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` konfigurasjonsfil |
| ktlint | .kt, .kts | `ktlint` kommando tilgjengelig |
| ruff | .py, .pyi | `ruff` kommando tilgjengelig med config |
| rustfmt | .rs | `rustfmt` kommando tilgjengelig |
| cargofmt | .rs | `cargo fmt` kommando tilgjengelig |
| uv | .py, .pyi | `uv` kommando tilgjengelig |
| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` kommando tilgjengelig |
| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` kommando tilgjengelig |
| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` kommando tilgjengelig |
| luft | .R | `air` kommando tilgjengelig |
| dart | .dart | `dart` kommando tilgjengelig |
| ocamlformat | .ml, .mli | `ocamlformat` kommando tilgjengelig og `.ocamlformat` konfigurasjonsfil |
| terraform | .tf, .tfvars | `terraform` kommando tilgjengelig |
| glimt | .gleam | `gleam` kommando tilgjengelig |
| nixfmt | .nix | `nixfmt` kommando tilgjengelig |
| shfmt | .sh, .bash | `shfmt` kommando tilgjengelig |
| halvliter | .php | `laravel/pint` avhengighet i `composer.json` |
| oxfmt (Eksperimentell) | .js, .jsx, .ts, .tsx | `oxfmt` avhengighet i `package.json` og et [eksperimentelt env variabel flagg](/docs/cli/#experimental) |
| ormolu | .hs | `ormolu` kommando tilgjengelig |
Så hvis prosjektet ditt har `prettier` i `package.json`, vil OpenCode automatisk bruke det.
---
## Slik fungerer det
Når OpenCode skriver eller redigerer en fil, gjør den:
1. Kontrollerer filtypen mot alle aktiverte formatere.
2. Kjører riktig formateringskommando på filen.
3. Bruker formateringsendringene automatisk.
Denne prosessen skjer i bakgrunnen, og sikrer at kodestilene dine opprettholdes uten noen manuelle trinn.
---
## Konfigurer
Du kan tilpasse formatere gjennom `formatter`-delen i OpenCode-konfigurasjonen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}
```
Hver formateringskonfigurasjon støtter følgende:
| Eiendom | Skriv | Beskrivelse |
| ------------- | -------- | ------------------------------------------------------- |
| `disabled` | boolsk | Sett dette til `true` for å deaktivere formatereren |
| `command` | streng[] | Kommandoen som skal kjøres for formatering |
| `environment` | objekt | Miljøvariabler som skal angis når du kjører formateringsverktøyet |
| `extensions` | streng[] | Filutvidelser denne formatereren skal håndtere |
La oss se på noen eksempler.
---
### Deaktivering av formatere
For å deaktivere **alle** formatere globalt, sett `formatter` til `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}
```
For å deaktivere en **spesifikk** formatering, sett `disabled` til `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}
```
---
### Egendefinerte formatere
Du kan overstyre de innebygde formaterne eller legge til nye ved å spesifisere kommandoen, miljøvariablene og filtypene:
```json title="opencode.json" {4-14}
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}
```
**`$FILE` plassholderen** i kommandoen vil bli erstattet med banen til filen som formateres.

View File

@@ -0,0 +1,321 @@
---
title: GitHub
description: Bruk OpenCode i GitHub-problemer og pull-forespørsler.
---
OpenCode integreres med GitHub-arbeidsflyten din. Nevn `/opencode` eller `/oc` i kommentaren din, og OpenCode vil utføre oppgaver i din GitHub Actions-løper.
---
## Funksjoner
- **Triage-problemer**: Be OpenCode se på et problem og forklare det for deg.
- **Fiks og implementer**: Be OpenCode om å fikse et problem eller implementere en funksjon. Og den vil fungere i en ny gren og sender inn en PR med alle endringene.
- **Sikkert**: OpenCode kjører inne i GitHubs løpere.
---
## Installasjon
Kjør følgende kommando i et prosjekt som er i en GitHub-repo:
```bash
opencode github install
```
Dette vil lede deg gjennom å installere GitHub-appen, lage arbeidsflyten og sette opp hemmeligheter.
---
### Manuell oppsett
Eller du kan sette den opp manuelt.
1. **Installer GitHub-appen**
Gå over til [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Sørg for at den er installert på mållageret.
2. **Legg til arbeidsflyten**
Legg til følgende arbeidsflytfil til `.github/workflows/opencode.yml` i repoen. Sørg for å sette riktige `model` og nødvendige API nøkler i `env`.
```yml title=".github/workflows/opencode.yml" {24,26}
name: opencode
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
opencode:
if: |
contains(github.event.comment.body, '/oc') ||
contains(github.event.comment.body, '/opencode')
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
- name: Run OpenCode
uses: anomalyco/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
# share: true
# github_token: xxxx
```
3. **Lagre API-nøklene i hemmeligheter**
Utvid **Hemmeligheter og variabler** til venstre i **innstillingene** for organisasjonen eller prosjektet og velg **Handlinger**. Og legg til de nødvendige API-nøklene.
---
## Konfigurasjon
- `model`: Modellen som skal brukes med OpenCode. Tar formatet `provider/model`. Dette er **obligatorisk**.
- `agent`: Agenten som skal brukes. Må være en primær agent. Faller tilbake til `default_agent` fra config eller `"build"` hvis ikke funnet.
- `share`: Om OpenCode-økten skal deles. Standard er **true** for offentlige depoter.
- `prompt`: Valgfri egendefinert melding for å overstyre standard oppførsel. Bruk dette til å tilpasse hvordan OpenCode behandler forespørsler.
- `token`: Valgfritt GitHub-tilgangstoken for å utføre operasjoner som å lage kommentarer, foreta endringer og åpne pull-forespørsler. Som standard bruker OpenCode installasjonstilgangstokenet fra OpenCode GitHub-appen, så forpliktelser, kommentarer og pull-forespørsler ser ut til å komme fra appen.
Alternativt kan du bruke GitHub Action-løperens [innebygde `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) uten å installere OpenCode GitHub-appen. Bare sørg for å gi de nødvendige tillatelsene i arbeidsflyten din:
```yaml
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
```
Du kan også bruke en [personlig tilgangstoken](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) hvis foretrukket.
---
## Støttede hendelser
OpenCode kan utløses av følgende GitHub-hendelser:
| Hendelsestype | Utløst av | Detaljer |
| ----------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `issue_comment` | Kommenter et problem eller PR | Nevn `/opencode` eller `/oc` i kommentaren din. OpenCode leser kontekst og kan opprette grener, åpne PR-er eller svare. |
| `pull_request_review_comment` | Kommenter spesifikke kodelinjer i en PR | Nevn `/opencode` eller `/oc` mens du ser gjennom koden. OpenCode mottar filbane, linjenummer og diff-kontekst. |
| `issues` | Utgave åpnet eller redigert | Utløs OpenCode automatisk når problemer opprettes eller endres. Krever `prompt` inngang. |
| `pull_request` | PR åpnet eller oppdatert | Utløs OpenCode automatisk når PR-er åpnes, synkroniseres eller gjenåpnes. Nyttig for automatiserte anmeldelser. |
| `schedule` | Cron-basert tidsplan | Kjør OpenCode etter en tidsplan. Krever `prompt` inngang. Utdata går til logger og PR (ingen problem å kommentere). |
| `workflow_dispatch` | Manuell utløser fra GitHub UI | Utløs OpenCode på forespørsel via fanen Handlinger. Krever `prompt` inngang. Utdata går til logger og PR-er. |
### Tidsplan Eksempel
Kjør OpenCode på en tidsplan for å utføre automatiserte oppgaver:
```yaml title=".github/workflows/opencode-scheduled.yml"
name: Scheduled OpenCode Task
on:
schedule:
- cron: "0 9 * * 1" # Every Monday at 9am UTC
jobs:
opencode:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Run OpenCode
uses: anomalyco/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
prompt: |
Review the codebase for any TODO comments and create a summary.
If you find issues worth addressing, open an issue to track them.
```
For planlagte arrangementer er `prompt`-inngangen **påkrevd** siden det ikke er noen kommentarer å trekke ut instruksjoner fra. Planlagte arbeidsflyter kjører uten brukerkontekst for tillatelsessjekking, så arbeidsflyten må gi `contents: write` og `pull-requests: write` hvis du forventer at OpenCode oppretter grener eller PR-er.
---
### Pull Request Eksempel
Gjennomgå PR-er automatisk når de åpnes eller oppdateres:
```yaml title=".github/workflows/opencode-review.yml"
name: opencode-review
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
jobs:
review:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
pull-requests: read
issues: read
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: anomalyco/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
model: anthropic/claude-sonnet-4-20250514
use_github_token: true
prompt: |
Review this pull request:
- Check for code quality issues
- Look for potential bugs
- Suggest improvements
```
For `pull_request`-hendelser, hvis ingen `prompt` er oppgitt, går OpenCode som standard gjennom pull-forespørselen.
---
### Issues Triage Eksempel
Triage automatisk nye problemer. Dette eksemplet filtrerer til kontoer eldre enn 30 dager for å redusere spam:
```yaml title=".github/workflows/opencode-triage.yml"
name: Issue Triage
on:
issues:
types: [opened]
jobs:
triage:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
steps:
- name: Check account age
id: check
uses: actions/github-script@v7
with:
script: |
const user = await github.rest.users.getByUsername({
username: context.payload.issue.user.login
});
const created = new Date(user.data.created_at);
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
return days >= 30;
result-encoding: string
- uses: actions/checkout@v6
if: steps.check.outputs.result == 'true'
with:
persist-credentials: false
- uses: anomalyco/opencode/github@latest
if: steps.check.outputs.result == 'true'
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
prompt: |
Review this issue. If there's a clear fix or relevant docs:
- Provide documentation links
- Add error handling guidance for code examples
Otherwise, do not comment.
```
For `issues`-hendelser er `prompt`-inngangen **påkrevd** siden det ikke er noen kommentarer å trekke ut instruksjoner fra.
---
## Egendefinerte meldinger
Overstyr standardmeldingen for å tilpasse OpenCodes oppførsel for arbeidsflyten din.
```yaml title=".github/workflows/opencode.yml"
- uses: anomalyco/opencode/github@latest
with:
model: anthropic/claude-sonnet-4-5
prompt: |
Review this pull request:
- Check for code quality issues
- Look for potential bugs
- Suggest improvements
```
Dette er nyttig for å håndheve spesifikke vurderingskriterier, kodestandarder eller fokusområder som er relevante for prosjektet ditt.
---
## Eksempler
Her er noen eksempler på hvordan du kan bruke OpenCode i GitHub.
- **Forklar et problem**
Legg til denne kommentaren i en GitHub-utgave.
```
/opencode explain this issue
```
OpenCode vil lese hele tråden, inkludert alle kommentarer, og svare med en tydelig forklaring.
- **Fiks et problem**
I en GitHub-utgave, si:
```
/opencode fix this
```
Og OpenCode vil opprette en ny gren, implementere endringene og åpne en PR med endringene.
- **Gjennomgå PR-er og gjør endringer**
Legg igjen følgende kommentar på en GitHub PR.
```
Delete the attachment from S3 when the note is removed /oc
```
OpenCode vil implementere den forespurte endringen og forplikte den til samme PR.
- **Se gjennom spesifikke kodelinjer**
Legg igjen en kommentar direkte på kodelinjer i PRs "Filer"-fane. OpenCode oppdager automatisk filen, linjenumrene og diff-konteksten for å gi presise svar.
```
[Comment on specific lines in Files tab]
/oc add error handling here
```
Når du kommenterer spesifikke linjer, mottar OpenCode:
- Den nøyaktige filen blir gjennomgått
- De spesifikke kodelinjene
- Den ulik konteksten rundt
- Linjenummerinformasjon
Dette gir mulighet for mer målrettede forespørsler uten å måtte spesifisere filstier eller linjenumre manuelt.

View File

@@ -0,0 +1,195 @@
---
title: GitLab
description: Bruk OpenCode i GitLab-problemer og sammenslåingsforespørsler.
---
OpenCode integreres med GitLab arbeidsflyten gjennom GitLab CI/CD pipeline eller med GitLab Duo.
I begge tilfeller vil OpenCode kjøre på GitLab-løperne dine.
---
## GitLab CI
OpenCode fungerer i en vanlig GitLab-pipeline. Du kan bygge den inn i en pipeline som en [CI komponent](https://docs.gitlab.com/ee/ci/components/)
Her bruker vi en fellesskapsskapt CI/CD-komponent for OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
---
### Funksjoner
- **Bruk tilpasset konfigurasjon per jobb**: Konfigurer OpenCode med en tilpasset konfigurasjonskatalog, for eksempel `./config/#custom-directory` for å aktivere eller deaktivere funksjonalitet per OpenCode-anrop.
- **Minimalt oppsett**: CI-komponenten setter opp OpenCode i bakgrunnen, du trenger bare å lage OpenCode-konfigurasjonen og den første ledeteksten.
- **Fleksibel**: CI-komponenten støtter flere innganger for å tilpasse virkemåten
---
### Oppsett
1. Lagre OpenCode-autentiseringen JSON som en filtype CI miljøvariabler under **Innstillinger** > **CI/CD** > **Variabler**. Sørg for å merke dem som "Masket og skjult".
2. Legg til følgende i `.gitlab-ci.yml`-filen.
```yaml title=".gitlab-ci.yml"
include:
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
inputs:
config_dir: ${CI_PROJECT_DIR}/opencode-config
auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
command: optional-custom-command
message: "Your prompt here"
```
For flere inndata og brukstilfeller [sjekk ut dokumentene](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) for denne komponenten.
---
## GitLab Duo
OpenCode integreres med din GitLab arbeidsflyt.
Nevn `@opencode` i en kommentar, og OpenCode vil utføre oppgaver innenfor din GitLab CI pipeline.
---
### Funksjoner
- **Triage-problemer**: Be OpenCode se på et problem og forklare det for deg.
- **Fiks og implementer**: Be OpenCode om å fikse et problem eller implementere en funksjon.
Det vil opprette en ny filial og sende en sammenslåingsforespørsel med endringene.
- **Sikkert**: OpenCode kjører på GitLab-løperne dine.
---
### Oppsett
OpenCode kjører i GitLab CI/CD pipeline, her er det du trenger for å sette den opp:
:::tupp
Sjekk ut [**GitLab-dokumentene**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for oppdaterte instruksjoner.
:::
1. Konfigurer GitLab-miljøet ditt
2. Sett opp CI/CD
3. Få en AI modellleverandør API nøkkel
4. Opprett en tjenestekonto
5. Konfigurer CI/CD variabler
6. Lag en flytkonfigurasjonsfil, her er et eksempel:
<details>
<summary>Flow configuration</summary>
```yaml
image: node:22-slim
commands:
- echo "Installing opencode"
- npm install --global opencode-ai
- echo "Installing glab"
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
- apt-get install --yes glab
- echo "Configuring glab"
- echo $GITLAB_HOST
- echo "Creating OpenCode auth configuration"
- mkdir --parents ~/.local/share/opencode
- |
cat > ~/.local/share/opencode/auth.json << EOF
{
"anthropic": {
"type": "api",
"key": "$ANTHROPIC_API_KEY"
}
}
EOF
- echo "Configuring git"
- git config --global user.email "opencode@gitlab.com"
- git config --global user.name "OpenCode"
- echo "Testing glab"
- glab issue list
- echo "Running OpenCode"
- |
opencode run "
You are an AI assistant helping with GitLab operations.
Context: $AI_FLOW_CONTEXT
Task: $AI_FLOW_INPUT
Event: $AI_FLOW_EVENT
Please execute the requested task using the available GitLab tools.
Be thorough in your analysis and provide clear explanations.
<important>
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
</important>
"
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
- echo "Checking for git changes and pushing if any exist"
- |
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
echo "Git changes detected, adding and pushing..."
git add .
if git diff --cached --quiet; then
echo "No staged changes to commit"
else
echo "Committing changes to branch: $CI_WORKLOAD_REF"
git commit --message "Codex changes"
echo "Pushing changes up to $CI_WORKLOAD_REF"
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
echo "Changes successfully pushed"
fi
else
echo "No git changes detected, skipping push"
fi
variables:
- ANTHROPIC_API_KEY
- GITLAB_TOKEN_OPENCODE
- GITLAB_HOST
```
</details>
Du kan se [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for detaljerte instruksjoner.
---
### Eksempler
Her er noen eksempler på hvordan du kan bruke OpenCode i GitLab.
:::tupp
Du kan konfigurere til å bruke en annen triggerfrase enn `@opencode`.
:::
- **Forklar et problem**
Legg til denne kommentaren i en GitLab-utgave.
```
@opencode explain this issue
```
OpenCode vil lese problemet og svare med en klar forklaring.
- **Fiks et problem**
I en GitLab-utgave, si:
```
@opencode fix this
```
OpenCode vil opprette en ny gren, implementere endringene og åpne en sammenslåingsforespørsel med endringene.
- **Gjennomgå sammenslåingsforespørsler**
Legg igjen følgende kommentar på en GitLab-sammenslåingsforespørsel.
```
@opencode review this merge request
```
OpenCode vil gjennomgå sammenslåingsforespørselen og gi tilbakemelding.

View File

@@ -0,0 +1,48 @@
---
title: IDE
description: OpenCode-utvidelsen for VS-kode, markør og andre IDE-er
---
OpenCode integreres med VS-kode, markør eller en hvilken som helst IDE som støtter en terminal. Bare kjør `opencode` i terminalen for å komme i gang.
---
## Bruk
- **Hurtigstart**: Bruk `Cmd+Esc` (Mac) eller `Ctrl+Esc` (Windows/Linux) for å åpne OpenCode i en delt terminalvisning, eller fokuser en eksisterende terminaløkt hvis en allerede kjører.
- **Ny økt**: Bruk `Cmd+Shift+Esc` (Mac) eller `Ctrl+Shift+Esc` (Windows/Linux) for å starte en ny OpenCode-terminaløkt, selv om en allerede er åpen. Du kan også klikke på OpenCode-knappen i UI.
- **Kontekstbevissthet**: Del automatisk ditt nåværende valg eller fane med OpenCode.
- **Snarveier for filreferanse**: Bruk `Cmd+Option+K` (Mac) eller `Alt+Ctrl+K` (Linux/Windows) for å sette inn filreferanser. For eksempel `@File#L37-42`.
---
## Installasjon
For å installere OpenCode på VS Code og populære gafler som Cursor, Windsurf, VSCodium:
1. Åpne VS Code
2. Åpne den integrerte terminalen
3. Kjør `opencode` - utvidelsen installeres automatisk
Hvis du derimot vil bruke din egen IDE når du kjører `/editor` eller `/export` fra TUI, må du angi `export EDITOR="code --wait"`. [Finn ut mer](/docs/tui/#editor-setup).
---
### Manuell installasjon
Søk etter **OpenCode** i Extension Marketplace og klikk på **Install**.
---
### Feilsøking
Hvis utvidelsen ikke kan installeres automatisk:
- Sørg for at du kjører `opencode` i den integrerte terminalen.
- Bekreft at CLI for IDE er installert:
- For VS Code: `code` kommando
- For markør: `cursor` kommando
- For Windsurf: `windsurf` kommando
- For VSCodium: `codium` kommando
- Hvis ikke, kjør `Cmd+Shift+P` (Mac) eller `Ctrl+Shift+P` (Windows/Linux) og søk etter "Shell Command: Install 'code' command in PATH" (eller tilsvarende for din IDE)
- Sørg for at VS Code har tillatelse til å installere utvidelser

View File

@@ -0,0 +1,359 @@
---
title: Intro
description: Kom i gang med OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
import config from "../../../../config.mjs"
export const console = config.console
[**OpenCode**](/) er en åpen kildekode AI kodeagent. Den er tilgjengelig som et terminalbasert grensesnitt, skrivebordsapp eller IDE-utvidelse.
![OpenCode TUI med opencode-temaet](../../../assets/lander/screenshot.png)
La oss komme i gang.
---
#### Forutsetninger
For å bruke OpenCode i terminalen din trenger du:
1. En moderne terminalemulator som:
- [WezTerm](https://wezterm.org), på tvers av plattformer
- [Alacritty](https://alacritty.org), på tvers av plattformer
- [Ghostty](https://ghostty.org), Linux og macOS
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux og macOS
2. API-nøkler for LLM-leverandørene du vil bruke.
---
## Installer
Den enkleste måten å installere OpenCode på er gjennom installasjonsskriptet.
```bash
curl -fsSL https://opencode.ai/install | bash
```
Du kan også installere den med følgende kommandoer:
- **Bruke Node.js**
<Tabs>
<TabItem label="npm">
```bash
npm install -g opencode-ai
```
</TabItem>
<TabItem label="Bun">
```bash
bun install -g opencode-ai
```
</TabItem>
<TabItem label="pnpm">
```bash
pnpm install -g opencode-ai
```
</TabItem>
<TabItem label="Yarn">
```bash
yarn global add opencode-ai
```
</TabItem>
</Tabs>
- **Bruke Homebrew på macOS og Linux**
```bash
brew install anomalyco/tap/opencode
```
> Vi anbefaler å bruke OpenCode-tappen for de mest oppdaterte utgivelsene. Den offisielle `brew install opencode`-formelen vedlikeholdes av Homebrew-teamet og oppdateres sjeldnere.
- **Bruke Paru på Arch Linux**
```bash
paru -S opencode-bin
```
#### Windows
:::tips[Anbefalt: Bruk WSL]
For den beste opplevelsen på Windows anbefaler vi å bruke [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Det gir bedre ytelse og full kompatibilitet med OpenCodes funksjoner.
:::
- **Bruker sjokolade**
```bash
choco install opencode
```
- **Bruke Scoop**
```bash
scoop install opencode
```
- **Bruker NPM**
```bash
npm install -g opencode-ai
```
- **Bruker Mise**
```bash
mise use -g github:anomalyco/opencode
```
- **Bruke Docker**
```bash
docker run -it --rm ghcr.io/anomalyco/opencode
```
Støtte for å installere OpenCode på Windows med Bun pågår for øyeblikket.
Du kan også hente binæren fra [Releases](https://github.com/anomalyco/opencode/releases).
---
## Konfigurer
Med OpenCode kan du bruke hvilken som helst LLM-leverandør ved å konfigurere deres API-nøkler.
Hvis du er ny til å bruke LLM-leverandører, anbefaler vi å bruke [OpenCode Zen](/docs/zen).
Det er en kuratert liste over modeller som har blitt testet og verifisert av OpenCode
team.
1. Kjør kommandoen `/connect` i TUI, velg opencode og gå til [opencode.ai/auth](https://opencode.ai/auth).
```txt
/connect
```
2. Logg på, legg til faktureringsdetaljene dine og kopier API-nøkkelen.
3. Lim inn API-nøkkelen.
```txt
┌ API key
└ enter
```
Alternativt kan du velge en av de andre leverandørene. [Finn ut mer](/docs/providers#directory).
---
## Initialiser
Nå som du har konfigurert en leverandør, kan du navigere til et prosjekt som
du vil jobbe med.
```bash
cd /path/to/project
```
Og kjør OpenCode.
```bash
opencode
```
Deretter initialiserer du OpenCode for prosjektet ved å kjøre følgende kommando.
```bash frame="none"
/init
```
Dette vil få OpenCode til å analysere prosjektet ditt og opprette en `AGENTS.md`-fil i
prosjektroten.
:::tupp
Du bør overgi prosjektets `AGENTS.md`-fil til Git.
:::
Dette hjelper OpenCode med å forstå prosjektstrukturen og kodingsmønstrene
brukt.
---
## Bruk
Du er nå klar til å bruke OpenCode for å jobbe med prosjektet ditt. Spør det gjerne
noe!
Hvis du er ny til å bruke en AI kodeagent, her er noen eksempler som kan
hjelp.
---
### Still spørsmål
Du kan be OpenCode forklare kodebasen for deg.
:::tupp
Bruk `@`-tasten for uklart søk etter filer i prosjektet.
:::
```txt frame="none" "@packages/functions/src/api/index.ts"
How is authentication handled in @packages/functions/src/api/index.ts
```
Dette er nyttig hvis det er en del av kodebasen du ikke har jobbet med.
---
### Legg til funksjoner
Du kan be OpenCode legge til nye funksjoner i prosjektet ditt. Selv om vi først anbefaler å be den om å lage en plan.
1. **Lag en plan**
OpenCode har en _Plan-modus_ som deaktiverer evnen til å gjøre endringer og
foreslå i stedet _hvordan_ det vil implementere funksjonen.
Bytt til den ved å bruke **Tab**-tasten. Du vil se en indikator for dette i nedre høyre hjørne.
```bash frame="none" title="Switch to Plan mode"
<TAB>
```
La oss nå beskrive hva vi vil at den skal gjøre.
```txt frame="none"
When a user deletes a note, we'd like to flag it as deleted in the database.
Then create a screen that shows all the recently deleted notes.
From this screen, the user can undelete a note or permanently delete it.
```
Du vil gi OpenCode nok detaljer til å forstå hva du ønsker. Det hjelper
å snakke med det som om du snakker med en juniorutvikler på laget ditt.
:::tupp
Gi OpenCode mye kontekst og eksempler for å hjelpe den å forstå hva du gjør
ønsker.
:::
2. **Gjenta på planen**
Når den gir deg en plan, kan du gi den tilbakemelding eller legge til flere detaljer.
```txt frame="none"
We'd like to design this new screen using a design I've used before.
[Image #1] Take a look at this image and use it as a reference.
```
:::tupp
Dra og slipp bilder i terminalen for å legge dem til ledeteksten.
:::
OpenCode kan skanne alle bilder du gir den og legge dem til i ledeteksten. Du kan
gjør dette ved å dra og slippe et bilde inn i terminalen.
3. **Bygg funksjonen**
Når du føler deg komfortabel med planen, bytt tilbake til _Byggemodus_ av
trykke på **Tab**-tasten igjen.
```bash frame="none"
<TAB>
```
Og ber den om å gjøre endringene.
```bash frame="none"
Sounds good! Go ahead and make the changes.
```
---
### Gjør endringer
For mer enkle endringer kan du be OpenCode om å bygge den direkte
uten å måtte gjennomgå planen først.
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
We need to add authentication to the /settings route. Take a look at how this is
handled in the /notes route in @packages/functions/src/notes.ts and implement
the same logic in @packages/functions/src/settings.ts
```
Du vil sørge for at du gir en god mengde detaljer, slik at OpenCode gjør det rette
endringer.
---
### Angre endringer
La oss si at du ber OpenCode om å gjøre noen endringer.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Men du skjønner at det ikke er det du ønsket. Du **kan angre** endringene
ved å bruke kommandoen `/undo`.
```bash frame="none"
/undo
```
OpenCode vil nå tilbakestille endringene du har gjort og vise den opprinnelige meldingen
igjen.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Herfra kan du justere ledeteksten og be OpenCode om å prøve igjen.
:::tupp
Du kan kjøre `/undo` flere ganger for å angre flere endringer.
:::
Eller du **kan gjøre om** endringene ved å bruke `/redo`-kommandoen.
```bash frame="none"
/redo
```
---
## Del
Samtalene du har med OpenCode kan [deles med din
team](/docs/share).
```bash frame="none"
/share
```
Dette vil opprette en kobling til den gjeldende samtalen og kopiere den til utklippstavlen.
:::note
Samtaler deles ikke som standard.
:::
Her er en [eksempelsamtale](https://opencode.ai/s/4XP1fce5) med OpenCode.
---
## Tilpass
Og det er det! Du er nå en proff på å bruke OpenCode.
For å gjøre det til ditt eget anbefaler vi å [velge et tema](/docs/themes), [tilpasse nøkkelbindingene](/docs/keybinds), [konfigurere kodeformatere](/docs/formatters), [opprette egendefinerte kommandoer](/docs/commands) eller leke med [OpenCode-konfigurasjonen](/docs/config).

View File

@@ -0,0 +1,192 @@
---
title: Keybinds
description: Tilpass tastebindingene dine.
---
OpenCode har en liste over nøkkelbindinger som du kan tilpasse gjennom OpenCode-konfigurasjonen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {
"leader": "ctrl+x",
"app_exit": "ctrl+c,ctrl+d,<leader>q",
"editor_open": "<leader>e",
"theme_list": "<leader>t",
"sidebar_toggle": "<leader>b",
"scrollbar_toggle": "none",
"username_toggle": "none",
"status_view": "<leader>s",
"tool_details": "none",
"session_export": "<leader>x",
"session_new": "<leader>n",
"session_list": "<leader>l",
"session_timeline": "<leader>g",
"session_fork": "none",
"session_rename": "none",
"session_share": "none",
"session_unshare": "none",
"session_interrupt": "escape",
"session_compact": "<leader>c",
"session_child_cycle": "<leader>right",
"session_child_cycle_reverse": "<leader>left",
"session_parent": "<leader>up",
"messages_page_up": "pageup,ctrl+alt+b",
"messages_page_down": "pagedown,ctrl+alt+f",
"messages_line_up": "ctrl+alt+y",
"messages_line_down": "ctrl+alt+e",
"messages_half_page_up": "ctrl+alt+u",
"messages_half_page_down": "ctrl+alt+d",
"messages_first": "ctrl+g,home",
"messages_last": "ctrl+alt+g,end",
"messages_next": "none",
"messages_previous": "none",
"messages_copy": "<leader>y",
"messages_undo": "<leader>u",
"messages_redo": "<leader>r",
"messages_last_user": "none",
"messages_toggle_conceal": "<leader>h",
"model_list": "<leader>m",
"model_cycle_recent": "f2",
"model_cycle_recent_reverse": "shift+f2",
"model_cycle_favorite": "none",
"model_cycle_favorite_reverse": "none",
"variant_cycle": "ctrl+t",
"command_list": "ctrl+p",
"agent_list": "<leader>a",
"agent_cycle": "tab",
"agent_cycle_reverse": "shift+tab",
"input_clear": "ctrl+c",
"input_paste": "ctrl+v",
"input_submit": "return",
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
"input_move_left": "left,ctrl+b",
"input_move_right": "right,ctrl+f",
"input_move_up": "up",
"input_move_down": "down",
"input_select_left": "shift+left",
"input_select_right": "shift+right",
"input_select_up": "shift+up",
"input_select_down": "shift+down",
"input_line_home": "ctrl+a",
"input_line_end": "ctrl+e",
"input_select_line_home": "ctrl+shift+a",
"input_select_line_end": "ctrl+shift+e",
"input_visual_line_home": "alt+a",
"input_visual_line_end": "alt+e",
"input_select_visual_line_home": "alt+shift+a",
"input_select_visual_line_end": "alt+shift+e",
"input_buffer_home": "home",
"input_buffer_end": "end",
"input_select_buffer_home": "shift+home",
"input_select_buffer_end": "shift+end",
"input_delete_line": "ctrl+shift+d",
"input_delete_to_line_end": "ctrl+k",
"input_delete_to_line_start": "ctrl+u",
"input_backspace": "backspace,shift+backspace",
"input_delete": "ctrl+d,delete,shift+delete",
"input_undo": "ctrl+-,super+z",
"input_redo": "ctrl+.,super+shift+z",
"input_word_forward": "alt+f,alt+right,ctrl+right",
"input_word_backward": "alt+b,alt+left,ctrl+left",
"input_select_word_forward": "alt+shift+f,alt+shift+right",
"input_select_word_backward": "alt+shift+b,alt+shift+left",
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
"history_previous": "up",
"history_next": "down",
"terminal_suspend": "ctrl+z",
"terminal_title_toggle": "none",
"tips_toggle": "<leader>h",
"display_thinking": "none"
}
}
```
---
## Ledernøkkel
OpenCode bruker en `leader`-nøkkel for de fleste nøkkelbindinger. Dette unngår konflikter i terminalen din.
Som standard er `ctrl+x` ledertasten, og de fleste handlinger krever at du først trykker på ledertasten og deretter snarveien. For å starte en ny økt, trykker du for eksempel først `ctrl+x` og deretter `n`.
Du trenger ikke å bruke en ledernøkkel for tastebindingene dine, men vi anbefaler at du gjør det.
---
## Deaktiver tastebinding
Du kan deaktivere en nøkkelbinding ved å legge til nøkkelen til konfigurasjonen med verdien "ingen".
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {
"session_compact": "none"
}
}
```
---
## Snarveier på skrivebordet
Spørringsinngangen for OpenCode-skrivebordsappen støtter vanlige snarveier i Readline/Emacs-stil for redigering av tekst. Disse er innebygd og foreløpig ikke konfigurerbare via `opencode.json`.
| Snarvei | Handling |
| -------- | ---------------------------------------- |
| `ctrl+a` | Flytt til starten av gjeldende linje |
| `ctrl+e` | Flytt til slutten av gjeldende linje |
| `ctrl+b` | Flytt markøren ett tegn tilbake |
| `ctrl+f` | Flytt markøren ett tegn fremover |
| `alt+b` | Flytt markøren ett ord tilbake |
| `alt+f` | Flytt markøren ett ord fremover |
| `ctrl+d` | Slett tegn under markøren |
| `ctrl+k` | Drep til slutten av linjen |
| `ctrl+u` | Drep til starten av linjen |
| `ctrl+w` | Drep forrige ord |
| `alt+d` | Drep neste ord |
| `ctrl+t` | Transponere tegn |
| `ctrl+g` | Avbryt popovers / avbryt kjøring av svar |
---
## Shift+Enter
Noen terminaler sender ikke modifikasjonsnøkler med Enter som standard. Du må kanskje konfigurere terminalen til å sende `Shift+Enter` som en escape-sekvens.
### Windows Terminal
Åpne `settings.json` på:
```
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
```
Legg dette til `actions`-matrisen på rotnivå:
```json
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Legg dette til `keybindings`-matrisen på rotnivå:
```json
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Lagre filen og start Windows Terminal på nytt eller åpne en ny fane.

View File

@@ -0,0 +1,188 @@
---
title: LSP Servere
description: OpenCode integreres med LSP-serverne dine.
---
OpenCode integreres med din Language Server Protocol (LSP) for å hjelpe LLM med å samhandle med kodebasen din. Den bruker diagnostikk for å gi tilbakemelding til LLM.
---
## Innebygd
OpenCode kommer med flere innebygde LSP-servere for populære språk:
| LSP Server | Utvidelser | Krav |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------ |
| astro | .astro | Autoinstallasjoner for Astro-prosjekter |
| bash | .sh, .bash, .zsh, .ksh | Autoinstallerer bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Autoinstallasjoner for C/C++-prosjekter |
| csharp | .cs | `.NET SDK` installert |
| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` kommando tilgjengelig |
| dart | .dart | `dart` kommando tilgjengelig |
| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` kommando tilgjengelig (automatisk oppdager deno.json/deno.jsonc) |
| elixir-ls | .ex, .exs | `elixir` kommando tilgjengelig |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` avhengighet i prosjekt |
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installert |
| glimt | .gleam | `gleam` kommando tilgjengelig |
| gopls | .go | `go` kommando tilgjengelig |
| hls | .hs, .lhs | `haskell-language-server-wrapper` kommando tilgjengelig |
| jdtls | .java | `Java SDK (version 21+)` installert |
| kotlin-ls | .kt, .kts | Autoinstallasjoner for Kotlin-prosjekter |
| lua-ls | .lua | Autoinstallasjoner for Lua-prosjekter |
| nixd | .nix | `nixd` kommando tilgjengelig |
| ocaml-lsp | .ml, .mli | `ocamllsp` kommando tilgjengelig |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` avhengighet i prosjekt |
| php intelephense | .php | Autoinstallasjoner for PHP-prosjekter |
| prisma | .prisma | `prisma` kommando tilgjengelig |
| opphavsrett | .py, .pyi | `pyright` avhengighet installert |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | `ruby` og `gem` kommandoer tilgjengelig |
| rust | .rs | `rust-analyzer` kommando tilgjengelig |
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installert (`xcode` på macOS) |
| svelte | .svelte | Autoinstallasjoner for Svelte-prosjekter |
| terraform | .tf, .tfvars | Automatiske installasjoner fra GitHub-utgivelser |
| tinymist | .typ, .typc | Automatiske installasjoner fra GitHub-utgivelser |
| maskinskrift | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` avhengighet i prosjekt |
| vue | .vue | Autoinstallasjoner for Vue-prosjekter |
| yaml-ls | .yaml, .yml | Autoinstallerer Red Hat yaml-language-server |
| zls | .zig, .zon | `zig` kommando tilgjengelig |
LSP-servere aktiveres automatisk når en av filtypene ovenfor oppdages og kravene oppfylles.
:::note
Du kan deaktivere automatiske LSP-servernedlastinger ved å sette miljøvariabelen `OPENCODE_DISABLE_LSP_DOWNLOAD` til `true`.
:::
---
## Hvordan det fungerer
Når opencode åpner en fil, gjør den:
1. Kontrollerer filtypen mot alle aktiverte LSP-servere.
2. Starter den riktige LSP-serveren hvis den ikke allerede kjører.
---
## Konfigurer
Du kan tilpasse LSP-servere gjennom `lsp`-delen i opencode-konfigurasjonen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
Hver LSP-server støtter følgende:
| Eiendom | Skriv | Beskrivelse |
| ---------------- | -------- | ------------------------------------------------- |
| `disabled` | boolsk | Sett dette til `true` for å deaktivere LSP-serveren |
| `command` | streng[] | Kommandoen for å starte LSP-serveren |
| `extensions` | streng[] | Filutvidelser denne LSP-serveren skal håndtere |
| `env` | objekt | Miljøvariabler som skal angis når serveren startes |
| `initialization` | objekt | Initialiseringsalternativer for å sende til LSP-serveren |
La oss se på noen eksempler.
---
### Miljøvariabler
Bruk egenskapen `env` til å angi miljøvariabler når du starter LSP-serveren:
```json title="opencode.json" {5-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}
```
---
### Initialiseringsalternativer
Bruk egenskapen `initialization` til å sende initialiseringsalternativer til LSP-serveren. Dette er serverspesifikke innstillinger sendt under LSP `initialize`-forespørselen:
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::note
Initialiseringsalternativer varierer etter LSP-server. Sjekk dokumentasjonen til LSP-serveren for tilgjengelige alternativer.
:::
---
### Deaktiverer LSP-servere
For å deaktivere **alle** LSP servere globalt, sett `lsp` til `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
For å deaktivere en **spesifikk** LSP-server, sett `disabled` til `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
### Egendefinerte LSP-servere
Du kan legge til egendefinerte LSP-servere ved å spesifisere kommandoen og filtypene:
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## Tilleggsinformasjon
### PHP Intelephense
PHP Intelephense tilbyr førsteklasses funksjoner gjennom en lisensnøkkel. Du kan oppgi en lisensnøkkel ved å plassere (bare) nøkkelen i en tekstfil på:
- På macOS/Linux: `$HOME/intelephense/licence.txt`
- På Windows: `%USERPROFILE%/intelephense/licence.txt`
Filen skal bare inneholde lisensnøkkelen uten ekstra innhold.

View File

@@ -0,0 +1,511 @@
---
title: MCP servere
description: Legg til lokale og eksterne MCP-verktøy.
---
Du kan legge til eksterne verktøy i OpenCode ved å bruke _Model Context Protocol_ eller MCP. OpenCode støtter både lokale og eksterne servere.
Når de er lagt til, er MCP-verktøy automatisk tilgjengelige for LLM sammen med innebygde verktøy.
---
#### Advarsler
Når du bruker en MCP-server, legger den til konteksten. Dette kan fort gå opp hvis du har mange verktøy. Så vi anbefaler å være forsiktig med hvilke MCP-servere du bruker.
:::tupp
MCP servere legger til konteksten din, så du vil være forsiktig med hvilke du aktiverer.
:::
Enkelte MCP-servere, som GitHub MCP-serveren, har en tendens til å legge til mange tokens og kan lett overskride kontekstgrensen.
---
## Aktiver
Du kan definere MCP-servere i [OpenCode Config](https://opencode.ai/docs/config/) under `mcp`. Legg til hver MCP med et unikt navn. Du kan referere til den MCP ved navn når du ber om LLM.
```jsonc title="opencode.jsonc" {6}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"name-of-mcp-server": {
// ...
"enabled": true,
},
"name-of-other-mcp-server": {
// ...
},
},
}
```
Du kan også deaktivere en server ved å sette `enabled` til `false`. Dette er nyttig hvis du vil deaktivere en server midlertidig uten å fjerne den fra konfigurasjonen.
---
### Overstyrer fjernstandarder
Organisasjoner kan tilby standard MCP-servere via deres `.well-known/opencode`-endepunkt. Disse serverne kan være deaktivert som standard, slik at brukere kan melde seg på de de trenger.
For å aktivere en spesifikk server fra organisasjonens eksterne konfigurasjon, legg den til i din lokale konfigurasjon med `enabled: true`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
Dine lokale konfigurasjonsverdier overstyrer de eksterne standardinnstillingene. Se [config precedence](/docs/config#precedence-order) for flere detaljer.
---
## Lokal
Legg til lokale MCP-servere ved å bruke `type` til `"local"` i MCP-objektet.
```jsonc title="opencode.jsonc" {15}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-local-mcp-server": {
"type": "local",
// Or ["bun", "x", "my-mcp-command"]
"command": ["npx", "-y", "my-mcp-command"],
"enabled": true,
"environment": {
"MY_ENV_VAR": "my_env_var_value",
},
},
},
}
```
Kommandoen er hvordan den lokale MCP-serveren startes. Du kan også sende inn en liste over miljøvariabler.
For eksempel, her er hvordan du kan legge til test [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP serveren.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
},
},
}
```
Og for å bruke den kan jeg legge til `use the mcp_everything tool` i ledetekstene mine.
```txt "mcp_everything"
use the mcp_everything tool to add the number 3 and 4
```
---
#### Alternativer
Her er alle alternativene for å konfigurere en lokal MCP-server.
| Alternativ | Skriv | Påkrevd | Beskrivelse |
| ------------- | ------- | -------- | ----------------------------------------------------------------------------------- |
| `type` | String | Y | Type MCP servertilkobling, må være `"local"`. |
| `command` | Array | Y | Kommando og argumenter for å kjøre MCP-serveren. |
| `environment` | Objekt | | Miljøvariabler som skal angis når serveren kjøres. |
| `enabled` | Boolsk | | Aktiver eller deaktiver MCP-serveren ved oppstart. |
| `timeout` | Nummer | | Tidsavbrudd i ms for henting av verktøy fra MCP-serveren. Standard er 5000 (5 sekunder). |
---
## Fjernkontroll
Legg til eksterne MCP-servere ved å sette `type` til `"remote"`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote",
"url": "https://my-mcp-server.com",
"enabled": true,
"headers": {
"Authorization": "Bearer MY_API_KEY"
}
}
}
}
```
`url` er URL til den eksterne MCP serveren og med alternativet `headers` kan du sende inn en liste over overskrifter.
---
#### Alternativer
| Alternativ | Skriv | Påkrevd | Beskrivelse |
| --------- | ------- | -------- | ----------------------------------------------------------------------------------- |
| `type` | String | Y | Type MCP servertilkobling, må være `"remote"`. |
| `url` | String | Y | URL av den eksterne MCP-serveren. |
| `enabled` | Boolsk | | Aktiver eller deaktiver MCP-serveren ved oppstart. |
| `headers` | Objekt | | Overskrifter å sende med forespørselen. |
| `oauth` | Objekt | | OAuth-autentiseringskonfigurasjon. Se delen [OAuth](#oauth) nedenfor. |
| `timeout` | Nummer | | Tidsavbrudd i ms for henting av verktøy fra MCP-serveren. Standard er 5000 (5 sekunder). |
---
## OAuth
OpenCode håndterer automatisk OAuth-autentisering for eksterne MCP-servere. Når en server krever autentisering, vil OpenCode:
1. Oppdag 401-svaret og start OAuth-flyten
2. Bruk **Dynamisk klientregistrering (RFC 7591)** hvis det støttes av serveren
3. Lagre tokens sikkert for fremtidige forespørsler
---
### Automatisk
For de fleste OAuth-aktiverte MCP-servere er ingen spesiell konfigurasjon nødvendig. Bare konfigurer den eksterne serveren:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}
```
Hvis serveren krever autentisering, vil OpenCode be deg om å autentisere når du prøver å bruke den for første gang. Hvis ikke, kan du [utløse flyten manuelt](#authenticating) med `opencode mcp auth <server-name>`.
---
### Forhåndsregistrert
Hvis du har klientlegitimasjon fra MCP-serverleverandøren, kan du konfigurere dem:
```json title="opencode.json" {7-11}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": {
"clientId": "{env:MY_MCP_CLIENT_ID}",
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
"scope": "tools:read tools:execute"
}
}
}
}
```
---
### Autentiserer
Du kan utløse autentisering manuelt eller administrere legitimasjon.
Autentiser med en spesifikk MCP-server:
```bash
opencode mcp auth my-oauth-server
```
Liste alle MCP-servere og deres autentiseringsstatus:
```bash
opencode mcp list
```
Fjern lagret legitimasjon:
```bash
opencode mcp logout my-oauth-server
```
Kommandoen `mcp auth` åpner nettleseren din for autorisasjon. Etter at du har godkjent, vil OpenCode lagre tokens sikkert i `~/.local/share/opencode/mcp-auth.json`.
---
#### Deaktiverer OAuth
Hvis du vil deaktivere automatisk OAuth for en server (f.eks. for servere som bruker API-nøkler i stedet), setter du `oauth` til `false`:
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}"
}
}
}
}
```
---
#### OAuth-alternativer
| Alternativ | Skriv inn | Beskrivelse |
| -------------- | --------------- | -------------------------------------------------------------------------------- |
| `oauth` | Objekt \| usant | OAuth-konfigurasjonsobjekt, eller `false` for å deaktivere automatisk OAuth-deteksjon. |
| `clientId` | String | OAuth-klient ID. Hvis ikke oppgitt, vil dynamisk klientregistrering bli forsøkt. |
| `clientSecret` | String | OAuth-klienthemmelighet, hvis det kreves av autorisasjonsserveren. |
| `scope` | String | OAuth-omfang å be om under autorisasjon. |
#### Feilsøking
Hvis en ekstern MCP-server ikke klarer å autentisere, kan du diagnostisere problemer med:
```bash
# View auth status for all OAuth-capable servers
opencode mcp auth list
# Debug connection and OAuth flow for a specific server
opencode mcp debug my-oauth-server
```
Kommandoen `mcp debug` viser gjeldende autentiseringsstatus, tester HTTP-tilkoblingen og forsøker OAuth-oppdagelsesflyten.
---
## Administrer
MCP-ene dine er tilgjengelige som verktøy i OpenCode, sammen med innebygde verktøy. Så du kan administrere dem gjennom OpenCode-konfigurasjonen som alle andre verktøy.
---
### Globalt
Dette betyr at du kan aktivere eller deaktivere dem globalt.
```json title="opencode.json" {14}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp-foo": false
}
}
```
Vi kan også bruke et globmønster for å deaktivere alle matchende MCP-er.
```json title="opencode.json" {14}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp*": false
}
}
```
Her bruker vi globmønsteret `my-mcp*` for å deaktivere alle MCP-er.
---
### Per agent
Hvis du har et stort antall MCP-servere, vil du kanskje bare aktivere dem per agent og deaktivere dem globalt. Slik gjør du dette:
1. Deaktiver det som et verktøy globalt.
2. Aktiver MCP-serveren som et verktøy i [agent config](/docs/agents#tools).
```json title="opencode.json" {11, 14-18}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"enabled": true
}
},
"tools": {
"my-mcp*": false
},
"agent": {
"my-agent": {
"tools": {
"my-mcp*": true
}
}
}
}
```
---
#### Glob-mønstre
Glob-mønsteret bruker enkle regex-globing-mønstre:
- `*` samsvarer med null eller flere av alle tegn (f.eks. `"my-mcp*"` samsvarer med `my-mcp_search`, `my-mcp_list`, osv.)
- `?` samsvarer med nøyaktig ett tegn
- Alle andre karakterer samsvarer bokstavelig talt
:::note
MCP serververktøy er registrert med servernavn som prefiks, så for å deaktivere alle verktøy for en server bruker du bare:
```
"mymcpservername_*": false
```
:::
---
## Eksempler
Nedenfor er eksempler på noen vanlige MCP-servere. Du kan sende inn en PR hvis du vil dokumentere andre servere.
---
### Vaktvakt
Legg til [Sentry MCP-serveren](https://mcp.sentry.dev) for å samhandle med Sentry-prosjektene og problemene dine.
```json title="opencode.json" {4-8}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
```
Etter å ha lagt til konfigurasjonen, autentiser med Sentry:
```bash
opencode mcp auth sentry
```
Dette åpner et nettleservindu for å fullføre OAuth-flyten og koble OpenCode til Sentry-kontoen din.
Når du er autentisert, kan du bruke Sentry-verktøy i ledetekstene dine for å spørre etter problemer, prosjekter og feildata.
```txt "use sentry"
Show me the latest unresolved issues in my project. use sentry
```
---
### Kontekst7
Legg til [Context7 MCP-serveren](https://github.com/upstash/context7) for å søke gjennom dokumenter.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
```
Hvis du har registrert deg for en gratis konto, kan du bruke API-nøkkelen din og få høyere satsgrenser.
```json title="opencode.json" {7-9}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
}
}
}
}
```
Her antar vi at du har `CONTEXT7_API_KEY` miljøvariabelen satt.
Legg til `use context7` i instruksjonene for å bruke Context7 MCP-serveren.
```txt "use context7"
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
```
Alternativt kan du legge til noe slikt til din [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
When you need to search docs, use `context7` tools.
```
---
### Grep av Vercel
Legg til [Grep by Vercel](https://grep.app) MCP-serveren for å søke gjennom kodebiter på GitHub.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
```
Siden vi kalte MCP-serveren vår `gh_grep`, kan du legge til `use the gh_grep tool` i spørsmålene dine for å få agenten til å bruke den.
```txt "use the gh_grep tool"
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
```
Alternativt kan du legge til noe slikt til din [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
```

View File

@@ -0,0 +1,223 @@
---
title: Modeller
description: Konfigurere en LLM leverandør og modell.
---
OpenCode bruker [AI SDK](https://ai-sdk.dev/) og [Models.dev](https://models.dev) for å støtte **75+ LLM leverandører** og den støtter kjøring av lokale modeller.
---
## Leverandører
De fleste populære leverandørene er forhåndslastet som standard. Hvis du har lagt til legitimasjonen for en leverandør gjennom kommandoen `/connect`, vil den være tilgjengelig når du starter OpenCode.
Finn ut mer om [leverandører](/docs/providers).
---
## Velg en modell
Når du har konfigurert leverandøren din, kan du velge modellen du ønsker ved å skrive inn:
```bash frame="none"
/models
```
---
## Anbefalte modeller
Det er mange modeller der ute, med nye modeller som kommer ut hver uke.
:::tupp
Vurder å bruke en av modellene vi anbefaler.
:::
Imidlertid er det bare noen få av dem som er gode til både å generere kode og verktøykalling.
Her er flere modeller som fungerer godt med OpenCode, uten spesiell rekkefølge. (Dette er ikke en uttømmende liste og er heller ikke nødvendigvis oppdatert):
- GPT 5.2
- GPT 5.1 Codex
- Claude Opus 4.5
- Claude Sonnet 4.5
- Minimax M2.1
- Gemini 3 Pro
---
## Angi en standard
For å angi en av disse som standardmodell, kan du angi `model`-tasten i din
OpenCode-konfigurasjon.
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"model": "lmstudio/google/gemma-3n-e4b"
}
```
Her er hele ID `provider_id/model_id`. For eksempel, hvis du bruker [OpenCode Zen](/docs/zen), vil du bruke `opencode/gpt-5.1-codex` for GPT 5.1 Codex.
Hvis du har konfigurert en [egendefinert leverandør](/docs/providers#custom), er `provider_id` nøkkelen fra `provider`-delen av konfigurasjonen din, og `model_id` er nøkkelen fra `provider.models`.
---
## Konfigurer modeller
Du kan konfigurere en modells alternativer globalt gjennom konfigurasjonen.
```jsonc title="opencode.jsonc" {7-12,19-24}
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"openai": {
"models": {
"gpt-5": {
"options": {
"reasoningEffort": "high",
"textVerbosity": "low",
"reasoningSummary": "auto",
"include": ["reasoning.encrypted_content"],
},
},
},
},
"anthropic": {
"models": {
"claude-sonnet-4-5-20250929": {
"options": {
"thinking": {
"type": "enabled",
"budgetTokens": 16000,
},
},
},
},
},
},
}
```
Her konfigurerer vi globale innstillinger for to innebygde modeller: `gpt-5` når de åpnes via `openai`-leverandøren, og `claude-sonnet-4-20250514` når de åpnes via `anthropic`-leverandøren.
De innebygde leverandør- og modellnavnene finnes på [Models.dev](https://models.dev).
Du kan også konfigurere disse alternativene for alle agenter du bruker. Agentkonfigurasjonen overstyrer alle globale alternativer her. [Finn ut mer](/docs/agents/#additional).
Du kan også definere tilpassede varianter som utvider de innebygde. Varianter lar deg konfigurere forskjellige innstillinger for samme modell uten å opprette dupliserte oppføringer:
```jsonc title="opencode.jsonc" {6-21}
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"opencode": {
"models": {
"gpt-5": {
"variants": {
"high": {
"reasoningEffort": "high",
"textVerbosity": "low",
"reasoningSummary": "auto",
},
"low": {
"reasoningEffort": "low",
"textVerbosity": "low",
"reasoningSummary": "auto",
},
},
},
},
},
},
}
```
---
## Varianter
Mange modeller støtter flere varianter med forskjellige konfigurasjoner. OpenCode leveres med innebygde standardvarianter for populære leverandører.
### Innebygde varianter
OpenCode leveres med standardvarianter for mange leverandører:
**Antropisk**:
- `high` - Høyt budsjett (standard)
- `max` - Maksimalt tenkebudsjett
**OpenAI**:
Varierer etter modell, men omtrent:
- `none` - Ingen resonnement
- `minimal` - Minimal resonnementinnsats
- `low` - Lav resonnementinnsats
- `medium` - Middels resonnementinnsats
- `high` - Høy resonnementinnsats
- `xhigh` - Ekstra høy resonnementinnsats
**Google**:
- `low` - Lavere innsats/tokenbudsjett
- `high` - Høyere innsats/tokenbudsjett
:::tupp
Denne listen er ikke uttømmende. Mange andre leverandører har også innebygde standardinnstillinger.
:::
### Egendefinerte varianter
Du kan overstyre eksisterende varianter eller legge til dine egne:
```jsonc title="opencode.jsonc" {7-18}
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"openai": {
"models": {
"gpt-5": {
"variants": {
"thinking": {
"reasoningEffort": "high",
"textVerbosity": "low",
},
"fast": {
"disabled": true,
},
},
},
},
},
},
}
```
### Syklusvarianter
Bruk tastebindingen `variant_cycle` for raskt å bytte mellom varianter. [Finn ut mer](/docs/keybinds).
---
## Laster modeller
Når OpenCode starter opp, ser den etter modeller i følgende prioriterte rekkefølge:
1. Kommandolinjeflagget `--model` eller `-m`. Formatet er det samme som i konfigurasjonsfilen: `provider_id/model_id`.
2. Modelllisten i OpenCode-konfigurasjonen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-20250514"
}
```
Formatet her er `provider/model`.
3. Den sist brukte modellen.
4. Den første modellen bruker en intern prioritet.

View File

@@ -0,0 +1,331 @@
---
title: Modi
description: Ulike moduser for forskjellige brukstilfeller.
---
:::forsiktighet
Modi er nå konfigurert gjennom alternativet `agent` i opencode-konfigurasjonen. De
Alternativet `mode` er nå utdatert. [Finn ut mer](/docs/agents).
:::
Moduser i opencode lar deg tilpasse oppførselen, verktøyene og ledetekstene for ulike brukstilfeller.
Den kommer med to innebygde moduser: **bygg** og **plan**. Du kan tilpasse
disse eller konfigurer din egen gjennom opencode-konfigurasjonen.
Du kan bytte mellom moduser under en økt eller konfigurere dem i konfigurasjonsfilen.
---
## Innebygd
opencode kommer med to innebygde moduser.
---
### Bygg
Bygg er **standard**-modus med alle verktøy aktivert. Dette er standardmodusen for utviklingsarbeid der du trenger full tilgang til filoperasjoner og systemkommandoer.
---
### Plan
En begrenset modus designet for planlegging og analyse. I planmodus er følgende verktøy deaktivert som standard:
- `write` - Kan ikke opprette nye filer
- `edit` - Kan ikke endre eksisterende filer, bortsett fra filer som ligger på `.opencode/plans/*.md` for å detaljere selve planen
- `patch` - Kan ikke bruke patcher
- `bash` - Kan ikke utføre skallkommandoer
Denne modusen er nyttig når du vil at AI skal analysere kode, foreslå endringer eller lage planer uten å gjøre noen faktiske endringer i kodebasen.
---
## Bytte
Du kan bytte mellom moduser under en økt ved å bruke _Tab_-tasten. Eller din konfigurerte `switch_mode` nøkkelbinding.
Se også: [Formatters](/docs/formatters) for informasjon om konfigurasjon av kodeformatering.
---
## Konfigurer
Du kan tilpasse de innebygde modusene eller lage dine egne gjennom konfigurasjon. Modi kan konfigureres på to måter:
### JSON Konfigurasjon
Konfigurer moduser i konfigurasjonsfilen `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mode": {
"build": {
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
}
}
}
```
### Markdown-konfigurasjon
Du kan også definere moduser ved å bruke markdown-filer. Plasser dem i:
- Globalt: `~/.config/opencode/modes/`
- Prosjekt: `.opencode/modes/`
```markdown title="~/.config/opencode/modes/review.md"
---
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
tools:
write: false
edit: false
bash: false
---
You are in code review mode. Focus on:
- Code quality and best practices
- Potential bugs and edge cases
- Performance implications
- Security considerations
Provide constructive feedback without making direct changes.
```
Markdown-filnavnet blir modusnavnet (f.eks. `review.md` oppretter en `review`-modus).
La oss se på disse konfigurasjonsalternativene i detalj.
---
### Modell
Bruk `model`-konfigurasjonen for å overstyre standardmodellen for denne modusen. Nyttig for bruk av ulike modeller optimalisert for ulike oppgaver. For eksempel en raskere modell for planlegging, en mer kapabel modell for implementering.
```json title="opencode.json"
{
"mode": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
---
### Temperatur
Kontroller tilfeldigheten og kreativiteten til AIs svar med `temperature`-konfigurasjonen. Lavere verdier gjør svarene mer fokuserte og deterministiske, mens høyere verdier øker kreativiteten og variasjonen.
```json title="opencode.json"
{
"mode": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Temperaturverdier varierer vanligvis fra 0,0 til 1,0:
- **0.0-0.2**: Veldig fokuserte og deterministiske svar, ideell for kodeanalyse og planlegging
- **0,3-0,5**: Balanserte svar med litt kreativitet, bra for generelle utviklingsoppgaver
- **0.6-1.0**: Mer kreative og varierte svar, nyttig for idédugnad og utforskning
```json title="opencode.json"
{
"mode": {
"analyze": {
"temperature": 0.1,
"prompt": "{file:./prompts/analysis.txt}"
},
"build": {
"temperature": 0.3
},
"brainstorm": {
"temperature": 0.7,
"prompt": "{file:./prompts/creative.txt}"
}
}
}
```
Hvis ingen temperatur er spesifisert, bruker opencode modellspesifikke standarder (vanligvis 0 for de fleste modeller, 0,55 for Qwen-modeller).
---
### Spør
Spesifiser en tilpasset systemmeldingsfil for denne modusen med `prompt`-konfigurasjonen. Spørrefilen skal inneholde instruksjoner som er spesifikke for modusens formål.
```json title="opencode.json"
{
"mode": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Denne banen er i forhold til hvor konfigurasjonsfilen er plassert. Så dette fungerer for
både den globale opencode-konfigurasjonen og den prosjektspesifikke konfigurasjonen.
---
### Verktøy
Kontroller hvilke verktøy som er tilgjengelige i denne modusen med `tools`-konfigurasjonen. Du kan aktivere eller deaktivere spesifikke verktøy ved å sette dem til `true` eller `false`.
```json
{
"mode": {
"readonly": {
"tools": {
"write": false,
"edit": false,
"bash": false,
"read": true,
"grep": true,
"glob": true
}
}
}
}
```
Hvis ingen verktøy er spesifisert, er alle verktøy aktivert som standard.
---
#### Tilgjengelige verktøy
Her er alle verktøyene som kan kontrolleres gjennom moduskonfigurasjonen.
| Verktøy | Beskrivelse |
| ----------- | ----------------------- |
| `bash` | Utfør skallkommandoer |
| `edit` | Endre eksisterende filer |
| `write` | Opprett nye filer |
| `read` | Les filinnhold |
| `grep` | Søk filinnhold |
| `glob` | Finn filer etter mønster |
| `list` | Liste kataloginnhold |
| `patch` | Bruk patcher på filer |
| `todowrite` | Administrer gjøremålslister |
| `todoread` | Les gjøremålslister |
| `webfetch` | Hent nettinnhold |
---
## Egendefinerte moduser
Du kan lage dine egne tilpassede moduser ved å legge dem til konfigurasjonen. Her er eksempler som bruker begge tilnærmingene:
### Bruker JSON konfigurasjon
```json title="opencode.json" {4-14}
{
"$schema": "https://opencode.ai/config.json",
"mode": {
"docs": {
"prompt": "{file:./prompts/documentation.txt}",
"tools": {
"write": true,
"edit": true,
"bash": false,
"read": true,
"grep": true,
"glob": true
}
}
}
}
```
### Bruker markdown-filer
Lag modusfiler i `.opencode/modes/` for prosjektspesifikke moduser eller `~/.config/opencode/modes/` for globale moduser:
```markdown title=".opencode/modes/debug.md"
---
temperature: 0.1
tools:
bash: true
read: true
grep: true
write: false
edit: false
---
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
Focus on:
- Understanding the problem through careful analysis
- Using bash commands to inspect system state
- Reading relevant files and logs
- Searching for patterns and anomalies
- Providing clear explanations of findings
Do not make any changes to files. Only investigate and report.
```
```markdown title="~/.config/opencode/modes/refactor.md"
---
model: anthropic/claude-sonnet-4-20250514
temperature: 0.2
tools:
edit: true
read: true
grep: true
glob: true
---
You are in refactoring mode. Focus on improving code quality without changing functionality.
Priorities:
- Improve code readability and maintainability
- Apply consistent naming conventions
- Reduce code duplication
- Optimize performance where appropriate
- Ensure all tests continue to pass
```
---
### Brukstilfeller
Her er noen vanlige brukstilfeller for forskjellige moduser.
- **Byggemodus**: Fullt utviklingsarbeid med alle verktøy aktivert
- **Planmodus**: Analyse og planlegging uten å gjøre endringer
- **Gjennomgangsmodus**: Kodegjennomgang med skrivebeskyttet tilgang pluss dokumentasjonsverktøy
- **Feilsøkingsmodus**: Fokusert på etterforskning med bash- og leseverktøy aktivert
- **Dokumentmodus**: Dokumentasjonsskriving med filoperasjoner, men ingen systemkommandoer
Du kan også finne at forskjellige modeller er gode for forskjellige brukstilfeller.

View File

@@ -0,0 +1,57 @@
---
title: Nettverk
description: Konfigurer proxyer og tilpassede sertifikater.
---
OpenCode støtter standard proxy-miljøvariabler og tilpassede sertifikater for bedriftsnettverksmiljøer.
---
## Proxy
OpenCode respekterer standard proxy-miljøvariabler.
```bash
# HTTPS proxy (recommended)
export HTTPS_PROXY=https://proxy.example.com:8080
# HTTP proxy (if HTTPS not available)
export HTTP_PROXY=http://proxy.example.com:8080
# Bypass proxy for local server (required)
export NO_PROXY=localhost,127.0.0.1
```
:::forsiktighet
TUI kommuniserer med en lokal HTTP server. Du må omgå proxyen for denne tilkoblingen for å forhindre rutingsløyfer.
:::
Du kan konfigurere serverens port og vertsnavn ved å bruke [CLI flagg](/docs/cli#run).
---
### Autentiser
Hvis proxyen din krever grunnleggende autentisering, inkluderer legitimasjon i URL.
```bash
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
```
:::forsiktighet
Unngå hardkoding av passord. Bruk miljøvariabler eller sikker lagring av legitimasjon.
:::
For proxyer som krever avansert autentisering som NTLM eller Kerberos, bør du vurdere å bruke en LLM Gateway som støtter autentiseringsmetoden din.
---
## Egendefinerte sertifikater
Hvis bedriften din bruker egendefinerte CA-er for HTTPS-tilkoblinger, konfigurer OpenCode til å stole på dem.
```bash
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
```
Dette fungerer for både proxy-tilkoblinger og direkte API-tilgang.

View File

@@ -0,0 +1,237 @@
---
title: Tillatelser
description: Kontroller hvilke handlinger som krever godkjenning for å kjøre.
---
OpenCode bruker `permission`-konfigurasjonen for å bestemme om en gitt handling skal kjøres automatisk, spørre deg eller blokkeres.
Fra og med `v1.1.1` er den eldre `tools` boolske konfigurasjonen avviklet og har blitt slått sammen til `permission`. Den gamle `tools`-konfigurasjonen støttes fortsatt for bakoverkompatibilitet.
---
## Handlinger
Hver tillatelsesregel løses til en av:
- `"allow"` — kjør uten godkjenning
- `"ask"` — be om godkjenning
- `"deny"` — blokker handlingen
---
## Konfigurasjon
Du kan angi tillatelser globalt (med `*`), og overstyre spesifikke verktøy.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Du kan også angi alle tillatelser samtidig:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Granulære regler (objektsyntaks)
For de fleste tillatelser kan du bruke et objekt til å bruke forskjellige handlinger basert på verktøyinndata.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}
```
Regler evalueres etter mønstermatch, med **siste samsvarende regel som vinner**. Et vanlig mønster er å sette oppsamlingsregelen `"*"` først, og mer spesifikke regler etter den.
### Jokertegn
Tillatelsesmønstre bruker enkel jokertegnsamsvar:
- `*` samsvarer med null eller flere av alle tegn
- `?` samsvarer med nøyaktig ett tegn
- Alle andre karakterer samsvarer bokstavelig talt
### Utvidelse av hjemmekatalog
Du kan bruke `~` eller `$HOME` i starten av et mønster for å referere til hjemmekatalogen din. Dette er spesielt nyttig for [`external_directory`](#external-directories) regler.
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Eksterne kataloger
Bruk `external_directory` for å tillate verktøyanrop som berører stier utenfor arbeidskatalogen der OpenCode ble startet. Dette gjelder alle verktøy som tar en bane som input (for eksempel `read`, `edit`, `list`, `glob`, `grep` og mange `bash`-kommandoer).
Hjemmeutvidelse (som `~/...`) påvirker bare hvordan et mønster skrives. Den gjør ikke en ekstern bane til en del av det gjeldende arbeidsområdet, så stier utenfor arbeidskatalogen må fortsatt tillates via `external_directory`.
For eksempel gir dette tilgang til alt under `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Enhver katalog som er tillatt her, arver de samme standardinnstillingene som gjeldende arbeidsområde. Siden [`read` er standard til `allow`](#defaults), er lesing også tillatt for oppføringer under `external_directory` med mindre overstyrt. Legg til eksplisitte regler når et verktøy skal begrenses i disse banene, for eksempel blokkering av redigeringer mens du beholder lesninger:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
Hold listen fokusert på klarerte baner, og lag ekstra tillat eller avslå regler etter behov for andre verktøy (for eksempel `bash`).
---
## Tilgjengelige tillatelser
OpenCode-tillatelser tastes inn etter verktøynavn, pluss et par sikkerhetsvakter:
- `read` — lesing av en fil (tilsvarer filbanen)
- `edit` — alle filendringer (dekker `edit`, `write`, `patch`, `multiedit`)
- `glob` — fil-globing (tilsvarer glob-mønsteret)
- `grep` — innholdssøk (samsvarer med regex-mønsteret)
- `list` — viser filer i en katalog (tilsvarer katalogbanen)
- `bash` — kjører skallkommandoer (matcher analyserte kommandoer som `git status --porcelain`)
- `task` — lansering av subagenter (tilsvarer subagenttypen)
- `skill` — laster en ferdighet (tilsvarer ferdighetsnavnet)
- `lsp` — kjører LSP-spørringer (for øyeblikket ikke-granulære)
- `todoread`, `todowrite` — lesing/oppdatering av gjøremålslisten
- `webfetch` — henter en URL (tilsvarer URL)
- `websearch`, `codesearch` - nett-/kodesøk (samsvarer med søket)
- `external_directory` - utløses når et verktøy berører stier utenfor prosjektets arbeidskatalog
- `doom_loop` — utløses når det samme verktøykallet gjentas 3 ganger med identisk inngang
---
## Standard
Hvis du ikke spesifiserer noe, starter OpenCode fra tillatte standardinnstillinger:
- De fleste tillatelser er `"allow"` som standard.
- `doom_loop` og `external_directory` er standard til `"ask"`.
- `read` er `"allow"`, men `.env` filer nektes som standard:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Hva "Spør" gjør
Når OpenCode ber om godkjenning, gir UI tre utfall:
- `once` — godkjenne nettopp denne forespørselen
- `always` — godkjenn fremtidige forespørsler som samsvarer med de foreslåtte mønstrene (for resten av den nåværende OpenCode-økten)
- `reject` — avslå forespørselen
Settet med mønstre som `always` vil godkjenne, leveres av verktøyet (for eksempel, bash-godkjenninger hvitlister vanligvis et trygt kommandoprefiks som `git status*`).
---
## Agenter
Du kan overstyre tillatelser per agent. Agenttillatelser slås sammen med den globale konfigurasjonen, og agentregler har forrang. [Finn ut mer](/docs/agents#permissions) om agenttillatelser.
:::note
Se avsnittet [Granular Rules (Object Syntax)](#granular-rules-object-syntax) ovenfor for mer detaljerte eksempler på mønstertilpasning.
:::
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}
```
Du kan også konfigurere agenttillatelser i Markdown:
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.
```
:::tupp
Bruk mønstertilpasning for kommandoer med argumenter. `"grep *"` tillater `grep pattern file.txt`, mens `"grep"` alene ville blokkert den. Kommandoer som `git status` fungerer for standard oppførsel, men krever eksplisitt tillatelse (som `"git status *"`) når argumenter sendes.
:::

View File

@@ -0,0 +1,385 @@
---
title: Plugins
description: Skriv dine egne plugins for å utvide OpenCode.
---
Plugins lar deg utvide OpenCode ved å koble til ulike arrangementer og tilpasse atferd. Du kan lage plugins for å legge til nye funksjoner, integrere med eksterne tjenester eller endre OpenCodes standardoppførsel.
For eksempler, sjekk ut [plugins](/docs/ecosystem#plugins) opprettet av fellesskapet.
---
## Bruk en plugin
Det er to måter å laste inn plugins.
---
### Fra lokale filer
Plasser JavaScript- eller TypeScript-filer i plugin-katalogen.
- `.opencode/plugins/` - Programtillegg på prosjektnivå
- `~/.config/opencode/plugins/` - Globale plugins
Filer i disse katalogene lastes automatisk ved oppstart.
---
### Fra npm
Spesifiser npm-pakker i konfigurasjonsfilen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
}
```
Både vanlige og scoped npm-pakker støttes.
Bla gjennom tilgjengelige plugins i [økosystemet](/docs/ecosystem#plugins).
---
### Hvordan plugins installeres
**npm-plugins** installeres automatisk ved hjelp av Bun ved oppstart. Pakker og deres avhengigheter er bufret i `~/.cache/opencode/node_modules/`.
**Lokale plugins** lastes direkte fra plugin-katalogen. For å bruke eksterne pakker, må du opprette en `package.json` i konfigurasjonskatalogen din (se [Dependencies](#dependencies)), eller publisere plugin-en til npm og [legg den til i konfigurasjonen din](/docs/config#plugins).
---
### Last inn ordre
Plugins lastes inn fra alle kilder og alle kroker kjøres i rekkefølge. Lastrekkefølgen er:
1. Global konfigurasjon (`~/.config/opencode/opencode.json`)
2. Prosjektkonfigurasjon (`opencode.json`)
3. Global plugin-katalog (`~/.config/opencode/plugins/`)
4. Prosjektpluginkatalog (`.opencode/plugins/`)
Dupliserte npm-pakker med samme navn og versjon lastes inn én gang. Imidlertid lastes en lokal plugin og en npm plugin med lignende navn begge separat.
---
## Opprett en plugin
En plugin er en **JavaScript/TypeScript-modul** som eksporterer en eller flere plugin-moduler
funksjoner. Hver funksjon mottar et kontekstobjekt og returnerer et krokobjekt.
---
### Avhengigheter
Lokale plugins og tilpassede verktøy kan bruke eksterne npm-pakker. Legg til en `package.json` til konfigurasjonskatalogen med avhengighetene du trenger.
```json title=".opencode/package.json"
{
"dependencies": {
"shescape": "^2.1.0"
}
}
```
OpenCode kjører `bun install` ved oppstart for å installere disse. Programtilleggene og verktøyene dine kan deretter importere dem.
```ts title=".opencode/plugins/my-plugin.ts"
import { escape } from "shescape"
export const MyPlugin = async (ctx) => {
return {
"tool.execute.before": async (input, output) => {
if (input.tool === "bash") {
output.args.command = escape(output.args.command)
}
},
}
}
```
---
### Grunnleggende struktur
```js title=".opencode/plugins/example.js"
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
console.log("Plugin initialized!")
return {
// Hook implementations go here
}
}
```
Plugin-funksjonen mottar:
- `project`: Gjeldende prosjektinformasjon.
- `directory`: Gjeldende arbeidskatalog.
- `worktree`: Git-arbeidstrebanen.
- `client`: En OpenCode SDK klient for samhandling med AI.
- `$`: Buns [skall API](https://bun.com/docs/runtime/shell) for å utføre kommandoer.
---
### TypeScript-støtte
For TypeScript-plugins kan du importere typer fra plugin-pakken:
```ts title="my-plugin.ts" {1}
import type { Plugin } from "@opencode-ai/plugin"
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
return {
// Type-safe hook implementations
}
}
```
---
### Hendelser
Plugins kan abonnere på arrangementer som vist nedenfor i Eksempler-delen. Her er en liste over de forskjellige arrangementene som er tilgjengelige.
#### Kommandohendelser
- `command.executed`
#### Filhendelser
- `file.edited`
- `file.watcher.updated`
#### Installasjonshendelser
- `installation.updated`
#### LSP Hendelser
- `lsp.client.diagnostics`
- `lsp.updated`
#### Meldingshendelser
- `message.part.removed`
- `message.part.updated`
- `message.removed`
- `message.updated`
#### Tillatelseshendelser
- `permission.asked`
- `permission.replied`
#### Serverhendelser
- `server.connected`
#### Sesjonshendelser
- `session.created`
- `session.compacted`
- `session.deleted`
- `session.diff`
- `session.error`
- `session.idle`
- `session.status`
- `session.updated`
#### Todo-hendelser
- `todo.updated`
#### Shell-hendelser
- `shell.env`
#### Verktøyhendelser
- `tool.execute.after`
- `tool.execute.before`
#### TUI Hendelser
- `tui.prompt.append`
- `tui.command.execute`
- `tui.toast.show`
---
## Eksempler
Her er noen eksempler på plugins du kan bruke for å utvide opencode.
---
### Send varsler
Send varsler når visse hendelser inntreffer:
```js title=".opencode/plugins/notification.js"
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
return {
event: async ({ event }) => {
// Send notification on session completion
if (event.type === "session.idle") {
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
}
},
}
}
```
Vi bruker `osascript` for å kjøre AppleScript på macOS. Her bruker vi den til å sende varsler.
:::note
Hvis du bruker OpenCode-skrivebordsappen, kan den sende systemvarsler automatisk når et svar er klart eller når en økt feiler.
:::
---
### .env-beskyttelse
Hindre opencode fra å lese `.env` filer:
```javascript title=".opencode/plugins/env-protection.js"
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
return {
"tool.execute.before": async (input, output) => {
if (input.tool === "read" && output.args.filePath.includes(".env")) {
throw new Error("Do not read .env files")
}
},
}
}
```
---
### Injiser miljøvariabler
Injiser miljøvariabler i all skallutførelse (AI verktøy og brukerterminaler):
```javascript title=".opencode/plugins/inject-env.js"
export const InjectEnvPlugin = async () => {
return {
"shell.env": async (input, output) => {
output.env.MY_API_KEY = "secret"
output.env.PROJECT_ROOT = input.cwd
},
}
}
```
---
### Egendefinerte verktøy
Plugins kan også legge til egendefinerte verktøy til opencode:
```ts title=".opencode/plugins/custom-tools.ts"
import { type Plugin, tool } from "@opencode-ai/plugin"
export const CustomToolsPlugin: Plugin = async (ctx) => {
return {
tool: {
mytool: tool({
description: "This is a custom tool",
args: {
foo: tool.schema.string(),
},
async execute(args, context) {
const { directory, worktree } = context
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
},
}),
},
}
}
```
`tool`-hjelperen lager et tilpasset verktøy som opencode kan kalle. Den tar en Zod-skjemafunksjon og returnerer en verktøydefinisjon med:
- `description`: Hva verktøyet gjør
- `args`: Zod-skjema for verktøyets argumenter
- `execute`: Funksjon som kjører når verktøyet kalles
Dine egendefinerte verktøy vil være tilgjengelige for å OpenCode sammen med innebygde verktøy.
---
### Logging
Bruk `client.app.log()` i stedet for `console.log` for strukturert logging:
```ts title=".opencode/plugins/my-plugin.ts"
export const MyPlugin = async ({ client }) => {
await client.app.log({
body: {
service: "my-plugin",
level: "info",
message: "Plugin initialized",
extra: { foo: "bar" },
},
})
}
```
Nivåer: `debug`, `info`, `warn`, `error`. Se [SDK dokumentasjon](https://opencode.ai/docs/sdk) for detaljer.
---
### Komprimeringskroker
Tilpass konteksten inkludert når en økt komprimeres:
```ts title=".opencode/plugins/compaction.ts"
import type { Plugin } from "@opencode-ai/plugin"
export const CompactionPlugin: Plugin = async (ctx) => {
return {
"experimental.session.compacting": async (input, output) => {
// Inject additional context into the compaction prompt
output.context.push(`
## Custom Context
Include any state that should persist across compaction:
- Current task status
- Important decisions made
- Files being actively worked on
`)
},
}
}
```
`experimental.session.compacting`-kroken avfyres før LLM genererer et fortsettelsessammendrag. Bruk den til å injisere domenespesifikk kontekst som standard komprimeringsforespørsel ville gå glipp av.
Du kan også erstatte komprimeringsmeldingen helt ved å stille inn `output.prompt`:
```ts title=".opencode/plugins/custom-compaction.ts"
import type { Plugin } from "@opencode-ai/plugin"
export const CustomCompactionPlugin: Plugin = async (ctx) => {
return {
"experimental.session.compacting": async (input, output) => {
// Replace the entire compaction prompt
output.prompt = `
You are generating a continuation prompt for a multi-agent swarm session.
Summarize:
1. The current task and its status
2. Which files are being modified and by whom
3. Any blockers or dependencies between agents
4. The next steps to complete the work
Format as a structured prompt that a new agent can use to resume work.
`
},
}
}
```
Når `output.prompt` er angitt, erstatter den standard komprimeringsprompt fullstendig. `output.context`-matrisen ignoreres i dette tilfellet.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,180 @@
---
title: Regler
description: Set custom instructions for opencode.
---
Du kan gi tilpassede instruksjoner for å OpenCode ved å opprette en `AGENTS.md`-fil. Dette ligner på Cursors regler. Den inneholder instruksjoner som vil bli inkludert i LLMs kontekst for å tilpasse oppførselen til ditt spesifikke prosjekt.
---
## Initialiser
For å lage en ny `AGENTS.md` fil, kan du kjøre kommandoen `/init` i opencode.
:::tupp
Du bør overgi prosjektets `AGENTS.md`-fil til Git.
:::
Dette vil skanne prosjektet og alt dets innhold for å forstå hva prosjektet handler om og generere en `AGENTS.md`-fil med det. Dette hjelper opencode å navigere i prosjektet bedre.
Hvis du har en eksisterende `AGENTS.md`-fil, vil denne prøve å legge til den.
---
## Eksempel
Du kan også bare lage denne filen manuelt. Her er et eksempel på noen ting du kan legge inn i en `AGENTS.md`-fil.
```markdown title="AGENTS.md"
# SST v3 Monorepo Project
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
## Project Structure
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
- `sst.config.ts` - Main SST configuration with dynamic imports
## Code Standards
- Use TypeScript with strict mode enabled
- Shared code goes in `packages/core/` with proper exports configuration
- Functions go in `packages/functions/`
- Infrastructure should be split into logical files in `infra/`
## Monorepo Conventions
- Import shared modules using workspace names: `@my-app/core/example`
```
Vi legger til prosjektspesifikke instruksjoner her, og dette vil bli delt på tvers av teamet ditt.
---
## Typer
opencode støtter også lesing av `AGENTS.md`-filen fra flere steder. Og dette tjener forskjellige formål.
### Prosjekt
Plasser en `AGENTS.md` i prosjektroten for prosjektspesifikke regler. Disse gjelder kun når du arbeider i denne katalogen eller dens underkataloger.
### Globalt
Du kan også ha globale regler i en `~/.config/opencode/AGENTS.md`-fil. Dette blir brukt på alle opencode-økter.
Siden dette ikke er forpliktet til Git eller delt med teamet ditt, anbefaler vi å bruke dette til å spesifisere eventuelle personlige regler som LLM bør følge.
### Claude-kodekompatibilitet
For brukere som migrerer fra Claude Code, støtter OpenCode Claude Codes filkonvensjoner som fallbacks:
- **Prosjektregler**: `CLAUDE.md` i prosjektkatalogen din (brukes hvis ingen `AGENTS.md` eksisterer)
- **Globale regler**: `~/.claude/CLAUDE.md` (brukes hvis ingen `~/.config/opencode/AGENTS.md` eksisterer)
- **Skills**: `~/.claude/skills/` — se [Agent Skills](/docs/skills/) for detaljer
For å deaktivere Claude Code-kompatibilitet, sett en av disse miljøvariablene:
```bash
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
```
---
## Forrang
Når opencode starter, ser den etter regelfiler i denne rekkefølgen:
1. **Lokale filer** ved å gå opp fra gjeldende katalog (`AGENTS.md`, `CLAUDE.md`)
2. **Global fil** på `~/.config/opencode/AGENTS.md`
3. **Claude Code-fil** på `~/.claude/CLAUDE.md` (med mindre de er deaktivert)
Den første matchende filen vinner i hver kategori. For eksempel, hvis du har både `AGENTS.md` og `CLAUDE.md`, brukes bare `AGENTS.md`. På samme måte har `~/.config/opencode/AGENTS.md` forrang over `~/.claude/CLAUDE.md`.
---
## Egendefinerte instruksjoner
Du kan spesifisere egendefinerte instruksjonsfiler i din `opencode.json` eller den globale `~/.config/opencode/opencode.json`. Dette lar deg og teamet ditt gjenbruke eksisterende regler i stedet for å måtte duplisere dem til AGENTS.md.
Eksempel:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
Du kan også bruke eksterne URL-er for å laste instruksjoner fra nettet.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
}
```
Fjerninstruksjoner hentes med 5 sekunders tidsavbrudd.
Alle instruksjonsfilene er kombinert med `AGENTS.md`-filene dine.
---
## Refererer til eksterne filer
Selv om opencode ikke automatisk analyserer filreferanser i `AGENTS.md`, kan du oppnå lignende funksjonalitet på to måter:
### Bruker opencode.json
Den anbefalte tilnærmingen er å bruke feltet `instructions` i `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
}
```
### Manuelle instruksjoner i AGENTS.md
Du kan lære opencode å lese eksterne filer ved å gi eksplisitte instruksjoner i `AGENTS.md`. Her er et praktisk eksempel:
```markdown title="AGENTS.md"
# TypeScript Project Rules
## External File Loading
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
Instructions:
- Do NOT preemptively load all references - use lazy loading based on actual need
- When loaded, treat content as mandatory instructions that override defaults
- Follow references recursively when needed
## Development Guidelines
For TypeScript code style and best practices: @docs/typescript-guidelines.md
For React component architecture and hooks patterns: @docs/react-patterns.md
For REST API design and error handling: @docs/api-standards.md
For testing strategies and coverage requirements: @test/testing-guidelines.md
## General Guidelines
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
```
Denne tilnærmingen lar deg:
- Lag modulære, gjenbrukbare regelfiler
- Del regler på tvers av prosjekter via symbolkoblinger eller git-undermoduler
- Hold AGENTS.md kortfattet mens du refererer til detaljerte retningslinjer
- Sørg for at opencode laster filer kun når det er nødvendig for den spesifikke oppgaven
:::tupp
For monorepos eller prosjekter med delte standarder er bruk av `opencode.json` med glob-mønstre (som `packages/*/AGENTS.md`) mer vedlikeholdbart enn manuelle instruksjoner.
:::

View File

@@ -0,0 +1,391 @@
---
title: SDK
description: Typesikker JS-klient for åpen kodeserver.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
Åpenkoden JS/TS SDK gir en typesikker klient for samhandling med serveren.
Bruk den til å bygge integrasjoner og kontrollere opencode programmatisk.
[Finn ut mer](/docs/server) om hvordan serveren fungerer. For eksempler, sjekk ut [prosjektene](/docs/ecosystem#projects) bygget av fellesskapet.
---
## Installer
Installer SDK fra npm:
```bash
npm install @opencode-ai/sdk
```
---
## Opprett klient
Opprett en forekomst av opencode:
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()
```
Dette starter både en server og en klient
#### Alternativer
| Alternativ | Skriv | Beskrivelse | Standard |
| ---------- | ------------- | -------------------------------- | ----------- |
| `hostname` | `string` | Server vertsnavn | `127.0.0.1` |
| `port` | `number` | Serverport | `4096` |
| `signal` | `AbortSignal` | Avbryt signal for kansellering | `undefined` |
| `timeout` | `number` | Tidsavbrudd i ms for serverstart | `5000` |
| `config` | `Config` | Konfigurasjonsobjekt | `{}` |
---
## Konfig
Du kan sende et konfigurasjonsobjekt for å tilpasse virkemåten. Forekomsten henter fortsatt din `opencode.json`, men du kan overstyre eller legge til konfigurasjon inline:
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const opencode = await createOpencode({
hostname: "127.0.0.1",
port: 4096,
config: {
model: "anthropic/claude-3-5-sonnet-20241022",
},
})
console.log(`Server running at ${opencode.server.url}`)
opencode.server.close()
```
## Kun klient
Hvis du allerede har en kjørende forekomst av opencode, kan du opprette en klientforekomst for å koble til den:
```javascript
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})
```
#### Alternativer
| Alternativ | Skriv inn | Beskrivelse | Standard |
| --------------- | ---------- | ---------------------------------- | ----------------------- |
| `baseUrl` | `string` | URL av serveren | `http://localhost:4096` |
| `fetch` | `function` | Egendefinert hentingimplementering | `globalThis.fetch` |
| `parseAs` | `string` | Svarparsingmetode | `auto` |
| `responseStyle` | `string` | Returstil: `data` eller `fields` | `fields` |
| `throwOnError` | `boolean` | Kast feil i stedet for retur | `false` |
---
## Typer
SDK inkluderer TypeScript-definisjoner for alle API-typer. Importer dem direkte:
```typescript
import type { Session, Message, Part } from "@opencode-ai/sdk"
```
Alle typer er generert fra serverens OpenAPI-spesifikasjon og tilgjengelig i <a href={typesUrl}>types-filen</a>.
---
## Feil
SDK kan gi feil som du kan fange opp og håndtere:
```typescript
try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}
```
---
## APIer
SDK avslører alle server-APIer gjennom en typesikker klient.
---
### Globalt
| Metode | Beskrivelse | Svar |
| ----------------- | ---------------------------- | ------------------------------------ |
| `global.health()` | Sjekk serverhelse og versjon | `{ healthy: true, version: string }` |
---
#### Eksempler
```javascript
const health = await client.global.health()
console.log(health.data.version)
```
---
### App
| Metode | Beskrivelse | Svar |
| -------------- | -------------------------------- | ------------------------------------------- |
| `app.log()` | Skriv en loggoppføring | `boolean` |
| `app.agents()` | Liste alle tilgjengelige agenter | <a href={typesUrl}><code>Agent[]</code></a> |
---
#### Eksempler
```javascript
// Write a log entry
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operation completed",
},
})
// List available agents
const agents = await client.app.agents()
```
---
### Prosjekt
| Metode | Beskrivelse | Svar |
| ------------------- | -------------------------- | ---------------------------------------------- |
| `project.list()` | Liste over alle prosjekter | <a href={typesUrl}><code>Prosjekt[]</code></a> |
| `project.current()` | Få nåværende prosjekt | <a href={typesUrl}><code>Prosjekt</code></a> |
---
#### Eksempler
```javascript
// List all projects
const projects = await client.project.list()
// Get current project
const currentProject = await client.project.current()
```
---
### Sti
| Metode | Beskrivelse | Svar |
| ------------ | ----------------- | ---------------------------------------- |
| `path.get()` | Få gjeldende bane | <a href={typesUrl}><code>Path</code></a> |
---
#### Eksempler
```javascript
// Get current path information
const pathInfo = await client.path.get()
```
---
### Konfig
| Metode | Beskrivelse | Svar |
| -------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `config.get()` | Få konfigurasjonsinformasjon | <a href={typesUrl}><code>Config</code></a> |
| `config.providers()` | Liste leverandører og standardmodeller | `{ providers: `<a href={typesUrl}><code>Tilbyder[]</code></a>`, default: { [key: string]: string } }` |
---
#### Eksempler
```javascript
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()
```
---
### økter
| Metode | Beskrivelse | Merknader |
| ---------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `session.list()` | Liste økter | Returnerer <a href={typesUrl}><code>Session[]</code></a> |
| `session.get({ path })` | Få økt | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `session.children({ path })` | Liste over barneøkter | Returnerer <a href={typesUrl}><code>Session[]</code></a> |
| `session.create({ body })` | Opprett økt | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `session.delete({ path })` | Slett økt | Returnerer `boolean` |
| `session.update({ path, body })` | Oppdater øktegenskaper | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `session.init({ path, body })` | Analyser appen og lag `AGENTS.md` | Returnerer `boolean` |
| `session.abort({ path })` | Avbryt en løpeøkt | Returnerer `boolean` |
| `session.share({ path })` | Del økten | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `session.unshare({ path })` | Slutt å dele økten | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `session.summarize({ path, body })` | Oppsummer økten | Returnerer `boolean` |
| `session.messages({ path })` | Liste meldinger i en økt | Returnerer `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Del[]</code></a>`}[]` |
| `session.message({ path })` | Få meldingsdetaljer | Returnerer `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Del[]</code></a>`}` |
| `session.prompt({ path, body })` | Send melding | `body.noReply: true` returnerer UserMessage (kun kontekst). Standard returnerer <a href={typesUrl}><code>AssistantMessage</code></a> med AI svar |
| `session.command({ path, body })` | Send kommando til økt | Returnerer `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Del[]</code></a>`}` |
| `session.shell({ path, body })` | Kjør en shell-kommando | Returnerer <a href={typesUrl}><code>AssistantMessage</code></a> |
| `session.revert({ path, body })` | Tilbakestill en melding | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `session.unrevert({ path })` | Gjenopprett tilbakestilte meldinger | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `postSessionByIdPermissionsByPermissionId({ path, body })` | Svar på en tillatelsesforespørsel | Returnerer `boolean` |
---
#### Eksempler
```javascript
// Create and manage sessions
const session = await client.session.create({
body: { title: "My session" },
})
const sessions = await client.session.list()
// Send a prompt message
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Hello!" }],
},
})
// Inject context without triggering AI response (useful for plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "You are a helpful assistant." }],
},
})
```
---
### Filer
| Metode | Beskrivelse | Svar |
| ------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------ |
| `find.text({ query })` | Søk etter tekst i filer | En rekke matchobjekter med `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `find.files({ query })` | Finn filer og kataloger etter navn | `string[]` (baner) |
| `find.symbols({ query })` | Finn arbeidsområdesymboler | <a href={typesUrl}><code>Symbol[]</code></a> |
| `file.read({ query })` | Les en fil | `{ type: "raw" \| "patch", content: string }` |
| `file.status({ query? })` | Få status for sporede filer | <a href={typesUrl}><code>Fil[]</code></a> |
`find.files` støtter noen få valgfrie søkefelt:
- `type`: `"file"` eller `"directory"`
- `directory`: overstyr prosjektroten for søket
- `limit`: maksimalt antall resultater (1200)
---
#### Eksempler
```javascript
// Search and read files
const textResults = await client.find.text({
query: { pattern: "function.*opencode" },
})
const files = await client.find.files({
query: { query: "*.ts", type: "file" },
})
const directories = await client.find.files({
query: { query: "packages", type: "directory", limit: 20 },
})
const content = await client.file.read({
query: { path: "src/index.ts" },
})
```
---
### TUI
| Metode | Beskrivelse | Svar |
| ------------------------------ | ---------------------------- | --------- |
| `tui.appendPrompt({ body })` | Legg til tekst i ledeteksten | `boolean` |
| `tui.openHelp()` | Åpne hjelpedialogen | `boolean` |
| `tui.openSessions()` | Åpne øktvelgeren | `boolean` |
| `tui.openThemes()` | Åpne temavelgeren | `boolean` |
| `tui.openModels()` | Åpne modellvelgeren | `boolean` |
| `tui.submitPrompt()` | Send inn gjeldende ledetekst | `boolean` |
| `tui.clearPrompt()` | Fjern ledeteksten | `boolean` |
| `tui.executeCommand({ body })` | Utfør en kommando | `boolean` |
| `tui.showToast({ body })` | Vis toastvarsel | `boolean` |
---
#### Eksempler
```javascript
// Control TUI interface
await client.tui.appendPrompt({
body: { text: "Add this to prompt" },
})
await client.tui.showToast({
body: { message: "Task completed", variant: "success" },
})
```
---
### Auth
| Metode | Beskrivelse | Svar |
| ------------------- | ------------------------------- | --------- |
| `auth.set({ ... })` | Angi autentiseringslegitimasjon | `boolean` |
---
#### Eksempler
```javascript
await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})
```
---
### Hendelser
| Metode | Beskrivelse | Svar |
| ------------------- | ------------------------------ | ------------------------------ |
| `event.subscribe()` | Server-sendte hendelser stream | Server-sendte hendelser stream |
---
#### Eksempler
```javascript
// Listen to real-time events
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}
```

View File

@@ -0,0 +1,287 @@
---
title: Server
description: Samhandle med opencode-server over HTTP.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
Kommandoen `opencode serve` kjører en hodeløs HTTP-server som avslører et OpenAPI-endepunkt som en opencode-klient kan bruke.
---
### Bruk
```bash
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
```
#### Alternativer
| Flagg | Beskrivelse | Standard |
| --------------- | ---------------------------------------------- | ---------------- |
| `--port` | Port å lytte på | `4096` |
| `--hostname` | Vertsnavn å lytte på | `127.0.0.1` |
| `--mdns` | Aktiver mDNS-oppdagelse | `false` |
| `--mdns-domain` | Egendefinert domenenavn for mDNS-tjeneste | `opencode.local` |
| `--cors` | Ytterligere nettleseropprinnelse for å tillate | `[]` |
`--cors` kan passeres flere ganger:
```bash
opencode serve --cors http://localhost:5173 --cors https://app.example.com
```
---
### Autentisering
Sett `OPENCODE_SERVER_PASSWORD` for å beskytte serveren med HTTP grunnleggende autentisering. Brukernavnet er standard til `opencode`, eller sett `OPENCODE_SERVER_USERNAME` for å overstyre det. Dette gjelder både `opencode serve` og `opencode web`.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve
```
---
### Slik fungerer det
Når du kjører `opencode` starter den en TUI og en server. Der TUI er
klient som snakker med serveren. Serveren viser en OpenAPI 3.1-spesifikasjon
endepunkt. Dette endepunktet brukes også til å generere en [SDK](/docs/sdk).
:::tupp
Bruk opencode-serveren til å samhandle med opencode programmatisk.
:::
Denne arkitekturen lar opencode støtte flere klienter og lar deg samhandle med opencode programmatisk.
Du kan kjøre `opencode serve` for å starte en frittstående server. Hvis du har
opencode TUI kjører, vil `opencode serve` starte en ny server.
---
#### Koble til en eksisterende server
Når du starter TUI, tildeler den tilfeldig en port og vertsnavn. Du kan i stedet sende inn `--hostname` og `--port` [flagg](/docs/cli). Bruk deretter denne til å koble til serveren.
[`/tui`](#tui) endepunktet kan brukes til å kjøre TUI gjennom serveren. Du kan for eksempel forhåndsutfylle eller kjøre en forespørsel. Dette oppsettet brukes av OpenCode [IDE](/docs/ide) plugins.
---
## Spes
Serveren publiserer en OpenAPI 3.1-spesifikasjon som kan vises på:
```
http://<hostname>:<port>/doc
```
For eksempel `http://localhost:4096/doc`. Bruk spesifikasjonen til å generere klienter eller inspisere forespørsels- og svartyper. Eller se den i en Swagger-utforsker.
---
## APIer
OpenCode-serveren viser følgende APIer.
---
### Globalt
| Metode | Sti | Beskrivelse | Svar |
| ------ | ---------------- | -------------------------------- | ------------------------------------ |
| `GET` | `/global/health` | Få serverhelse og versjon | `{ healthy: true, version: string }` |
| `GET` | `/global/event` | Få globale hendelser (SSE strøm) | Eventstrøm |
---
### Prosjekt
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------------------ | --------------------------- | ---------------------------------------------- |
| `GET` | `/project` | Liste over alle prosjekter | <a href={typesUrl}><code>Prosjekt[]</code></a> |
| `GET` | `/project/current` | Få det nåværende prosjektet | <a href={typesUrl}><code>Prosjekt</code></a> |
---
### Bane og VCS
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------- | ---------------------------------- | ------------------------------------------- |
| `GET` | `/path` | Få gjeldende bane | <a href={typesUrl}><code>Path</code></a> |
| `GET` | `/vcs` | Få VCS info for gjeldende prosjekt | <a href={typesUrl}><code>VcsInfo</code></a> |
---
### Forekomst
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------------------- | ------------------------ | --------- |
| `POST` | `/instance/dispose` | Kast gjeldende forekomst | `boolean` |
---
### Konfig
| Metode | Sti | Beskrivelse | Svar |
| ------- | ------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------- |
| `GET` | `/config` | Få konfigurasjonsinformasjon | <a href={typesUrl}><code>Config</code></a> |
| `PATCH` | `/config` | Oppdater konfigurasjon | <a href={typesUrl}><code>Config</code></a> |
| `GET` | `/config/providers` | Liste leverandører og standardmodeller | `{ providers: `<a href={typesUrl}>Tilbyder[]</a>`, default: { [key: string]: string } }` |
---
### Leverandør
| Metode | Sti | Beskrivelse | Svar |
| ------ | -------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------- |
| `GET` | `/provider` | Liste alle leverandører | `{ all: `<a href={typesUrl}>Tilbyder[]</a>`, default: {...}, connected: string[] }` |
| `GET` | `/provider/auth` | Få leverandørautentiseringsmetoder | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
| `POST` | `/provider/{id}/oauth/authorize` | Autoriser en leverandør ved å bruke OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
| `POST` | `/provider/{id}/oauth/callback` | Håndtere OAuth-tilbakeringing for en leverandør | `boolean` |
---
### økter
| Metode | Sti | Beskrivelse | Merknader |
| -------- | ---------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------- |
| `GET` | `/session` | Liste alle økter | Returnerer <a href={typesUrl}><code>Session[]</code></a> |
| `POST` | `/session` | Opprett en ny økt | body: `{ parentID?, title? }`, returnerer <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/status` | Få øktstatus for alle økter | Returnerer `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
| `GET` | `/session/:id` | Få øktdetaljer | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `DELETE` | `/session/:id` | Slett en økt og alle dens data | Returnerer `boolean` |
| `PATCH` | `/session/:id` | Oppdater øktegenskaper | body: `{ title? }`, returnerer <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/:id/children` | Få en økts barneøkter | Returnerer <a href={typesUrl}><code>Session[]</code></a> |
| `GET` | `/session/:id/todo` | Få gjøremålslisten for en økt | Returnerer <a href={typesUrl}><code>Todo[]</code></a> |
| `POST` | `/session/:id/init` | Analyser appen og lag `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returnerer `boolean` |
| `POST` | `/session/:id/fork` | Fork en eksisterende økt ved en melding | body: `{ messageID? }`, returnerer <a href={typesUrl}><code>Session</code></a> |
| `POST` | `/session/:id/abort` | Avbryt en løpeøkt | Returnerer `boolean` |
| `POST` | `/session/:id/share` | Del en økt | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `DELETE` | `/session/:id/share` | Slutt å dele en økt | Returnerer <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/:id/diff` | Få diff for denne økten | spørring: `messageID?`, returnerer <a href={typesUrl}><code>FileDiff[]</code></a> |
| `POST` | `/session/:id/summarize` | Oppsummer økten | body: `{ providerID, modelID }`, returnerer `boolean` |
| `POST` | `/session/:id/revert` | Tilbakestill en melding | body: `{ messageID, partID? }`, returnerer `boolean` |
| `POST` | `/session/:id/unrevert` | Gjenopprett alle tilbakestilte meldinger | Returnerer `boolean` |
| `POST` | `/session/:id/permissions/:permissionID` | Svar på en tillatelsesforespørsel | body: `{ response, remember? }`, returnerer `boolean` |
---
### Meldinger
| Metode | Sti | Beskrivelse | Merknader |
| ------ | --------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `GET` | `/session/:id/message` | Liste meldinger i en økt | spørring: `limit?`, returnerer `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
| `POST` | `/session/:id/message` | Send en melding og vent på svar | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returnerer `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `GET` | `/session/:id/message/:messageID` | Få meldingsdetaljer | Returnerer `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Del[]</a>`}` |
| `POST` | `/session/:id/prompt_async` | Send en melding asynkront (ingen vent) | body: samme som `/session/:id/message`, returnerer `204 No Content` |
| `POST` | `/session/:id/command` | Utfør en skråstrek-kommando | body: `{ messageID?, agent?, model?, command, arguments }`, returnerer `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `POST` | `/session/:id/shell` | Kjør en shell-kommando | body: `{ agent, model?, command }`, returnerer `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
---
### Kommandoer
| Metode | Sti | Beskrivelse | Svar |
| ------ | ---------- | --------------------- | ---------------------------------------------- |
| `GET` | `/command` | Liste alle kommandoer | <a href={typesUrl}><code>Kommando[]</code></a> |
---
### Filer
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------ |
| `GET` | `/find?pattern=<pat>` | Søk etter tekst i filer | En rekke matchobjekter med `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `GET` | `/find/file?query=<q>` | Finn filer og kataloger etter navn | `string[]` (baner) |
| `GET` | `/find/symbol?query=<q>` | Finn arbeidsområdesymboler | <a href={typesUrl}><code>Symbol[]</code></a> |
| `GET` | `/file?path=<path>` | Liste filer og kataloger | <a href={typesUrl}><code>FilNode[]</code></a> |
| `GET` | `/file/content?path=<p>` | Les en fil | <a href={typesUrl}><code>Filinnhold</code></a> |
| `GET` | `/file/status` | Få status for sporede filer | <a href={typesUrl}><code>Fil[]</code></a> |
#### `/find/file` spørringsparametere
- `query` (obligatorisk) - søkestreng (uklar samsvar)
- `type` (valgfritt) - begrense resultatene til `"file"` eller `"directory"`
- `directory` (valgfritt) — overstyr prosjektroten for søket
- `limit` (valgfritt) - maks. resultater (1200)
- `dirs` (valgfritt) - eldre flagg (`"false"` returnerer kun filer)
---
### Verktøy (eksperimentelt)
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
| `GET` | `/experimental/tool/ids` | Vis alle verktøy-ID-er | <a href={typesUrl}><code>ToolIDs</code></a> |
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | List verktøy med JSON-skjemaer for en modell | <a href={typesUrl}><code>ToolList</code></a> |
---
### LSP, formattere og MCP
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------------ | ---------------------------- | -------------------------------------------------------- |
| `GET` | `/lsp` | Få LSP serverstatus | <a href={typesUrl}><code>LSPStatus[]</code></a> |
| `GET` | `/formatter` | Få formateringsstatus | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
| `GET` | `/mcp` | Få MCP serverstatus | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
| `POST` | `/mcp` | Legg til MCP server dynamisk | body: `{ name, config }`, returnerer MCP statusobjekt |
---
### Agenter
| Metode | Sti | Beskrivelse | Svar |
| ------ | -------- | -------------------------------- | ------------------------------------------- |
| `GET` | `/agent` | Liste alle tilgjengelige agenter | <a href={typesUrl}><code>Agent[]</code></a> |
---
### Logging
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------ | --------------------------------------------------------------------- | --------- |
| `POST` | `/log` | Skriv loggoppføring. Brødtekst: `{ service, level, message, extra? }` | `boolean` |
---
### TUI
| Metode | Sti | Beskrivelse | Svar |
| ------ | ----------------------- | ------------------------------------------- | -------------------------- |
| `POST` | `/tui/append-prompt` | Legg til tekst i ledeteksten | `boolean` |
| `POST` | `/tui/open-help` | Åpne hjelpedialogen | `boolean` |
| `POST` | `/tui/open-sessions` | Åpne øktvelgeren | `boolean` |
| `POST` | `/tui/open-themes` | Åpne temavelgeren | `boolean` |
| `POST` | `/tui/open-models` | Åpne modellvelgeren | `boolean` |
| `POST` | `/tui/submit-prompt` | Send inn gjeldende ledetekst | `boolean` |
| `POST` | `/tui/clear-prompt` | Fjern ledeteksten | `boolean` |
| `POST` | `/tui/execute-command` | Utfør en kommando (`{ command }`) | `boolean` |
| `POST` | `/tui/show-toast` | Vis toast (`{ title?, message, variant }`) | `boolean` |
| `GET` | `/tui/control/next` | Vent på neste kontrollforespørsel | Kontrollforespørselsobjekt |
| `POST` | `/tui/control/response` | Svar på en kontrollforespørsel (`{ body }`) | `boolean` |
---
### Auth
| Metode | Sti | Beskrivelse | Svar |
| ------ | ----------- | --------------------------------------------------------------------------- | --------- |
| `PUT` | `/auth/:id` | Angi autentiseringslegitimasjon. Brødtekst må samsvare med leverandørskjema | `boolean` |
---
### Hendelser
| Metode | Sti | Beskrivelse | Svar |
| ------ | -------- | -------------------------------------------------------------------------------------------------- | ------------------------------ |
| `GET` | `/event` | Server-sendte hendelsesstrøm. Første arrangement er `server.connected`, deretter bussarrangementer | Server-sendte hendelser stream |
---
### Dokumenter
| Metode | Sti | Beskrivelse | Svar |
| ------ | ------ | ------------------------- | ----------------------------------- |
| `GET` | `/doc` | OpenAPI 3.1-spesifikasjon | HTML side med OpenAPI-spesifikasjon |

View File

@@ -0,0 +1,128 @@
---
title: Dele
description: Del dine OpenCode-samtaler.
---
OpenCodes delingsfunksjon lar deg lage offentlige lenker til dine OpenCode-samtaler, slik at du kan samarbeide med lagkamerater eller få hjelp fra andre.
:::note
Delte samtaler er offentlig tilgjengelige for alle med linken.
:::
---
## Slik fungerer det
Når du deler en samtale, OpenCode:
1. Oppretter en unik offentlig URL for økten din
2. Synkroniserer samtaleloggen din til serverne våre
3. Gjør samtalen tilgjengelig via den delbare lenken — `opncd.ai/s/<share-id>`
---
## Deling
OpenCode støtter tre delingsmoduser som kontrollerer hvordan samtaler deles:
---
### Manuell (standard)
Som standard bruker OpenCode manuell delingsmodus. Økter deles ikke automatisk, men du kan dele dem manuelt ved å bruke kommandoen `/share`:
```
/share
```
Dette vil generere en unik URL som vil bli kopiert til utklippstavlen din.
For å eksplisitt angi manuell modus i [konfigurasjonsfilen](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "manual"
}
```
---
### Automatisk deling
Du kan aktivere automatisk deling for alle nye samtaler ved å sette alternativet `share` til `"auto"` i [konfigurasjonsfilen](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "auto"
}
```
Med automatisk deling aktivert, vil hver nye samtale automatisk bli delt og en kobling vil bli generert.
---
### Deaktivert
Du kan deaktivere deling helt ved å sette alternativet `share` til `"disabled"` i [konfigurasjonsfilen](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "disabled"
}
```
For å håndheve dette på tvers av teamet ditt for et gitt prosjekt, legg det til `opencode.json` i prosjektet ditt og sjekk inn i Git.
---
## Opphev deling
Slik slutter du å dele en samtale og fjerner den fra offentlig tilgang:
```
/unshare
```
Dette vil fjerne delelinken og slette dataene knyttet til samtalen.
---
## Personvern
Det er et par ting du må huske på når du deler en samtale.
---
### Datalagring
Delte samtaler forblir tilgjengelige til du eksplisitt opphever deling av dem. Dette
inkluderer:
- Full samtalehistorikk
- Alle meldinger og svar
- Metadata for økter
---
### Anbefalinger
- Del kun samtaler som ikke inneholder sensitiv informasjon.
- Se gjennom samtaleinnholdet før du deler.
- Opphev deling av samtaler når samarbeidet er fullført.
- Unngå å dele samtaler med proprietær kode eller konfidensielle data.
- For sensitive prosjekter, deaktiver deling helt.
---
## For bedrifter
For bedriftsimplementeringer kan delingsfunksjonen være:
- **Deaktivert** helt for overholdelse av sikkerhet
- **Begrenset** til brukere som kun er autentisert gjennom SSO
- **Selvvert** på din egen infrastruktur
[Finn ut mer](/docs/enterprise) om bruk av opencode i organisasjonen din.

View File

@@ -0,0 +1,222 @@
---
title: "Agentferdigheter"
description: "Definer gjenbrukbar atferd via SKILL.md-definisjoner"
---
Agentferdigheter lar OpenCode oppdage gjenbrukbare instruksjoner fra repo- eller hjemmekatalogen din.
Ferdigheter lastes inn på forespørsel via det opprinnelige `skill`-verktøyet agenter ser tilgjengelige ferdigheter og kan laste inn hele innholdet når det er nødvendig.
---
## Plasser filer
Opprett én mappe per ferdighetsnavn og legg inn en `SKILL.md` i den.
OpenCode søker etter disse stedene:
- Prosjektkonfigurasjon: `.opencode/skills/<name>/SKILL.md`
- Global konfigurasjon: `~/.config/opencode/skills/<name>/SKILL.md`
- Prosjekt Claude-kompatibel: `.claude/skills/<name>/SKILL.md`
- Global Claude-kompatibel: `~/.claude/skills/<name>/SKILL.md`
- Prosjektagent-kompatibel: `.agents/skills/<name>/SKILL.md`
- Global agent-kompatibel: `~/.agents/skills/<name>/SKILL.md`
---
## Forstå oppdagelsen
For prosjektlokale stier går OpenCode opp fra din nåværende arbeidskatalog til den når git-arbeidstreet.
Den laster alle matchende `skills/*/SKILL.md` i `.opencode/` og alle matchende `.claude/skills/*/SKILL.md` eller `.agents/skills/*/SKILL.md` underveis.
Globale definisjoner lastes også inn fra `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` og `~/.agents/skills/*/SKILL.md`.
---
## Skriv frontmaterie
Hver `SKILL.md` må starte med YAML frontmatter.
Bare disse feltene gjenkjennes:
- `name` (påkrevd)
- `description` (påkrevd)
- `license` (valgfritt)
- `compatibility` (valgfritt)
- `metadata` (valgfritt, streng-til-streng kart)
Ukjente frontmatter-felter ignoreres.
---
## Bekreft navn
`name` må:
- Bestå av 164 tegn
- Vær alfanumerisk med små bokstaver med skilletegn med enkelt bindestrek
- Ikke begynne eller slutte med `-`
- Ikke inneholde påfølgende `--`
- Match katalognavnet som inneholder `SKILL.md`
Ekvivalent regulært uttrykk:
```text
^[a-z0-9]+(-[a-z0-9]+)*$
```
---
## Følg lengdereglene
`description` må bestå av 1-1024 tegn.
Hold det spesifikt nok til at agenten kan velge riktig.
---
## Bruk et eksempel
Lag `.opencode/skills/git-release/SKILL.md` slik:
```markdown
---
name: git-release
description: Create consistent releases and changelogs
license: MIT
compatibility: opencode
metadata:
audience: maintainers
workflow: github
---
## What I do
- Draft release notes from merged PRs
- Propose a version bump
- Provide a copy-pasteable `gh release create` command
## When to use me
Use this when you are preparing a tagged release.
Ask clarifying questions if the target versioning scheme is unclear.
```
---
## Gjenkjenne verktøybeskrivelsen
OpenCode viser tilgjengelige ferdigheter i `skill` verktøybeskrivelsen.
Hver oppføring inneholder ferdighetsnavnet og beskrivelsen:
```xml
<available_skills>
<skill>
<name>git-release</name>
<description>Create consistent releases and changelogs</description>
</skill>
</available_skills>
```
Agenten laster inn en ferdighet ved å kalle verktøyet:
```
skill({ name: "git-release" })
```
---
## Konfigurer tillatelser
Kontroller hvilke ferdigheter agenter har tilgang til ved å bruke mønsterbaserte tillatelser i `opencode.json`:
```json
{
"permission": {
"skill": {
"*": "allow",
"pr-review": "allow",
"internal-*": "deny",
"experimental-*": "ask"
}
}
}
```
| Tillatelse | Atferd |
| ---------- | ----------------------------------------- |
| `allow` | Ferdigheter lastes umiddelbart |
| `deny` | Ferdighet skjult for agent, tilgang avvist |
| `ask` | Bruker bedt om godkjenning før lasting |
Mønstre støtter jokertegn: `internal-*` samsvarer med `internal-docs`, `internal-tools` osv.
---
## Overstyring per agent
Gi spesifikke agenter andre tillatelser enn de globale standardinnstillingene.
**For egendefinerte agenter** (i agent frontmatter):
```yaml
---
permission:
skill:
"documents-*": "allow"
---
```
**For innebygde agenter** (i `opencode.json`):
```json
{
"agent": {
"plan": {
"permission": {
"skill": {
"internal-*": "allow"
}
}
}
}
}
```
---
## Deaktiver ferdighetsverktøyet
Deaktiver ferdigheter fullstendig for agenter som ikke bør bruke dem:
**For egendefinerte agenter**:
```yaml
---
tools:
skill: false
---
```
**For innebygde agenter**:
```json
{
"agent": {
"plan": {
"tools": {
"skill": false
}
}
}
}
```
Når den er deaktivert, blir `<available_skills>`-delen utelatt helt.
---
## Feilsøk lasting
Hvis en ferdighet ikke vises:
1. Kontroller at `SKILL.md` er stavet med store bokstaver
2. Sjekk at frontmatter inkluderer `name` og `description`
3. Sørg for at ferdighetsnavnene er unike på alle steder
4. Sjekk tillatelser ferdigheter med `deny` er skjult for agenter

View File

@@ -0,0 +1,369 @@
---
title: Temaer
description: Velg et innebygd tema eller definer ditt eget.
---
Med OpenCode kan du velge fra ett av flere innebygde temaer, bruke et tema som tilpasser seg terminaltemaet ditt, eller definere ditt eget tilpassede tema.
Som standard bruker OpenCode vårt eget `opencode`-tema.
---
## Terminalkrav
For at temaer skal vises riktig med fullfargepalett, må terminalen din støtte **truecolor** (24-biters farger). De fleste moderne terminaler støtter dette som standard, men du må kanskje aktivere det:
- **Sjekk støtte**: Kjør `echo $COLORTERM` - den skal gi ut `truecolor` eller `24bit`
- **Aktiver truecolor**: Sett miljøvariabelen `COLORTERM=truecolor` i skallprofilen din
- **Terminalkompatibilitet**: Sørg for at terminalemulatoren din støtter 24-bits farger (de fleste moderne terminaler som iTerm2, Alacritty, Kitty, Windows Terminal og nyere versjoner av GNOME Terminal gjør det)
Uten truecolor-støtte kan temaer vises med redusert fargenøyaktighet eller falle tilbake til nærmeste 256-fargers tilnærming.
---
## Innebygde temaer
OpenCode kommer med flere innebygde temaer.
| Navn | Beskrivelse |
| ---------------------- | ---------------------------------------------------------------------------- |
| `system` | Tilpasser seg terminalens bakgrunnsfarge |
| `tokyonight` | Basert på [Tokyonight](https://github.com/folke/tokyonight.nvim)-temaet |
| `everforest` | Basert på [Everforest](https://github.com/sainnhe/everforest)-temaet |
| `ayu` | Basert på [Ayu](https://github.com/ayu-theme) mørke tema |
| `catppuccin` | Basert på [Catppuccin](https://github.com/catppuccin)-temaet |
| `catppuccin-macchiato` | Basert på [Catppuccin](https://github.com/catppuccin)-temaet |
| `gruvbox` | Basert på [Gruvbox](https://github.com/morhetz/gruvbox)-temaet |
| `kanagawa` | Basert på [Kanagawa](https://github.com/rebelot/kanagawa.nvim)-temaet |
| `nord` | Basert på [Nord](https://github.com/nordtheme/nord)-temaet |
| `matrix` | Hacker-stil grønt på svart tema |
| `one-dark` | Basert på [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Mørkt tema |
Og mer, vi legger stadig til nye temaer.
---
## Systemtema
`system`-temaet er designet for å automatisk tilpasse seg terminalens fargevalg. I motsetning til tradisjonelle temaer som bruker faste farger, er _system_-temaet:
- **Genererer gråskala**: Oppretter en tilpasset gråskala basert på terminalens bakgrunnsfarge, og sikrer optimal kontrast.
- **Bruker ANSI farger**: Bruker standard ANSI farger (0-15) for syntaksutheving og UI elementer, som respekterer terminalens fargepalett.
- **Bevarer terminalens standardinnstillinger**: Bruker `none` for tekst- og bakgrunnsfarger for å opprettholde terminalens opprinnelige utseende.
Systemtemaet er for brukere som:
- Vil at OpenCode skal matche terminalens utseende
- Bruk tilpassede terminalfargeskjemaer
- Foretrekker et konsistent utseende på tvers av alle terminalapplikasjoner
---
## Bruke et tema
Du kan velge et tema ved å hente frem temavalg med kommandoen `/theme`. Eller du kan spesifisere det i [config](/docs/config).
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"theme": "tokyonight"
}
```
---
## Egendefinerte temaer
OpenCode støtter et fleksibelt JSON-basert temasystem som lar brukere enkelt lage og tilpasse temaer.
---
### Hierarki
Temaer lastes inn fra flere kataloger i følgende rekkefølge der senere kataloger overstyrer tidligere:
1. **Innebygde temaer** - Disse er innebygd i binæren
2. **Brukerkonfigurasjonskatalog** - Definert i `~/.config/opencode/themes/*.json` eller `$XDG_CONFIG_HOME/opencode/themes/*.json`
3. **Prosjektrotkatalog** - Definert i `<project-root>/.opencode/themes/*.json`
4. **Gjeldende arbeidskatalog** - Definert i `./.opencode/themes/*.json`
Hvis flere kataloger inneholder et tema med samme navn, vil temaet fra katalogen med høyere prioritet bli brukt.
---
### Opprette et tema
For å lage et tilpasset tema, lag en JSON-fil i en av temakatalogene.
For brukeromfattende temaer:
```bash no-frame
mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json
```
Og for prosjektspesifikke temaer.
```bash no-frame
mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json
```
---
### JSON format
Temaer bruker et fleksibelt JSON-format med støtte for:
- **Sekskantfarger**: `"#ffffff"`
- **ANSI farger**: `3` (0-255)
- **Fargereferanser**: `"primary"` eller egendefinerte definisjoner
- **Mørke/lyse varianter**: `{"dark": "#000", "light": "#fff"}`
- **Ingen farge**: `"none"` - Bruker terminalens standardfarge eller transparent
---
### Fargedefinisjoner
`defs`-delen er valgfri, og den lar deg definere gjenbrukbare farger som kan refereres til i temaet.
---
### Terminalstandarder
Spesialverdien `"none"` kan brukes for hvilken som helst farge for å arve terminalens standardfarge. Dette er spesielt nyttig for å lage temaer som passer sømløst med terminalens fargeskjema:
- `"text": "none"` - Bruker terminalens standard forgrunnsfarge
- `"background": "none"` - Bruker terminalens standard bakgrunnsfarge
---
### Eksempel
Her er et eksempel på et tilpasset tema:
```json title="my-theme.json"
{
"$schema": "https://opencode.ai/theme.json",
"defs": {
"nord0": "#2E3440",
"nord1": "#3B4252",
"nord2": "#434C5E",
"nord3": "#4C566A",
"nord4": "#D8DEE9",
"nord5": "#E5E9F0",
"nord6": "#ECEFF4",
"nord7": "#8FBCBB",
"nord8": "#88C0D0",
"nord9": "#81A1C1",
"nord10": "#5E81AC",
"nord11": "#BF616A",
"nord12": "#D08770",
"nord13": "#EBCB8B",
"nord14": "#A3BE8C",
"nord15": "#B48EAD"
},
"theme": {
"primary": {
"dark": "nord8",
"light": "nord10"
},
"secondary": {
"dark": "nord9",
"light": "nord9"
},
"accent": {
"dark": "nord7",
"light": "nord7"
},
"error": {
"dark": "nord11",
"light": "nord11"
},
"warning": {
"dark": "nord12",
"light": "nord12"
},
"success": {
"dark": "nord14",
"light": "nord14"
},
"info": {
"dark": "nord8",
"light": "nord10"
},
"text": {
"dark": "nord4",
"light": "nord0"
},
"textMuted": {
"dark": "nord3",
"light": "nord1"
},
"background": {
"dark": "nord0",
"light": "nord6"
},
"backgroundPanel": {
"dark": "nord1",
"light": "nord5"
},
"backgroundElement": {
"dark": "nord1",
"light": "nord4"
},
"border": {
"dark": "nord2",
"light": "nord3"
},
"borderActive": {
"dark": "nord3",
"light": "nord2"
},
"borderSubtle": {
"dark": "nord2",
"light": "nord3"
},
"diffAdded": {
"dark": "nord14",
"light": "nord14"
},
"diffRemoved": {
"dark": "nord11",
"light": "nord11"
},
"diffContext": {
"dark": "nord3",
"light": "nord3"
},
"diffHunkHeader": {
"dark": "nord3",
"light": "nord3"
},
"diffHighlightAdded": {
"dark": "nord14",
"light": "nord14"
},
"diffHighlightRemoved": {
"dark": "nord11",
"light": "nord11"
},
"diffAddedBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffRemovedBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffContextBg": {
"dark": "nord1",
"light": "nord5"
},
"diffLineNumber": {
"dark": "nord2",
"light": "nord4"
},
"diffAddedLineNumberBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffRemovedLineNumberBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"markdownText": {
"dark": "nord4",
"light": "nord0"
},
"markdownHeading": {
"dark": "nord8",
"light": "nord10"
},
"markdownLink": {
"dark": "nord9",
"light": "nord9"
},
"markdownLinkText": {
"dark": "nord7",
"light": "nord7"
},
"markdownCode": {
"dark": "nord14",
"light": "nord14"
},
"markdownBlockQuote": {
"dark": "nord3",
"light": "nord3"
},
"markdownEmph": {
"dark": "nord12",
"light": "nord12"
},
"markdownStrong": {
"dark": "nord13",
"light": "nord13"
},
"markdownHorizontalRule": {
"dark": "nord3",
"light": "nord3"
},
"markdownListItem": {
"dark": "nord8",
"light": "nord10"
},
"markdownListEnumeration": {
"dark": "nord7",
"light": "nord7"
},
"markdownImage": {
"dark": "nord9",
"light": "nord9"
},
"markdownImageText": {
"dark": "nord7",
"light": "nord7"
},
"markdownCodeBlock": {
"dark": "nord4",
"light": "nord0"
},
"syntaxComment": {
"dark": "nord3",
"light": "nord3"
},
"syntaxKeyword": {
"dark": "nord9",
"light": "nord9"
},
"syntaxFunction": {
"dark": "nord8",
"light": "nord8"
},
"syntaxVariable": {
"dark": "nord7",
"light": "nord7"
},
"syntaxString": {
"dark": "nord14",
"light": "nord14"
},
"syntaxNumber": {
"dark": "nord15",
"light": "nord15"
},
"syntaxType": {
"dark": "nord7",
"light": "nord7"
},
"syntaxOperator": {
"dark": "nord9",
"light": "nord9"
},
"syntaxPunctuation": {
"dark": "nord4",
"light": "nord0"
}
}
}
```

View File

@@ -0,0 +1,379 @@
---
title: Verktøy
description: Administrer verktøyene en LLM kan bruke.
---
Verktøy lar LLM utføre handlinger i kodebasen din. OpenCode kommer med et sett med innebygde verktøy, men du kan utvide det med [egendefinerte verktøy](/docs/custom-tools) eller [MCP servere](/docs/mcp-servers).
Som standard er alle verktøy **aktivert** og trenger ikke tillatelse for å kjøre. Du kan kontrollere verktøyets oppførsel gjennom [tillatelser](/docs/permissions).
---
## Konfigurer
Bruk feltet `permission` for å kontrollere verktøyets oppførsel. Du kan tillate, avslå eller kreve godkjenning for hvert verktøy.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}
```
Du kan også bruke jokertegn for å kontrollere flere verktøy samtidig. For eksempel, for å kreve godkjenning for alle verktøy fra en MCP-server:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mymcp_*": "ask"
}
}
```
[Finn ut mer](/docs/permissions) om konfigurering av tillatelser.
---
## Innebygd
Her er alle de innebygde verktøyene som er tilgjengelige i OpenCode.
---
### bash
Utfør skallkommandoer i prosjektmiljøet ditt.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
}
```
Dette verktøyet lar LLM kjøre terminalkommandoer som `npm install`, `git status` eller en hvilken som helst annen shell-kommando.
---
### rediger
Endre eksisterende filer ved å bruke eksakte strengerstatninger.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Dette verktøyet utfører nøyaktige redigeringer av filer ved å erstatte eksakte teksttreff. Det er den primære måten LLM endrer kode på.
---
### skriv
Opprett nye filer eller overskriv eksisterende.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Bruk denne for å la LLM lage nye filer. Den vil overskrive eksisterende filer hvis de allerede eksisterer.
:::note
`write`-verktøyet kontrolleres av tillatelsen `edit`, som dekker alle filendringer (`edit`, `write`, `patch`, `multiedit`).
:::
---
### lest
Les filinnholdet fra kodebasen din.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"read": "allow"
}
}
```
Dette verktøyet leser filer og returnerer innholdet. Den støtter lesing av spesifikke linjeområder for store filer.
---
### grep
Søk i filinnhold ved hjelp av regulære uttrykk.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"grep": "allow"
}
}
```
Rask innholdssøk på tvers av kodebasen din. Støtter full regex-syntaks og filmønsterfiltrering.
---
### glob
Finn filer etter mønstermatching.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"glob": "allow"
}
}
```
Søk etter filer ved å bruke glob-mønstre som `**/*.js` eller `src/**/*.ts`. Returnerer samsvarende filbaner sortert etter endringstid.
---
### liste
List filer og kataloger i en gitt bane.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"list": "allow"
}
}
```
Dette verktøyet viser kataloginnhold. Den aksepterer glob-mønstre for å filtrere resultater.
---
### lsp (eksperimentell)
Samhandle med dine konfigurerte LSP-servere for å få kodeintelligensfunksjoner som definisjoner, referanser, sveveinformasjon og anropshierarki.
:::note
Dette verktøyet er bare tilgjengelig når `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (eller `OPENCODE_EXPERIMENTAL=true`).
:::
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
}
```
Støttede operasjoner inkluderer `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` og `outgoingCalls`.
For å konfigurere hvilke LSP-servere som er tilgjengelige for prosjektet ditt, se [LSP-servere](/docs/lsp).
---
### patch
Bruk patcher på filer.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Dette verktøyet bruker oppdateringsfiler til kodebasen din. Nyttig for å påføre diff og lapper fra forskjellige kilder.
:::note
`patch`-verktøyet kontrolleres av tillatelsen `edit`, som dekker alle filendringer (`edit`, `write`, `patch`, `multiedit`).
:::
---
### ferdighet
Last inn en [ferdighet](/docs/skills) (en `SKILL.md` fil) og returner innholdet i samtalen.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"skill": "allow"
}
}
```
---
### for å skrive
Administrer gjøremålslister under kodingsøkter.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todowrite": "allow"
}
}
```
Oppretter og oppdaterer oppgavelister for å spore fremdrift under komplekse operasjoner. LLM bruker dette til å organisere flertrinnsoppgaver.
:::note
Dette verktøyet er deaktivert for subagenter som standard, men du kan aktivere det manuelt. [Finn ut mer](/docs/agents/#permissions)
:::
---
### todoread
Les eksisterende gjøremålslister.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todoread": "allow"
}
}
```
Leser gjeldende gjøremålslistestatus. Brukes av LLM for å spore hvilke oppgaver som venter eller er fullført.
:::note
Dette verktøyet er deaktivert for subagenter som standard, men du kan aktivere det manuelt. [Finn ut mer](/docs/agents/#permissions)
:::
---
### webhenting
Hent nettinnhold.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"webfetch": "allow"
}
}
```
Lar LLM hente og lese nettsider. Nyttig for å slå opp dokumentasjon eller forske på nettressurser.
---
### nettsøk
Søk på nettet for informasjon.
:::note
Dette verktøyet er bare tilgjengelig når du bruker OpenCode-leverandøren eller når miljøvariabelen `OPENCODE_ENABLE_EXA` er satt til en sannverdi (f.eks. `true` eller `1`).
Slik aktiverer du når du starter OpenCode:
```bash
OPENCODE_ENABLE_EXA=1 opencode
```
:::
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}
```
Utfører nettsøk med Exa AI for å finne relevant informasjon på nettet. Nyttig for å undersøke emner, finne aktuelle hendelser eller samle informasjon utover treningsdataavbruddet.
Ingen API-nøkkel kreves — verktøyet kobles direkte til Exa AIs vertsbaserte MCP-tjeneste uten autentisering.
:::tupp
Bruk `websearch` når du trenger å finne informasjon (oppdagelse), og `webfetch` når du trenger å hente innhold fra en bestemt URL (henting).
:::
---
### spørsmål
Still brukeren spørsmål under utførelse.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"question": "allow"
}
}
```
Dette verktøyet lar LLM stille spørsmål til brukeren under en oppgave. Det er nyttig for:
- Samle brukerpreferanser eller krav
- Avklarende tvetydige instruksjoner
- Få beslutninger om gjennomføringsvalg
- Tilbyr valg om hvilken retning du skal ta
Hvert spørsmål inkluderer en overskrift, spørsmålsteksten og en liste over alternativer. Brukere kan velge fra de angitte alternativene eller skrive inn et tilpasset svar. Når det er flere spørsmål, kan brukerne navigere mellom dem før de sender inn alle svarene.
---
## Egendefinerte verktøy
Egendefinerte verktøy lar deg definere dine egne funksjoner som LLM kan kalle. Disse er definert i konfigurasjonsfilen din og kan kjøre vilkårlig kode.
[Finn ut mer](/docs/custom-tools) om å lage tilpassede verktøy.
---
## MCP servere
MCP (Model Context Protocol) servere lar deg integrere eksterne verktøy og tjenester. Dette inkluderer databasetilgang, API-integrasjoner og tredjepartstjenester.
[Les mer](/docs/mcp-servers) om konfigurering av MCP-servere.
---
## Internaler
Internt bruker verktøy som `grep`, `glob` og `list` [ripgrep](https://github.com/BurntSushi/ripgrep) under panseret. Som standard respekterer ripgrep `.gitignore`-mønstre, noe som betyr at filer og kataloger som er oppført i `.gitignore` vil bli ekskludert fra søk og oppføringer.
---
### Ignorer mønstre
For å inkludere filer som normalt vil bli ignorert, lag en `.ignore`-fil i prosjektroten. Denne filen kan eksplisitt tillate visse stier.
```text title=".ignore"
!node_modules/
!dist/
!build/
```
For eksempel lar denne `.ignore` filen ripgrep søke i `node_modules/`, `dist/` og `build/` kataloger selv om de er oppført i `.gitignore`.

View File

@@ -0,0 +1,300 @@
---
title: Feilsøking
description: Vanlige problemer og hvordan de kan løses.
---
For å feilsøke problemer med OpenCode, start med å sjekke loggene og lokale data den lagrer på disken.
---
## Logger
Loggfiler skrives til:
- **macOS/Linux**: `~/.local/share/opencode/log/`
- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.local\share\opencode\log`
Loggfiler navngis med tidsstempler (f.eks. `2025-01-09T123456.log`) og de siste 10 loggfilene beholdes.
Du kan angi loggnivået med kommandolinjealternativet `--log-level` for å få mer detaljert feilsøkingsinformasjon. For eksempel `opencode --log-level DEBUG`.
---
## Lagring
opencode lagrer øktdata og andre applikasjonsdata på disken på:
- **macOS/Linux**: `~/.local/share/opencode/`
- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.local\share\opencode`
Denne katalogen inneholder:
- `auth.json` - Autentiseringsdata som API-nøkler, OAuth-tokens
- `log/` - Applikasjonslogger
- `project/` - Prosjektspesifikke data som økt- og meldingsdata
- Hvis prosjektet er innenfor en Git-repo, lagres det i `./<project-slug>/storage/`
- Hvis det ikke er en Git-repo, lagres det i `./global/storage/`
---
## Desktop-app
OpenCode Desktop kjører en lokal OpenCode-server (`opencode-cli` sidevognen) i bakgrunnen. De fleste problemene er forårsaket av en plugin som fungerer dårlig, en ødelagt cache eller en dårlig serverinnstilling.
### Raske sjekker
- Avslutt og start appen på nytt.
- Hvis appen viser en feilskjerm, klikker du på **Start på nytt** og kopierer feildetaljene.
- Bare macOS: `OpenCode`-meny -> **Last nettvisning på nytt** (hjelper hvis UI er tom/frosset).
---
### Deaktiver plugins
Hvis skrivebordsappen krasjer ved oppstart, henger eller oppfører seg merkelig, start med å deaktivere plugins.
#### Sjekk den globale konfigurasjonen
Åpne den globale konfigurasjonsfilen og se etter en `plugin`-nøkkel.
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (eller `~/.config/opencode/opencode.json`)
- **macOS/Linux** (eldre installasjoner): `~/.local/share/opencode/opencode.jsonc`
- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.config\opencode\opencode.jsonc`
Hvis du har konfigurert plugins, deaktiver dem midlertidig ved å fjerne nøkkelen eller sette den til en tom matrise:
```jsonc
{
"$schema": "https://opencode.ai/config.json",
"plugin": [],
}
```
#### Sjekk plugin-kataloger
OpenCode kan også laste lokale plugins fra disken. Flytt disse midlertidig ut av veien (eller gi nytt navn til mappen) og start skrivebordsappen på nytt:
- **Globale plugins**
- **macOS/Linux**: `~/.config/opencode/plugins/`
- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.config\opencode\plugins`
- **Prosjektplugins** (bare hvis du bruker konfigurasjon per prosjekt)
- `<your-project>/.opencode/plugins/`
Hvis appen begynner å fungere igjen, aktiverer du plugins én om gangen for å finne ut hvilken som forårsaker problemet.
---
### Tøm hurtigbufferen
Hvis deaktivering av plugins ikke hjelper (eller en plugin-installasjon sitter fast), tøm hurtigbufferen slik at OpenCode kan gjenoppbygge den.
1. Avslutt OpenCode Desktop helt.
2. Slett hurtigbufferkatalogen:
- **macOS**: Finder -> `Cmd+Shift+G` -> lim inn `~/.cache/opencode`
- **Linux**: slett `~/.cache/opencode` (eller kjør `rm -rf ~/.cache/opencode`)
- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.cache\opencode`
3. Start OpenCode Desktop på nytt.
---
### Løs problemer med servertilkobling
OpenCode Desktop kan enten starte sin egen lokale server (standard) eller koble til en server URL du har konfigurert.
Hvis du ser en **"Tilkobling mislyktes"**-dialogboks (eller appen kommer aldri forbi splash-skjermen), se etter en tilpasset server URL.
#### Slett standardserveren for skrivebordet URL
Fra startskjermen klikker du på servernavnet (med statusprikken) for å åpne servervelgeren. I delen **Standardserver** klikker du på **Slett**.
#### Fjern `server.port` / `server.hostname` fra konfigurasjonen din
Hvis `opencode.json(c)` inneholder en `server`-del, fjern den midlertidig og start skrivebordsappen på nytt.
#### Sjekk miljøvariabler
Hvis du har `OPENCODE_PORT` satt i miljøet ditt, vil skrivebordsappen prøve å bruke den porten for den lokale serveren.
- Deaktiver `OPENCODE_PORT` (eller velg en ledig port) og start på nytt.
---
### Linux: Wayland / X11 problemer
På Linux kan noen Wayland-oppsett forårsake tomme vinduer eller kompositorfeil.
- Hvis du er på Wayland og appen er tom/krasj, prøv å starte med `OC_ALLOW_WAYLAND=1`.
- Hvis det gjør ting verre, fjern det og prøv å starte under en X11-økt i stedet.
---
### Windows: WebView2 kjøretid
På Windows krever OpenCode Desktop Microsoft Edge **WebView2 Runtime**. Hvis appen åpnes i et tomt vindu eller ikke starter, installer/oppdater WebView2 og prøv igjen.
---
### Windows: Generelle ytelsesproblemer
Hvis du opplever treg ytelse, problemer med filtilgang eller terminalproblemer på Windows, kan du prøve å bruke [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL gir et Linux-miljø som fungerer mer sømløst med funksjonene til OpenCode.
---
### Varsler vises ikke
OpenCode Desktop viser bare systemvarsler når:
- varsler er aktivert for OpenCode i OS-innstillingene dine, og
- appvinduet er ikke fokusert.
---
### Tilbakestill skrivebordsapplagring (siste utvei)
Hvis appen ikke starter og du ikke kan slette innstillingene fra UI, tilbakestill skrivebordsappens lagrede tilstand.
1. Avslutt OpenCode Desktop.
2. Finn og slett disse filene (de finnes i OpenCode Desktop-appens datakatalog):
- `opencode.settings.dat` (stasjonær standardserver URL)
- `opencode.global.dat` og `opencode.workspace.*.dat` (UI tilstand som nylige servere/prosjekter)
Slik finner du katalogen raskt:
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (søk deretter etter filnavnene ovenfor)
- **Linux**: søk under `~/.local/share` etter filnavnene ovenfor
- **Windows**: Trykk `WIN+R` -> `%APPDATA%` (søk deretter etter filnavnene ovenfor)
---
## Får hjelp
Hvis du opplever problemer med OpenCode:
1. **Rapporter problemer på GitHub**
Den beste måten å rapportere feil eller be om funksjoner på er gjennom vårt GitHub-lager:
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
Før du oppretter et nytt problem, søk i eksisterende problemer for å se om problemet ditt allerede er rapportert.
2. **Bli med i vår Discord**
For sanntidshjelp og fellesskapsdiskusjon, bli med i vår Discord-server:
[**opencode.ai/discord**](https://opencode.ai/discord)
---
## Vanlige problemer
Her er noen vanlige problemer og hvordan du kan løse dem.
---
### OpenCode vil ikke starte
1. Sjekk loggene for feilmeldinger
2. Prøv å kjøre med `--print-logs` for å se utdata i terminalen
3. Sørg for at du har den nyeste versjonen med `opencode upgrade`
---
### Autentiseringsproblemer
1. Prøv å autentisere på nytt med kommandoen `/connect` i TUI
2. Sjekk at API-nøklene dine er gyldige
3. Sørg for at nettverket ditt tillater tilkoblinger til leverandørens API
---
### Modellen er ikke tilgjengelig
1. Sjekk at du har autentisert deg med leverandøren
2. Kontroller at modellnavnet i konfigurasjonen er riktig
3. Noen modeller kan kreve spesifikk tilgang eller abonnement
Hvis du støter på `ProviderModelNotFoundError` er du mest sannsynlig feil
refererer til en modell et sted.
Modeller skal refereres slik: `<providerId>/<modelId>`
Eksempler:
- `openai/gpt-4.1`
- `openrouter/google/gemini-2.5-flash`
- `opencode/kimi-k2`
For å finne ut hvilke modeller du har tilgang til, kjør `opencode models`
---
### ProviderInitError
Hvis du støter på en ProviderInitError, har du sannsynligvis en ugyldig eller ødelagt konfigurasjon.
For å løse dette:
1. Kontroller først at leverandøren din er riktig konfigurert ved å følge [leverandørveiledningen](/docs/providers)
2. Hvis problemet vedvarer, prøv å tømme den lagrede konfigurasjonen:
```bash
rm -rf ~/.local/share/opencode
```
På Windows, trykk `WIN+R` og slett: `%USERPROFILE%\.local\share\opencode`
3. Autentiser på nytt med leverandøren din ved å bruke kommandoen `/connect` i TUI.
---
### AI_APICallError og leverandørpakkeproblemer
Hvis du støter på API anropsfeil, kan dette skyldes utdaterte leverandørpakker. opencode installerer dynamisk leverandørpakker (OpenAI, Anthropic, Google, etc.) etter behov og cacher dem lokalt.
For å løse problemer med leverandørpakke:
1. Tøm leverandørens pakkebuffer:
```bash
rm -rf ~/.cache/opencode
```
På Windows, trykk `WIN+R` og slett: `%USERPROFILE%\.cache\opencode`
2. Start opencode på nytt for å installere de nyeste leverandørpakkene på nytt
Dette vil tvinge opencode til å laste ned de nyeste versjonene av leverandørpakkene, som ofte løser kompatibilitetsproblemer med modellparametere og API endringer.
---
### Kopier/lim inn fungerer ikke på Linux
Linux-brukere må ha ett av følgende utklippstavleverktøy installert for at kopier/lim inn-funksjonalitet skal fungere:
**For X11-systemer:**
```bash
apt install -y xclip
# or
apt install -y xsel
```
**For Wayland-systemer:**
```bash
apt install -y wl-clipboard
```
**For hodeløse miljøer:**
```bash
apt install -y xvfb
# and run:
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
export DISPLAY=:99.0
```
opencode vil oppdage om du bruker Wayland og foretrekker `wl-clipboard`, ellers vil den prøve å finne utklippstavleverktøy i rekkefølgen: `xclip` og `xsel`.

View File

@@ -0,0 +1,390 @@
---
title: TUI
description: Bruke OpenCode-terminalbrukergrensesnittet.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
OpenCode gir et interaktivt terminalgrensesnitt eller TUI for å jobbe med prosjektene dine med en LLM.
Å kjøre OpenCode starter TUI for gjeldende katalog.
```bash
opencode
```
Eller du kan starte den for en bestemt arbeidskatalog.
```bash
opencode /path/to/project
```
Når du er i TUI, kan du spørre den med en melding.
```text
Give me a quick summary of the codebase.
```
---
## Filreferanser
Du kan referere til filer i meldingene dine ved å bruke `@`. Dette gjør et uklar filsøk i gjeldende arbeidskatalog.
:::tupp
Du kan også bruke `@` til å referere til filer i meldingene dine.
:::
```text "@packages/functions/src/api/index.ts"
How is auth handled in @packages/functions/src/api/index.ts?
```
Innholdet i filen legges automatisk til samtalen.
---
## Bash-kommandoer
Start en melding med `!` for å kjøre en shell-kommando.
```bash frame="none"
!ls -la
```
Utdataene fra kommandoen legges til samtalen som et verktøyresultat.
---
## Kommandoer
Når du bruker OpenCode TUI, kan du skrive `/` etterfulgt av et kommandonavn for raskt å utføre handlinger. For eksempel:
```bash frame="none"
/help
```
De fleste kommandoer har også tastebinding som bruker `ctrl+x` som ledernøkkel, der `ctrl+x` er standard ledernøkkel. [Finn ut mer](/docs/keybinds).
Her er alle tilgjengelige skråstrekkommandoer:
---
### koble til
Legg til en leverandør til OpenCode. Lar deg velge fra tilgjengelige leverandører og legge til deres API-nøkler.
```bash frame="none"
/connect
```
---
### kompakt
Komprimer gjeldende økt. _Alias_: `/summarize`
```bash frame="none"
/compact
```
**Nøkkelbinding:** `ctrl+x c`
---
### detaljer
Veksle verktøyutførelsesdetaljer.
```bash frame="none"
/details
```
**Nøkkelbinding:** `ctrl+x d`
---
### redaktør
Åpne eksternt redigeringsprogram for å skrive meldinger. Bruker redigeringssettet i miljøvariabelen `EDITOR`. [Finn ut mer](#editor-setup).
```bash frame="none"
/editor
```
**Nøkkelbinding:** `ctrl+x e`
---
### avslutt
Avslutt OpenCode. _Aliaser_: `/quit`, `/q`
```bash frame="none"
/exit
```
**Nøkkelbinding:** `ctrl+x q`
---
### eksport
Eksporter gjeldende samtale til Markdown og åpne i standardredigeringsprogrammet. Bruker redigeringssettet i miljøvariabelen `EDITOR`. [Finn ut mer](#editor-setup).
```bash frame="none"
/export
```
**Nøkkelbinding:** `ctrl+x x`
---
### hjelp
Vis hjelpedialogen.
```bash frame="none"
/help
```
**Nøkkelbinding:** `ctrl+x h`
---
### init
Opprett eller oppdater `AGENTS.md`-fil. [Finn ut mer](/docs/rules).
```bash frame="none"
/init
```
**Nøkkelbinding:** `ctrl+x i`
---
### modeller
Liste over tilgjengelige modeller.
```bash frame="none"
/models
```
**Nøkkelbinding:** `ctrl+x m`
---
### ny
Start en ny økt. _Alias_: `/clear`
```bash frame="none"
/new
```
**Nøkkelbinding:** `ctrl+x n`
---
### gjør om
Gjenta en tidligere angret melding. Kun tilgjengelig etter bruk av `/undo`.
:::tupp
Eventuelle filendringer vil også bli gjenopprettet.
:::
Internt bruker dette Git til å administrere filendringene. Så ditt prosjekt **må
være et Git-depot**.
```bash frame="none"
/redo
```
**Nøkkelbinding:** `ctrl+x r`
---
### økter
List opp og bytt mellom økter. _Aliaser_: `/resume`, `/continue`
```bash frame="none"
/sessions
```
**Nøkkelbinding:** `ctrl+x l`
---
### del
Del gjeldende økt. [Finn ut mer](/docs/share).
```bash frame="none"
/share
```
**Nøkkelbinding:** `ctrl+x s`
---
### temaer
Liste over tilgjengelige temaer.
```bash frame="none"
/theme
```
**Nøkkelbinding:** `ctrl+x t`
---
### tenker
Veksle mellom synligheten av tenke-/resonneringsblokker i samtalen. Når den er aktivert, kan du se modellens resonneringsprosess for modeller som støtter utvidet tenkning.
:::note
Denne kommandoen kontrollerer bare om tenkeblokker **vises** - den aktiverer eller deaktiverer ikke modellens resonneringsmuligheter. For å veksle mellom faktiske resonneringsmuligheter, bruk `ctrl+t` for å bla gjennom modellvarianter.
:::
```bash frame="none"
/thinking
```
---
### angre
Angre siste melding i samtalen. Fjerner den siste brukermeldingen, alle påfølgende svar og eventuelle filendringer.
:::tupp
Eventuelle filendringer vil også bli tilbakestilt.
:::
Internt bruker dette Git til å administrere filendringene. Så ditt prosjekt **må
være et Git-depot**.
```bash frame="none"
/undo
```
**Nøkkelbinding:** `ctrl+x u`
---
### avbryt deling
Opphev deling av gjeldende økt. [Finn ut mer](/docs/share#un-sharing).
```bash frame="none"
/unshare
```
---
## Redaktøroppsett
Både kommandoene `/editor` og `/export` bruker redigeringsprogrammet som er spesifisert i miljøvariabelen `EDITOR`.
<Tabs>
<TabItem label="Linux/macOS">
```bash
# Example for nano or vim
export EDITOR=nano
export EDITOR=vim
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
# include --wait
export EDITOR="code --wait"
```
For å gjøre det permanent, legg dette til i skallprofilen din;
`~/.bashrc`, `~/.zshrc` osv.
</TabItem>
<TabItem label="Windows (CMD)">
```bash
set EDITOR=notepad
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
# include --wait
set EDITOR=code --wait
```
For å gjøre det permanent, bruk **Systemegenskaper** > **Miljø
Variabler**.
</TabItem>
<TabItem label="Windows (PowerShell)">
```powershell
$env:EDITOR = "notepad"
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
# include --wait
$env:EDITOR = "code --wait"
```
For å gjøre det permanent, legg dette til i PowerShell-profilen din.
</TabItem>
</Tabs>
Populære redigeringsalternativer inkluderer:
- `code` - Visual Studio Code
- `cursor` - Cursor
- `windsurf` - Vindsurfing
- `nvim` - Neovim-redaktør
- `vim` - Vim editor
- `nano` - Nano-editor
- `notepad` - Windows Notisblokk
- `subl` - Sublim tekst
:::note
Noen redaktører som VS Code må startes med flagget `--wait`.
:::
Noen redaktører trenger kommandolinjeargumenter for å kjøre i blokkeringsmodus. `--wait`-flagget gjør at redigeringsprosessen blokkeres til den lukkes.
---
## Konfigurer
Du kan tilpasse TUI-oppførselen gjennom OpenCode-konfigurasjonsfilen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
}
}
}
```
### Alternativer
- `scroll_acceleration` - Aktiver rulleakselerasjon i macOS-stil for jevn, naturlig rulling. Når aktivert, øker rullehastigheten med raske rullebevegelser og forblir presis for langsommere bevegelser. **Denne innstillingen har forrang over `scroll_speed` og overstyrer den når den er aktivert.**
- `scroll_speed` - Styrer hvor raskt TUI ruller når du bruker rullekommandoer (minimum: `1`). Standard er `3`. **Merk: Dette ignoreres hvis `scroll_acceleration.enabled` er satt til `true`.**
---
## Tilpasning
Du kan tilpasse ulike aspekter av TUI-visningen ved å bruke kommandopaletten (`ctrl+x h` eller `/help`). Disse innstillingene vedvarer ved omstarter.
---
#### Visning av brukernavn
Veksle om brukernavnet ditt vises i chat-meldinger. Få tilgang til dette gjennom:
- Kommandopalett: Søk etter "brukernavn" eller "skjul brukernavn"
- Innstillingen vedvarer automatisk og vil bli husket over TUI økter

View File

@@ -0,0 +1,142 @@
---
title: Web
description: Bruke OpenCode i nettleseren din.
---
OpenCode kan kjøres som en nettapplikasjon i nettleseren din, og gir den samme kraftige AI-kodingsopplevelsen uten at du trenger en terminal.
![OpenCode Web - Ny økt](../../../assets/web/web-homepage-new-session.png)
## Komme i gang
Start nettgrensesnittet ved å kjøre:
```bash
opencode web
```
Dette starter en lokal server på `127.0.0.1` med en tilfeldig tilgjengelig port og åpner automatisk OpenCode i standard nettleser.
:::forsiktighet
Hvis `OPENCODE_SERVER_PASSWORD` ikke er satt, vil serveren være usikret. Dette er greit for lokal bruk, men bør settes for nettverkstilgang.
:::
:::tips[Windows-brukere]
For den beste opplevelsen, kjør `opencode web` fra [WSL](/docs/windows-wsl) i stedet for PowerShell. Dette sikrer riktig filsystemtilgang og terminalintegrasjon.
:::
---
## Konfigurasjon
Du kan konfigurere webserveren ved å bruke kommandolinjeflagg eller i [config file](/docs/config).
### Port
Som standard velger OpenCode en tilgjengelig port. Du kan spesifisere en port:
```bash
opencode web --port 4096
```
### Vertsnavn
Som standard binder serveren seg til `127.0.0.1` (kun lokal vert). Slik gjør du OpenCode tilgjengelig på nettverket ditt:
```bash
opencode web --hostname 0.0.0.0
```
Når du bruker `0.0.0.0`, vil OpenCode vise både lokale adresser og nettverksadresser:
```
Local access: http://localhost:4096
Network access: http://192.168.1.100:4096
```
### mDNS-oppdagelse
Aktiver mDNS for å gjøre serveren din synlig på det lokale nettverket:
```bash
opencode web --mdns
```
Dette setter automatisk vertsnavnet til `0.0.0.0` og annonserer serveren som `opencode.local`.
Du kan tilpasse mDNS-domenenavnet til å kjøre flere forekomster på samme nettverk:
```bash
opencode web --mdns --mdns-domain myproject.local
```
### CORS
For å tillate flere domener for CORS (nyttig for egendefinerte grensesnitt):
```bash
opencode web --cors https://example.com
```
### Autentisering
For å beskytte tilgang, angi et passord ved hjelp av miljøvariabelen `OPENCODE_SERVER_PASSWORD`:
```bash
OPENCODE_SERVER_PASSWORD=secret opencode web
```
Brukernavnet er standard til `opencode`, men kan endres med `OPENCODE_SERVER_USERNAME`.
---
## Bruke webgrensesnittet
Når det er startet, gir nettgrensesnittet tilgang til dine OpenCode-økter.
### økter
Se og administrer øktene dine fra hjemmesiden. Du kan se aktive økter og starte nye.
![OpenCode Web - Active Session](../../../assets/web/web-homepage-active-session.png)
### Serverstatus
Klikk "Se servere" for å se tilkoblede servere og deres status.
![OpenCode Web - Se servere](../../../assets/web/web-homepage-see-servers.png)
---
## Koble til en terminal
Du kan koble en terminal TUI til en kjørende webserver:
```bash
# Start the web server
opencode web --port 4096
# In another terminal, attach the TUI
opencode attach http://localhost:4096
```
Dette lar deg bruke både nettgrensesnittet og terminalen samtidig, og deler samme økter og tilstand.
---
## Konfigurasjonsfil
Du kan også konfigurere serverinnstillinger i `opencode.json` konfigurasjonsfilen:
```json
{
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"cors": ["https://example.com"]
}
}
```
Kommandolinjeflagg har forrang over konfigurasjonsfilinnstillinger.

View File

@@ -0,0 +1,113 @@
---
title: Windows (WSL)
description: Kjor OpenCode pa Windows med WSL for best opplevelse.
---
import { Steps } from "@astrojs/starlight/components"
Selv om OpenCode kan kjore direkte pa Windows, anbefaler vi a bruke [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) for best mulig opplevelse. WSL gir et Linux-miljo som fungerer godt med funksjonene i OpenCode.
:::tip[Hvorfor WSL?]
WSL gir bedre filsystemytelse, full terminalstotte og kompatibilitet med utviklingsverktoyene OpenCode er avhengig av.
:::
---
## Oppsett
<Steps>
1. **Installer WSL**
Hvis du ikke har gjort det ennå, [installer WSL](https://learn.microsoft.com/en-us/windows/wsl/install) med den offisielle guiden fra Microsoft.
2. **Installer OpenCode i WSL**
Nar WSL er satt opp, apner du WSL-terminalen og installerer OpenCode med en av [installasjonsmetodene](/docs/).
```bash
curl -fsSL https://opencode.ai/install | bash
```
3. **Bruk OpenCode fra WSL**
Gå til prosjektmappen din (Windows-filer finnes via `/mnt/c/`, `/mnt/d/` osv.) og kjør OpenCode.
```bash
cd /mnt/c/Users/YourName/project
opencode
```
</Steps>
---
## Skrivebordsapp + WSL-server
Hvis du foretrekker OpenCode-skrivebordsappen, men vil kjore serveren i WSL:
1. **Start serveren i WSL** med `--hostname 0.0.0.0` for a tillate eksterne tilkoblinger:
```bash
opencode serve --hostname 0.0.0.0 --port 4096
```
2. **Koble skrivebordsappen** til `http://localhost:4096`
:::note
Hvis `localhost` ikke fungerer i oppsettet ditt, bruk WSL-IP-adressen i stedet (fra WSL: `hostname -I`) og koble til `http://<wsl-ip>:4096`.
:::
:::caution
Nar du bruker `--hostname 0.0.0.0`, sett `OPENCODE_SERVER_PASSWORD` for a sikre serveren.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
```
:::
---
## Nettklient + WSL
For best nettopplevelse pa Windows:
1. **Kjor `opencode web` i WSL-terminalen** i stedet for PowerShell:
```bash
opencode web --hostname 0.0.0.0
```
2. **Aapne i Windows-nettleseren** pa `http://localhost:<port>` (OpenCode skriver ut URL-en)
Nar du kjører `opencode web` fra WSL, får du riktig filsystemtilgang og terminalintegrasjon, samtidig som det er tilgjengelig fra Windows-nettleseren din.
---
## Tilgang til Windows-filer
WSL kan fa tilgang til alle Windows-filer via `/mnt/`-katalogen:
- `C:`-stasjon → `/mnt/c/`
- `D:`-stasjon → `/mnt/d/`
- Og sa videre...
Eksempel:
```bash
cd /mnt/c/Users/YourName/Documents/project
opencode
```
:::tip
For en jevnere opplevelse kan du klone/kopiere repoet ditt inn i WSL-filsystemet (for eksempel under `~/code/`) og kjore OpenCode der.
:::
---
## Tips
- Kjor OpenCode i WSL for prosjekter lagret pa Windows-stasjoner: filtilgang fungerer smidig
- Bruk [WSL-utvidelsen i VS Code](https://code.visualstudio.com/docs/remote/wsl) sammen med OpenCode for en integrert utviklingsflyt
- OpenCode-konfigurasjon og sesjoner lagres i WSL-miljoet pa `~/.local/share/opencode/`

View File

@@ -0,0 +1,254 @@
---
title: Zen
description: Utvalgt liste over modeller levert av OpenCode.
---
import config from "../../../../config.mjs"
export const console = config.console
export const email = `mailto:${config.email}`
OpenCode Zen er en liste over testede og verifiserte modeller levert av OpenCode-teamet.
:::note
OpenCode Zen er for øyeblikket i beta.
:::
Zen fungerer som alle andre leverandører i OpenCode. Du logger på OpenCode Zen og får
din API nøkkel. Den er **helt valgfri** og du trenger ikke bruke den for å bruke den
OpenCode.
---
## Bakgrunn
Det er et stort antall modeller der ute, men bare noen få av dem
disse modellene fungerer godt som kodeagenter. I tillegg er de fleste tilbydere
konfigurert veldig annerledes; slik at du får veldig forskjellig ytelse og kvalitet.
:::tupp
Vi testet en utvalgt gruppe modeller og leverandører som fungerer godt med OpenCode.
:::
Så hvis du bruker en modell gjennom noe som OpenRouter, kan du aldri bli det
sikker på om du får den beste versjonen av modellen du ønsker.
For å fikse dette gjorde vi et par ting:
1. Vi testet en utvalgt gruppe modeller og snakket med teamene deres om hvordan
best kjøre dem.
2. Vi samarbeidet deretter med noen få leverandører for å sikre at disse ble servert
riktig.
3. Til slutt benchmarket vi kombinasjonen av modell/leverandør og kom frem
med en liste som vi har lyst til å anbefale.
OpenCode Zen er en AI gateway som gir deg tilgang til disse modellene.
---
## Slik fungerer det
OpenCode Zen fungerer som alle andre leverandører i OpenCode.
1. Du logger på **<a href={console}>OpenCode Zen</a>**, legg til fakturering
detaljer, og kopier API-nøkkelen.
2. Du kjører kommandoen `/connect` i TUI, velger OpenCode Zen og limer inn API-nøkkelen.
3. Kjør `/models` i TUI for å se listen over modeller vi anbefaler.
Du belastes per forespørsel, og du kan legge til kreditt på kontoen din.
---
## Endepunkter
Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter.
| Modell | Modell ID | Endepunkt | AI SDK Pakke |
| ------------------- | ------------------ | -------------------------------------------------- | --------------------------- |
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.2 Codex | gpt-5.2-kodeks | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 | gpt-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 Codex | gpt-5.1-kodeks | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 Codex Max | gpt-5.1-codex-max | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 Codex Mini | gpt-5.1-codex-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5 Codex | gpt-5-kodeks | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| Claude Sonnet 4.5 | claude-sonnett-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Sonnet 4 | claude-sonnett-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Haiku 3.5 | claude-3-5-haiku | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Opus 4.6 | claude-opus-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Opus 4.5 | claude-opus-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Gemini 3 Pro | gemini-3-pro | `https://opencode.ai/zen/v1/models/gemini-3-pro` | `@ai-sdk/google` |
| Gemini 3 Flash | gemini-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
| MiniMax M2.1 | minimax-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| MiniMax M2.1 Gratis | minimax-m2.1-fri | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| GLM 4.7 | glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| GLM 4.7 Gratis | glm-4.7-fri | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| GLM 4.6 | glm-4.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2.5 Gratis | kimi-k2.5-fri | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2 Tenker | kimi-k2-tenking | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2 | kimi-k2 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Qwen3-koder 480B | qwen3-koder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Stor sylteagurk | stor sylteagurk | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
[modell-id](/docs/config/#models) i OpenCode-konfigurasjonen
bruker formatet `opencode/<model-id>`. For eksempel, for GPT 5.2 Codex, ville du
bruk `opencode/gpt-5.2-codex` i konfigurasjonen din.
---
### Modeller
Du kan hente hele listen over tilgjengelige modeller og deres metadata fra:
```
https://opencode.ai/zen/v1/models
```
---
## Priser
Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1 million tokens**.
| Modell | Inngang | Utgang | Bufret Les | Bufret skriv |
| --------------------------------- | ------- | ------ | ---------- | ------------ |
| Stor sylteagurk | Gratis | Gratis | Gratis | - |
| MiniMax M2.1 Gratis | Gratis | Gratis | Gratis | - |
| MiniMax M2.1 | $0,30 | $1,20 | $0,10 | - |
| GLM 4.7 Gratis | Gratis | Gratis | Gratis | - |
| GLM 4.7 | $0,60 | $2,20 | $0,10 | - |
| GLM 4.6 | $0,60 | $2,20 | $0,10 | - |
| Kimi K2.5 Gratis | Gratis | Gratis | Gratis | - |
| Kimi K2.5 | $0,60 | $3,00 | $0,08 | - |
| Kimi K2 Tenker | $0,40 | $2,50 | - | - |
| Kimi K2 | $0,40 | $2,50 | - | - |
| Qwen3-koder 480B | $0,45 | $1,50 | - | - |
| Claude Sonnet 4.5 (≤ 200K tokens) | $3,00 | $15,00 | $0,30 | $3,75 |
| Claude Sonnet 4.5 (> 200K tokens) | $6,00 | $22,50 | $0,60 | $7,50 |
| Claude Sonnet 4 (≤ 200K tokens) | $3,00 | $15,00 | $0,30 | $3,75 |
| Claude Sonnet 4 (> 200K tokens) | $6,00 | $22,50 | $0,60 | $7,50 |
| Claude Haiku 4.5 | $1,00 | $5,00 | $0,10 | $1,25 |
| Claude Haiku 3.5 | $0,80 | $4,00 | $0,08 | $1,00 |
| Claude Opus 4.6 (≤ 200K tokens) | $5,00 | $25,00 | $0,50 | $6,25 |
| Claude Opus 4.6 (> 200K tokens) | $10,00 | $37,50 | $1,00 | $12,50 |
| Claude Opus 4.5 | $5,00 | $25,00 | $0,50 | $6,25 |
| Claude Opus 4.1 | $15,00 | $75,00 | $1,50 | $18,75 |
| Gemini 3 Pro (≤ 200K tokens) | $2,00 | $12,00 | $0,20 | - |
| Gemini 3 Pro (> 200K tokens) | $4,00 | $18,00 | $0,40 | - |
| Gemini 3 Flash | $0,50 | $3,00 | $0,05 | - |
| GPT 5.2 | $1,75 | $14,00 | $0,175 | - |
| GPT 5.2 Codex | $1,75 | $14,00 | $0,175 | - |
| GPT 5.1 | $1,07 | $8,50 | $0,107 | - |
| GPT 5.1 Codex | $1,07 | $8,50 | $0,107 | - |
| GPT 5.1 Codex Max | $1,25 | $10,00 | $0,125 | - |
| GPT 5.1 Codex Mini | $0,25 | $2,00 | $0,025 | - |
| GPT 5 | $1,07 | $8,50 | $0,107 | - |
| GPT 5 Codex | $1,07 | $8,50 | $0,107 | - |
| GPT 5 Nano | Gratis | Gratis | Gratis | - |
Du legger kanskje merke til _Claude Haiku 3.5_ i brukshistorikken din. Dette er en [lavprismodell](/docs/config/#models) som brukes til å generere titlene på øktene dine.
:::note
Kredittkortgebyrer overføres til kostpris (4,4 % + $0,30 per transaksjon); vi belaster ikke noe utover det.
:::
De gratis modellene:
- GLM 4.7 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle tilbakemeldinger og forbedre modellen.
- Kimi K2.5 Gratis er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle tilbakemeldinger og forbedre modellen.
- MiniMax M2.1 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle tilbakemeldinger og forbedre modellen.
- Big Pickle er en stealth-modell som er gratis på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle tilbakemeldinger og forbedre modellen.
<a href={email}>Contact us</a> if you have any questions.
---
### Last inn automatisk
Hvis saldoen din går under $5, vil Zen automatisk laste inn $20 på nytt.
Du kan endre beløpet for automatisk påfylling. Du kan også deaktivere automatisk reload helt.
---
### Månedlige grenser
Du kan også angi en månedlig bruksgrense for hele arbeidsområdet og for hver
medlem av teamet ditt.
La oss for eksempel si at du setter en månedlig bruksgrense til $20, Zen vil ikke bruke
mer enn $20 på en måned. Men hvis du har automatisk reload aktivert, kan Zen ende opp
belaster deg mer enn $20 hvis saldoen din går under $5.
---
## Personvern
Alle våre modeller er vert i US. Leverandørene våre følger en nulloppbevaringspolicy og bruker ikke dataene dine til modellopplæring, med følgende unntak:
- Big Pickle: I løpet av gratisperioden kan innsamlede data brukes til å forbedre modellen.
- GLM 4.7 Gratis: I løpet av gratisperioden kan innsamlede data brukes til å forbedre modellen.
- Kimi K2.5 Gratis: I løpet av gratisperioden kan innsamlede data brukes til å forbedre modellen.
- MiniMax M2.1 Gratis: I løpet av gratisperioden kan innsamlede data brukes til å forbedre modellen.
- OpenAI APIer: Forespørsler oppbevares i 30 dager i samsvar med [OpenAIs datapolicyer](https://platform.openai.com/docs/guides/your-data).
- Anthropic APIer: Forespørsler oppbevares i 30 dager i samsvar med [Anthropics datapolicyer](https://docs.anthropic.com/en/docs/claude-code/data-usage).
---
## For lag
Zen fungerer også utmerket for team. Du kan invitere lagkamerater, tildele roller, kuratere
modellene laget ditt bruker, og mer.
:::note
Arbeidsområder er for øyeblikket gratis for team som en del av betaversjonen.
:::
Å administrere arbeidsområdet ditt er for øyeblikket gratis for team som en del av betaversjonen. Det blir vi
deler mer informasjon om prisene snart.
---
### Roller
Du kan invitere lagkamerater til arbeidsområdet ditt og tildele roller:
- **Admin**: Administrer modeller, medlemmer, API-nøkler og fakturering
- **Medlem**: Administrer kun sine egne API-nøkler
Administratorer kan også sette månedlige forbruksgrenser for hvert medlem for å holde kostnadene under kontroll.
---
### Modelltilgang
Administratorer kan aktivere eller deaktivere spesifikke modeller for arbeidsområdet. Forespørsler til en deaktivert modell vil returnere en feil.
Dette er nyttig for tilfeller der du ønsker å deaktivere bruken av en modell som
samler inn data.
---
### Ta med egen nøkkel
Du kan bruke dine egne OpenAI- eller Anthropic API-nøkler mens du fortsatt har tilgang til andre modeller i Zen.
Når du bruker dine egne nøkler, faktureres tokens direkte av leverandøren, ikke av Zen.
For eksempel kan organisasjonen din allerede ha en nøkkel for OpenAI eller Anthropic
og du vil bruke det i stedet for det Zen gir.
---
## Mål
Vi opprettet OpenCode Zen for å:
1. **Benchmark** de beste modellene/leverandørene for kodingsagenter.
2. Ha tilgang til alternativene for **høyeste kvalitet** og ikke nedgrader ytelsen eller rute til billigere leverandører.
3. Gi videre eventuelle **prisfall** ved å selge til kostpris; så den eneste markeringen er å dekke behandlingsgebyrene våre.
4. Ha **ingen låsing** ved å la deg bruke den med en hvilken som helst annen kodeagent. Og la deg alltid bruke en hvilken som helst annen leverandør med OpenCode også.