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: Hvad er nyt i OpenCode 1.0.
---
OpenCode 1.0 er en komplet omskrivning af TUI.
Vi flyttede fra den go+bubbletea-baserede TUI, som havde problemer med ydeevne og kapacitet, til en intern ramme (OpenTUI) skrevet i zig+solidjs.
Den nye TUI fungerer som den gamle, da den opretter forbindelse til den samme opencode-server.
---
##Opgradering
Du bør ikke automatisk opgraderes til 1.0, hvis du er i øjeblikket bruger en tidligere
version. Nogle ældre versioner af OpenCode henter dog altid den nyeste.
Kør for at opgradere manuelt
```bash
$ opencode upgrade 1.0.0
```
Kør for at nedgradere tilbage til 0.x
```bash
$ opencode upgrade 0.15.31
```
---
## UX ændringer
Sessionshistorikken er mere komprimeret og viser kun alle detaljer om redigerings- og bash-værktøjet.
Vi tilføjede en kommandolinje, som næsten alt flyder igennem. Tryk på ctrl+p for at få det frem i enhver sammenhæng og se alt, hvad du kan gøre.
Tilføjet en sessionssidebjælke (kan skiftes) med nyttige oplysninger.
Vi fjernede nogle funktioner, som vi ikke var sikre på, at nogen rent faktisk brugte. Hvis der mangler noget vigtigt, bedes du åbne et problem, så tilføjer vi det hurtigt igen.
---
## Brydende ændringer
### Nøglebindinger omdøbt
- messages_revert -> messages_undo
- switch_agent -> agent_cyklus
- switch_agent_reverse -> agent_cyklus_reverse
- switch_mode -> agent_cyklus
- switch_mode_reverse -> agent_cyklus_reverse
### Nøglebindinger fjernet
- messages_layout_toggle
- beskeder_næste
- beskeder_forrige
- file_diff_toggle
- fil_søgning
- fil_luk
- fil_liste
- app_hjælp
- projekt_init
- tool_details
- tænkeblokke

View File

@@ -0,0 +1,156 @@
---
title: ACP support
description: Brug OpenCode i enhver ACP-kompatibel editor.
---
OpenCode understøtter [Agent Client Protocol](https://agentclientprotocol.com) eller (ACP), så du kan bruge det direkte i kompatible editorer og IDE'er.
:::tip
For en liste over redaktører og værktøjer, der understøtter ACP, tjek [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now).
:::
ACP er en åben protokol, der standardiserer kommunikation mellem kodeeditorer og AI-kodningsagenter.
---
## Konfigurer
For at bruge OpenCode via ACP, konfigurer din editor til at køre kommandoen `opencode acp`.
Kommandoen starter OpenCode som en ACP-kompatibel underproces, der kommunikerer med din editor over JSON-RPC via stdio.
Nedenfor er eksempler på populære redaktører, der understøtter ACP.
---
### Zed
Føj til din [Zed](https://zed.dev)-konfiguration (`~/.config/zed/settings.json`):
```json title="~/.config/zed/settings.json"
{
"agent_servers": {
"OpenCode": {
"command": "opencode",
"args": ["acp"]
}
}
}
```
For at åbne den skal du bruge handlingen `agent: new thread` i **Kommandopaletten**.
Du kan også binde en tastaturgenvej ved at redigere din `keymap.json`:
```json title="keymap.json"
[
{
"bindings": {
"cmd-alt-o": [
"agent::NewExternalAgentThread",
{
"agent": {
"custom": {
"name": "OpenCode",
"command": {
"command": "opencode",
"args": ["acp"]
}
}
}
}
]
}
}
]
```
---
### JetBrains IDE'er
Tilføj til din [JetBrains IDE](https://www.jetbrains.com/) acp.json i henhold til [documentation](https://www.jetbrains.com/help/ai-assistant/acp.html):
```json title="acp.json"
{
"agent_servers": {
"OpenCode": {
"command": "/absolute/path/bin/opencode",
"args": ["acp"]
}
}
}
```
For at åbne den skal du bruge den nye 'OpenCode'-agent i AI Chat-agentvælgeren.
---
### Avante.nvim
Føj til din [Avante.nvim](https://github.com/yetone/avante.nvim)-konfiguration:
```lua
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" }
}
}
}
```
Hvis du har brug for at videregive miljøvariabler:
```lua {6-8}
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" },
env = {
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
}
}
}
}
```
---
### CodeCompanion.nvim
For at bruge OpenCode som en ACP-agent i [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), skal du tilføje følgende til din Neovim-konfiguration:
```lua
require("codecompanion").setup({
interactions = {
chat = {
adapter = {
name = "opencode",
model = "claude-sonnet-4",
},
},
},
})
```
Denne konfiguration sætter CodeCompanion til at bruge OpenCode som ACP-agent til chat.
Hvis du har brug for at sende miljøvariabler (som `OPENCODE_API_KEY`), henvises til [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) i CodeCompanion.nvim-dokumentationen for alle detaljer.
## Support
OpenCode fungerer på samme måde via ACP som i terminalen. Alle funktioner understøtter:
:::note
Nogle indbyggede skråstreg-kommandoer som `/undo` og `/redo` er i øjeblikket ikke understøttet.
:::
- Indbyggede værktøjer (filoperationer, terminalkommandoer osv.)
- Brugerdefinerede værktøjer og skråstreg-kommandoer
- MCP-servere konfigureret i din OpenCode-konfiguration
- Projektspecifikke regler fra `AGENTS.md`
- Brugerdefinerede formatere og linters
- Agenter og tilladelsessystem

View File

@@ -0,0 +1,747 @@
---
title: Agent
description: Konfigurer og brug specialiserede agenter.
---
Agenter er specialiserede AI-assistenter, der kan konfigureres til specifikke opgaver og arbejdsgange. De giver dig mulighed for at oprette en central værktøj med brugerdefinerede prompter, modeller og værktøjsadgang.
:::tip
Brug planagenten til at analysere kode og gennemgå forslag uden at foretage nogen kodeændringer.
:::
Du kan skifte mellem agenter under en session eller kalde dem med `@`-omtalen.
---
## Skriver
Der er to typer agenter i OpenCode; primære midler og subagenter.
---
### Primære agent
Primære agenter er de vigtigste assistenter, du interagerer direkte med. Du kan bladre gennem dem ved at bruge **Tab**-tasten eller din konfigurerede `switch_agent`-tastebinding. Disse agenter håndterer din hovedsamtale. Værktøjsadgang konfigureres via tilladelser - for eksempel har Build alle aktiveret, mens Plan er begrænset.
:::tip
Du kan bruge **Tab**-tasten til at skifte mellem primære agenter under en session.
:::
OpenCode leveres med indbyggede primære agenter, **Build** og **Plan**. Godt
se på disse nedenfor.
---
### Subagent
Subagenter er specialiserede assistenter, som primære agenter kan påbegynde sig til specifikke opgaver. Du kan også kalde dem manuelt ved at **@ nævne** dem i dine beskeder.
OpenCode leveres med til indbyggede underagenter, **Generelt** og **Udforsk**. Vi vil se på dette nedenfor.
---
## Indbygget
OpenCode leveres med to indbyggede primære agenter og to indbyggede subagenter.
---
### Brug bygge
_Tilstand_: `primary`
Byg er den **standard** primære agent med alle aktiveret. Dette er standardagenten til udviklingsarbejde, hvor du har brug for fuld adgang til filhandlinger og systemkommandoer.
---
### Brug plan
_Tilstand_: `primary`
En begrænset agent designet til planlægning og analyse. Vi bruger et tilladelsessystem til at give dig mere kontrol og forhindre utilsigtede ændringer.
Som standard er alle følgende indstillet til `ask`:
- `file edits`: Alle skrivninger, patches og redigeringer
- `bash`: Alle bash-kommandoer
Denne agent er nyttig, når du vil have LLM til at analysere kode, foreslå ændringer eller oprette planer uden at foretage egentlige ændringer af din kodebase.
---
### Brug generelt
_Tilstand_: `subagent`
En agent til generelt formål at undersøge komplekse spørgsmål og udføre opgaver i flere trin. Har fuld værktøjsadgang (undtagen todo), så den kan foretage filændringer, når det er nødvendigt. Brug dette til at køre flere arbejdsenheder parallelt.
---
### Brug udforsk
_Tilstand_: `subagent`
En hurtig, skrivebeskyttet agent til at udforske kodebaser. Kan ikke ændre filer. Brug dette, når du hurtigt skal finde filer efter mønstre, søge kode efter nøgleord eller besvare spørgsmål om kodebasen.
---
### Brug komprimering
_Tilstand_: `primary`
Skjult systemagent, der komprimerer lang kontekst til et mindre resumé. Det kører automatisk, når det er nødvendigt og ikke kan vælges i brugergrænsefladen.
---
### Brug titel
_Tilstand_: `primary`
Skjult systemagent, der genererer korte sessionstitler. Den kører automatisk og kan ikke vælges i brugergrænsefladen.
---
### Brug CV
_Tilstand_: `primary`
Skjult systemagent, der opretter sessionsoversigter. Den kører automatisk og kan ikke vælges i brugergrænsefladen.
---
## Brug
1. For primære agenter skal du bruge tasten **Tab** til at bladre gennem dem under en session. Du kan også bruge din konfigurerede `switch_agent` nøglebinding.
2. Subagenter kan påberåbes:
- **Automatisk** af primære agenter til specialiserede opgaver baseret på deres beskrivelser.
- Manuelt ved at **@ nævne** en underagent i din besked. F.eks.
```txt frame="none"
@general help me search for this function
```
3. **Navigation mellem sessioner**: Når underagenter opretter deres egne underordnede sessioner, kan du navigere mellem den overordnede session og alle underordnede sessioner ved hjælp af:
- **\<Leder>+Højre** (eller din konfigurerede `session_child_cycle`-smagsbinding) for at cykle fremad gennem forælder → barn1 → barn2 →... → forælder
- **\<Leder>+Venstre** (eller din konfigurerede `session_child_cycle_reverse`-smagsbinding) for at cykle baglæns gennem forælder ← barn1 ← barn2 ←... ← forælder
Dette giver dig mulighed for problemfrit at skifte mellem hovedsamtalen og specialiseret subagent arbejde.
---
## Konfigurer
Du kan tilpasse de indbyggede agenter eller oprette dine egne gennem konfiguration. Agenter kan konfigureres på følgende måder:
---
### JSON
Konfigurationsagent i din `opencode.json`-konfigurationsfil:
```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 hjælp af markdown-filer. Placer dem i:
- Globalt: `~/.config/opencode/agents/`
- Pr. projekt: `.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 bliver agentnavnet. For eksempel opretter `review.md` og `review`-agent.
---
## Indstillinger
Lad os se nærmere på disse konfigurationsmuligheder.
---
### Beskrivelse
Brug indstillingen `description` til at give en kort beskrivelse af, hvad agenten gør, og hvornår den skal bruges.
```json title="opencode.json"
{
"agent": {
"review": {
"description": "Reviews code for best practices and potential issues"
}
}
}
```
Dette er en **påkrævet** konfigurationsindstilling.
---
### Temperatur
Styr tilfældigheden og kreativiteten af LLMs svar med `temperature`-konfigurationen.
Lavere værdier gør svar mere fokuserede og deterministiske, mens højere værdier øger kreativitet og variabilitet.
```json title="opencode.json"
{
"agent": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Temperaturværdier typisk fra 0,0 til 1,0:
- **0.0-0.2**: Meget fokuseret og deterministisk svar, ideel til kodeanalyse og planlægning
- **0,3-0,5**: Afbalancerede svar med en vis kreativitet, god til generelle udviklingsopgaver
- **0.6-1.0**: Mere kreative og varierede svar, nyttige til brainstorming og udforskning
```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 angivet, bruger OpenCode modelspecifikke standardindstillinger; typisk 0 for de fleste modeller, 0,55 for Qwen-modeller.
---
### Maks. skridt
Kontrollerer det maksimale antal agent-gentagelser, som en agent kan udføre, før han bliver tvunget til kun at svare med tekst. Dette giver brugere, der ønsker at kontrollere, mulighed for at sætte en grænse for agenthandlinger.
Hvis dette ikke er indstillet, vil agenten fortsætte med at iterere, indtil modellen vælger at stoppe, eller brugeren afbryder sessionen.
```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 grænsen er nået, modtager agenten en speciel systemprompt, der instruerer den om at svare med en opsummering af sit arbejde og anbefalede resterende opgaver.
:::forsigtighed
Det gamle `maxSteps` følte er forældet. Brug `steps` i stedet.
:::
---
### Deaktiver
Indstil til `true` for at deaktivere agenten.
```json title="opencode.json"
{
"agent": {
"review": {
"disable": true
}
}
}
```
---
### Spørg
Angiv en brugerdefineret systempromptfil for denne agent med `prompt`-konfigurationen. Promptfilen skal indeholde instruktioner, der er specifikke for agentens formål.
```json title="opencode.json"
{
"agent": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Denne sti er i forhold til, hvor konfigurationsfilen er placeret. Så dette virker både for den globale OpenCode-konfiguration og den projektspecifikke konfiguration.
---
### Model
Brug `model`-konfigurationen til at tilsidesætte modeller for denne agent. Nyttigt til brug af forskellige modeller optimeret til forskellige opgaver. For eksempel en hurtigere model til planlægning, en dygtig model til implementering.
:::tip
Hvis du ikke angiver en model, bruger primære agenter [model globally configured](/docs/config#models), mens subagenter vil bruge modeller for den primære agent, der påkaldte subagenten.
:::
```json title="opencode.json"
{
"agent": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
Model-id'et i din OpenCode-konfiguration brugerformatet `provider/model-id`. For eksempel, hvis du bruger [OpenCode Zen](/docs/zen), vil du bruge `opencode/gpt-5.1-codex` til GPT 5.1 Codex.
---
### Værktøjer
Kontroller, hvilke værktøjer der er tilgængelige i denne agent med `tools`-konfigurationen. Du kan aktivere eller deaktivere specifikke redskaber ved at indstille 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 agentspecifikke konfiguration tilsidesætter den globale konfiguration.
:::
Du kan også bruge jokertegn til at styre flere værktøjer på én gang. For eksempel, for at deaktivere alle værktøjer fra en MCP-server:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"readonly": {
"tools": {
"mymcp_*": false,
"write": false,
"edit": false
}
}
}
}
```
[Learn more about tools](/docs/tools).
---
### Tilladelser
Du kan konfigurere tilladelser til at administrere, hvilke handlinger og agenter kan udføre. I øjeblikket kan tilladelserne til værktøjerne `edit`, `bash` og `webfetch` konfigureres til:
- `"ask"` — Bed om godkendelse, før du kører værktøjet
- `"allow"` — Tillad alle operationer uden godkendelse
- `"deny"` — Deaktiver værktøjet
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
}
}
```
Du kan tilsidesætte disse tilladelser pr. 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å angive tilladelser 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 indstille tilladelser til specifikke bash-kommandoer.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git push": "ask",
"grep *": "allow"
}
}
}
}
}
```
Dette kan tage et globmønster.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git *": "ask"
}
}
}
}
}
```
Og du kan også bruge jokertegnet `*` til at administrere tilladelser for alle kommandoer.
Da den sidste matchningsregel har forrang, skal du sætte jokertegnet `*` først og specifikke regler efter.
```json title="opencode.json" {8}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status *": "allow"
}
}
}
}
}
```
[Learn more about permissions](/docs/permissions).
---
### Tilstand
Styr agentens tilstand med `mode`-konfigurationen. Indstillingen `mode` bruges til at bestemme, hvordan agenten kan bruges.
```json title="opencode.json"
{
"agent": {
"review": {
"mode": "subagent"
}
}
}
```
Indstillingen `mode` kan indstilles til `primary`, `subagent` eller `all`. Hvis der ikke er angivet nogen `mode`, er den som standard `all`.
---
### Skjult
Skjul en underagent fra `@` autofuldførelsesmenuen med `hidden: true`. Nyttigt for interne underagenter, der kun bør startes programmatisk af andre agenter via opgaveværktøjet.
```json title="opencode.json"
{
"agent": {
"internal-helper": {
"mode": "subagent",
"hidden": true
}
}
}
```
Dette påvirker kun brugerens synlighed i autofuldførelsesmenuen. Skjulte agenter kan stadig påkaldes af modellen via opgaveværktøjet, hvis tilladelser tillader det.
:::note
Gælder kun for `mode: subagent`-agent.
:::
---
### Opgavetilladelser
Kontroller, hvilke subagenter en agent kan påkalde via opgaveværktøjet med `permission.task`. Bruger glob-mønstre til fleksibel matchning.
```json title="opencode.json"
{
"agent": {
"orchestrator": {
"mode": "primary",
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}
```
Når den er indstillet til `deny`, fjernes subagenten helt fra opgaveværktøjsbeskrivelsen, så modeller vil ikke forsøge at starte den.
:::tip
Reglerne vurderer i rækkefølge, og den **sidste matchende regel vinder**. I eksemplet ovenfor matcher `orchestrator-planner` både `*` (afvis) og `orchestrator-*` (tillad), men da `orchestrator-*` kommer efter `*`, er resultatet `allow`.
:::
:::tip
Brugere kan altid påkalde enhver underagent direkte via `@` autofuldførelsesmenuen, nægt agentens opgavetilladelser ville det.
:::
---
### Farve
Tilpas agentens visuelle udseende i brugergrænsefladen med muligheden `color`. Dette påvirker, hvordan agenter vises i grænsefladen.
Brug en gyldig hex-farve (f.eks. `#FF5733`) eller temafarve: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
```json title="opencode.json"
{
"agent": {
"creative": {
"color": "#ff6b6b"
},
"code-reviewer": {
"color": "accent"
}
}
}
```
---
### Top P
Styr responsdiversiteten med `top_p`-muligheden. Alternativ til temperatur for at kontrollere tilfældighed.
```json title="opencode.json"
{
"agent": {
"brainstorm": {
"top_p": 0.9
}
}
}
```
Værdier spænder fra 0,0 til 1,0. Lavere værdier er mere fokuserede, højere værdier mere forskelligartede.
---
### Yderligere
Alle andre muligheder, du angiver i din agentkonfiguration, vil blive **overført direkte** til udbyderen som modelvalg. Dette giver dig mulighed for at bruge udbyderspecifikke funktioner og parametre.
For eksempel, med OpenAIs ræsoneringsmodeller kan du styre ræsonnementindsatsen:
```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 yderligere muligheder er model- og udbyderspecifikke. Tjek din udbyders dokumentation for tilgængelige parametre.
:::tip
Kør `opencode models` for at se en liste over de tilgængelige modeller.
:::
---
## Opret agent
Du kan oprette nye agenter ved hjælp af følgende kommando:
```bash
opencode agent create
```
Denne interaktive kommando vil:
1. Spørg, hvor agenten skal gemmes; globalt eller projektspecifikt.
2. Beskrivelse af, hvad agenten skal gøre.
3. Generer en passende systemprompt og identifikator.
4. Lad dig vælge, hvilke værktøjer agenter har adgang til.
5. Til sidst skal du oprette en markdown-fil med agentkonfigurationen.
---
## Use cases
Her er nogle almindelige use cases for forskellige agenter.
- **Byggeagent**: Fuldt udviklingsarbejde med alle aktiveret
- **Planagent**: Analyse og planlægning uden ændringer
- **Anmeldelsesagent**: Kodegennemgang med skrivebeskyttet adgang plus dokumentationsværktøjer
- **Debug agent**: Fokuseret på undersøgelse med bash og læseværktøjer aktiveret
- **Docs-agent**: Dokumentationsskrivning med filhandlinger, men ingen systemkommandoer
---
## Eksempler
Her er nogle eksempler på agenter, du kan finde nyttige.
:::tip
Har du en agent, du gerne vil dele? [Submit a PR](https://github.com/anomalyco/opencode).
:::
---
### Dokumentationsagent
```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
```
---
### Sikkerhedsrevisor
```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 muligheder og kommandoer.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
OpenCode CLI starter som standard [TUI](/docs/tui), når den kører uden nogen argumenter.
```bash
opencode
```
Men den accepterer også kommandoer som dokumenteret på denne side. Dette giver dig mulighed for at interagere med OpenCode programmatisk.
```bash
opencode run "Explain how closures work in JavaScript"
```
---
### tui
Start OpenCode terminalbrugergrænsefladen.
```bash
opencode [project]
```
#### Flag
| Flag | Kort | Beskrivelse |
| ------------ | ---- | --------------------------------------- |
| `--continue` | `-c` | Fortsæt sidste session |
| `--session` | `-s` | Sessions-id for at fortsætte |
| `--prompt` | | Spørg om at bruge |
| `--model` | `-m` | Model til brug i form af provider/model |
| `--agent` | | Agent hos bruge |
| `--port` | | Port at lytte på |
| `--hostname` | | Værtsnavn at lytte på |
---
## Kommandoer
OpenCode CLI har også følgende kommandoer.
---
### agent
Administratoragent for OpenCode.
```bash
opencode agent [command]
```
---
### vedhæft
Tilslut en terminal til en allerede kørende OpenCode backend-server startet via `serve` eller `web` kommandoer.
```bash
opencode attach [url]
```
Dette gør det muligt at bruge 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
```
#### Flag
| Flag | Kort | Beskrivelse |
| ----------- | ---- | -------------------------------- |
| `--dir` | | Arbejdsmappe til at starte TUI i |
| `--session` | `-s` | Sessions-id for at fortsætte |
---
#### oprette
Opret en ny agent med tilpasset konfiguration.
```bash
opencode agent create
```
Denne kommando vil guide dig gennem oprettelse af en ny agent med en brugerdefineret systemprompt og værktøjskonfiguration.
---
#### liste
Liste over alle tilgængelige agenter.
```bash
opencode agent list
```
---
### auth
Kommando til at administrere legitimationsoplysninger og login for udbydere.
```bash
opencode auth [command]
```
---
#### login
OpenCode drives af udbyderlisten på [Models.dev](https://models.dev), så du kan bruge `opencode auth login` til at konfigurere API nøgler for enhver udbyder, du vil bruge. Dette er gemt i `~/.local/share/opencode/auth.json`.
```bash
opencode auth login
```
Når OpenCode starter op, indlæser den udbyderne fra legitimationsfilen. Og hvis der er nogen nøgler defineret i dine miljøer eller en `.env` fil i dit projekt.
---
#### liste
Viser alle de godkendte udbydere som gemt i legitimationsfilen.
```bash
opencode auth list
```
Eller den korte version.
```bash
opencode auth ls
```
---
#### log ud
Logger dig ud af en udbyder ved at rydde den fra legitimationsfilen.
```bash
opencode auth logout
```
---
### github
Administrator GitHub-agenten til lagerautomatisering.
```bash
opencode github [command]
```
---
#### installationsprogram
Installatør GitHub-agenten i dit lager.
```bash
opencode github install
```
Dette opsætter det nødvendige GitHub Actions workflow og guider dig gennem konfigurationsprocessen. [Learn more](/docs/github).
---
#### løb
Kør GitHub-agenten. Dette bruges typisk i GitHub Actions.
```bash
opencode github run
```
##### Flag
| Flag | Beskrivelse |
| --------- | ---------------------------------------------- |
| `--event` | GitHub mock begivenhed for at køre agenten for |
| `--token` | GitHub personlig adgangstoken |
---
### mcp
Administrator Model Context Protocol-servere.
```bash
opencode mcp [command]
```
---
#### tilføje
Tilføj en MCP-server til din konfiguration.
```bash
opencode mcp add
```
Denne kommando vil guide dig gennem tilføjelse af enten en lokal eller ekstern MCP-server.
---
#### liste
Liste over alle konfigurerede MCP-servere og deres forbindelsesstatus.
```bash
opencode mcp list
```
Eller brug den korte version.
```bash
opencode mcp ls
```
---
#### auth
Godkendt med en OAuth-aktiveret MCP-server.
```bash
opencode mcp auth [name]
```
Hvis du ikke angiver et servernavn, bliver du bedt om at vælge blandt tilgængelige OAuth-kompatible servere.
Du kan også angive OAuth-kompatible servere og deres godkendelsesstatus.
```bash
opencode mcp auth list
```
Eller brug den korte version.
```bash
opencode mcp auth ls
```
---
#### log ud
Fjern OAuth-legitimationsoplysninger for en MCP-server.
```bash
opencode mcp logout [name]
```
---
#### fejlretning
Fejlfinding af OAuth-forbindelsesproblemer for en MCP-server.
```bash
opencode mcp debug <name>
```
---
### modeller
Liste over alle tilgængelige modeller fra konfigurerede udbydere.
```bash
opencode models [provider]
```
Denne kommando viser alle tilgængelige modeller på tværs af dine konfigurerede udbydere i formatet `provider/model`.
Dette er nyttigt til at finde ud af det nøjagtige modelnavn, der skal bruges i [your config](/docs/config/).
Du kan eventuelt videregive et udbyder-id for at filtrere modeller efter den udbyder.
```bash
opencode models anthropic
```
#### Flag
| Flag | Beskrivelse |
| ----------- | ----------------------------------------------------------------------- |
| `--refresh` | Opdater modelcachen fra models.dev |
| `--verbose` | Brug mere detaljeret modeloutput (inkluderer metadata som omkostninger) |
Brug flaget `--refresh` til at opdatere den cachelagrede modelliste. Dette er nyttigt, når nye modeller er blevet tilføjet til en udbyder, og du vil se dem i OpenCode.
```bash
opencode models --refresh
```
---
### løb
Kør opencode i ikke-interaktiv tilstand ved at sende en prompt direkte.
```bash
opencode run [message..]
```
Dette er nyttigt til scripting, automatisering, eller når du vil have et hurtigt svar uden at starte hele TUI. F.eks.
```bash "opencode run"
opencode run Explain the use of context in Go
```
Du kan også vedhæfte til en kørende `opencode serve`-instans for at undgå MCP serverens kolde opstartstider ved hver kørsel:
```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"
```
#### Flag
| Flag | Kort | Beskrivelse |
| ------------ | ---- | ----------------------------------------------------------------------------------- |
| `--command` | | Kommandoen til at køre, brug besked til args |
| `--continue` | `-c` | Fortsæt sidste session |
| `--session` | `-s` | Sessions-id for at fortsætte |
| `--share` | | Del sessionen |
| `--model` | `-m` | Model til brug i form af provider/model |
| `--agent` | | Agent til brug |
| `--file` | `-f` | Fil(er), der skal vedhæftes til meddelelsen |
| `--format` | | Format: standard (formateret) eller json (rå JSON hændelser) |
| `--title` | | Titel for sessionen (bruger trunkeret prompt, hvis der ikke er angivet nogen værdi) |
| `--attach` | | Tilslut til en kørende opencode-server (f.eks. http://localhost:4096) |
| `--port` | | Port til den lokale server (standard til vilkårlig port) |
---
### server
Start en hovedløs OpenCode-server til API-adgang. Tjek [server docs](/docs/server) for den fulde HTTP-grænseflade.
```bash
opencode serve
```
Dette starter en HTTP-server, der giver API-adgang til opencode-funktionalitet uden TUI-grænsefladen. Indstil `OPENCODE_SERVER_PASSWORD` for at aktivere HTTP grundlæggende godkendelse (brugernavn er standard til `opencode`).
#### Flag
| Flag | Beskrivelse |
| ------------ | ------------------------------------------------ |
| `--port` | Port at lytte på |
| `--hostname` | Værtsnavn at lytte på |
| `--mdns` | Aktiver mDNS-opdagelse |
| `--cors` | Yderligere browseroprindelse til at tillade CORS |
---
### session
Administrator OpenCode sessionsholder.
```bash
opencode session [command]
```
---
#### liste
Liste over alle OpenCode sessioner.
```bash
opencode session list
```
##### Flag
| Flag | Kort | Beskrivelse |
| ------------- | ---- | -------------------------------------- |
| `--max-count` | `-n` | Begræns til N seneste sessioner |
| `--format` | | Outputformat: tabel eller json (tabel) |
---
### statistik
Vis tokenbrug og omkostningsstatistikker for dine OpenCode-sessioner.
```bash
opencode stats
```
#### Flag
| Flag | Beskrivelse |
| ----------- | --------------------------------------------------------------------------- |
| `--days` | Vis statistik for de sidste N dage (hele tiden) |
| `--tools` | Antal værktøjer, der skal vises (alle) |
| `--models` | Vis modelbrugsopdeling (skjult som standard). Send et tal for at vise top N |
| `--project` | Filtre efter projekt (alle projekter, tom streng: nuværende projekt) |
---
### eksport
Eksporter sessionsdata som JSON.
```bash
opencode export [sessionID]
```
Hvis du ikke angiver et sessions-id, bliver du bedt om at vælge mellem tilgængelige sessioner.
---
### import
Importer sessionsdata fra en JSON fil eller OpenCode del URL.
```bash
opencode import <file>
```
Du kan importere fra en lokal fil eller en OpenCode share URL.
```bash
opencode import session.json
opencode import https://opncd.ai/s/abc123
```
---
### web
Start en hovedløs OpenCode-server med en webgrænseflade.
```bash
opencode web
```
Dette starter en HTTP-server og åbner en webbrowser for at få adgang til OpenCode via en webgrænseflade. Indstil `OPENCODE_SERVER_PASSWORD` for at aktivere HTTP grundlæggende godkendelse (brugernavn er standard til `opencode`).
#### Flag
| Flag | Beskrivelse |
| ------------ | ------------------------------------------------ |
| `--port` | Port at lytte på |
| `--hostname` | Værtsnavn at lytte på |
| `--mdns` | Aktiver mDNS-opdagelse |
| `--cors` | Yderligere browseroprindelse til at tillade CORS |
---
### acp
Start en ACP-server (Agent Client Protocol).
```bash
opencode acp
```
Denne kommando starter en ACP-server, der kommunikerer via stdin/stdout ved hjælp af nd-JSON.
#### Flag
| Flag | Beskrivelse |
| ------------ | --------------------- |
| `--cwd` | Arbejdsmappe |
| `--port` | Port at lytte på |
| `--hostname` | Værtsnavn at lytte på |
---
### afinstaller
Afinstaller OpenCode og fjern alle relaterede filer.
```bash
opencode uninstall
```
#### Flag
| Flag | Kort | Beskrivelse |
| --------------- | ---- | ------------------------------------------------ |
| `--keep-config` | `-c` | Se konfigurationsfiler |
| `--keep-data` | `-d` | Gem sessionsdata og snapshots |
| `--dry-run` | | Vis, hvad der ville blive fjernet uden at fjerne |
| `--force` | `-f` | Spring bekræftelsesspørgsmål over |
---
###opgradering
Opdaterer opencode til den seneste version eller en specifik version.
```bash
opencode upgrade [target]
```
For at opgradere til den nyeste version.
```bash
opencode upgrade
```
For at opgradere til en bestemt version.
```bash
opencode upgrade v0.1.48
```
#### Flag
| Flag | Kort | Beskrivelse |
| ---------- | ---- | -------------------------------------------------------------------- |
| `--method` | `-m` | Installationsmetoden, der blev brugt; krølle, npm, pnpm, bolle, bryg |
---
## Globalt flag
opencode CLI tager følgende globale flag.
| Flag | Kort | Beskrivelse |
| -------------- | ---- | --------------------------------------- |
| `--help` | `-h` | Vis hjælp |
| `--version` | `-v` | Udskriftsversionsnummer |
| `--print-logs` | | Udskriv logfiler til stderr |
| `--log-level` | | Logniveau (DEBUG, INFO, ADVARSEL, FEJL) |
---
## Miljøvariabler
OpenCode kan konfigureres ved hjælp af miljøvariabler.
| Variabel | Skriv | Beskrivelse |
| ------------------------------------- | ------ | --------------------------------------------------------------------- |
| `OPENCODE_AUTO_SHARE` | boolsk | Del automatisk session |
| `OPENCODE_GIT_BASH_PATH` | styrke | Sti til Git Bash eksekverbar på Windows |
| `OPENCODE_CONFIG` | styrke | Sti til konfigurationsfil |
| `OPENCODE_CONFIG_DIR` | styrke | Sti til konfigurationsmappe |
| `OPENCODE_CONFIG_CONTENT` | styrke | Indbygget json-konfigurationsindhold |
| `OPENCODE_DISABLE_AUTOUPDATE` | boolsk | Deaktiver automatisk opdateringskontrol |
| `OPENCODE_DISABLE_PRUNE` | boolsk | Deaktiver beskæring af gamle data |
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolsk | Deaktiver automatisk opdatering af terminaltitel |
| `OPENCODE_PERMISSION` | styrke | Indbygget json-tilladelseskonfiguration |
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolsk | Deaktiver standard plugins |
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolsk | Deaktiver automatisk LSP-serverdownloads |
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolsk | Aktive eksperimentelle modeller |
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolsk | Deaktiver automatisk kontekstkomprimering |
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolsk | Deaktiver læsning fra `.claude` (prompt + færdigheder) |
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolsk | Deaktiver læsning `~/.claude/CLAUDE.md` |
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolsk | Deaktiver indlæsning af `.claude/skills` |
| `OPENCODE_DISABLE_MODELS_FETCH` | boolsk | Deaktivering af modeller fra eksterne kilder |
| `OPENCODE_FAKE_VCS` | styrke | Falsk VCS-udbyder til testformål |
| `OPENCODE_DISABLE_FILETIME_CHECK` | boolsk | Deaktiver filtidskontrol for optimering |
| `OPENCODE_CLIENT` | styrke | Klient-id (standard til `cli`) |
| `OPENCODE_ENABLE_EXA` | boolsk | Aktiver Exa-websøgeværktøjer |
| `OPENCODE_SERVER_PASSWORD` | styrke | Aktiver grundlæggende godkendelse for `serve`/`web` |
| `OPENCODE_SERVER_USERNAME` | styrke | Tilsidesæt grundlæggende godkendelsesbrugernavn (standard `opencode`) |
| `OPENCODE_MODELS_URL` | styrke | Brugerdefineret URL til hentning af modelkonfiguration |
---
### Eksperimentel
Disse miljøvariabler muliggør eksperimentelle funktioner, der kan ændres eller fjernes.
| Variabel | Skriv | Beskrivelse |
| ----------------------------------------------- | ------ | ------------------------------------------ |
| `OPENCODE_EXPERIMENTAL` | boolsk | Aktiver alle eksperimentelle funktioner |
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolsk | Aktiver ikonopdagelse |
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolsk | Deaktiver kopi ved valg i TUI |
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | nummer | Standard timeout for bash-kommandoer i ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | nummer | Maks. output-tokens for LLM-svar |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolsk | Aktiver filovervågning for hele dir |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolsk | Aktiver oxfmt formatter |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolsk | Aktive eksperimenter LSP værktøj |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolsk | Deaktiver filovervågning |
| `OPENCODE_EXPERIMENTAL_EXA` | boolsk | Aktive eksperimenter Exa-funktioner |
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolsk | Aktive forsøg LSP typekontrol |
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolsk | Aktive eksperimentelle markdown-funktioner |
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolsk | Aktiver plantilstand |

View File

@@ -0,0 +1,323 @@
---
title: Kommandoer
description: Opret brugerdefinerede kommandoer til gentagne opgaver.
---
Brugerdefinerede kommandoer giver mulighed for at angive en prompt, du vil køre, når denne kommando udføres i TUI.
```bash frame="none"
/my-command
```
Brugerdefinerede kommandoer er ud over de indbyggede kommandoer som `/init`, `/undo`, `/redo`, `/share`, `/help`. [Learn more](/docs/tui#commands).
---
## Opret kommandofiler
Opret markdown-filer i mappen `commands/` for at definere brugerdefinerede kommandoer.
Opret `.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 kommandoegenskaber. Indholdet bliver skabelonen.
Brug kommandoen ved at skrive `/` efterfulgt af kommandonavnet.
```bash frame="none"
"/test"
```
---
## Konfigurer
Du kan tilføje brugerdefinerede kommandoer gennem OpenCode-konfigurationen eller ved at oprette markdown-filer i `commands/`-mappen.
---
### JSON
Brug indstillingerne `command` i din 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"
}
}
}
```
Nu kan du køre denne kommando i TUI:
```bash frame="none"
/test
```
---
### Markdown
Du kan også definere kommandoer ved hjælp af markdown-filer. Placer dem i:
- Globalt: `~/.config/opencode/commands/`
- Pr. projekt: `.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 bliver kommandonavnet. For eksempel lader `test.md`
du løber:
```bash frame="none"
/test
```
---
## Spørg config
Spørgsmålene til de brugerdefinerede kommandoer understøtter flere specielle pladsholdere og syntaks.
---
### Argumenter
Send argumenter til kommandoer ved hjælp af pladsholderen `$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.
```
Kør kommandoen med argumenter:
```bash frame="none"
/component Button
```
Og `$ARGUMENTS` vil blive erstattet med `Button`.
Du kan også få adgang til individuelle argumenter ved hjælp af positionelle parametre:
- `$1` - Første argument
- `$2` - Andet 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
```
Kø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-output
Brug _!`command`_ til at injicere [bash command](/docs/tui#bash-commands) output i din prompt.
For eksempel, for at oprette en brugerdefineret kommando, der analyserer testdækning:
```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 at gennemgå de seneste ændringer:
```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 kører i dit projekts rodmappe, og deres output bliver en del af prompten.
---
### Filreferencer
Inkluder filer i din kommando ved hjælp af `@` efterfulgt af 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.
```
Filindholdet bliver automatisk integreret i prompten.
---
## Indstillinger
Lad os se nærmere på konfigurationsmulighederne.
---
### Skabelon
Indstillingen `template` definerer den prompt, der sendes til LLM, når kommandoen udfø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 en **påkrævet** konfigurationsindstilling.
---
### Beskrivelse
Brug indstillingen `description` til at give en kort beskrivelse af, hvad kommandoen gør.
```json title="opencode.json"
{
"command": {
"test": {
"description": "Run tests with coverage"
}
}
}
```
Dette vises som beskrivelsen i TUI, når du indtaster kommandoen.
---
### Agent
Brug `agent`-konfigurationen til valgfrit at angive, hvilken [agent](/docs/agents) der skal udføre denne kommando.
Hvis dette er en [subagent](/docs/agents/#subagents), vil kommandoen som standard udløse en subagent påkaldelse.
For at deaktivere denne adfærd skal du indstille `subtask` til `false`.
```json title="opencode.json"
{
"command": {
"review": {
"agent": "plan"
}
}
}
```
Dette er en **valgfri** konfigurationsindstilling. Hvis det ikke er angivet, er standarden din nuværende agent.
---
### Underopgave
Brug `subtask` boolean til at tvinge kommandoen til at udløse en [subagent](/docs/agents/#subagents) påkaldelse.
Dette er nyttigt, hvis du ønsker, at kommandoen ikke skal forurene din primære kontekst og vil **tvinge** agenten til at fungere som en underagent,
øjeblikkelig `mode` er sat til `primary` på [agent](/docs/agents) konfigurationen.
```json title="opencode.json"
{
"command": {
"analyze": {
"subtask": true
}
}
}
```
Dette er en **valgfri** konfigurationsindstilling.
---
### Model
Brug `model`-konfigurationen til at tilsidesætte standardmodellen for denne kommando.
```json title="opencode.json"
{
"command": {
"analyze": {
"model": "anthropic/claude-3-5-sonnet-20241022"
}
}
}
```
Dette er en **valgfri** konfigurationsindstilling.
---
## Indbygget
opencode indeholder flere indbyggede kommandoer som `/init`, `/undo`, `/redo`, `/share`, `/help`; [learn more](/docs/tui#commands).
:::note
Brugerdefinerede kommandoer kan tilsidesætte indbyggede kommandoer.
:::
Hvis du definerer en brugerdefineret kommando med samme navn, vil den tilsidesætte den indbyggede kommando.

View File

@@ -0,0 +1,685 @@
---
title: Konfig
description: Ved at bruge OpenCode JSON konfig.
---
Du kan konfigurere OpenCode ved hjælp af en JSON-konfigurationsfil.
---
## Format
OpenCode understø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 placere din konfiguration et par forskellige steder, og de har en
forskellig rækkefølge.
:::note
Konfigurationsfiler **flettes sammen**, erstattes ikke.
:::
Konfigurationsfiler flettes sammen, erstattes ikke. Indstillinger fra følgende konfigurationssteder kombineret. Senere konfigurationer tilsidesætter kun tidligere konfigurationer for modstridende nøgler. Ikke-modstridende indstillinger fra alle konfigurationer bevares.
For eksempel, hvis dine globale konfigurationssæt `theme: "opencode"` og `autoupdate: true`, og dine projektkonfigurationssæt `model: "anthropic/claude-sonnet-4-5"`, vil den endelige konfiguration integrere alle tre indstillinger.
---
### Prioritetsrækkefølge
Konfigurationskilder indlæses i denne rækkefølge (senere kilder tilsidesætter tidligere):
1. **Fjernkonfiguration** (fra `.well-known/opencode`) - organisatoriske standardindstillinger
2. **Global config** (`~/.config/opencode/opencode.json`) - brugerpræferencer
3. **Tilpasset konfiguration** (`OPENCODE_CONFIG` env var) - tilpassede tilsidesættelser
4. **Project config** (`opencode.json` i projekt) - projektspecifikke indstillinger
5. **`.opencode` mapper** - agent, kommandoer, plugins
6. **Inline config** (`OPENCODE_CONFIG_CONTENT` env var) - runtime tilsidesættelser
Dette betyder, at projektkonfigurationer kan tilsidesætte globale standardindstillinger, og globale konfigurationer kan tilsidesætte eksterne organisatoriske standarder.
:::note
`.opencode` og `~/.config/opencode` bibliotekerne bruger **flertalsnavne** for undermapper: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` og `themes/`. Enkelte navne (f.eks. `agent/`) understøtter også bagudkompatibilitet.
:::
---
### Fjernbetjening
Organisationer kan levere standardkonfiguration via `.well-known/opencode`-slutpunktet. Dette hentes automatisk, når du godkender med en udbyder, der understøtter det.
Remote config indlæses først og fungerer som basislaget. Alle andre konfigurationskilder (global, projekt) kan tilsidesætte disse standardindstillinger.
Hvis din organisation f.eks. leverer MCP-servere, der er deaktiveret 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 specifikke servere i din lokale konfiguration:
```json title="opencode.json"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
---
### Global
Placer din globale OpenCode-konfiguration i `~/.config/opencode/opencode.json`. Brug global konfiguration til brugerdækkende præferencer som temaer, udbydere eller nøglebindinger.
Global config tilsidesætter eksterne organisatoriske standarder.
---
### Pr. projekt
Tilføj `opencode.json` i dit projektrod. Project config har den højeste forrang blandt standard config-filer - den tilsidesætter både globale og eksterne config.
:::tip
Placer projektspecifik konfiguration i roden af dit projekt.
:::
Når OpenCode starter op, søger den efter en konfigurationsfil i det aktuelle kort eller går op til den nærmeste Git-mappe.
Dette er også sikkert at blive tjekket ind i Git og bruger det samme skema som det globale.
---
### Brugerdefineret sti
Angiv en brugerdefineret konfigurationsfilsti ved hjælp af miljøvariablen `OPENCODE_CONFIG`.
```bash
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"
```
Brugerdefineret konfigurationsindlæses mellem globale konfigurationer og projektkonfigurationer i prioriteret rækkefølge.
---
### Brugerdefineret bibliotek
Angiv en brugerdefineret konfigurationsmappe ved hjælp af `OPENCODE_CONFIG_DIR`
miljøvariabel. Dette kort vil blive søgt efter agenter, kommandoer,
modes og plugins ligesom standard `.opencode` biblioteket, og bør
følge samme struktur.
```bash
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"
```
Den brugerdefinerede map indlæses efter den globale konfig og `.opencode` mapper, så den **kan tilsidesætte** deres indstillinger.
---
## Skema
Konfigurationsfilen har et skema, der defineres i [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
Din editor skal være i stand til at validere og autofuldføre baseret på skemaet.
---
### TUI
Du kan konfigurere TUI-specifikke indstillinger gennem indstillingen `tui`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}
}
```
Tilgængelige muligheder:
- `scroll_acceleration.enabled` - Aktiver macOS-stil rulleacceleration. **Har forrang frem for `scroll_speed`.**
- `scroll_speed` - Brugerdefineret rullehastighedsmultiplikator (standard: `3`, minimum: `1`). Ignoreres, hvis `scroll_acceleration.enabled` er `true`.
- `diff_style` - Kontroller diff-gengivelse. `"auto"` tilpasser sig terminalbredden, `"stacked"` viser altid en enkelt kolonne.
[Learn more about using the TUI here](/docs/tui).
---
### Server
Du kan konfigurere serverindstillinger for kommandoerne `opencode serve` og `opencode web` gennem indstillingen `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"]
}
}
```
Tilgængelige muligheder:
- `port` - Port til at lytte på.
- `hostname` - Værtsnavn at lytte på. Når `mdns` er aktiveret, og der ikke er angivet noget værtsnavn, er standarden `0.0.0.0`.
- `mdns` - Aktiver mDNS-tjenesteopdagelse. Dette gør det muligt for andre enheder på netværket at opdage din OpenCode-server.
- `mdnsDomain` - Brugerdefineret domænenavn til mDNS-tjeneste. Som standard er `opencode.local`. Nyttigt til at køre flere forekomster på det samme netværk.
- `cors` - Yderligere oprindelser for at tillade CORS ved brug af HTTP-serveren fra en browserbaseret klient. Værdier skal være fulde oprindelser (skema + vært + valgfri port), f.eks. `https://app.example.com`.
[Learn more about the server here](/docs/server).
---
### Værktøjer
Du kan administrere de værktøjer, en LLM kan bruge, gennem indstillingen `tools`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}
```
[Learn more about tools here](/docs/tools).
---
### Modeller
Du kan konfigurere de udbydere og modeller, du vil bruge i din OpenCode-konfiguration, gennem mulighederne `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"
}
```
Indstillingen `small_model` konfigurerer en separat model til lette opgaver som titelgenerering. Som standard forsøger OpenCode at bruge en billigere model, hvis en er tilgængelig fra din udbyder, ellers falder den tilbage til din hovedmodel.
Udbydermuligheder kan omfatte `timeout` og `setCacheKey`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"setCacheKey": true
}
}
}
}
```
- `timeout` - Anmodningstimeout i millisekunder (standard: 300000). Indstil til `false` for at deaktivere.
- `setCacheKey` - Sørg for, at en cache-nøgle altid er indstillet til den udpegede udbyder.
Du kan også konfigurere [local models](/docs/models#local). [Learn more](/docs/models).
---
#### Udbyder-specifikke muligheder
Nogle udbydere understøtter yderligere konfigurationsmuligheder ud over de generiske `timeout` og `apiKey` indstillinger.
##### Amazonas grundfjeld
Amazon Bedrock understøtter AWS-specifik konfiguration:
```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 grundfjeld (standard til `AWS_REGION` env var eller `us-east-1`)
- `profile` - AWS navngivet profil fra `~/.aws/credentials` (standard til `AWS_PROFILE` env var)
- `endpoint` - Brugerdefineret slutpunkt URL for VPC-endepunkter. Dette er et alias for den generiske `baseURL`-indstilling, der bruger AWS-specifik terminologi. Hvis begge er angivet, har `endpoint` forrang.
:::note
Bærer-tokens (`AWS_BEARER_TOKEN_BEDROCK` eller `/connect`) har forrang over profilbaseret godkendelse. Se [authentication precedence](/docs/providers#authentication-precedence) for detaljer.
:::
[Learn more about Amazon Bedrock configuration](/docs/providers#amazon-bedrock).
---
### Temaer
Du kan konfigurere det tema, du vil bruge i din OpenCode-konfiguration, gennem indstillingen `theme`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"theme": ""
}
```
[Learn more here](/docs/themes).
---
### Agent
Du kan konfigurere opgaver specialiserede agenter til specifikke indstillinger gennem indstillingen `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 at bruge markdown-filer i `~/.config/opencode/agents/` eller `.opencode/agents/`. [Learn more here](/docs/agents).
---
### Standardagent
Du kan indstille standardagenten ved at bruge indstillingen `default_agent`. Dette bestemmer, hvilken agent der bruges, når ingen er eksplicit angivet.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}
```
Standardagenten skal være en primær agent (ikke en subagent). Dette kan være en indbygget agent som `"build"` eller `"plan"`, eller en [custom agent](/docs/agents), du har defineret. Hvis den angivne agent ikke eksisterer eller er en underagent, vil OpenCode falde tilbage til `"build"` med en advarsel.
Denne indstilling gælder på tværs af alle grænseflader: TUI, CLI (`opencode run`), desktop-app og GitHub Action.
---
### Deling
Du kan konfigurere funktionen [share](/docs/share) gennem indstillingen `share`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}
```
Dette kræver:
- `"manual"` - Tillad manuel deling via kommandoer (standard)
- `"auto"` - Del automatisk nye samtaler
- `"disabled"` - Deaktiver deling helt
Som standard er deling indstillet til manuel tilstand, hvor du eksplicit skal dele samtaler ved hjælp af kommandoen `/share`.
---
### Kommandoer
Du kan konfigurere brugerdefinerede kommandoer til gentagne opgaver gennem indstillingen `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 hjælp af markdown-filer i `~/.config/opencode/commands/` eller `.opencode/commands/`. [Learn more here](/docs/commands).
---
### Nøglebindinger
Du kan tilpasse dine nøglebindinger gennem indstillingen `keybinds`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {}
}
```
[Learn more here](/docs/keybinds).
---
### Autoopdatering
OpenCode vil automatisk downloade alle nye opdateringer, når den starter op. Du kan deaktivere dette med indstillingen `autoupdate`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}
```
Hvis du ikke ønsker opdatering, men ønsker at blive underrettet, når en ny version er tilgængelig, skal du indstille `autoupdate` til `"notify"`.
Bemærk, at dette kun virker, hvis det ikke blev installeret ved hjælp af en pakkehåndtering såsom Homebrew.
---
### Formatere
Du kan konfigurere kodeformatere gennem indstillingen `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"]
}
}
}
```
[Learn more about formatters here](/docs/formatters).
---
### Tilladelser
Som standard opencode **tillader alle operationer** uden at kræve eksplicit godkendelse. Du kan ændre dette ved at bruge indstillingen `permission`.
For at sikre, at værktøjerne `edit` og `bash` for eksempel kræver brugergodkendelse:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}
```
[Learn more about permissions here](/docs/permissions).
---
### Komprimering
Du kan styre kontekstkomprimeringsadfærd gennem indstillingen `compaction`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true
}
}
```
- `auto` - Komprimer automatisk sessionen, når konteksten er fuld (standard: `true`).
- `prune` - Fjern gamle værktøjsudgange for at gemme tokens (standard: `true`).
---
### Watcher
Du kan konfigurere ignoreringsmønstre for filovervåger gennem indstillingen `watcher`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}
```
Mønstre følger glob-syntaks. Brug dette til at udelukke støjende mapper fra filvisning.
---
### MCP servere
Du kan konfigurere MCP-servere, som du vil bruge, gennem indstillingen `mcp`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}
```
[Learn more here](/docs/mcp-servers).
---
### Plugins
[Plugins](/docs/plugins) udvide OpenCode med brugerdefinerede værktøjer, kroge og integrationer.
Placer plugin-filer i `.opencode/plugins/` eller `~/.config/opencode/plugins/`. Du kan også indlæse plugins fra npm gennem indstillingen `plugin`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}
```
[Learn more here](/docs/plugins).
---
### Instruktioner
Du kan konfigurere brugervejledningen til den model, du kan gennem indstillingen `instructions`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
Dette kræver en række stier og globmønstre til instruktionsfiler. [Læs mere
om regler her](/docs/rules).
---
### Deaktiverede udbydere
Du kan deaktivere udbydere, der indlæses automatisk gennem `disabled_providers`-indstillingen. Dette er nyttigt, når du vil forhindre visse udbydere i at blive indlæst, deres legitimationsoplysninger er tilgængelige.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}
```
:::note
`disabled_providers` har prioritet over `enabled_providers`.
:::
Indstillingen `disabled_providers` accepterer en række udbyder-id'er. Når en udbyder er deaktiveret:
- Det vil ikke blive indlæst, omgivelserne miljøvariabler er indstillet.
- Den vil ikke blive indlæst, gennem API nøgler er konfigureret kommandoen `/connect`.
- Udbyderens modeller vises ikke på modelvalgslisten.
---
### Aktiverede udbydere
Du kan angive en tilladelsesliste over udbydere gennem muligheden `enabled_providers`. Når den er indstillet, vil kun de angivne udbydere blive aktiveret, og alle andre vil blive ignoreret.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}
```
Dette er nyttigt, når du vil begrænse OpenCode til kun at bruge specifikke udbydere i stedet for at deaktivere dem én efter én.
:::note
`disabled_providers` har prioritet over `enabled_providers`.
:::
Hvis en udbyder optræder i både `enabled_providers` og `disabled_providers`, har `disabled_providers` prioritet for bagudkompatibilitet.
---
### Eksperimentel
Nøglen `experimental` indeholder muligheder, der er under aktiv udvikling.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}
```
:::forsigtighed
Eksperimentelle muligheder er ikke stabile. De kan ændres eller fjernes uden varsel.
:::
---
## Variabel
Du kan bruge variabelsubstitution i dine konfigurationsfiler til at referere til miljøvariabler og filindhold.
---
### Env vars
Brug `{env:VARIABLE_NAME}` til at 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øvariablen ikke er indstillet, vil den blive erstattet med en tom streng.
---
### Filer
Brug `{file:path/to/file}` til at erstatte indholdet af en fil:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}
```
Filstier kan være:
- I forhold til konfigurationsfilbiblioteket
- Eller absolutte stier, der starter med `/` eller `~`
Disse er nyttige til:
- Opbevaring af følsomme data som API nøgler i separate filer.
- Inklusiv store instruktionsfiler uden at rode i din konfiguration.
- Deling af fælles konfigurationsuddrag på tværs af flere konfigurationsfiler.

View File

@@ -0,0 +1,170 @@
---
title: Brugerdefinerede værktøjer
description: Opret værktøjer, som LLM kan kalde opencode ind.
---
Brugerdefinerede værktøjer er funktioner, du opretter, som LLM kan kalde under samtaler. De arbejder sammen med opencodes [built-in tools](/docs/tools) som `read`, `write` og `bash`.
---
## Oprettelse af et værktøj
Værktøjer er defineret som **TypeScript**- eller **JavaScript**-filer. Værktøjsdefinitionen kan dog kalde scripts skrevet på **alle sprog** - TypeScript eller JavaScript bruges kun til selve værktøjsdefinitionen.
---
### Placering
De kan definere:
- Lokalt ved at placere dem i biblioteket `.opencode/tools/` i dit projekt.
- Eller globalt ved at placere dem i `~/.config/opencode/tools/`.
---
### Struktur
Den nemmeste måde at oprette værktøjer på er at bruge `tool()`-hjælperen, som giver typesikkerhed 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** bliver **værktøjsnavnet**. Ovenstående opretter et `database` værktøj.
---
#### Flere værktøjer pr. fil
Du kan også eksportere flere værktøjer fra en enkelt fil. Hver eksport bliver **et separat værktøj** 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 skaber værktøjer: `math_add` og `math_multiply`.
---
### Argumenter
Du kan bruge `tool.schema`, som kun er [Zod](https://zod.dev), til at 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 almindeligt 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
Værktøjer modtager kontekst om den aktuelle session:
```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}`
},
})
```
Brug `context.directory` til sessionens arbejdsmappe.
Brug `context.worktree` til git-arbejdstræets rod.
---
## Eksempler
### Skriv et værktøj i Python
Du kan skrive dine værktøjer på et hvilket som helst sprog, du ønsker. Her er et eksempel, der tilføjer til tal ved hjælp af Python.
Først skal du oprette værktøjet som et Python-script:
```python title=".opencode/tools/add.py"
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)
```
Opret derefter værktøjsdefinitionen, der kalder 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 bruger vi [`Bun.$`](https://bun.com/docs/runtime/shell)-værktøjet til at køre Python-scriptet.

View File

@@ -0,0 +1,76 @@
---
title: Økosystem
description: Projekter og integrationer bygget med OpenCode.
---
En samling af samfundsprojekter bygget på OpenCode.
:::note
Vil du tilføje dit OpenCode-relaterede projekt til denne liste? Send en PR.
:::
Du kan også tjekke \_\_TK_0 og [opencode.cafe](https://opencode.cafe), et fællesskab, der samler økosystemet og fællesskabet.
---
## Plugins
| Navn | Beskrivelse |
| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | Kør automatisk OpenCode-sessioner i isolerede Daytona-sandkasser med git-synkronisering og live forhåndsvisninger |
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injicer automatisk Helicone-sessionsoverskrifter til anmodningsgruppering |
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Autoinjicer TypeScript/Svelte-typer i fillæsninger med opslagsværktøjer |
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Brug dit ChatGPT Plus/Pro abonnement i stedet for API kreditter |
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Brug din eksisterende Gemini-plan i stedet for API fakturering |
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Brug Antigravitys gratis modeller i stedet for API fakturering |
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Multi-branch devcontainer isolation med lavvandede kloner og automatisk tildelte porte |
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Antigravity OAuth Plugin, med understøttelse af Google søgning og mere robust API håndtering |
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimer tokenbrug ved at beskære forældede værktøjsoutput |
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Tilføj native websearch-understøttelse for understøttede udbydere med Google jordet stil |
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Gør det muligt for AI-agenter at køre baggrundsprocesser i en PTY, send interaktive input til dem. |
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instruktioner til ikke-interaktive shell-kommandoer - forhindrer hænger fra TTY-afhængige operationer |
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Spor OpenCode brug med Wakatime |
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Ryd op afmærkningstabeller produceret af LLMs |
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | 10x hurtigere koderedigering med Morph Fast Apply API og dovne redigeringsmarkører |
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Baggrundsagenter, præbyggede LSP/AST/MCP værktøjer, kuraterede agenter, Claude Kodekompatibel |
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Skrivebordsmeddelelser og lydadvarsler for OpenCode-sessioner |
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Skrivebordsmeddelelser og lydadvarsler for tilladelser, fuldførelse og fejlhændelser |
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | AI-drevet automatisk Zellij-sessionsnavngivning baseret på OpenCode-kontekst |
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Tillad OpenCode-agenter til dovne load-prompter på efterspørgsel med færdighedsopdagelse og -injektion |
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Vedvarende hukommelse på tværs af sessioner ved hjælp af Supermemory |
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktiv plangennemgang med visuel annotering og private/offline deling |
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Udvid opencode /commands til et kraftfuldt orkestreringssystem med granulær flowkontrol |
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planlæg tilbagevendende job ved hjælp af launchd (Mac) eller systemd (Linux) med cron-syntaks |
| [micode](https://github.com/vtemian/micode) | Struktureret brainstorm → Plan → Implementer workflow med session kontinuitet |
| [octto](https://github.com/vtemian/octto) | Interaktiv browser-UI til AI-brainstorming med formularer med flere spørgsmål |
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Claude Baggrundsagenter i kodestil med asynkron-delegering og kontekstvedholdenhed |
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Native OS-meddelelser for OpenCode ved, hvornår opgaver er fuldført |
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Bundled multi-agent orkestreringssele 16 komponenter, én installation |
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Nulfriktions git-arbejdstræer for OpenCode |
---
## Projekter
| Navn | Beskrivelse |
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
| [kimaki](https://github.com/remorses/kimaki) | Discord-bot til at styre OpenCode-sessioner, bygget på SDK |
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim-plugin til redaktør-bevidste prompter, bygget på API |
| [portal](https://github.com/hosenur/portal) | Mobile-first web UI til OpenCode over Tailscale/VPN |
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Skabelon til at bygge OpenCode plugins |
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim-frontend til opencode - en terminalbaseret AI-kodningsagent |
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK udbyder til brug af OpenCode via @opencode-ai/sdk |
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web / Desktop App og VS Code udvidelse til OpenCode |
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian plugin, der integrerer OpenCode i Obsidians brugergrænseflade |
| [OpenWork](https://github.com/different-ai/openwork) | Et open source-alternativ til Claude Cowork, drevet af OpenCode |
| [ocx](https://github.com/kdcokenny/ocx) | OpenCode udvidelsesmanager med bærbare, isolerede profiler. |
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop-, web-, mobil- og fjernklientapp til OpenCode |
---
## Agent
| Navn | Beskrivelse |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------- |
| [Agentic](https://github.com/Cluster444/agentic) | Modulære AI-agenter og -kommandoer til struktureret udvikling |
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfigurationer, prompter, agenter og plugins til forbedrede arbejdsgange |

View File

@@ -0,0 +1,170 @@
---
title: Enterprise
description: Brug af OpenCode sikkert i din organisation.
---
import config from "../../../../config.mjs"
export const email = `mailto:${config.email}`
OpenCode Enterprise er for organisationer, der ønsker at sikre, at deres kode og data aldrig forlader deres infrastruktur. Det kan gøre dette ved at bruge en centraliseret konfiguration, der integreres med din SSO og interne AI-gateway.
:::note
OpenCode gemmer ingen af din kode eller kontekstdata.
:::
Sådan kommer du i gang med OpenCode Enterprise:
1. Lav en prøvetur internt med dit team.
2. **<a href={email}>Kontakt os</a>** for at diskutere priser og implementeringsmuligheder.
---
## Prøve
OpenCode er open source og gemmer ingen af din kode eller kontekstdata, så dine udviklere kan simpelthen [get started](/docs/) og udføre en prøveversion.
---
### Datahåndtering
**OpenCode gemmer ikke din kode eller kontekstdata.** Al behandling sker lokalt eller gennem direkte API-opkald til din AI-udbyder.
Det betyder, at så længe du bruger en udbyder, du stoler på, eller en intern
AI-gateway, du kan bruge OpenCode sikkert.
Den eneste advarsel her er den valgfrie `/share`-funktion.
---
#### Deling af samtaler
Hvis en bruger aktiverer funktionen `/share`, sender samtalen og de data, der er knyttet til den, til den tjeneste, vi bruger til at hoste disse delesider på opencode.ai.
Dataene serveres i øjeblikket gennem vores CDN's edge-netværk og cachelagres på kanten nær dine brugere.
Vi anbefaler, at du deaktiverer dette for din prøveperiode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled"
}
```
[Learn more about sharing](/docs/share).
---
### Kodeejerskab
**Du ejer al kode produceret af OpenCode.** Der er ingen licensbegrænsninger eller ejerskabskrav.
---
## Priser
Vi bruger en per-sæde-model til OpenCode Enterprise. Hvis du har din egen LLM-gateway, kræver vi ikke betaling for brugte tokens. For yderligere oplysninger om priser og implementeringsmuligheder, **<a href={email}>kontakt os</a>**.
---
## Implementering
Når du har afsluttet din prøveperiode, og du er klar til at bruge OpenCode kl
din organisation, kan du **<a href={email}>kontakte os</a>** for at diskutere
prissætning og implementeringsmuligheder.
---
### Central Config
Vi kan konfigurere OpenCode til at bruge en enkelt central konfiguration for hele din organisation.
Denne centraliserede konfiguration kan integreres med din SSO-udbyder og sikrer, at alle brugere kan få adgang til din interne AI-gateway.
---
### SSO-integration
Gennem den centrale konfiguration kan OpenCode integreres med din organisationer SSO-udbyder til godkendelse.
Denne giver OpenCode mulighed for at få legitimationsoplysninger til din interne AI-gateway gennem dette eksisterende identitetsadministrationssystem.
---
### Intern AI-gateway
Med den centrale konfiguration kan OpenCode også konfigureres til kun at bruge din interne AI-gateway.
Du kan også deaktivere alle andre AI-udbydere og sikre, at alle anmodninger går gennem din organisations godkendte infrastruktur.
---
### Self-hosting
Selvom vi anbefaler at deaktivere delesiderne for at sikre, at dine data aldrig forsvinder
din organisation, kan vi også hjælpe dig med at selv hoste dem på din infrastruktur.
Dette er i øjeblikket på vores køreplan. Hvis du er interesseret, **<a href={email}>giv os besked</a>**.
---
## FAQ
<details>
<summary>Hvad er OpenCode Enterprise?</summary>
OpenCode Enterprise er for organisationer, der ønsker at sikre, at deres kode og data aldrig forlader deres infrastruktur. Det kan gøre dette ved at bruge en centraliseret konfiguration, der integreres med din SSO og interne AI-gateway.
</details>
<details>
<summary>Hvordan kommer jeg i gang med OpenCode Enterprise?</summary>
Du skal blot starte med en intern prøveperiode med dit team. OpenCode gemmer som standard ikke din kode eller kontekstdata, hvilket gør det nemt at komme i gang.
Så **<a href={email}>kontakt os</a>** for at diskutere priser og implementeringsmuligheder.
</details>
<details>
<summary>Hvordan fungerer virksomhedspriser?</summary>
Vi tilbyder virksomhedspriser pr. sæde. Hvis du har din egen LLM-gateway, kræver vi ikke betaling for brugte tokens. For yderligere detaljer, **<a href={email}>kontakt os</a>** for et tilpasset tilbud baseret på din organisations behov.
</details>
<details>
<summary>Er mine data sikret med OpenCode Enterprise?</summary>
Ja. OpenCode gemmer ikke din kode eller kontekstdata. Al behandling sker lokalt eller gennem direkte API-opkald til din AI-udbyder. Med central konfiguration og SSO-integration forbliver dine data sikre i din organisationers infrastruktur.
</details>
<details>
<summary>Kan vi bruge vores eget private NPM-register?</summary>
OpenCode understøtter private npm registre gennem Buns oprindelige `.npmrc` filunderstøttelse. Hvis din organisation bruger et privat register, såsom JFrog Artifactory, Nexus eller lignende, skal du sikre dig, at udviklerne er godkendt, før de kører OpenCode.
Sådan konfigurerer du godkendelse med dit private register:
```bash
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
```
Dette opretter `~/.npmrc` med godkendelsesdetaljer. OpenCode vil automatisk
samle dette op.
:::forsigtighed
Du skal være logget ind i det private register, før du kører OpenCode.
:::
Alternativt kan du manuelt konfigurere en `.npmrc` fil:
```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}
```
Udviklere skal være logget ind på det private register, før de kører OpenCode for at sikre, at pakker kan installeres fra din virksomhedsregistrering.
</details>

View File

@@ -0,0 +1,130 @@
---
title: Formatere
description: OpenCode bruger sprogspecifikke formatere.
---
OpenCode formaterer automatisk filer, efter de er skrevet eller redigeret ved hjælp af sprogspecifikke formatere. Dette sikrer, at den kode, der genereres, følger kodestilene for dit projekt.
---
## Indbygget
OpenCode leveres med flere indbyggede formatere til populære sprog og rammer. Nedenfor er en liste over de formatere, understøttede filtypenavne og kommandoer eller konfigurationsmuligheder, der har brug for.
| Formater | Udvidelser | Krav |
| --------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| gofmt | .go | `gofmt` kommando tilgængelig |
| blande | .ex,.exs,.eex,.heex,.leex,.neex,.sface | `mix` kommando tilgængelig |
| smukkere | .js,.jsx,.ts,.tsx,.html,.css,.md,.json,.yaml og [more](https://prettier.io/docs/en/index.html) | `prettier` afhængighed i `package.json` |
| biome | .js,.jsx,.ts,.tsx,.html,.css,.md,.json,.yaml og [more](https://biomejs.dev/) | `biome.json(c)` konfigurationsfil |
| zig | .zig,.zon | `zig` kommando tilgængelig |
| klang-format | .c,.cpp,.h,.hpp,.ino og [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` konfigurationsfil |
| ktlint | .kt,.kts | `ktlint` kommando tilgængelig |
| ruff | .py,.pyi | `ruff` kommando tilgængelig med konfiguration |
| rustfmt | .rs | `rustfmt` kommando tilgængelig |
| cargofmt | .rs | `cargo fmt` kommando tilgængelig |
| uv | .py,.pyi | `uv` kommando tilgængelig |
| rubocop | .rb,.rake,.gemspec,.ru | `rubocop` kommando tilgængelig |
| standardrb | .rb,.rake,.gemspec,.ru | `standardrb` kommando tilgængelig |
| htmlbeautifier | .erb,.html.erb | `htmlbeautifier` kommando tilgængelig |
| luft | .R | `air` kommando tilgængelig |
| dart | .dart | `dart` kommando tilgængelig |
| ocamlformat | .ml,.mli | `ocamlformat` kommando tilgængelig og `.ocamlformat` config fil |
| terraform | .tf,.tfvars | `terraform` kommando tilgængelig |
| glimt | .glimt | `gleam` kommando tilgængelig |
| nixfmt | .nix | `nixfmt` kommando tilgængelig |
| shfmt | .sh,.bash | `shfmt` kommando tilgængelig |
| pint | .php | `laravel/pint` afhængighed i `composer.json` |
| oxfmt (Eksperimentel) | .js,.jsx,.ts,.tsx | `oxfmt` afhængighed i `package.json` og en [experimental env variable flag](/docs/cli/#experimental) |
| ormolu | .hs | `ormolu` kommando tilgængelig |
Så hvis dit projekt har `prettier` i din `package.json`, vil OpenCode automatisk bruge det.
---
## Sådan fungerer det
Når OpenCode skriver eller redigerer en fil, vil det:
1. Kontrollerer filtypenavnet mod alle aktiverede formatere.
2. Kører den relevante formateringskommando på filen.
3. Anvender formateringsændringerne automatisk.
Denne proces sker i baggrunden, hvilket sikrer, at dine kodestile vedligeholdes uden nogen manuelle trin.
---
## Konfigurer
Du kan tilpasse formatere gennem afsnittet `formatter` i din OpenCode-konfiguration.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}
```
Hver formateringskonfiguration understøtter følgende:
| Ejendom | Skriv | Beskrivelse |
| ------------- | -------- | -------------------------------------------------------------------- |
| `disabled` | boolsk | Indstil dette til `true` for at deaktivere formateringsværktøjet |
| `command` | styrke[] | Kommandoen til at køre for formatering |
| `environment` | objekt | Miljøvariabler, der skal indstilles, når formateringsværktøjet køres |
| `extensions` | styrke[] | Filtypenavne, som denne formaterer skal håndtere |
Lad os se på nogle eksempler.
---
### Deaktivering af formatere
For at deaktivere **alle** formatere globalt, skal du indstille `formatter` til `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}
```
For at deaktivere en **specifik** formatter, skal du indstille `disabled` til `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}
```
---
### Brugerdefinerede formatere
Du kan tilsidesætte de indbyggede formattere eller tilføje nye ved at angive kommandoen, miljøvariabler og filtypenavne:
```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` pladsholderen** i kommandoen vil blive erstattet med stien til filen, der formateres.

View File

@@ -0,0 +1,321 @@
---
title: GitHub
description: Brug OpenCode i GitHub-problemer og pull-anmodninger.
---
OpenCode integreres med din GitHub arbejdsgang. Nævn `/opencode` eller `/oc` i din kommentar, og OpenCode vil udføre opgaver i din GitHub Actions-løber.
---
## Funktioner
- **Triageproblemer**: Bed OpenCode om at undersøge et problem og forklare dig det.
- **Ret og implementer**: Bed OpenCode om at løse et problem eller implementere en funktion. Og det vil fungere i en ny afdeling og indsende en PR med alle ændringerne.
- **Sikker**: OpenCode løber inde i din GitHubs løbere.
---
## Installation
Kør følgende kommando i et projekt, der er i en GitHub repo:
```bash
opencode github install
```
Dette vil lede dig gennem installation af GitHub-appen, oprettelse af arbejdsgangen og opsætning af hemmeligheder.
---
### Manuel opsætning
Eller du kan indstille det manuelt.
1. **Installationsprogrammet GitHub-appen**
Gå over til [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Sørg for, at det er installeret på mållageret.
2. **Tilføj arbejdsgangen**
Tilføj følgende workflow-fil til `.github/workflows/opencode.yml` i din repo. Sørg for at indstille de relevante `model` og nødvendige API nøgler 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. **Opbevar API nøglerne i hemmeligheder**
I din organisation eller dit projekt **indstillinger** skal du udvide **Hemmeligheder og variabler** til venstre og vælge **Handlinger**. Og tilføj de nødvendige API nøgler.
---
## Konfiguration
- `model`: Den model, der skal bruges med OpenCode. Antager formatet `provider/model`. Dette er **påkrævet**.
- `agent`: Agenten, der skal bruges. Skal være en primær agent. Falder tilbage til `default_agent` fra config eller `"build"`, hvis den ikke findes.
- `share`: Om OpenCode-sessionen skal dele. Standard er **sand** for offentlige arkiver.
- `prompt`: Valgfri brugerdefineret prompt for at tilsidesætte standardadfærden. Brug dette til at tilpasse, hvordan OpenCode behandler anmodninger.
- `token`: Valgfrit GitHub adgangstoken til at udføre operationer såsom oprettelse af kommentarer, begå ændringer og åbning af pull-anmodninger. Som standard bruger OpenCode installationsadgangstokenet fra OpenCode GitHub-appen, så commits, kommentarer og pull-anmodninger ser ud til at komme fra appen.
Alternativt kan du bruge GitHub Action runners [built-in `GITHUB_TOKEN`](OpenCode) uden at installere OpenCode GitHub appen. Bare sørg for at give de nødvendige tilladelser i dit workflow:
```yaml
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
```
Du kan også bruge en [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT), hvis det foretrækkes.
---
## Understøttede begivenheder
OpenCode kan udløses af følgende GitHub hændelser:
| Begivenhedstype | Udløst af | Detaljer |
| ----------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `issue_comment` | Kommentarer og problemer eller PR | Nævn `/opencode` eller `/oc` i din kommentar. OpenCode læser kontekst og kan oprette filialer, åbne PR'er eller svare. |
| `pull_request_review_comment` | Kommenter specifikke kodelinjer i en PR | Nævn `/opencode` eller `/oc`, mens du gennemgår koden. OpenCode modtager filsti, linjenumre og diff-kontekst. |
| `issues` | Udgave åbnet eller redigeret | Udløs automatisk OpenCode, når problemer oprettes eller ændres. Kræver `prompt` input. |
| `pull_request` | PR åbnet eller opdateret | Udløs automatisk OpenCode, når PR'er åbnes, synkroniseres eller genåbnes. Nyttigt til automatiserede anmeldelser. |
| `schedule` | Cron-baseret tidsplan | Kør OpenCode efter en tidsplan. Kræver `prompt` input. Output går til logfiler og PR'er (intet problem ved kommentere). |
| `workflow_dispatch` | Manuel trigger fra GitHub UI | Udløs OpenCode efter behov via fanen Handlinger. Kræver `prompt` input. Output går til logfiler og PR'er. |
### Skema Eksempel
Kør OpenCode efter en tidsplan for at udføre automatiske opgaver:
```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 begivenheder er `prompt` input **påkrævet**, da der ikke er nogen kommentarer at udtrække instruktioner fra. Planlagte arbejdsgange kører uden en brugerkontekst til kontrol af tilladelser, så arbejdsgangen skal give `contents: write` og `pull-requests: write`, hvis du forventer, at OpenCode skal oprette filialer eller PR'er.
---
### Pull Request Eksempel
Gennemgå automatisk PR'er, når de åbnes eller opdateres:
```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` hændelser, hvis der ikke er angivet nogen `prompt`, vil OpenCode som standard gennemgå pull-anmodningen.
---
### Issues Triage Eksempel
Triage automatisk nye problemer. Dette eksempel filtrerer til konti ældre end 30 dage for at reducere 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` begivenheder er `prompt` input **påkrævet**, da der ikke er nogen kommentarer at udtrække instruktioner fra.
---
## Brugerdefinerede prompter
Tilsidesæt standardprompten for at tilpasse OpenCodes adfærd til din arbejdsgang.
```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 nyttigt til at håndhæve specifikke gennemgangskriterier, kodningsstandarder eller fokusområder, der er relevante for dit projekt.
---
## Eksempler
Her er nogle eksempler på, hvordan du kan bruge OpenCode i GitHub.
- **Forklar et problem**
Tilføj denne kommentar i et GitHub-nummer.
```
/opencode explain this issue
```
OpenCode vil læse hele tråden, inklusive alle kommentarer, og svare med en klar forklaring.
- **Løs et problem**
I et GitHub-problem skal du sige:
```
/opencode fix this
```
Og OpenCode vil oprette en ny filial, implementere ændringer og åbne en PR med ændringer.
- **Gennemgå PR'er og foretag ændringer**
Efterlad følgende kommentar på en GitHub PR.
```
Delete the attachment from S3 when the note is removed /oc
```
OpenCode vil implementere den ønskede ændring og forpligtelse til den samme PR.
- **Gennemgå specifikke kodelinjer**
Efterlad en kommentar direkte på kodelinjer i PR's faneblad "Filer". OpenCode detekterer automatisk filer, linjenumrene og diff-konteksten for at give præcise svar.
```
[Comment on specific lines in Files tab]
/oc add error handling here
```
Når du kommenterer på specifikke linjer, modtager OpenCode:
- Den nøjagtige fil bliver gennemgået
- De specifikke kodelinjer
- Den omgivende forskellig kontekst
- Linjenummeroplysninger
Dette giver mulighed for mere målrettede anmodninger uden at skulle angive filstier eller linjenumre manuelt.

View File

@@ -0,0 +1,195 @@
---
title: GitLab
description: Brug OpenCode i GitLab-problemer og fletteanmodninger.
---
OpenCode integreres med din GitLab-arbejdsgang gennem din GitLab CI/CD-pipeline eller med GitLab Duo.
I begge tilfælde vil OpenCode køre på dine GitLab-løbere.
---
## GitLab CI
OpenCode fungerer i en almindelig GitLab-pipeline. Du kan bygge det ind i en pipeline som en [CI component](https://docs.gitlab.com/ee/ci/components/)
Her bruger vi en community-skabt CI/CD-komponent til OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
---
### Funktioner
- **Brug tilpasset konfiguration pr. job**: Konfigurer OpenCode med en brugerdefineret konfigurationsmappe, for eksempel `./config/#custom-directory` for at aktivere eller deaktivere funktionalitet pr. OpenCode påkald.
- **Minimal opsætning**: CI-komponenten sætter OpenCode op i baggrunden, du behøver kun at oprette OpenCode-konfigurationen og den indledende prompt.
- **Fleksibel**: CI-komponenten understøtter flere input til at tilpasse dens adfærd
---
### Opsætning
1. Gem din OpenCode-godkendelse JSON som en filtype CI-miljøvariabel under **Indstillinger** > **CI/CD** > **Variabler**. Sørg for at markere dem som "Maskede og skjulte".
2. Tilføj følgende til din `.gitlab-ci.yml` fil.
```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 input og use cases [check out the docs](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) for denne komponent.
---
## GitLab Duo
OpenCode integreres med din GitLab-arbejdsgang.
Nævn `@opencode` i en kommentar, og OpenCode vil udføre opgaver i din GitLab CI-pipeline.
---
### Funktioner
- **Triageproblemer**: Bed OpenCode om at undersøge et problem og forklare dig det.
- **Ret og implementer**: Bed OpenCode om at løse et problem eller implementere en funktion.
Det vil oprette en ny filial og rejse en fletteanmodning med ændringer.
- **Sikker**: OpenCode kører på dine GitLab-løbere.
---
### Opsætning
OpenCode kører i din GitLab CI/CD pipeline, her er hvad du skal bruge for at konfigurere det:
:::tip
Tjek [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for opdaterede instruktioner.
:::
1. Konfigurer dit GitLab-miljø
2. Konfigurer CI/CD
3. Få en API nøgle til en AI-modeludbyder
4. Opret en servicekonto
5. Konfigurer CI/CD variabler
6. Opret en flow-konfigurationsfil, her er et eksempel:
<details>
<summary>Flowkonfiguration</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 henvise til [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for detaljerede instruktioner.
---
### Eksempler
Her er nogle eksempler på, hvordan du kan bruge OpenCode i GitLab.
:::tip
Du kan konfigurere til at bruge en anden udløsersætning end `@opencode`.
:::
- **Forklar et problem**
Tilføj denne kommentar i et GitLab-problem.
```
@opencode explain this issue
```
OpenCode vil læse spørgsmålet og svare med en klar forklaring.
- **Løs et problem**
I et GitLab-nummer skal du sige:
```
@opencode fix this
```
OpenCode vil oprette en ny filial, implementere ændringer og åbne en fletteanmodning med ændringer.
- **Gennemgå anmodninger om fletning**
Efterlad følgende kommentar til en GitLab-fletningsanmodning.
```
@opencode review this merge request
```
OpenCode vil gennemgå anmodningen om fletning og give feedback.

View File

@@ -0,0 +1,48 @@
---
title: IDE
description: OpenCode-udvidelsen til VS Code, Cursor og andre IDE'er
---
OpenCode integreres med VS Code, Cursor eller enhver IDE, der understøtter en terminal. Bare kør `opencode` i terminalen for at komme i gang.
---
## Brug
- **Hurtig start**: Brug `Cmd+Esc` (Mac) eller `Ctrl+Esc` (Windows/Linux) til at åbne OpenCode i en delt terminalvisning, eller fokuser en eksisterende terminalsession, hvis en allerede kører.
- **Ny session**: Brug `Cmd+Shift+Esc` (Mac) eller `Ctrl+Shift+Esc` (Windows/Linux) til at starte en ny OpenCode terminalsession, mulighed en allerede er åben. Du kan også klikke på knappen OpenCode i brugergrænsefladen.
- **Kontekstbevidsthed**: Del automatisk dit nuværende valg eller din fane med OpenCode.
- **Filreferencegenveje**: Brug `Cmd+Option+K` (Mac) eller `Alt+Ctrl+K` (Linux/Windows) til at indsætte filreferencer. For eksempel `@File#L37-42`.
---
## Installation
Sådan installeres OpenCode på VS Code og populære gafler som Cursor, Windsurf, VSCodium:
1. Åbn VS Code
2. Åbn den integrerede terminal
3. Kør `opencode` - udvidelsen installeres automatisk
Hvis du på den anden side vil bruge din egen IDE, når du kører `/editor` eller `/export` fra TUI, skal du indstille `export EDITOR="code --wait"`. [Learn more](/docs/tui/#editor-setup).
---
### Manuel installation
Søg efter **OpenCode** i Extension Marketplace, og klik på **Installer**.
---
### Fejlfinding
Hvis udvidelsen ikke kan installeres automatisk:
- Sørg for, at du kører `opencode` i den integrerede terminal.
- Bekræft, at CLI for din IDE er installeret:
- For VS Code: `code` kommando
- For Cursor: `cursor` kommando
- For Windsurf: `windsurf` kommando
- For VSCodium: `codium` kommando
- Hvis ikke, så kør `Cmd+Shift+P` (Mac) eller `Ctrl+Shift+P` (Windows/Linux) og søg efter "Shell Command: Install 'code' command in PATH" (eller tilsvarende for din IDE)
- Sørg for, at VS Code har tilladelse til at installere udvidelser

View File

@@ -0,0 +1,359 @@
---
title: Intro
description: Kom godt i gang med OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
import config from "../../../../config.mjs"
export const console = config.console
[**OpenCode**](/) er en open source AI-kodningsagent. Den er tilgængelig som en terminalbaseret grænseflade, desktop-app eller IDE-udvidelse.
![OpenCode TUI with the opencode theme](../../../assets/lander/screenshot.png)
Lad os komme i gang.
---
#### Forudsætninger
For at bruge OpenCode i din terminal skal du bruge:
1. En moderne terminalemulator som:
- [WezTerm](https://wezterm.org), på tværs af platforme
- [Alacritty](https://alacritty.org), på tværs af platforme
- [Ghostty](https://ghostty.org), Linux og macOS
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux og macOS
2. API nøgler til de LLM udbydere, du vil bruge.
---
## Installationsprogram
Den nemmeste måde at installere OpenCode på er gennem installationsscriptet.
```bash
curl -fsSL https://opencode.ai/install | bash
```
Du kan også installere det med følgende kommandoer:
- **Bruger 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>
- **Brug af Homebrew på macOS og Linux**
```bash
brew install anomalyco/tap/opencode
```
> Vi anbefaler at bruge OpenCode-hanen for at få de mest opdaterede udgivelser. Den officielle `brew install opencode`-formel vedligeholdes af Homebrew-teamet og opdateret sjældnere.
- **Brug af Paru på Arch Linux**
```bash
paru -S opencode-bin
```
#### Windows
:::tip[Anbefalet: Brug WSL]
For at få den bedste oplevelse på Windows anbefaler vi at bruge [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Det giver bedre ydeevne og fuld kompatibilitet med OpenCodes funktioner.
:::
- **Brug af chokolade**
```bash
choco install opencode
```
- **Brug af Scoop**
```bash
scoop install opencode
```
- **Bruger NPM**
```bash
npm install -g opencode-ai
```
- **Brug af Mise**
```bash
mise use -g github:anomalyco/opencode
```
- **Brug af Docker**
```bash
docker run -it --rm ghcr.io/anomalyco/opencode
```
Support til installation af OpenCode på Windows ved hjælp af Bun er i gang.
Du kan også få fat i binæren fra [Releases](https://github.com/anomalyco/opencode/releases).
---
## Konfigurer
Med OpenCode kan du bruge enhver LLM udbyder ved at konfigurere deres API nøgler.
Hvis du er ny til at bruge LLM-udbydere, anbefaler vi at bruge [OpenCode Zen](/docs/zen).
Det er en udvalgt liste over modeller, der er blevet testet og verificeret af OpenCode
holde.
1. Kør kommandoen `/connect` i TUI, vælg opencode, og gå til [opencode.ai/auth](https://opencode.ai/auth).
```txt
/connect
```
2. Log ind, tilføj dine faktureringsoplysninger, og kopier din API-nøgle.
3. Indsæt din API nøgle.
```txt
┌ API key
└ enter
```
Alternativt kan du vælge en af de andre udbydere. [Læs mere](/docs/providers#directory).
---
## Initialiser
Nu hvor du har konfigureret en udbyder, kan du navigere til et projekt, der
du vil arbejde på.
```bash
cd /path/to/project
```
Og kør OpenCode.
```bash
opencode
```
Derefter initialiseres OpenCode for projektet ved at køre følgende kommando.
```bash frame="none"
/init
```
Dette får OpenCode til at analysere dit projekt og oprette en `AGENTS.md` fil i
projektets stang.
:::tip
Du bør overgive dit projekter `AGENTS.md` fil til Git.
:::
Dette hjælper OpenCode med at forstå projektstrukturen og kodningsmønstrene
brugt.
---
## Brug
Du er nu klar til at bruge OpenCode til at arbejde på dit projekt. Spørg det gerne
noget!
Hvis du er ny til at bruge en AI-kodningsagent, er her nogle eksempler, der evt
hjælp.
---
### Stil spørgsmål
Du kan bede OpenCode om at forklare kodebasen for dig.
:::tip
Brug `@`-tasten til at søge efter filer i projektet.
:::
```txt frame="none" "@packages/functions/src/api/index.ts"
How is authentication handled in @packages/functions/src/api/index.ts
```
Dette er nyttigt, hvis der er en del af kodebasen, som du ikke har arbejdet på.
---
### Tilføj funktioner
Du kan bede OpenCode om at tilføje nye funktioner til dit projekt. Selvom vi først anbefaler, at du beder den om at lave en plan.
1. **Opret en plan**
OpenCode har en _Plan mode_, der deaktiverer dens evne til at foretage ændringer og
foreslå i stedet _hvordan_ det vil implementere funktionen.
Skift til det ved hjælp af **Tab**-tasten. Du vil se en indikator for dette i nederste højre hjørne.
```bash frame="none" title="Switch to Plan mode"
<TAB>
```
Lad os nu beskrive, hvad vi vil have den til at gø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 give OpenCode nok detaljer til at forstå, hvad du ønsker. Det hjælper
at tale med det, som om du taler med en juniorudvikler på dit team.
Drikkepenge
Giv OpenCode masser af kontekst og eksempler for at hjælpe den med at forstå, hvad du
mangel.
:::
2. **Gentag om planen**
Når det giver dig en plan, kan du give den feedback eller tilføje 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.
```
Drikkepenge
Træk og slip billeder i terminalen for at tilføje dem til prompten.
:::
OpenCode kan scanne alle billeder, du giver dem og tilføje dem til prompten. Det kan du
gør dette ved at trække og slippe et billede ind i terminalen.
3. **Byg funktionen**
Når du føler dig godt tilpas med planen, skal du skifte tilbage til _Byggetilstand_ ved
trykke på **Tab**-tasten igen.
```bash frame="none"
<TAB>
```
Og beder den om at foretage ændringerne.
```bash frame="none"
Sounds good! Go ahead and make the changes.
```
---
### Foretag ændringer
For mere ligetil ændringer kan du bede OpenCode om at bygge den direkte
uden at skulle gennemgå 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 sikre dig, at du giver en god mængde detaljer, så OpenCode gør det rigtige
ændringer.
---
### Fortryd ændringer
Lad os sige, at du beder OpenCode om at foretage nogle ændringer.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Men du indser, at det ikke er, hvad du ønskede. Du **kan fortryde** ændringerne
ved hjælp af kommandoen `/undo`.
```bash frame="none"
/undo
```
OpenCode vil nu vende tilbage til ændringerne, du har foretaget, og vise din oprindelige besked
igen.
```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 prompten og bede OpenCode om at prøve igen.
:::tip
Du kan køre `/undo` flere gange for at fortryde flere ændringer.
:::
Eller du **kan gentage** ændringerne ved hjælp af kommandoen `/redo`.
```bash frame="none"
/redo
```
---
## Del
De samtaler, du har med OpenCode, kan [deles med din
team](/docs/share).
```bash frame="none"
/share
```
Dette vil oprette et link til den aktuelle samtale og kopiere det til denne udklipsholder.
:::note
Samtaler dele ikke som standard.
:::
Her er en [eksempelsamtale](https://opencode.ai/s/4XP1fce5) med OpenCode.
---
## Tilpas
Og det er det! Du er nu en professionel i at bruge OpenCode.
For at gøre det til dit eget, anbefaler vi [picking a theme](/docs/themes), [customizing the keybinds](/docs/keybinds), [configuring code formatters](/docs/formatters), [creating custom commands](/docs/commands) eller at lege med [OpenCode config](/docs/config).

View File

@@ -0,0 +1,192 @@
---
title: Nøglebind
description: Tilpas dine nøglebindinger.
---
OpenCode har en liste over nøglebindinger, som du kan tilpasse gennem OpenCode-konfigurationen.
```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øgle
OpenCode bruger en `leader` nøgle til de fleste smagsbindinger. Dette undgår konflikter i din terminal.
Som standard er `ctrl+x` ledertasten, og de fleste handlinger kræver, at du først trykker på ledertasten og derefter genvejen. For eksempel, for at starte en ny session, skal du først trykke på `ctrl+x` og derefter trykke på `n`.
Du behøver ikke bruge en ledernøgle til dine nøglebindinger, men vi anbefaler at du gør det.
---
## Deaktiver smagsbinding
Du kan deaktivere en nøglebinding ved at tilføje nøglen til din konfiguration med værdien "ingen".
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {
"session_compact": "none"
}
}
```
---
## Genveje til skrivebordsprompt
OpenCode desktop app prompt input understøtter almindelige Readline/Emacs-style genveje til redigering af tekst. Disse er indbyggede og i øjeblikket ikke konfigurerede via `opencode.json`.
| Genvej | Håndtering |
| -------- | ------------------------------------------- |
| `ctrl+a` | Flyt til starten af den aktuelle linje |
| `ctrl+e` | Flyt til slutningen af den aktuelle linje |
| `ctrl+b` | Flyt markøren et tegn tilbage |
| `ctrl+f` | Flyt markøren et tegn frem |
| `alt+b` | Flyt markøren et ord tilbage |
| `alt+f` | Flyt markøren et ord frem |
| `ctrl+d` | Slet tegn under markøren |
| `ctrl+k` | Dræb til slutningen af linjen |
| `ctrl+u` | Dræb til starten af linjen |
| `ctrl+w` | Dræb forrige ord |
| `alt+d` | Dræb næste ord |
| `ctrl+t` | Transponer tegn |
| `ctrl+g` | Annuller popovers / afbryd kørsel af svar |
---
## Shift+Enter
Nogle terminaler sender ikke modifikationsnøgler med Enter som standard. Du skal muligvis konfigurere din terminal til at sende `Shift+Enter` som en escape-sekvens.
### Windows Terminal
Åbn din `settings.json` på:
```
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
```
Føj dette til `actions`-arrayet på rodniveau:
```json
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Føj dette til `keybindings`-arrayet på rodniveau:
```json
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Gem fil og genstart Windows Terminal eller åbn en ny fane.

View File

@@ -0,0 +1,188 @@
---
title: LSP Servere
description: OpenCode integreres med dine LSP-servere.
---
OpenCode integreres med din sprogserverprotokol (LSP) for at hjælpe LLM med at interagere med din kodebase. Den bruger diagnostik til at give feedback til LLM.
---
## Indbygget
OpenCode leveres med flere indbyggede LSP-servere til populære sprog:
| LSP Server | Udvidelser | Krav |
| ------------------- | --------------------------------------------------------- | --------------------------------------------------------------- |
| astro | .astro | Autoinstallationer til Astro-projekter |
| bash | .sh,.bash,.zsh,.ksh | Autoinstallerer bash-language-server |
| clangd | .c,.cpp,.cc,.cxx,.c++,.h,.hpp,.hh,.hxx,.h++ | Autoinstallationer for C/C++ projekter |
| csharp | .cs | `.NET SDK` installere |
| clojure-lsp | .clj,.cljs,.cljc,.edn | `clojure-lsp` kommando tilgængelig |
| dart | .dart | `dart` kommando tilgængelig |
| deno | .ts,.tsx,.js,.jsx,.mjs | `deno` kommando tilgængelig (auto-detects deno.json/deno.jsonc) |
| eliksir-ls | .ex,.exs | `elixir` kommando tilgængelig |
| eslint | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue | `eslint` afhængighed i projekt |
| fskarp | .fs,.fsi,.fsx,.fsscript | `.NET SDK` installere |
| glimt | .glimt | `gleam` kommando tilgængelig |
| gopls | .go | `go` kommando tilgængelig |
| hls | .hs,.lhs | `haskell-language-server-wrapper` kommando tilgængelig |
| jdtls | .java | `Java SDK (version 21+)` installere |
| kotlin-ls | .kt,.kts | Autoinstallationer til Kotlin-projekter |
| lua-ls | .lua | Autoinstallationer til Lua-projekter |
| nixd | .nix | `nixd` kommando tilgængelig |
| ocaml-lsp | .ml,.mli | `ocamllsp` kommando tilgængelig |
| oxlint | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue,.astro,.svelte | `oxlint` afhængighed i projekt |
| php intelephense | .php | Automatiske installationer til PHP-projekter |
| prisma | .prisma | `prisma` kommando tilgængelig |
| ophavsret | .py,.pyi | `pyright` afhængig installeret |
| rubin-lsp (rubocop) | .rb,.rake,.gemspec,.ru | `ruby` og `gem` kommandoer tilgængelige |
| rust | .rs | `rust-analyzer` kommando tilgængelig |
| sourcekit-lsp | .swift,.objc,.objcpp | `swift` installere (`xcode` på macOS) |
| svelte | .svelte | Autoinstallationer til Svelte-projekter |
| terraform | .tf,.tfvars | Automatiske installationer fra GitHub-udgivelser |
| lillemand | .typ,.typc | Automatiske installationer fra GitHub-udgivelser |
| maskinskrift | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts | `typescript` afhængighed i projekt |
| vue | .vue | Autoinstallationer til Vue-projekter |
| yaml-ls | .yaml,.yml | Autoinstallerer Red Hat yaml-language-server |
| zls | .zig,.zon | `zig` kommando tilgængelig |
LSP-servere aktiveres automatisk, når en af ovnstående filtypenavne opdages, og kravene er opfyldt.
:::note
Du kan deaktivere automatisk LSP-serverdownloads ved at indstille miljøvariablen `OPENCODE_DISABLE_LSP_DOWNLOAD` til `true`.
:::
---
## Sådan fungerer det
Når opencode åbner en fil, vil den:
1. Kontrollerer filtypenavnet mod alle aktiverede LSP-servere.
2. Starter den relevante LSP-server, hvis den ikke allerede kører.
---
## Konfigurer
Du kan tilpasse LSP-servere gennem sektionen `lsp` i din opencode-konfiguration.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
Hver LSP- server understøtter følgende:
| Ejendom | Skriv | Beskrivelse |
| ---------------- | -------- | --------------------------------------------------------- |
| `disabled` | boolsk | Indstil dette til `true` for at deaktivere LSP-serveren |
| `command` | styrke[] | Kommandoen til at starte LSP-serveren |
| `extensions` | styrke[] | Filtypenavne, som denne LSP-server skal håndtere |
| `env` | objekt | Miljøvariabler, der skal indstilles, når serveren starter |
| `initialization` | objekt | Initialiseringsmuligheder for at sende til LSP-serveren |
Lad os se på nogle eksempler.
---
### Miljøvariabler
Brug egenskaben `env` til at indstille 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"
}
}
}
}
```
---
### Initialiseringsmuligheder
Brug egenskaben `initialization` til at videregive initialiseringsindstillinger til LSP-serveren. Disse er serverspecifikke indstillinger sendt under LSP `initialize` anmodningen:
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::note
Initialiseringsmuligheder forskellige afhængige af LSP-serveren. Se din LSP-servers dokumentation for tilgængelige muligheder.
:::
---
### Deaktivering af LSP-servere
For at deaktivere **alle** LSP-servere globalt, skal du indstille `lsp` til `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
For at deaktivere en **specifik** LSP-server skal du indstille `disabled` til `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
### Brugerdefinerede LSP-servere
Du kan tilføje brugerdefinerede LSP-servere ved at angive kommandoen og filtypenavne:
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## Yderligere oplysninger
### PHP Intelephense
PHP Intelephense tilbyder premium funktioner gennem en licensnøgle. Du kan angive en licensnøgle ved at placere (kun) nøglen i en tekstfil på:
- På macOS/Linux: `$HOME/intelephense/licence.txt`
- På Windows: `%USERPROFILE%/intelephense/licence.txt`
Filen bør kun indeholde licensnøglen uden yderligere indhold.

View File

@@ -0,0 +1,511 @@
---
title: MCP servere
description: Tilføj lokale og eksterne MCP værktøjer.
---
Du kan tilføje eksterne værktøjer til OpenCode ved hjælp af _Model Context Protocol_ eller MCP. OpenCode understøtter både lokale og eksterne servere.
Når de er tilføjet, er MCP automatisk tilgængelig for LLM sammen med indbyggede værktøjer.
---
#### Forse
Når du bruger en MCP-server, føjes den til konteksten. Dette kan hurtigt stige, hvis du har mange værktøjer. Så vi anbefaler at være forsigtig med hvilke MCP-servere du bruger.
:::tip
MCP-servere tilføjer til din kontekst, så du vil være forsigtig med, hvilke du aktiverer.
:::
Visse MCP-servere, som GitHub MCP-servere, har en tendens til at tilføje mange tokens og kan nemt overskride kontekstgrænsen.
---
## Aktiver
Du kan definere MCP-servere i din [OpenCode Config](https://opencode.ai/docs/config/) under `mcp`. Tilføj hver MCP med et unikt navn. Du kan henvise til denne MCP ved navn, når du spørger 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 at indstille `enabled` til `false`. Dette er nyttigt, hvis du midlertidigt vil deaktivere en server uden at fjerne den fra din konfiguration.
---
### Tilsidesættelse af fjernindstillinger
Organisationer kan levere standard MCP-servere via deres `.well-known/opencode`-slutpunkt. Disse servere kan være deaktiveret som standard, hvilket giver brugerne mulighed for at tilmelde sig dem, de har brug for.
For at aktivere en specifik server fra din organisationers fjernkonfiguration skal du tilføje den til din lokale konfiguration 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 konfigurationsværdier tilsidesætter fjernstandarderne. Se [config precedence](/docs/config#precedence-order) for flere detaljer.
---
## Lokal
Tilføj lokale MCP-servere ved hjælp af `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-server starter. Du kan også sende en liste over miljøvariabler ind.
For eksempel, her er, hvordan du kan tilføje test [`@modelcontextprotocol/server-everything`](MCP) 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 at bruge det kan jeg tilføje `use the mcp_everything tool` til mine prompter.
```txt "mcp_everything"
use the mcp_everything tool to add the number 3 and 4
```
---
#### Indstillinger
Her er alle muligheder for at konfigurere en lokal MCP-server.
| Mulighed | Skriv | Påkrævet | Beskrivelse |
| ------------- | ------- | -------- | ------------------------------------------------------------------------------------ |
| `type` | String | Y | Type MCP serverforbindelse, skal være `"local"`. |
| `command` | Array | Y | Kommando og argumenter til at køre MCP-serveren. |
| `environment` | Objekt | | Miljøvariabler, der skal indstilles, når serveren kører. |
| `enabled` | Boolean | | Aktiver eller deaktiver MCP-serveren ved opstart. |
| `timeout` | Nummer | | Timeout i ms for at hente værktøjer fra MCP-serveren. Standard er 5000 (5 sekunder). |
---
## Fjernbetjening
Tilføj ekstern MCP-server ved at indstille `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 for den eksterne MCP server, og med indstillingen `headers` kan du sende en liste over overskrifter ind.
---
#### Indstillinger
| Mulighed | Skriv | Påkrævet | Beskrivelse |
| --------- | ------- | -------- | ------------------------------------------------------------------------------------ |
| `type` | String | Y | Type MCP serverforbindelse, skal være `"remote"`. |
| `url` | String | Y | URL af den eksterne MCP-server. |
| `enabled` | Boolean | | Aktiver eller deaktiver MCP-serveren ved opstart. |
| `headers` | Objekt | | Overskrifter til at sende med anmodningen. |
| `oauth` | Objekt | | OAuth-godkendelseskonfiguration. Se afsnittet [OAuth](#oauth) nedenfor. |
| `timeout` | Nummer | | Timeout i ms for at hente værktøjer fra MCP-serveren. Standard er 5000 (5 sekunder). |
---
## OAuth
OpenCode håndterer automatisk OAuth-godkendelse for eksterne MCP-servere. Når en server kræver godkendelse, vil OpenCode:
1. Registrer 401-svaret, og start OAuth-flowet
2. Brug **Dynamic Client Registration (RFC 7591)**, hvis det understøtter af serveren
3. Opbevar tokens sikkert til fremtidige anmodninger
---
### Automatisk
For de fleste OAuth-aktiverede MCP-servere kræver ingen speciel konfiguration. Bare konfigureret fjernserver:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}
```
Hvis serveren kræver godkendelse, vil OpenCode bede dig om at godkende, når du prøver at bruge den første gang. Hvis ikke, kan du [manually trigger the flow](#authenticating) med `opencode mcp auth <server-name>`.
---
### Forudregistreret
Hvis du har klientlegitimationsoplysninger fra MCP-serverudbyderen, 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"
}
}
}
}
```
---
### Godkender
Du kan manuelt udløse godkendelse eller administrere legitimationsoplysninger.
Godkendt med en specifik MCP-server:
```bash
opencode mcp auth my-oauth-server
```
Liste over alle MCP-servere og deres godkendelsesstatus:
```bash
opencode mcp list
```
Fjern gemte legitimationsoplysninger:
```bash
opencode mcp logout my-oauth-server
```
Kommandoen `mcp auth` åbner din browser for godkendelse. Når du har godkendt, vil OpenCode opbevare tokens sikkert i `~/.local/share/opencode/mcp-auth.json`.
---
#### Deaktiverer OAuth
Hvis du vil deaktivere automatisk OAuth for en server (f.eks. for servere, der bruger API nøgler i stedet), skal du indstille `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-indstillinger
| Mulighed | Skriv | Beskrivelse |
| -------------- | --------------- | ----------------------------------------------------------------------------------------- |
| `oauth` | Objekt \| falsk | OAuth-konfigurationsobjekt eller `false` for at deaktivere OAuth-auto-detektion. |
| `clientId` | String | OAuth-klient-id. Hvis det ikke er angivet, vil dynamisk klientregistrering blive forsøgt. |
| `clientSecret` | String | OAuth-klienthemmelighed, hvis det kræves af autorisationsserveren. |
| `scope` | String | OAuth-omfang at anmode om under godkendelse. |
#### Fejlretning
Hvis en ekstern MCP-server ikke kan godkendes, kan du diagnosticere 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 den aktuelle godkendelsesstatus, tester HTTP-forbindelse og forsøger OAuth-opdagelsesflowet.
---
## Administrator
Dine MCPs er tilgængelige som værktøjer i **TK\_** sammen med indbyggede værktøjer. Så du kan administrere dem gennem OpenCode-konfigurationen som ethvert andet værktøj.
---
### Global
Det betyder, 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å bruge et globmønster til at deaktivere alle matchende MCPs.
```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 bruger vi globmønsteret `my-mcp*` til at deaktivere alle MCPs.
---
### Pr. agent
Hvis du har et stort antal MCP-servere, vil du måske kun aktivere dem pr. agent og deaktivere dem globalt. Sådan gør du:
1. Deaktiver det som et værktøj globalt.
2. Aktiver MCP-serveren som et værktøj i din [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 bruger simple regex-globing-mønstre:
- `*` matcher nul eller flere af ethvert tegn (f.eks. `"my-mcp*"` matcher `my-mcp_search`, `my-mcp_list` osv.)
- `?` matcher nøjagtigt ét tegn
- Alle andre karakterer matcher bogstaveligt talt
:::note
MCP serverværktøjer er registreret med servernavn som præfiks, så for at deaktivere alle værktøjer til en server skal du blot bruge:
```
"mymcpservername_*": false
```
:::
---
## Eksempler
Nedenfor er eksempler på nogle almindelige MCP-servere. Du kan indsende en PR, hvis du vil dokumentere andre servere.
---
### Vagtvagt
Tilføj [Sentry MCP server](https://mcp.sentry.dev) for at interagere med dine Sentry-projekter og -problemer.
```json title="opencode.json" {4-8}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
```
Efter tilføjelse af konfigurationen skal du godkende med Sentry:
```bash
opencode mcp auth sentry
```
Dette åbner et browservindue for at fuldføre OAuth-flowet og forbinde OpenCode til din Sentry-konto.
Når du er godkendt, kan du bruge Sentry-værktøjer i dine prompter til at forespørge om problemer, projekter og fejldata.
```txt "use sentry"
Show me the latest unresolved issues in my project. use sentry
```
---
### Kontekst7
Tilføj [Context7 MCP server](https://github.com/upstash/context7) for at søge i 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 tilmeldt dig en gratis konto, kan du bruge din API nøgle og få højere satsgrænser.
```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 antager vi, at du har sat miljøvariablen `CONTEXT7_API_KEY`.
Føj `use context7` til dine prompter for at bruge Context7 MCP server.
```txt "use context7"
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
```
Alternativt kan du tilføje noget som dette til din [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
When you need to search docs, use `context7` tools.
```
---
### Grep af Vercel
Tilføj serveren [Grep by Vercel](https://grep.app) MCP for at søge gennem kodestykker på GitHub.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
```
Da vi navngav vores MCP-server `gh_grep`, kan du tilføje `use the gh_grep tool` til dine prompter for at få agenten til at bruge 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 tilføje noget som dette 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: Konfiguration af en LLM udbyder og model.
---
OpenCode bruger [AI SDK](https://ai-sdk.dev/) og [Models.dev](https://models.dev) til at understøtte **75+ LLM udbydere** og det understøtter at køre lokale modeller.
---
## Udbydere
De fleste populære udbydere er forudindlæst som standard. Hvis du har tilføjet legitimationsoplysningerne for en udbyder gennem kommandoen `/connect`, vil de være tilgængelige, når du starter OpenCode.
Få mere at vide om [providers](/docs/providers).
---
## Vælg en model
Når du har konfigureret din udbyder, kan du vælge den ønskede model ved at indtaste:
```bash frame="none"
/models
```
---
## Anbefalede modeller
Der er mange modeller derude, og der kommer nye modeller hver uge.
:::tip
Overvej at bruge en af de modeller, vi anbefaler.
:::
Der er dog kun få af dem, der er gode til både at generere kode og værktøjsopkald.
Her er flere modeller, der fungerer godt med OpenCode, uden bestemt rækkefølge. (Dette er ikke en udtømmende liste og er heller ikke nødvendigvis opdateret):
- GPT 5.2
- GPT 5.1 Codex
- Claude Opus 4,5
- Claude Sonnet 4,5
- Minimax M2.1
- Gemini 3 Pro
---
## Indstil en standard
For at indstille en af disse som standardmodellen kan du indstille `model`-nøglen i din
OpenCode konfig.
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"model": "lmstudio/google/gemma-3n-e4b"
}
```
Her er det fulde ID `provider_id/model_id`. For eksempel, hvis du bruger [OpenCode Zen](/docs/zen), vil du bruge `opencode/gpt-5.1-codex` til GPT 5.1 Codex.
Hvis du har konfigureret en [custom provider](/docs/providers#custom), er `provider_id` nøglen fra `provider` delen af din konfiguration, og `model_id` er nøglen fra `provider.models`.
---
## Konfigurer modeller
Du kan konfigurere en models muligheder globalt gennem konfigurationen.
```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 indstillinger for to indbyggede modeller: `gpt-5` når de tilgås via `openai` udbyderen og `claude-sonnet-4-20250514` når de tilgås via `anthropic` udbyderen.
Den indbyggede udbyder og modelnavne kan findes på [Models.dev](https://models.dev).
Du kan også konfigurere disse indstillinger for alle agenter, du bruger. Agentkonfigurationen tilsidesætter alle globale muligheder her. [Learn more](/docs/agents/#additional).
Du kan også definere brugerdefinerede varianter, der udvider de indbyggede. Varianter giver dig mulighed for at konfigurere forskellige indstillinger for den samme model uden at oprette duplikerede poster:
```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 understøtter flere varianter med forskellige konfigurationer. OpenCode leveres med indbyggede standardvarianter til populære udbydere.
### Indbyggede varianter
OpenCode leveres med standardvarianter for mange udbydere:
**Anthropic**:
- `high` - Højt tænkende budget (standard)
- `max` - Maksimalt tænkebudget
**OpenAI**:
Varierer efter model, men nogenlunde:
- `none` - Ingen begrundelse
- `minimal` - Minimal ræsonnement indsats
- `low` - Lav ræsonnement indsats
- `medium` - Middel ræsonnement indsats
- `high` - Høj ræsonnement indsats
- `xhigh` - Ekstra høj ræsonnement indsats
**Google**:
- `low` - Lavere effort/token budget
- `high` - Højere effort/token budget
:::tip
Denne liste er ikke udtømmende. Mange andre udbydere har også indbyggede standardindstillinger.
:::
### Brugerdefinerede varianter
Du kan tilsidesætte eksisterende varianter eller tilføje 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,
},
},
},
},
},
},
}
```
### Cyklusvarianter
Brug tastebindingen `variant_cycle` til hurtigt at skifte mellem varianter. [Learn more](/docs/keybinds).
---
## Indlæser modeller
Når OpenCode starter op, søger den efter modeller i følgende prioriterede rækkefølge:
1. Kommandolinjeflaget `--model` eller `-m`. Formatet er det samme som i konfigurationsfilen: `provider_id/model_id`.
2. Modellisten i OpenCode-konfigurationen.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-20250514"
}
```
Formatet her er `provider/model`.
3. Den sidst brugte model.
4. Den første model med en intern prioritet.

View File

@@ -0,0 +1,331 @@
---
title: Tilstande
description: Forskellige tilstande til forskellige anvendelsestilfælde.
---
:::forsigtighed
Tilstande er nu konfigureret gennem indstillingen `agent` i opencode-konfigurationen. De
`mode` mulighed er nu forældet. [Learn more](/docs/agents).
:::
Tilstande i opencode giver dig mulighed for at tilpasse adfærd, værktøjer og prompter til forskellige brugstilfælde.
Den kommer med to indbyggede tilstande: **build** og **plan**. Du kan tilpasse
disse eller konfigurer dine egne gennem opencode-konfigurationen.
Du kan skifte mellem tilstande under en session eller konfigurere dem i din konfigurationsfil.
---
## Indbygget
opencode leveres med to indbyggede tilstande.
---
### Byg
Byg er **standard**-tilstanden med alle værktøjer aktiveret. Dette er standardtilstanden for udviklingsarbejde, hvor du har brug for fuld adgang til filhandlinger og systemkommandoer.
---
### Plan
En begrænset tilstand designet til planlægning og analyse. I plantilstand er følgende værktøjer deaktiveret som standard:
- `write` - Kan ikke oprette nye filer
- `edit` - Kan ikke ændre eksisterende filer, undtagen filer placeret på `.opencode/plans/*.md` for at detaljere selve planen
- `patch` - Kan ikke anvende patches
- `bash` - Kan ikke udføre shell-kommandoer
Denne tilstand er nyttig, når du vil have AI til at analysere kode, foreslå ændringer eller oprette planer uden at foretage egentlige ændringer af din kodebase.
---
## Skifter
Du kan skifte mellem tilstande under en session ved at bruge _Tab_-tasten. Eller din konfigurerede `switch_mode` nøglebinding.
Se også: [Formatters](/docs/formatters) for information om konfiguration af kodeformatering.
---
## Konfigurer
Du kan tilpasse de indbyggede tilstande eller oprette dine egne gennem konfiguration. Tilstande kan konfigureres på to måder:
### JSON Konfiguration
Konfigurer tilstande i din `opencode.json`-konfigurationsfil:
```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-konfiguration
Du kan også definere tilstande ved hjælp af markdown-filer. Placer dem i:
- Globalt: `~/.config/opencode/modes/`
- Projekt: `.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 bliver tilstandsnavnet (f.eks. opretter `review.md` en `review`-tilstand).
Lad os se nærmere på disse konfigurationsmuligheder.
---
### Model
Brug `model`-konfigurationen til at tilsidesætte standardmodellen for denne tilstand. Nyttigt til brug af forskellige modeller optimeret til forskellige opgaver. For eksempel en hurtigere model til planlægning, en mere dygtig model til implementering.
```json title="opencode.json"
{
"mode": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
---
### Temperatur
Styr tilfældigheden og kreativiteten af AI's svar med `temperature`-konfigurationen. Lavere værdier gør svar mere fokuserede og deterministiske, mens højere værdier øger kreativitet og variabilitet.
```json title="opencode.json"
{
"mode": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Temperaturværdier varierer typisk fra 0,0 til 1,0:
- **0.0-0.2**: Meget fokuserede og deterministiske svar, ideel til kodeanalyse og planlægning
- **0,3-0,5**: Afbalancerede svar med en vis kreativitet, god til generelle udviklingsopgaver
- **0.6-1.0**: Mere kreative og varierede svar, nyttige til brainstorming og udforskning
```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 der ikke er angivet nogen temperatur, bruger opencode modelspecifikke standarder (typisk 0 for de fleste modeller, 0,55 for Qwen-modeller).
---
### Spørg
Angiv en brugerdefineret systempromptfil for denne tilstand med `prompt`-konfigurationen. Promptfilen skal indeholde instruktioner, der er specifikke for tilstandens formål.
```json title="opencode.json"
{
"mode": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Denne sti er i forhold til, hvor konfigurationsfilen er placeret. Så dette virker for
både den globale opencode-konfiguration og den projektspecifikke konfiguration.
---
### Værktøjer
Kontroller, hvilke værktøjer der er tilgængelige i denne tilstand med `tools`-konfigurationen. Du kan aktivere eller deaktivere specifikke værktøjer ved at indstille dem til `true` eller `false`.
```json
{
"mode": {
"readonly": {
"tools": {
"write": false,
"edit": false,
"bash": false,
"read": true,
"grep": true,
"glob": true
}
}
}
}
```
Hvis der ikke er angivet nogen værktøjer, er alle værktøjer aktiveret som standard.
---
#### Tilgængelige værktøjer
Her er alle de værktøjer, der kan styres gennem tilstandskonfigurationen.
| Værktøj | Beskrivelse |
| ----------- | -------------------------- |
| `bash` | Udfør shell-kommandoer |
| `edit` | Rediger eksisterende filer |
| `write` | Opret nye filer |
| `read` | Læs filindhold |
| `grep` | Søg filindhold |
| `glob` | Find filer efter mønster |
| `list` | Liste biblioteksindhold |
| `patch` | Anvend patches til filer |
| `todowrite` | Administrer todo-lister |
| `todoread` | Læs todo-lister |
| `webfetch` | Hent webindhold |
---
## Brugerdefinerede tilstande
Du kan oprette dine egne brugerdefinerede tilstande ved at tilføje dem til konfigurationen. Her er eksempler, der bruger begge tilgange:
### Bruger JSON konfiguration
```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
}
}
}
}
```
### Brug af markdown-filer
Opret tilstandsfiler i `.opencode/modes/` for projektspecifikke tilstande eller `~/.config/opencode/modes/` for globale tilstande:
```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
```
---
### Use cases
Her er nogle almindelige brugstilfælde for forskellige tilstande.
- **Build mode**: Fuldt udviklingsarbejde med alle værktøjer aktiveret
- **Plantilstand**: Analyse og planlægning uden at foretage ændringer
- **Anmeldelsestilstand**: Kodegennemgang med skrivebeskyttet adgang plus dokumentationsværktøjer
- **Fejlretningstilstand**: Fokuseret på undersøgelse med bash og læseværktøjer aktiveret
- **Docs-tilstand**: Dokumentationsskrivning med filhandlinger, men ingen systemkommandoer
Du kan også finde ud af, at forskellige modeller er gode til forskellige brugssituationer.

View File

@@ -0,0 +1,57 @@
---
title: Netværk
description: Konfigurer proxyer og brugerdefinerede certifikater.
---
OpenCode understøtter standard proxymiljøvariabler og brugerdefinerede certifikater til virksomhedsnetværksmiljø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
```
:::forsigtighed
TUI kommunikerer med en lokal HTTP-server. Du skal omgå proxyen for denne forbindelse for at forhindre routingsløjfer.
:::
Du kan konfigurere serverens port og værtsnavn ved hjælp af [CLI flags](/docs/cli#run).
---
### Godkend
Hvis din proxy kræver grundlæggende godkendelse, skal du inkludere legitimationsoplysninger i URL.
```bash
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
```
:::forsigtighed
Undgå hardkodning af adgangskoder. Brug miljøvariabler eller sikker lagring af legitimationsoplysninger.
:::
For proxyer, der kræver avanceret godkendelse som NTLM eller Kerberos, kan du overveje at bruge en LLM Gateway, der understøtter din godkendelsesmetode.
---
## Brugerdefinerede certifikater
Hvis din virksomhed bruger tilpassede CA'er til HTTPS-forbindelser, skal du konfigurere OpenCode til at stole på dem.
```bash
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
```
Dette virker for både proxy-forbindelser og direkte API-adgang.

View File

@@ -0,0 +1,237 @@
---
title: Tilladelser
description: Kontroller, hvilke handlinger der kræver godkendelse for at køre.
---
OpenCode bruger `permission`-konfigurationen til at bestemme, om en given handling skal køre automatisk, bede dig om eller blokeres.
Fra `v1.1.1` er den ældre `tools` booleske konfiguration forældet og er blevet flettet ind i `permission`. Den gamle `tools`-konfiguration er stadig understøttet for bagudkompatibilitet.
---
## Handlinger
Hver tilladelsesregel løses til en af:
- `"allow"` — køre uden godkendelse
- `"ask"` — prompt om godkendelse
- `"deny"` — bloker handlingen
---
## Konfiguration
Du kan indstille tilladelser globalt (med `*`) og tilsidesætte specifikke værktøjer.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Du kan også indstille alle tilladelser på én gang:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Granulære regler (objektsyntaks)
For de fleste tilladelser kan du bruge et objekt til at anvende forskellige handlinger baseret på værktøjsinputtet.
```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 efter mønstermatch, hvor den **sidste matchende regel vinder**. Et almindeligt mønster er at sætte catch-all `"*"` reglen først og mere specifikke regler efter den.
### Jokertegn
Tilladelsesmønstre bruger simpel jokertegn-matchning:
- `*` matcher nul eller flere af et hvilket som helst tegn
- `?` matcher nøjagtigt ét tegn
- Alle andre karakterer matcher bogstaveligt talt
### Udvidelse af hjemmemappe
Du kan bruge `~` eller `$HOME` i starten af et mønster til at referere til din hjemmemappe. Dette er især nyttigt for [`external_directory`](#external-directories) regler.
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Eksterne mapper
Brug `external_directory` til at tillade værktøjsopkald, der berører stier uden for den arbejdsmappe, hvor OpenCode blev startet. Dette gælder for ethvert værktøj, der tager en sti som input (for eksempel `read`, `edit`, `list`, `glob`, `grep` og mange `bash` kommandoer).
Hjemmeudvidelse (som `~/...`) påvirker kun, hvordan et mønster skrives. Det gør ikke en ekstern sti til en del af det aktuelle arbejdsområde, så stier uden for arbejdsbiblioteket skal stadig være tilladt via `external_directory`.
For eksempel giver dette adgang til alt under `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Enhver mappe, der er tilladt her, arver de samme standarder som det aktuelle arbejdsområde. Siden [`read` defaults to `allow`](#defaults), er læsninger også tilladt for poster under `external_directory`, medmindre de tilsidesættes. Tilføj eksplicitte regler, når et værktøj skal begrænses i disse stier, såsom blokering af redigeringer, mens læsninger bevares:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
Hold listen fokuseret på betroede stier, og lag ekstra tillad eller afvis regler efter behov for andre værktøjer (for eksempel `bash`).
---
## Tilgængelige tilladelser
OpenCode tilladelser indtastes efter værktøjsnavn plus et par sikkerhedsafskærmninger:
- `read` — læser en fil (matcher filstien)
- `edit` — alle filændringer (dækker `edit`, `write`, `patch`, `multiedit`)
- `glob` — fil-globing (matcher glob-mønsteret)
- `grep` — indholdssøgning (matcher regex-mønsteret)
- `list` — viser filer i en mappe (matcher mappestien)
- `bash` — kører shell-kommandoer (matcher parsede kommandoer som `git status --porcelain`)
- `task` — lancering af underagenter (matcher underagenttypen)
- `skill` — indlæsning af en færdighed (matcher færdighedsnavnet)
- `lsp` — kører LSP forespørgsler (i øjeblikket ikke-granulære)
- `todoread`, `todowrite` — reading/updating todo-listen
- `webfetch` — henter en URL (matcher URL)
- `websearch`, `codesearch` — web/code søgning (matcher forespørgslen)
- `external_directory` — udløses, når et værktøj berører stier uden for projektets arbejdsmappe
- `doom_loop` — udløses, når det samme værktøjskald gentages 3 gange med identisk input
---
## Standarder
Hvis du ikke angiver noget, starter OpenCode fra tilladelige standardindstillinger:
- De fleste tilladelser er som standard `"allow"`.
- `doom_loop` og `external_directory` er som standard `"ask"`.
- `read` er `"allow"`, men `.env` filer nægtes som standard:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Hvad "Spørg" gør
Når OpenCode beder om godkendelse, tilbyder brugergrænsefladen tre resultater:
- `once` — godkend netop denne anmodning
- `always` — godkend fremtidige anmodninger, der matcher de foreslåede mønstre (for resten af den nuværende OpenCode session)
- `reject` — afvis anmodningen
Sættet af mønstre, som `always` ville godkende, leveres af værktøjet (f.eks. hvidlister bash-godkendelser typisk et sikkert kommandopræfiks som `git status*`).
---
## Agenter
Du kan tilsidesætte tilladelser pr. agent. Agenttilladelser flettes med den globale konfiguration, og agentregler har forrang. [Learn more](/docs/agents#permissions) om agenttilladelser.
:::note
Se afsnittet [Granular Rules (Object Syntax)](#granular-rules-object-syntax) ovenfor for mere detaljerede mønstermatchningseksempler.
:::
```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 agenttilladelser 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.
```
:::tip
Brug mønstermatchning til kommandoer med argumenter. `"grep *"` tillader `grep pattern file.txt`, mens `"grep"` alene ville blokere det. Kommandoer som `git status` fungerer for standardadfærd, men kræver eksplicit tilladelse (som `"git status *"`), når argumenter sendes.
:::

View File

@@ -0,0 +1,385 @@
---
title: Plugins
description: Skriv dine egne plugins for at udvide OpenCode.
---
Plugins giver dig mulighed for at udvide OpenCode ved at tilslutte sig forskellige begivenheder og tilpasse adfærd. Du kan oprette plugins for at tilføje nye funktioner, integrere med eksterne tjenester eller ændre OpenCodes standardadfærd.
For eksempler, tjek [plugins](/docs/ecosystem#plugins) oprettet af fællesskabet.
---
## Brug et plugin
Der er to måder at indlæse plugins på.
---
### Fra lokale filer
Placer JavaScript- eller TypeScript-filer i plugin-mappen.
- `.opencode/plugins/` - Plugins på projektniveau
- `~/.config/opencode/plugins/` - Globale plugins
Filer i disse mapper indlæses automatisk ved opstart.
---
### Fra npm
Angiv npm-pakker i din konfigurationsfil.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
}
```
Både almindelige og omfangsrige npm-pakker understøttes.
Gennemse tilgængelige plugins i [ecosystem](/docs/ecosystem#plugins).
---
### Hvordan plugins installeres
**npm plugins** installeres automatisk ved hjælp af Bun ved opstart. Pakker og deres afhængigheder cachelagres i `~/.cache/opencode/node_modules/`.
**Lokale plugins** indlæses direkte fra plugin-biblioteket. For at bruge eksterne pakker skal du oprette en `package.json` i din konfigurationsmappe (se [Dependencies](#dependencies)), eller udgive pluginnet til npm og [add it to your config](/docs/config#plugins).
---
### Indlæs rækkefølge
Plugins indlæses fra alle kilder, og alle hooks kører i rækkefølge. Indlæsningsrækkefølgen er:
1. Global konfiguration (`~/.config/opencode/opencode.json`)
2. Projektkonfiguration (`opencode.json`)
3. Global plugin-mappe (`~/.config/opencode/plugins/`)
4. Projekt plugin bibliotek (`.opencode/plugins/`)
Dublerede npm-pakker med samme navn og version indlæses én gang. Et lokalt plugin og et npm plugin med lignende navne indlæses dog hver for sig.
---
## Opret et plugin
Et plugin er et **JavaScript/TypeScript modul**, der eksporterer et eller flere plugin
funktioner. Hver funktion modtager et kontekstobjekt og returnerer et hooks-objekt.
---
### Afhængigheder
Lokale plugins og brugerdefinerede værktøjer kan bruge eksterne npm-pakker. Tilføj en `package.json` til din konfigurationsmappe med de afhængigheder, du har brug for.
```json title=".opencode/package.json"
{
"dependencies": {
"shescape": "^2.1.0"
}
}
```
OpenCode kører `bun install` ved opstart for at installere disse. Dine plugins og værktøjer kan derefter 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)
}
},
}
}
```
---
### Grundlæggende 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-funktionen modtager:
- `project`: Den aktuelle projektinformation.
- `directory`: Den aktuelle arbejdsmappe.
- `worktree`: Git worktree-stien.
- `client`: En opencode SDK klient til interaktion med AI.
- `-: Buns [shell API](https://bun.com/docs/runtime/shell) til udførelse af kommandoer.
---
### TypeScript-understøttelse
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
}
}
```
---
### Begivenheder
Plugins kan abonnere på begivenheder som vist nedenfor i afsnittet Eksempler. Her er en liste over de forskellige arrangementer.
#### Kommandohændelser
- `command.executed`
#### Filhændelser
- `file.edited`
- `file.watcher.updated`
#### Installationshændelser
- `installation.updated`
#### LSP Begivenheder
- `lsp.client.diagnostics`
- `lsp.updated`
#### Beskedhændelser
- `message.part.removed`
- `message.part.updated`
- `message.removed`
- `message.updated`
#### Tilladelsesbegivenheder
- `permission.asked`
- `permission.replied`
#### Serverhændelser
- `server.connected`
#### Sessionsbegivenheder
- `session.created`
- `session.compacted`
- `session.deleted`
- `session.diff`
- `session.error`
- `session.idle`
- `session.status`
- `session.updated`
#### Todo-begivenheder
- `todo.updated`
#### Shell-begivenheder
- `shell.env`
#### Værktøjsbegivenheder
- `tool.execute.after`
- `tool.execute.before`
#### TUI Begivenheder
- `tui.prompt.append`
- `tui.command.execute`
- `tui.toast.show`
---
## Eksempler
Her er nogle eksempler på plugins, du kan bruge til at udvide opencode.
---
### Send meddelelser
Send meddelelser, når visse hændelser indtræffer:
```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 bruger `osascript` til at køre AppleScript på macOS. Her bruger vi det til at sende notifikationer.
:::note
Hvis du bruger OpenCode desktop-appen, kan den sende systemmeddelelser automatisk, når et svar er klar, eller når en session fejler.
:::
---
###.env-beskyttelse
Undgå opencode i at læse `.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")
}
},
}
}
```
---
### Injicer miljøvariabler
Injicer miljøvariabler i al shell-udførelse (AI-værktøjer og brugerterminaler):
```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
},
}
}
```
---
### Brugerdefinerede værktøjer
Plugins kan også tilføje brugerdefinerede værktøjer 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`-hjælperen opretter et brugerdefineret værktøj, som opencode kan kalde. Det tager en Zod-skemafunktion og returnerer en værktøjsdefinition med:
- `description`: Hvad værktøjet gør
- `args`: Zod-skema for værktøjets argumenter
- `execute`: Funktion, der kører, når værktøjet kaldes
Dine tilpassede værktøjer vil være tilgængelige for opencode sammen med indbyggede værktøjer.
---
### Logning
Brug `client.app.log()` i stedet for `console.log` til struktureret logning:
```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" },
},
})
}
```
Niveauer: `debug`, `info`, `warn`, `error`. Se [SDK documentation](https://opencode.ai/docs/sdk) for detaljer.
---
### Komprimeringskroge
Tilpas konteksten inkluderet, når en session 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` krogen affyres, før LLM genererer en fortsættelsesoversigt. Brug den til at injicere domænespecifik kontekst, som standardkomprimeringsprompten ville gå glip af.
Du kan også erstatte komprimeringsprompten helt ved at indstille `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 indstillet, erstatter den standardkompressionsprompten fuldstændigt. `output.context`-arrayet ignoreres i dette tilfælde.

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: Brug af OpenCode i din browser.
---
OpenCode kan køre som en webapplikation i din browser, hvilket giver den samme kraftfulde AI-kodningsoplevelse uden behov for en terminal.
![OpenCode Web - Ny session](../../../assets/web/web-homepage-new-session.png)
## Kom godt i gang
Start webgrænsefladen ved at køre:
```bash
opencode web
```
Dette starter en lokal server på `127.0.0.1` med en tilfældig tilgængelig port og åbner automatisk OpenCode i din standardbrowser.
:::caution
Hvis `OPENCODE_SERVER_PASSWORD` ikke er indstillet, vil serveren være usikret. Dette er fint til lokal brug, men bør indstilles til netværksadgang.
:::
:::tip[Windows Users]
For den bedste oplevelse skal du køre `opencode web` fra [WSL](/docs/windows-wsl) i stedet for PowerShell. Dette sikrer korrekt filsystemadgang og terminalintegration.
:::
---
## Konfiguration
Du kan konfigurere webserveren ved hjælp af kommandolinjeflag eller i din [config-fil](/docs/config).
### Port
Som standard vælger OpenCode en tilgængelig port. Du kan angive en port:
```bash
opencode web --port 4096
```
### Værtsnavn
Som standard binder serveren til `127.0.0.1` (kun lokal vært). Sådan gør du OpenCode tilgængelig på dit netværk:
```bash
opencode web --hostname 0.0.0.0
```
Når du bruger `0.0.0.0`, vil OpenCode vise både lokale adresser og netværksadresser:
```
Local access: http://localhost:4096
Network access: http://192.168.1.100:4096
```
### mDNS-opdagelse
Aktiver mDNS for at gøre din server synlig på det lokale netværk:
```bash
opencode web --mdns
```
Dette indstiller automatisk værtsnavnet til `0.0.0.0` og annoncerer serveren som `opencode.local`.
Du kan tilpasse mDNS-domænenavnet til at køre flere forekomster på det samme netværk:
```bash
opencode web --mdns --mdns-domain myproject.local
```
### CORS
For at tillade yderligere domæner til CORS (nyttigt til brugerdefinerede frontends):
```bash
opencode web --cors https://example.com
```
### Godkendelse
For at beskytte adgangen skal du angive en adgangskode ved hjælp af `OPENCODE_SERVER_PASSWORD` miljøvariablen:
```bash
OPENCODE_SERVER_PASSWORD=secret opencode web
```
Brugernavnet er som standard `opencode`, men kan ændres med `OPENCODE_SERVER_USERNAME`.
---
## Brug af webgrænsefladen
Når den er startet, giver webgrænsefladen adgang til dine OpenCode-sessioner.
### Sessioner
Se og administrer dine sessioner fra hjemmesiden. Du kan se aktive sessioner og starte nye.
![OpenCode Web - Active Session](../../../assets/web/web-homepage-active-session.png)
### Serverstatus
Klik på "Se servere" for at se tilsluttede servere og deres status.
![OpenCode Web - Se servere](../../../assets/web/web-homepage-see-servers.png)
---
## Tilslutning af en terminal
Du kan vedhæfte en terminal TUI til en kørende webserver:
```bash
# Start the web server
opencode web --port 4096
# In another terminal, attach the TUI
opencode attach http://localhost:4096
```
Dette giver dig mulighed for at bruge både webgrænsefladen og terminalen samtidigt og dele de samme sessioner og tilstand.
---
## Konfigurationsfil
Du kan også konfigurere serverindstillinger i din `opencode.json`-konfigurationsfil:
```json
{
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"cors": ["https://example.com"]
}
}
```
Kommandolinjeflag har forrang over konfigurationsfilindstillinger.

View File

@@ -0,0 +1,113 @@
---
title: Windows (WSL)
description: Kør OpenCode på Windows med WSL for den bedste oplevelse.
---
import { Steps } from "@astrojs/starlight/components"
Selvom OpenCode kan køre direkte på Windows, anbefaler vi at bruge [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) for den bedste oplevelse. WSL giver et Linux-miljø, der fungerer problemfrit med OpenCodes funktioner.
:::tip[Hvorfor WSL?]
WSL giver bedre filsystemydelse, fuld terminalunderstøttelse og kompatibilitet med de udviklingsværktøjer, som OpenCode er afhængig af.
:::
---
## Opsætning
<Steps>
1. **Installer WSL**
Hvis du ikke allerede har gjort det, så [installer WSL](https://learn.microsoft.com/en-us/windows/wsl/install) med Microsofts officielle vejledning.
2. **Installer OpenCode i WSL**
Når WSL er sat op, skal du åbne din WSL-terminal og installere OpenCode med en af [installationsmetoderne](/docs/).
```bash
curl -fsSL https://opencode.ai/install | bash
```
3. **Brug OpenCode fra WSL**
Gå til din projektmappe (få adgang til Windows-filer via `/mnt/c/`, `/mnt/d/` osv.) og kør OpenCode.
```bash
cd /mnt/c/Users/YourName/project
opencode
```
</Steps>
---
## Desktop-app + WSL-server
Hvis du foretrækker OpenCode Desktop-appen, men vil køre serveren i WSL:
1. **Start serveren i WSL** med `--hostname 0.0.0.0` for at tillade eksterne forbindelser:
```bash
opencode serve --hostname 0.0.0.0 --port 4096
```
2. **Forbind Desktop-appen** til `http://localhost:4096`
:::note
Hvis `localhost` ikke virker i din opsætning, så forbind i stedet med WSL-IP-adressen (fra WSL: `hostname -I`) og brug `http://<wsl-ip>:4096`.
:::
:::caution
Når du bruger `--hostname 0.0.0.0`, skal du sætte `OPENCODE_SERVER_PASSWORD` for at sikre serveren.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
```
:::
---
## Webklient + WSL
For den bedste weboplevelse på Windows:
1. **Kør `opencode web` i WSL-terminalen** i stedet for PowerShell:
```bash
opencode web --hostname 0.0.0.0
```
2. **Åbn fra din Windows-browser** på `http://localhost:<port>` (OpenCode udskriver URL'en)
Når du kører `opencode web` fra WSL, får du korrekt filsystemadgang og terminalintegration, samtidig med at det stadig er tilgængeligt fra din Windows-browser.
---
## Adgang til Windows-filer
WSL kan få adgang til alle dine Windows-filer via `/mnt/`-mappen:
- `C:`-drev → `/mnt/c/`
- `D:`-drev → `/mnt/d/`
- Og så videre...
Eksempel:
```bash
cd /mnt/c/Users/YourName/Documents/project
opencode
```
:::tip
For den mest problemfri oplevelse kan du overveje at klone/kopiere dit repo ind i WSL-filsystemet (for eksempel under `~/code/`) og køre OpenCode derfra.
:::
---
## Tips
- Lad OpenCode køre i WSL for projekter, der ligger på Windows-drev - filadgangen er problemfri
- Brug VS Codes [WSL-udvidelse](https://code.visualstudio.com/docs/remote/wsl) sammen med OpenCode for et integreret udviklingsworkflow
- Din OpenCode-konfiguration og dine sessioner gemmes i WSL-miljøet i `~/.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å.