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: Migrazione a 1.0
description: Novita in OpenCode 1.0.
---
OpenCode 1.0 e una riscrittura completa della TUI.
Siamo passati dalla TUI basata su go+bubbletea, che aveva problemi di prestazioni e di capacita, a un framework interno (OpenTUI) scritto in zig+solidjs.
La nuova TUI funziona come la precedente, dato che si connette allo stesso server opencode.
---
## Upgrading
Non dovresti essere aggiornato automaticamente a 1.0 se stai usando una versione precedente.
Detto questo, alcune versioni piu vecchie di OpenCode installano sempre l'ultima.
Per aggiornare manualmente, esegui:
```bash
$ opencode upgrade 1.0.0
```
Per tornare a 0.x, esegui:
```bash
$ opencode upgrade 0.15.31
```
---
## Cambiamenti UX
La cronologia della sessione e piu compatta: mostra i dettagli completi solo per gli strumenti edit e bash.
Abbiamo aggiunto una command bar attraverso cui passa quasi tutto. Premi ctrl+p in qualunque contesto per aprirla e vedere tutto cio che puoi fare.
Abbiamo aggiunto una sidebar di sessione (attivabile/disattivabile) con informazioni utili.
Abbiamo rimosso alcune funzionalita che non eravamo sicuri venissero davvero usate. Se manca qualcosa di importante, apri una issue e la riaggiungeremo rapidamente.
---
## Modifiche incompatibili
### Keybind rinominati
- messages_revert -> messages_undo
- switch_agent -> agent_cycle
- switch_agent_reverse -> agent_cycle_reverse
- switch_mode -> agent_cycle
- switch_mode_reverse -> agent_cycle_reverse
### Keybind rimossi
- messages_layout_toggle
- messages_next
- messages_previous
- file_diff_toggle
- file_search
- file_close
- file_list
- app_help
- project_init
- tool_details
- thinking_blocks

View File

@@ -0,0 +1,156 @@
---
title: Supporto ACP
description: Usa OpenCode in qualunque editor compatibile con ACP.
---
OpenCode supporta [Agent Client Protocol](https://agentclientprotocol.com) (ACP), permettendoti di usarlo direttamente in editor e IDE compatibili.
:::tip
Per una lista di editor e tool che supportano ACP, vedi l'[ACP progress report](https://zed.dev/blog/acp-progress-report#available-now).
:::
ACP e un protocollo aperto che standardizza la comunicazione tra editor di codice e agenti di coding AI.
---
## Configure
Per usare OpenCode via ACP, configura l'editor in modo che esegua il comando `opencode acp`.
Il comando avvia OpenCode come sottoprocesso compatibile con ACP che comunica con l'editor via JSON-RPC su stdio.
Qui sotto trovi esempi per editor popolari che supportano ACP.
---
### Zed
Aggiungi alla configurazione di [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
```json title="~/.config/zed/settings.json"
{
"agent_servers": {
"OpenCode": {
"command": "opencode",
"args": ["acp"]
}
}
}
```
Per aprirlo, usa l'azione `agent: new thread` nella **Command Palette**.
Puoi anche assegnare una scorciatoia da tastiera modificando `keymap.json`:
```json title="keymap.json"
[
{
"bindings": {
"cmd-alt-o": [
"agent::NewExternalAgentThread",
{
"agent": {
"custom": {
"name": "OpenCode",
"command": {
"command": "opencode",
"args": ["acp"]
}
}
}
}
]
}
}
]
```
---
### JetBrains IDEs
Aggiungi al tuo acp.json per [JetBrains IDE](https://www.jetbrains.com/) secondo la [documentazione](https://www.jetbrains.com/help/ai-assistant/acp.html):
```json title="acp.json"
{
"agent_servers": {
"OpenCode": {
"command": "/absolute/path/bin/opencode",
"args": ["acp"]
}
}
}
```
Per aprirlo, seleziona il nuovo agente 'OpenCode' nel selettore agenti di AI Chat.
---
### Avante.nvim
Aggiungi alla configurazione di [Avante.nvim](https://github.com/yetone/avante.nvim):
```lua
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" }
}
}
}
```
Se devi passare variabili d'ambiente:
```lua {6-8}
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" },
env = {
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
}
}
}
}
```
---
### CodeCompanion.nvim
Per usare OpenCode come agente ACP in [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), aggiungi quanto segue alla config di Neovim:
```lua
require("codecompanion").setup({
interactions = {
chat = {
adapter = {
name = "opencode",
model = "claude-sonnet-4",
},
},
},
})
```
Questa config imposta CodeCompanion per usare OpenCode come agente ACP per la chat.
Se devi passare variabili d'ambiente (come `OPENCODE_API_KEY`), vedi [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) nella documentazione di CodeCompanion.nvim.
## Support
OpenCode funziona via ACP come nel terminale. Tutte le funzionalita sono supportate:
:::note
Alcuni comandi slash integrati come `/undo` e `/redo` non sono attualmente supportati.
:::
- Built-in tools (file operations, terminal commands, etc.)
- Custom tools and slash commands
- MCP servers configured in your OpenCode config
- Project-specific rules from `AGENTS.md`
- Custom formatters and linters
- Agents and permissions system

View File

@@ -0,0 +1,746 @@
---
title: Agenti
description: Configura e usa agenti specializzati.
---
Gli agenti sono assistenti AI specializzati che puoi configurare per task e workflow specifici. Ti permettono di creare strumenti mirati con prompt personalizzati, modelli e accesso agli strumenti.
:::tip
Usa l'agente plan per analizzare codice e valutare suggerimenti senza apportare modifiche al codice.
:::
Puoi passare da un agente all'altro durante una sessione oppure invocarli con la menzione `@`.
---
## Tipi
In OpenCode esistono due tipi di agenti: agenti primari e subagenti.
---
### Agenti primari
Gli agenti primari sono gli assistenti principali con cui interagisci direttamente. Puoi scorrerli usando il tasto **Tab** o la scorciatoia `switch_agent` configurata. Questi agenti gestiscono la conversazione principale. L'accesso agli strumenti si configura tramite i permessi: per esempio, Build ha tutti gli strumenti abilitati, mentre Plan e' limitato.
:::tip
Puoi usare **Tab** per passare tra gli agenti primari durante una sessione.
:::
OpenCode include due agenti primari integrati: **Build** e **Plan**. Li vediamo sotto.
---
### Subagenti
I subagenti sono assistenti specializzati che gli agenti primari possono invocare per task specifici. Puoi anche invocarli manualmente **menzionandoli con @** nei tuoi messaggi.
OpenCode include due subagenti integrati: **General** e **Explore**. Li vediamo sotto.
---
## Integrati
OpenCode include due agenti primari integrati e due subagenti integrati.
---
### Usa build
_Mode_: `primary`
Build e' l'agente primario **predefinito** con tutti gli strumenti abilitati. E' l'agente standard per lavoro di sviluppo quando ti serve pieno accesso a operazioni sui file e comandi di sistema.
---
### Usa plan
_Mode_: `primary`
Un agente limitato pensato per pianificazione e analisi. Usiamo un sistema di permessi per darti piu' controllo e prevenire modifiche non intenzionali.
Di default, tutte le seguenti sono impostate a `ask`:
- `file edits`: tutte le scritture, patch ed edit
- `bash`: tutti i comandi bash
Questo agente e' utile quando vuoi che l'LLM analizzi il codice, suggerisca modifiche o crei piani senza effettuare alcuna modifica reale al codebase.
---
### Usa general
_Mode_: `subagent`
Un agente general-purpose per ricercare domande complesse ed eseguire task multi-step. Ha accesso completo agli strumenti (tranne todo), quindi puo' modificare file quando serve. Usalo per eseguire piu' unita' di lavoro in parallelo.
---
### Usa explore
_Mode_: `subagent`
Un agente rapido in sola lettura per esplorare codebase. Non puo' modificare file. Usalo quando devi trovare rapidamente file tramite pattern, cercare nel codice per keyword o rispondere a domande sul codebase.
---
### Usa compaction
_Mode_: `primary`
Agente di sistema nascosto che compatta contesti lunghi in un riassunto piu' piccolo. Viene eseguito automaticamente quando serve e non e' selezionabile nella UI.
---
### Usa title
_Mode_: `primary`
Agente di sistema nascosto che genera titoli brevi per le sessioni. Viene eseguito automaticamente quando serve e non e' selezionabile nella UI.
---
### Usa summary
_Mode_: `primary`
Agente di sistema nascosto che crea riassunti di sessione. Viene eseguito automaticamente quando serve e non e' selezionabile nella UI.
---
## Utilizzo
1. Per gli agenti primari, usa il tasto **Tab** per scorrerli durante una sessione. Puoi anche usare la scorciatoia `switch_agent` configurata.
2. I subagenti possono essere invocati:
- **Automaticamente** dagli agenti primari per task specializzati in base alle loro descrizioni.
- Manualmente **menzionando con @** un subagente nel tuo messaggio. Per esempio.
```txt frame="none"
@general help me search for this function
```
3. **Navigazione tra sessioni**: quando i subagenti creano le loro child session, puoi navigare tra la sessione padre e tutte le sessioni figlie usando:
- **\<Leader>+Right** (o la scorciatoia `session_child_cycle` configurata) per ciclare in avanti tra parent → child1 → child2 → ... → parent
- **\<Leader>+Left** (o la scorciatoia `session_child_cycle_reverse` configurata) per ciclare indietro tra parent ← child1 ← child2 ← ... ← parent
Questo ti permette di passare senza soluzione di continuita' tra la conversazione principale e il lavoro specializzato dei subagenti.
---
## Configura
Puoi personalizzare gli agenti integrati o crearne di tuoi tramite configurazione. Gli agenti possono essere configurati in due modi:
---
### JSON
Configura gli agenti nel file `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"mode": "primary",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"mode": "primary",
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
},
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"mode": "subagent",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
"write": false,
"edit": false
}
}
}
}
```
---
### Markdown
Puoi anche definire agenti usando file markdown. Mettili in:
- Globale: `~/.config/opencode/agents/`
- Per progetto: `.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.
```
Il nome del file markdown diventa il nome dell'agente. Per esempio, `review.md` crea un agente `review`.
---
## Opzioni
Vediamo nel dettaglio queste opzioni di configurazione.
---
### Descrizione
Usa l'opzione `description` per fornire una breve descrizione di cosa fa l'agente e quando usarlo.
```json title="opencode.json"
{
"agent": {
"review": {
"description": "Reviews code for best practices and potential issues"
}
}
}
```
Questa e' un'opzione di configurazione **obbligatoria**.
---
### Temperatura
Controlla casualita' e creativita' delle risposte dell'LLM con la config `temperature`.
Valori bassi rendono le risposte piu' focalizzate e deterministiche, mentre valori alti aumentano creativita' e variabilita'.
```json title="opencode.json"
{
"agent": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
I valori di temperature tipicamente vanno da 0.0 a 1.0:
- **0.0-0.2**: risposte molto focalizzate e deterministiche, ideali per analisi del codice e pianificazione
- **0.3-0.5**: risposte bilanciate con un po' di creativita', adatte a task generali di sviluppo
- **0.6-1.0**: risposte piu' creative e varie, utili per brainstorming ed esplorazione
```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}"
}
}
}
```
Se non specifichi una temperature, OpenCode usa i default specifici del modello; tipicamente 0 per la maggior parte dei modelli e 0.55 per i modelli Qwen.
---
### Passi massimi
Controlla il numero massimo di iterazioni agentiche che un agente puo' eseguire prima di essere forzato a rispondere solo con testo. Questo permette a chi vuole controllare i costi di impostare un limite alle azioni agentiche.
Se non e' impostato, l'agente continuera' a iterare finche' il modello sceglie di fermarsi o l'utente interrompe la sessione.
```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
}
}
}
```
Quando viene raggiunto il limite, l'agente riceve un system prompt speciale che lo istruisce a rispondere con un riassunto del lavoro svolto e con i task rimanenti consigliati.
:::caution
Il campo legacy `maxSteps` e' deprecato. Usa `steps`.
:::
---
### Disabilita
Imposta a `true` per disabilitare l'agente.
```json title="opencode.json"
{
"agent": {
"review": {
"disable": true
}
}
}
```
---
### Prompt
Specifica un file di system prompt personalizzato per questo agente tramite la config `prompt`. Il file deve contenere istruzioni specifiche per lo scopo dell'agente.
```json title="opencode.json"
{
"agent": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Questo path e' relativo alla posizione del file di configurazione. Quindi funziona sia per la config globale di OpenCode sia per la config specifica del progetto.
---
### Modello
Usa la config `model` per sovrascrivere il modello per questo agente. Utile per usare modelli diversi ottimizzati per task diversi. Per esempio, un modello piu' veloce per la pianificazione e uno piu' capace per l'implementazione.
:::tip
Se non specifichi un modello, gli agenti primari usano il [modello configurato globalmente](/docs/config#models), mentre i subagenti useranno il modello dell'agente primario che li ha invocati.
:::
```json title="opencode.json"
{
"agent": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
L'ID modello nella configurazione OpenCode usa il formato `provider/model-id`. Per esempio, se stai usando [OpenCode Zen](/docs/zen), useresti `opencode/gpt-5.1-codex` per GPT 5.1 Codex.
---
### Strumenti
Controlla quali strumenti sono disponibili per questo agente tramite la config `tools`. Puoi abilitare o disabilitare strumenti specifici impostandoli a `true` o `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
La configurazione specifica dell'agente sovrascrive la configurazione globale.
:::
Puoi anche usare wildcard per controllare piu' strumenti in una volta. Per esempio, per disabilitare tutti gli strumenti di un server MCP:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"readonly": {
"tools": {
"mymcp_*": false,
"write": false,
"edit": false
}
}
}
}
```
[Scopri di piu' sugli strumenti](/docs/tools).
---
### Permessi
Puoi configurare i permessi per gestire quali azioni un agente puo' eseguire. Attualmente, i permessi per gli strumenti `edit`, `bash` e `webfetch` possono essere configurati come:
- `"ask"` — chiede approvazione prima di eseguire lo strumento
- `"allow"` — consente tutte le operazioni senza approvazione
- `"deny"` — disabilita lo strumento
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
}
}
```
Puoi sovrascrivere questi permessi per agente.
```json title="opencode.json" {3-5,8-10}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
},
"agent": {
"build": {
"permission": {
"edit": "ask"
}
}
}
}
```
Puoi anche impostare permessi negli agenti Markdown.
```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.
```
Puoi impostare permessi per comandi bash specifici.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git push": "ask",
"grep *": "allow"
}
}
}
}
}
```
Questo puo' usare un glob pattern.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git *": "ask"
}
}
}
}
}
```
E puoi anche usare la wildcard `*` per gestire i permessi per tutti i comandi.
Dato che l'ultima regola che corrisponde ha la precedenza, metti prima la wildcard `*` e poi le regole specifiche.
```json title="opencode.json" {8}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status *": "allow"
}
}
}
}
}
```
[Scopri di piu' sui permessi](/docs/permissions).
---
### Modalita'
Controlla la modalita' dell'agente con la config `mode`. L'opzione `mode` determina come l'agente puo' essere usato.
```json title="opencode.json"
{
"agent": {
"review": {
"mode": "subagent"
}
}
}
```
`mode` puo' essere `primary`, `subagent` o `all`. Se `mode` non e' specificato, il default e' `all`.
---
### Nascosto
Nascondi un subagente dal menu autocomplete di `@` con `hidden: true`. Utile per subagenti interni che dovrebbero essere invocati solo programmaticamente da altri agenti tramite lo strumento Task.
```json title="opencode.json"
{
"agent": {
"internal-helper": {
"mode": "subagent",
"hidden": true
}
}
}
```
Questo influisce solo sulla visibilita' per l'utente nel menu autocomplete. Gli agenti nascosti possono comunque essere invocati dal modello tramite lo strumento Task se i permessi lo consentono.
:::note
Si applica solo ad agenti con `mode: subagent`.
:::
---
### Permessi Task
Controlla quali subagenti un agente puo' invocare tramite lo strumento Task con `permission.task`. Usa glob pattern per un matching flessibile.
```json title="opencode.json"
{
"agent": {
"orchestrator": {
"mode": "primary",
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}
```
Quando e' impostato a `deny`, il subagente viene rimosso interamente dalla descrizione dello strumento Task, quindi il modello non provera' a invocarlo.
:::tip
Le regole vengono valutate in ordine e **vince l'ultima regola che corrisponde**. Nell'esempio sopra, `orchestrator-planner` corrisponde sia a `*` (deny) sia a `orchestrator-*` (allow), ma dato che `orchestrator-*` viene dopo `*`, il risultato e' `allow`.
:::
:::tip
Gli utenti possono sempre invocare qualunque subagente direttamente dal menu autocomplete `@`, anche se i permessi task dell'agente lo negherebbero.
:::
---
### Colore
Personalizza l'aspetto visivo dell'agente nella UI con l'opzione `color`. Questo influisce su come l'agente appare nell'interfaccia.
Usa un colore hex valido (ad es. `#FF5733`) o un colore tema: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
```json title="opencode.json"
{
"agent": {
"creative": {
"color": "#ff6b6b"
},
"code-reviewer": {
"color": "accent"
}
}
}
```
---
### Top P
Controlla la diversita' delle risposte con l'opzione `top_p`. Alternativa alla temperature per controllare la casualita'.
```json title="opencode.json"
{
"agent": {
"brainstorm": {
"top_p": 0.9
}
}
}
```
I valori vanno da 0.0 a 1.0. Valori piu' bassi sono piu' focalizzati, valori piu' alti piu' diversi.
---
### Opzioni aggiuntive
Qualsiasi altra opzione che specifichi nella configurazione dell'agente verra' **passata direttamente** al provider come opzione del modello. Questo ti permette di usare feature e parametri specifici del provider.
Per esempio, con i modelli di reasoning di OpenAI, puoi controllare lo sforzo di ragionamento:
```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"
}
}
}
```
Queste opzioni aggiuntive sono specifiche per modello e provider. Controlla la documentazione del provider per i parametri disponibili.
:::tip
Esegui `opencode models` per vedere la lista dei modelli disponibili.
:::
---
## Crea agenti
Puoi creare nuovi agenti usando il comando seguente:
```bash
opencode agent create
```
Questo comando interattivo:
1. Chiede dove salvare l'agente: globale o specifico del progetto.
2. Chiede una descrizione di cosa dovrebbe fare l'agente.
3. Genera un system prompt appropriato e un identificatore.
4. Ti fa selezionare a quali strumenti l'agente puo' accedere.
5. Infine, crea un file markdown con la configurazione dell'agente.
---
## Casi d'uso
Ecco alcuni casi d'uso comuni per agenti diversi.
- **Build agent**: sviluppo completo con tutti gli strumenti abilitati
- **Plan agent**: analisi e pianificazione senza apportare modifiche
- **Review agent**: code review con accesso in sola lettura piu' strumenti documentazione
- **Debug agent**: focalizzato sull'investigazione con strumenti bash e read abilitati
- **Docs agent**: scrittura documentazione con operazioni sui file ma senza comandi di sistema
---
## Esempi
Ecco alcuni agenti di esempio che potresti trovare utili.
:::tip
Hai un agente che vorresti condividere? [Invia una PR](https://github.com/anomalyco/opencode).
:::
---
### Agente documentazione
```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
```
---
### Auditor di sicurezza
```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: Opzioni e comandi della CLI di OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
La CLI di OpenCode, per impostazione predefinita, avvia la [TUI](/docs/tui) quando viene eseguita senza argomenti.
```bash
opencode
```
Ma accetta anche i comandi documentati in questa pagina. Questo ti permette di interagire con OpenCode in modo programmatico.
```bash
opencode run "Explain how closures work in JavaScript"
```
---
### tui
Avvia l'interfaccia testuale di OpenCode (terminal user interface).
```bash
opencode [project]
```
#### Flag
| Flag | Breve | Descrizione |
| ------------ | ----- | ----------------------------------- |
| `--continue` | `-c` | Continua l'ultima sessione |
| `--session` | `-s` | ID sessione da continuare |
| `--prompt` | | Prompt da usare |
| `--model` | `-m` | Modello nel formato provider/model |
| `--agent` | | Agente da usare |
| `--port` | | Porta su cui mettersi in ascolto |
| `--hostname` | | Hostname su cui mettersi in ascolto |
---
## Comandi
La CLI di OpenCode include anche i seguenti comandi.
---
### agent
Gestisci gli agenti per OpenCode.
```bash
opencode agent [command]
```
---
### attach
Collega un terminale a un backend server di OpenCode gia' in esecuzione avviato tramite i comandi `serve` o `web`.
```bash
opencode attach [url]
```
Questo consente di usare la TUI con un backend OpenCode remoto. Per esempio:
```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 | Breve | Descrizione |
| ----------- | ----- | --------------------------------------- |
| `--dir` | | Working directory in cui avviare la TUI |
| `--session` | `-s` | ID sessione da continuare |
---
#### create
Crea un nuovo agente con configurazione personalizzata.
```bash
opencode agent create
```
Questo comando ti guida nella creazione di un nuovo agente con un system prompt personalizzato e configurazione degli strumenti.
---
#### list
Elenca tutti gli agenti disponibili.
```bash
opencode agent list
```
---
### auth
Comando per gestire le credenziali e il login dei provider.
```bash
opencode auth [command]
```
---
#### login
OpenCode si basa sull'elenco provider di [Models.dev](https://models.dev), quindi puoi usare `opencode auth login` per configurare le API key per qualunque provider tu voglia usare. Le credenziali vengono salvate in `~/.local/share/opencode/auth.json`.
```bash
opencode auth login
```
Quando OpenCode si avvia, carica i provider dal file delle credenziali e, se presenti, anche eventuali key definite nell'ambiente o in un file `.env` nel progetto.
---
#### list
Elenca tutti i provider autenticati come salvati nel file delle credenziali.
```bash
opencode auth list
```
Oppure la versione corta.
```bash
opencode auth ls
```
---
#### logout
Esegue il logout da un provider rimuovendolo dal file delle credenziali.
```bash
opencode auth logout
```
---
### github
Gestisci l'agente GitHub per l'automazione dei repository.
```bash
opencode github [command]
```
---
#### install
Installa l'agente GitHub nel tuo repository.
```bash
opencode github install
```
Questo configura il workflow GitHub Actions necessario e ti guida nel processo di configurazione. [Scopri di piu'](/docs/github).
---
#### run
Esegui l'agente GitHub. Tipicamente usato in GitHub Actions.
```bash
opencode github run
```
##### Flag
| Flag | Descrizione |
| --------- | -------------------------------------------- |
| `--event` | Evento GitHub mock per cui eseguire l'agente |
| `--token` | GitHub personal access token |
---
### mcp
Gestisci i server Model Context Protocol.
```bash
opencode mcp [command]
```
---
#### add
Aggiungi un server MCP alla tua configurazione.
```bash
opencode mcp add
```
Questo comando ti guida nell'aggiunta di un server MCP locale o remoto.
---
#### list
Elenca tutti i server MCP configurati e il loro stato di connessione.
```bash
opencode mcp list
```
Oppure la versione corta.
```bash
opencode mcp ls
```
---
#### auth
Autentica con un server MCP con OAuth abilitato.
```bash
opencode mcp auth [name]
```
Se non fornisci un nome server, ti verra' chiesto di selezionare tra i server OAuth-capable disponibili.
Puoi anche elencare i server OAuth-capable e il loro stato di autenticazione.
```bash
opencode mcp auth list
```
Oppure la versione corta.
```bash
opencode mcp auth ls
```
---
#### logout
Rimuovi le credenziali OAuth per un server MCP.
```bash
opencode mcp logout [name]
```
---
#### debug
Esegui debug di problemi di connessione OAuth per un server MCP.
```bash
opencode mcp debug <name>
```
---
### models
Elenca tutti i modelli disponibili dai provider configurati.
```bash
opencode models [provider]
```
Questo comando mostra tutti i modelli disponibili tra i provider configurati nel formato `provider/model`.
E' utile per capire l'esatto nome del modello da usare nella [config](/docs/config/).
Puoi anche passare opzionalmente un ID provider per filtrare i modelli a quel provider.
```bash
opencode models anthropic
```
#### Flag
| Flag | Descrizione |
| ----------- | --------------------------------------------------- |
| `--refresh` | Aggiorna la cache modelli da models.dev |
| `--verbose` | Output piu' verboso (include metadati come i costi) |
Usa `--refresh` per aggiornare l'elenco modelli in cache. E' utile quando nuovi modelli vengono aggiunti a un provider e vuoi vederli in OpenCode.
```bash
opencode models --refresh
```
---
### run
Esegui opencode in modalita' non interattiva passando un prompt direttamente.
```bash
opencode run [message..]
```
E' utile per scripting, automazione o quando vuoi una risposta rapida senza avviare la TUI completa. Per esempio.
```bash "opencode run"
opencode run Explain the use of context in Go
```
Puoi anche collegarti a una istanza `opencode serve` gia' in esecuzione per evitare i cold boot dei server MCP ad ogni esecuzione:
```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 | Breve | Descrizione |
| ------------ | ----- | --------------------------------------------------------------------- |
| `--command` | | Il comando da eseguire; usa message per gli argomenti |
| `--continue` | `-c` | Continua l'ultima sessione |
| `--session` | `-s` | ID sessione da continuare |
| `--share` | | Condividi la sessione |
| `--model` | `-m` | Modello nel formato provider/model |
| `--agent` | | Agente da usare |
| `--file` | `-f` | File da allegare al messaggio |
| `--format` | | Formato: default (formattato) o json (eventi JSON grezzi) |
| `--title` | | Titolo sessione (usa prompt troncato se non viene fornito un valore) |
| `--attach` | | Attach a un server opencode in esecuzione (es. http://localhost:4096) |
| `--port` | | Porta per il server locale (di default una porta casuale) |
---
### serve
Avvia un server OpenCode headless per accesso via API. Vedi le [server docs](/docs/server) per l'interfaccia HTTP completa.
```bash
opencode serve
```
Avvia un server HTTP che espone accesso API alle funzionalita' di opencode senza la TUI. Imposta `OPENCODE_SERVER_PASSWORD` per abilitare HTTP basic auth (username di default `opencode`).
#### Flag
| Flag | Descrizione |
| ------------ | ---------------------------------------------- |
| `--port` | Porta su cui mettersi in ascolto |
| `--hostname` | Hostname su cui mettersi in ascolto |
| `--mdns` | Abilita discovery mDNS |
| `--cors` | Origin browser addizionali per consentire CORS |
---
### session
Gestisci le sessioni OpenCode.
```bash
opencode session [command]
```
---
#### list
Elenca tutte le sessioni OpenCode.
```bash
opencode session list
```
##### Flag
| Flag | Breve | Descrizione |
| ------------- | ----- | ------------------------------------ |
| `--max-count` | `-n` | Limita alle N sessioni piu' recenti |
| `--format` | | Formato output: table o json (table) |
---
### stats
Mostra statistiche di utilizzo token e costo per le sessioni OpenCode.
```bash
opencode stats
```
#### Flag
| Flag | Descrizione |
| ----------- | ------------------------------------------------------------------------------------- |
| `--days` | Mostra statistiche per gli ultimi N giorni (all time) |
| `--tools` | Numero di strumenti da mostrare (all) |
| `--models` | Mostra breakdown di utilizzo modelli (nascosto di default). Passa un numero per top N |
| `--project` | Filtra per progetto (tutti i progetti; stringa vuota: progetto corrente) |
---
### export
Esporta i dati di sessione come JSON.
```bash
opencode export [sessionID]
```
Se non fornisci un ID sessione, ti verra' chiesto di selezionare tra le sessioni disponibili.
---
### import
Importa i dati di sessione da un file JSON o da un URL di condivisione OpenCode.
```bash
opencode import <file>
```
Puoi importare da un file locale o da un URL di condivisione OpenCode.
```bash
opencode import session.json
opencode import https://opncd.ai/s/abc123
```
---
### web
Avvia un server OpenCode headless con interfaccia web.
```bash
opencode web
```
Avvia un server HTTP e apre un browser per accedere a OpenCode tramite interfaccia web. Imposta `OPENCODE_SERVER_PASSWORD` per abilitare HTTP basic auth (username di default `opencode`).
#### Flag
| Flag | Descrizione |
| ------------ | ---------------------------------------------- |
| `--port` | Porta su cui mettersi in ascolto |
| `--hostname` | Hostname su cui mettersi in ascolto |
| `--mdns` | Abilita discovery mDNS |
| `--cors` | Origin browser addizionali per consentire CORS |
---
### acp
Avvia un server ACP (Agent Client Protocol).
```bash
opencode acp
```
Questo comando avvia un server ACP che comunica via stdin/stdout usando nd-JSON.
#### Flag
| Flag | Descrizione |
| ------------ | ----------------------------------- |
| `--cwd` | Directory di lavoro |
| `--port` | Porta su cui mettersi in ascolto |
| `--hostname` | Hostname su cui mettersi in ascolto |
---
### uninstall
Disinstalla OpenCode e rimuove tutti i file correlati.
```bash
opencode uninstall
```
#### Flag
| Flag | Breve | Descrizione |
| --------------- | ----- | -------------------------------------------- |
| `--keep-config` | `-c` | Mantieni i file di configurazione |
| `--keep-data` | `-d` | Mantieni dati di sessione e snapshot |
| `--dry-run` | | Mostra cosa verrebbe rimosso senza rimuovere |
| `--force` | `-f` | Salta le richieste di conferma |
---
### upgrade
Aggiorna opencode all'ultima versione o a una versione specifica.
```bash
opencode upgrade [target]
```
Per aggiornare all'ultima versione:
```bash
opencode upgrade
```
Per aggiornare a una versione specifica:
```bash
opencode upgrade v0.1.48
```
#### Flag
| Flag | Breve | Descrizione |
| ---------- | ----- | --------------------------------------------------------- |
| `--method` | `-m` | Metodo di installazione usato: curl, npm, pnpm, bun, brew |
---
## Flag globali
La CLI di opencode accetta i seguenti flag globali.
| Flag | Breve | Descrizione |
| -------------- | ----- | -------------------------------------- |
| `--help` | `-h` | Mostra l'help |
| `--version` | `-v` | Stampa il numero di versione |
| `--print-logs` | | Stampa i log su stderr |
| `--log-level` | | Livello log (DEBUG, INFO, WARN, ERROR) |
---
## Variabili d'ambiente
OpenCode puo' essere configurato tramite variabili d'ambiente.
| Variabile | Tipo | Descrizione |
| ------------------------------------- | ------- | ----------------------------------------------------------- |
| `OPENCODE_AUTO_SHARE` | boolean | Condivide automaticamente le sessioni |
| `OPENCODE_GIT_BASH_PATH` | string | Percorso all'eseguibile Git Bash su Windows |
| `OPENCODE_CONFIG` | string | Percorso al file di configurazione |
| `OPENCODE_CONFIG_DIR` | string | Percorso alla directory di configurazione |
| `OPENCODE_CONFIG_CONTENT` | string | Contenuto JSON di config inline |
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Disabilita i controlli automatici di aggiornamento |
| `OPENCODE_DISABLE_PRUNE` | boolean | Disabilita la potatura dei dati vecchi |
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Disabilita aggiornamenti automatici del titolo terminale |
| `OPENCODE_PERMISSION` | string | Config permessi JSON inline |
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Disabilita i plugin di default |
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Disabilita download automatico dei server LSP |
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Abilita modelli sperimentali |
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Disabilita compaction automatica del contesto |
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Disabilita lettura da `.claude` (prompt + skill) |
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Disabilita lettura di `~/.claude/CLAUDE.md` |
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Disabilita caricamento di `.claude/skills` |
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Disabilita fetch dei modelli da fonti remote |
| `OPENCODE_FAKE_VCS` | string | Provider VCS finto per scopi di test |
| `OPENCODE_DISABLE_FILETIME_CHECK` | boolean | Disabilita controllo file time per ottimizzazione |
| `OPENCODE_CLIENT` | string | Identificatore client (default `cli`) |
| `OPENCODE_ENABLE_EXA` | boolean | Abilita gli strumenti di web search Exa |
| `OPENCODE_SERVER_PASSWORD` | string | Abilita basic auth per `serve`/`web` |
| `OPENCODE_SERVER_USERNAME` | string | Sovrascrive lo username basic auth (default `opencode`) |
| `OPENCODE_MODELS_URL` | string | URL personalizzato per recuperare la configurazione modelli |
---
### Sperimentale
Queste variabili d'ambiente abilitano funzionalita' sperimentali che potrebbero cambiare o essere rimosse.
| Variabile | Tipo | Descrizione |
| ----------------------------------------------- | ------- | ------------------------------------------- |
| `OPENCODE_EXPERIMENTAL` | boolean | Abilita tutte le funzionalita' sperimentali |
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Abilita icon discovery |
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Disabilita copy on select nella TUI |
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Timeout di default per comandi bash in ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Massimo token di output per risposte LLM |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Abilita file watcher per l'intera dir |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Abilita formatter oxfmt |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Abilita strumento LSP sperimentale |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Disabilita file watcher |
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Abilita funzionalita' Exa sperimentali |
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Abilita type checking LSP sperimentale |
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | Abilita markdown sperimentale |
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Abilita plan mode |

View File

@@ -0,0 +1,322 @@
---
title: Comandi
description: Crea comandi personalizzati per task ripetitivi.
---
I comandi personalizzati ti permettono di definire un prompt da eseguire quando quel comando viene lanciato nella TUI.
```bash frame="none"
/my-command
```
I comandi personalizzati si aggiungono a quelli integrati come `/init`, `/undo`, `/redo`, `/share`, `/help`. [Scopri di piu](/docs/tui#commands).
---
## Crea file di comando
Crea file markdown nella directory `commands/` per definire comandi personalizzati.
Crea `.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.
```
Il frontmatter definisce le proprieta del comando. Il contenuto diventa il template.
Usa il comando digitando `/` seguito dal nome del comando.
```bash frame="none"
"/test"
```
---
## Configura
Puoi aggiungere comandi personalizzati tramite la config di OpenCode o creando file markdown nella directory `commands/`.
---
### JSON
Usa l'opzione `command` nella [config](/docs/config) di OpenCode:
```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"
}
}
}
```
Ora puoi eseguire questo comando nella TUI:
```bash frame="none"
/test
```
---
### Markdown
Puoi anche definire comandi usando file markdown. Mettili in:
- Globale: `~/.config/opencode/commands/`
- Per progetto: `.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.
```
Il nome del file markdown diventa il nome del comando. Per esempio, `test.md` ti permette di eseguire:
```bash frame="none"
/test
```
---
## Configurazione del prompt
I prompt dei comandi personalizzati supportano diversi placeholder e sintassi speciali.
---
### Argomenti
Passa argomenti ai comandi usando il placeholder `$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.
```
Esegui il comando con argomenti:
```bash frame="none"
/component Button
```
E `$ARGUMENTS` verra sostituito con `Button`.
Puoi anche accedere ai singoli argomenti usando parametri posizionali:
- `$1` - Primo argomento
- `$2` - Secondo argomento
- `$3` - Terzo argomento
- E cosi via...
Per esempio:
```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
```
Esegui il comando:
```bash frame="none"
/create-file config.json src "{ \"key\": \"value\" }"
```
Questo sostituisce:
- `$1` con `config.json`
- `$2` con `src`
- `$3` con `{ "key": "value" }`
---
### Output della shell
Usa _!`command`_ per inserire nel prompt l'output di un [comando bash](/docs/tui#bash-commands).
Per esempio, per creare un comando personalizzato che analizzi la copertura dei test:
```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.
```
Oppure per rivedere modifiche recenti:
```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.
```
I comandi vengono eseguiti nella root del progetto e il loro output diventa parte del prompt.
---
### Riferimenti ai file
Includi file nel comando usando `@` seguito dal nome del file.
```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.
```
Il contenuto del file viene incluso automaticamente nel prompt.
---
## Opzioni
Vediamo le opzioni di configurazione nel dettaglio.
---
### Modello di prompt
L'opzione `template` definisce il prompt che verra inviato all'LLM quando il comando viene eseguito.
```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."
}
}
}
```
Questa e un'opzione di config **obbligatoria**.
---
### Descrizione
Usa l'opzione `description` per fornire una breve descrizione di cosa fa il comando.
```json title="opencode.json"
{
"command": {
"test": {
"description": "Run tests with coverage"
}
}
}
```
Questo viene mostrato come descrizione nella TUI quando digiti il comando.
---
### Agente
Usa la config `agent` per specificare opzionalmente quale [agente](/docs/agents) deve eseguire il comando.
Se e un [subagent](/docs/agents/#subagents), il comando attiva per default l'invocazione di un subagent.
Per disabilitare questo comportamento, imposta `subtask` a `false`.
```json title="opencode.json"
{
"command": {
"review": {
"agent": "plan"
}
}
}
```
Questa e un'opzione di config **opzionale**. Se non specificata, usa l'agente corrente.
---
### Sottotask
Usa il booleano `subtask` per forzare il comando ad attivare l'invocazione di un [subagent](/docs/agents/#subagents).
E utile se vuoi evitare che il comando inquini il contesto principale e **forza** l'agente ad agire come subagent,
anche se `mode` e impostato su `primary` nella configurazione dell'[agente](/docs/agents).
```json title="opencode.json"
{
"command": {
"analyze": {
"subtask": true
}
}
}
```
Questa e un'opzione di config **opzionale**.
---
### Modello
Usa la config `model` per sovrascrivere il modello predefinito per questo comando.
```json title="opencode.json"
{
"command": {
"analyze": {
"model": "anthropic/claude-3-5-sonnet-20241022"
}
}
}
```
Questa e un'opzione di config **opzionale**.
---
## Integrati
opencode include diversi comandi integrati come `/init`, `/undo`, `/redo`, `/share`, `/help`; [scopri di piu](/docs/tui#commands).
:::note
I comandi personalizzati possono sovrascrivere quelli integrati.
:::
Se definisci un comando personalizzato con lo stesso nome, sovrascrivera il comando integrato.

View File

@@ -0,0 +1,681 @@
---
title: Config
description: Usa la config JSON di OpenCode.
---
Puoi configurare OpenCode usando un file di configurazione JSON.
---
## Formato
OpenCode supporta sia **JSON** sia **JSONC** (JSON con commenti).
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
// Theme configuration
"theme": "opencode",
"model": "anthropic/claude-sonnet-4-5",
"autoupdate": true,
}
```
---
## Posizioni
Puoi mettere la configurazione in diverse posizioni e ognuna ha un ordine di precedenza diverso.
:::note
I file di configurazione vengono **uniti (merge)**, non sostituiti.
:::
I file di configurazione vengono uniti (merge), non sostituiti. Le impostazioni provenienti dalle posizioni qui sotto vengono combinate. Le configurazioni caricate dopo sovrascrivono quelle precedenti solo per le chiavi in conflitto. Le impostazioni non in conflitto vengono preservate.
Per esempio, se la tua configurazione globale imposta `theme: "opencode"` e `autoupdate: true`, e la configurazione del progetto imposta `model: "anthropic/claude-sonnet-4-5"`, la configurazione finale includera tutte e tre le impostazioni.
---
### Ordine di precedenza
Le sorgenti di configurazione vengono caricate in questo ordine (le successive sovrascrivono le precedenti):
1. **Config remota** (da `.well-known/opencode`) - default dell'organizzazione
2. **Config globale** (`~/.config/opencode/opencode.json`) - preferenze utente
3. **Config personalizzata** (variabile d'ambiente `OPENCODE_CONFIG`) - sovrascritture personalizzate
4. **Config di progetto** (`opencode.json` nel progetto) - impostazioni specifiche del progetto
5. **Directory `.opencode`** - agenti, comandi, plugin
6. **Config inline** (variabile d'ambiente `OPENCODE_CONFIG_CONTENT`) - sovrascritture a runtime
Questo significa che la configurazione di progetto puo sovrascrivere i default globali, e la configurazione globale puo sovrascrivere i default remoti dell'organizzazione.
:::note
Le directory `.opencode` e `~/.config/opencode` usano **nomi al plurale** per le sottodirectory: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` e `themes/`. I nomi al singolare (ad es. `agent/`) sono supportati per retrocompatibilita.
:::
---
### Remota
Le organizzazioni possono fornire una configurazione predefinita tramite l'endpoint `.well-known/opencode`. Viene recuperata automaticamente quando ti autentichi con un provider che lo supporta.
La configurazione remota viene caricata per prima e fa da livello base. Tutte le altre sorgenti (globale, progetto) possono sovrascrivere questi default.
Per esempio, se la tua organizzazione fornisce server MCP disabilitati per impostazione predefinita:
```json title="Remote config from .well-known/opencode"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}
```
Puoi abilitare server specifici nella tua configurazione locale:
```json title="opencode.json"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
---
### Globale
Metti la configurazione globale di OpenCode in `~/.config/opencode/opencode.json`. Usa la configurazione globale per preferenze valide per l'utente (ad es. temi, provider o keybind).
La configurazione globale sovrascrive i default remoti dell'organizzazione.
---
### Per progetto
Aggiungi `opencode.json` nella root del progetto. La configurazione di progetto ha la precedenza piu alta tra i file standard: sovrascrive sia la configurazione globale sia quella remota.
:::tip
Metti la configurazione specifica del progetto nella root del progetto.
:::
Quando OpenCode si avvia, cerca un file di configurazione nella directory corrente oppure risale fino alla directory Git piu vicina.
Questo file puo essere tranquillamente versionato in Git e usa lo stesso schema di quello globale.
---
### Percorso personalizzato
Specifica un percorso personalizzato per il file di configurazione usando la variabile d'ambiente `OPENCODE_CONFIG`.
```bash
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"
```
La configurazione personalizzata viene caricata tra quella globale e quella di progetto nell'ordine di precedenza.
---
### Directory personalizzata
Specifica una directory di configurazione personalizzata usando la variabile d'ambiente `OPENCODE_CONFIG_DIR`. Questa directory verra usata per cercare agenti, comandi, modalita e plugin proprio come la directory standard `.opencode` e dovrebbe seguire la stessa struttura.
```bash
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"
```
La directory personalizzata viene caricata dopo la configurazione globale e le directory `.opencode`, quindi **puo sovrascrivere** le loro impostazioni.
---
## Schema
Il file di configurazione ha uno schema definito in [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
Il tuo editor dovrebbe poter validare e suggerire l'autocompletamento in base allo schema.
---
### TUI
Puoi configurare impostazioni specifiche della TUI tramite l'opzione `tui`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}
}
```
Opzioni disponibili:
- `scroll_acceleration.enabled` - Abilita l'accelerazione di scorrimento in stile macOS. **Ha precedenza su `scroll_speed`.**
- `scroll_speed` - Moltiplicatore personalizzato della velocita di scorrimento (predefinito: `3`, minimo: `1`). Ignorato se `scroll_acceleration.enabled` e `true`.
- `diff_style` - Controlla la resa delle diff. `"auto"` si adatta alla larghezza del terminale, `"stacked"` mostra sempre una singola colonna.
[Scopri di piu sull'uso della TUI](/docs/tui).
---
### Server
Puoi configurare le impostazioni del server per i comandi `opencode serve` e `opencode web` tramite l'opzione `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"]
}
}
```
Opzioni disponibili:
- `port` - Porta su cui ascoltare.
- `hostname` - Nome host su cui ascoltare. Quando `mdns` e abilitato e non e impostato alcun hostname, il default e `0.0.0.0`.
- `mdns` - Abilita la scoperta del servizio mDNS. Questo permette ad altri dispositivi sulla rete di scoprire il tuo server OpenCode.
- `mdnsDomain` - Nome di dominio personalizzato per il servizio mDNS. Predefinito: `opencode.local`. Utile per eseguire piu istanze sulla stessa rete.
- `cors` - Origini aggiuntive da consentire per CORS quando usi il server HTTP da un client basato su browser. I valori devono essere origini complete (schema + host + porta opzionale), ad es. `https://app.example.com`.
[Scopri di piu sul server](/docs/server).
---
### Strumenti
Puoi gestire gli strumenti che un LLM puo usare tramite l'opzione `tools`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}
```
[Scopri di piu sugli strumenti](/docs/tools).
---
### Modelli
Puoi configurare provider e modelli da usare in OpenCode tramite le opzioni `provider`, `model` e `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"
}
```
The `small_model` option configures a separate model for lightweight tasks like title generation. By default, OpenCode tries to use a cheaper model if one is available from your provider, otherwise it falls back to your main model.
Provider options can include `timeout` and `setCacheKey`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"setCacheKey": true
}
}
}
}
```
- `timeout` - Timeout della richiesta in millisecondi (predefinito: 300000). Imposta a `false` per disabilitare.
- `setCacheKey` - Assicura che venga sempre impostata una cache key per il provider indicato.
Puoi anche configurare i [modelli locali](/docs/models#local). [Scopri di piu](/docs/models).
---
#### Opzioni specifiche del provider
Alcuni provider supportano opzioni di configurazione aggiuntive oltre alle impostazioni generiche `timeout` e `apiKey`.
##### Amazon Bedrock
Amazon Bedrock supporta una configurazione specifica per AWS:
```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` - Regione AWS per Bedrock (default: variabile d'ambiente `AWS_REGION` oppure `us-east-1`)
- `profile` - Profilo AWS nominato da `~/.aws/credentials` (default: variabile d'ambiente `AWS_PROFILE`)
- `endpoint` - URL endpoint personalizzato per gli endpoint VPC. E un alias dell'opzione generica `baseURL` usando la terminologia AWS. Se sono specificati sia `endpoint` sia `baseURL`, `endpoint` ha precedenza.
:::note
I bearer token (`AWS_BEARER_TOKEN_BEDROCK` o `/connect`) hanno precedenza sull'autenticazione basata su profilo. Vedi [ordine di precedenza dell'autenticazione](/docs/providers#authentication-precedence) per i dettagli.
:::
[Scopri di piu sulla configurazione di Amazon Bedrock](/docs/providers#amazon-bedrock).
---
### Temi
Puoi configurare il tema da usare in OpenCode tramite l'opzione `theme`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"theme": ""
}
```
[Scopri di piu](/docs/themes).
---
### Agenti
Puoi configurare agenti specializzati per task specifici tramite l'opzione `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,
},
},
},
}
```
Puoi anche definire agenti usando file markdown in `~/.config/opencode/agents/` o `.opencode/agents/`. [Scopri di piu](/docs/agents).
---
### Agente predefinito
Puoi impostare l'agente predefinito usando l'opzione `default_agent`. Questo determina quale agente viene usato quando non ne specifichi uno esplicitamente.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}
```
L'agente predefinito deve essere un agente primary (non un subagent). Puo essere un agente integrato come `"build"` o `"plan"`, oppure un [agente personalizzato](/docs/agents) che hai definito. Se l'agente specificato non esiste o e un subagent, OpenCode fara fallback su `"build"` mostrando un avviso.
Questa impostazione si applica a tutte le interfacce: TUI, CLI (`opencode run`), app desktop e GitHub Action.
---
### Condivisione
Puoi configurare la funzione di [condivisione](/docs/share) tramite l'opzione `share`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}
```
Valori supportati:
- `"manual"` - Consenti la condivisione manuale tramite comandi (predefinito)
- `"auto"` - Condividi automaticamente le nuove conversazioni
- `"disabled"` - Disabilita completamente la condivisione
Per impostazione predefinita, la condivisione e in modalita manuale e devi condividere esplicitamente le conversazioni usando il comando `/share`.
---
### Comandi
Puoi configurare comandi personalizzati per task ripetitivi tramite l'opzione `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",
},
},
}
```
Puoi anche definire comandi usando file markdown in `~/.config/opencode/commands/` o `.opencode/commands/`. [Scopri di piu](/docs/commands).
---
### Scorciatoie
Puoi personalizzare i keybind tramite l'opzione `keybinds`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {}
}
```
[Scopri di piu](/docs/keybinds).
---
### Aggiornamenti automatici
OpenCode scarichera automaticamente eventuali aggiornamenti quando si avvia. Puoi disabilitare questa funzione con l'opzione `autoupdate`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}
```
Se non vuoi aggiornamenti automatici ma vuoi essere avvisato quando e disponibile una nuova versione, imposta `autoupdate` a `"notify"`.
Nota che questo funziona solo se non e stato installato con un package manager come Homebrew.
---
### Formatter
Puoi configurare i formatter di codice tramite l'opzione `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"]
}
}
}
```
[Scopri di piu sui formatter](/docs/formatters).
---
### Permessi
Per impostazione predefinita, opencode **consente tutte le operazioni** senza richiedere un'approvazione esplicita. Puoi cambiarlo usando l'opzione `permission`.
Per esempio, per fare in modo che gli strumenti `edit` e `bash` richiedano l'approvazione dell'utente:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}
```
[Scopri di piu sui permessi](/docs/permissions).
---
### Compattazione
Puoi controllare il comportamento di compattazione del contesto tramite l'opzione `compaction`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true
}
}
```
- `auto` - Compatta automaticamente la sessione quando il contesto e pieno (predefinito: `true`).
- `prune` - Rimuove output vecchi degli strumenti per risparmiare token (predefinito: `true`).
---
### Monitoraggio file
Puoi configurare i pattern di ignoramento del file watcher tramite l'opzione `watcher`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}
```
I pattern seguono la sintassi glob. Usali per escludere directory rumorose dal monitoraggio dei file.
---
### Server MCP
Puoi configurare i server MCP che vuoi usare tramite l'opzione `mcp`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}
```
[Scopri di piu](/docs/mcp-servers).
---
### Plugin
[I plugin](/docs/plugins) estendono OpenCode con strumenti personalizzati, hook e integrazioni.
Metti i file dei plugin in `.opencode/plugins/` o `~/.config/opencode/plugins/`. Puoi anche caricare plugin da npm tramite l'opzione `plugin`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}
```
[Scopri di piu](/docs/plugins).
---
### Istruzioni
Puoi configurare le istruzioni per il modello che stai usando tramite l'opzione `instructions`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
Accetta un array di percorsi e pattern glob verso file di istruzioni. [Scopri di piu
sulle regole](/docs/rules).
---
### Provider disabilitati
Puoi disabilitare i provider caricati automaticamente tramite l'opzione `disabled_providers`. E utile quando vuoi impedire il caricamento di alcuni provider anche se le credenziali sono disponibili.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}
```
:::note
`disabled_providers` ha priorita su `enabled_providers`.
:::
L'opzione `disabled_providers` accetta un array di ID provider. Quando un provider e disabilitato:
- Non verra caricato anche se sono impostate variabili d'ambiente.
- Non verra caricato anche se le chiavi API sono configurate tramite il comando `/connect`.
- I modelli del provider non appariranno nella lista di selezione dei modelli.
---
### Provider abilitati
Puoi specificare un'allowlist di provider tramite l'opzione `enabled_providers`. Se impostata, solo i provider indicati verranno abilitati e tutti gli altri saranno ignorati.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}
```
E utile quando vuoi limitare OpenCode a usare solo alcuni provider invece di disabilitarli uno per uno.
:::note
`disabled_providers` ha priorita su `enabled_providers`.
:::
Se un provider appare sia in `enabled_providers` sia in `disabled_providers`, `disabled_providers` ha priorita per retrocompatibilita.
---
### Sperimentale
La chiave `experimental` contiene opzioni in sviluppo attivo.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}
```
:::caution
Le opzioni sperimentali non sono stabili. Possono cambiare o essere rimosse senza preavviso.
:::
---
## Variabili
Puoi usare la sostituzione di variabili nei file di configurazione per referenziare variabili d'ambiente e contenuti di file.
---
### Variabili d'ambiente
Usa `{env:VARIABLE_NAME}` per sostituire variabili d'ambiente:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "{env:OPENCODE_MODEL}",
"provider": {
"anthropic": {
"models": {},
"options": {
"apiKey": "{env:ANTHROPIC_API_KEY}"
}
}
}
}
```
Se la variabile d'ambiente non e impostata, verra sostituita con una stringa vuota.
---
### File
Usa `{file:path/to/file}` per sostituire il contenuto di un file:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}
```
I percorsi dei file possono essere:
- Relativi alla directory del file di configurazione
- Oppure percorsi assoluti che iniziano con `/` o `~`
Sono utili per:
- Tenere dati sensibili (come chiavi API) in file separati.
- Includere file di istruzioni grandi senza appesantire la configurazione.
- Condividere snippet di configurazione comuni tra piu file di configurazione.

View File

@@ -0,0 +1,170 @@
---
title: Strumenti personalizzati
description: Crea strumenti che l'LLM puo chiamare in opencode.
---
Gli strumenti personalizzati sono funzioni che crei e che l'LLM puo chiamare durante le conversazioni. Funzionano insieme agli [strumenti integrati](/docs/tools) di opencode come `read`, `write` e `bash`.
---
## Creating a tool
Gli strumenti sono definiti come file **TypeScript** o **JavaScript**. Tuttavia, la definizione dello strumento puo invocare script scritti in **qualsiasi linguaggio**: TypeScript o JavaScript vengono usati solo per la definizione in se.
---
### Location
Possono essere definiti:
- In locale, mettendoli nella directory `.opencode/tools/` del progetto.
- Oppure in globale, mettendoli in `~/.config/opencode/tools/`.
---
### Structure
Il modo piu semplice per creare strumenti e usare l'helper `tool()` che fornisce type-safety e validazione.
```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}`
},
})
```
Il **nome del file** diventa il **nome dello strumento**. L'esempio sopra crea lo strumento `database`.
---
#### Multiple tools per file
Puoi anche esportare piu strumenti da un singolo file. Ogni export diventa **uno strumento separato** con nome **`<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
},
})
```
Questo crea due strumenti: `math_add` e `math_multiply`.
---
### Arguments
Puoi usare `tool.schema`, che e semplicemente [Zod](https://zod.dev), per definire i tipi degli argomenti.
```ts "tool.schema"
args: {
query: tool.schema.string().describe("SQL query to execute")
}
```
Puoi anche importare [Zod](https://zod.dev) direttamente e restituire un oggetto semplice:
```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"
},
}
```
---
### Context
Gli strumenti ricevono un contesto sulla sessione corrente:
```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}`
},
})
```
Usa `context.directory` per la working directory della sessione.
Usa `context.worktree` per la root del worktree git.
---
## Examples
### Scrivi uno strumento in Python
Puoi scrivere gli strumenti in qualunque linguaggio. Ecco un esempio che somma due numeri usando Python.
Per prima cosa, crea lo strumento come script Python:
```python title=".opencode/tools/add.py"
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)
```
Poi crea la definizione dello strumento che lo invoca:
```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()
},
})
```
Qui usiamo l'utility [`Bun.$`](https://bun.com/docs/runtime/shell) per eseguire lo script Python.

View File

@@ -0,0 +1,76 @@
---
title: Ecosistema
description: Progetti e integrazioni costruiti con OpenCode.
---
Una raccolta di progetti della comunita costruiti su OpenCode.
:::note
Vuoi aggiungere il tuo progetto legato a OpenCode a questa lista? Apri una PR.
:::
Puoi anche dare un'occhiata a [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) e [opencode.cafe](https://opencode.cafe), una comunita che aggrega ecosistema e community.
---
## Plugins
| Nome | Descrizione |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | Esegue automaticamente sessioni OpenCode in sandbox Daytona isolate con sync git e anteprime live |
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Inietta automaticamente gli header di sessione Helicone per raggruppare le richieste |
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Inietta automaticamente tipi TypeScript/Svelte nelle letture dei file con tool di lookup |
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Usa il tuo abbonamento ChatGPT Plus/Pro invece dei crediti API |
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Usa il tuo piano Gemini esistente invece della fatturazione API |
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Usa i modelli gratuiti di Antigravity invece della fatturazione API |
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Isolamento devcontainer multi-branch con shallow clone e porte assegnate automaticamente |
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Plugin OAuth Google Antigravity, con supporto a Google Search e gestione API piu robusta |
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Ottimizza l'uso dei token eliminando output obsoleti degli strumenti |
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Aggiunge supporto websearch nativo per provider supportati con stile grounded di Google |
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permette agli agenti AI di eseguire processi in background in una PTY e inviare input interattivo |
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Istruzioni per comandi shell non interattivi: evita blocchi dovuti a operazioni dipendenti da TTY |
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Traccia l'uso di OpenCode con Wakatime |
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Ripulisce le tabelle markdown prodotte dai LLM |
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | Editing del codice 10x piu veloce con Morph Fast Apply API e marker lazy edit |
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agenti in background, tool LSP/AST/MCP predefiniti, agenti curati, compatibile con Claude Code |
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Notifiche desktop e avvisi sonori per le sessioni OpenCode |
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Notifiche desktop e avvisi sonori per eventi di permesso, completamento ed errore |
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Naming automatico delle sessioni Zellij basato sul contesto OpenCode |
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Permette agli agenti OpenCode di caricare prompt al bisogno con discovery e injection di skill |
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Memoria persistente tra sessioni usando Supermemory |
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Revisione interattiva dei piani con annotazione visiva e condivisione privata/offline |
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Estende opencode /commands in un sistema di orchestrazione con controllo di flusso granulare |
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Pianifica job ricorrenti con launchd (Mac) o systemd (Linux) usando sintassi cron |
| [micode](https://github.com/vtemian/micode) | Workflow strutturato Brainstorm → Plan → Implement con continuita di sessione |
| [octto](https://github.com/vtemian/octto) | UI browser interattiva per brainstorming AI con moduli multi-domanda |
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agenti in background stile Claude Code con delega async e persistenza del contesto |
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notifiche native del sistema per OpenCode: sai quando i task finiscono |
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Harness di orchestrazione multi-agente bundle: 16 componenti, una installazione |
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Git worktree senza attriti per OpenCode |
---
## Projects
| Nome | Descrizione |
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
| [kimaki](https://github.com/remorses/kimaki) | Bot Discord per controllare sessioni OpenCode, costruito sull'SDK |
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Plugin Neovim per prompt consapevoli dell'editor, costruito sull'API |
| [portal](https://github.com/hosenur/portal) | Web UI mobile-first per OpenCode su Tailscale/VPN |
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Template per costruire plugin OpenCode |
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim per opencode: un agente di coding AI da terminale |
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Provider Vercel AI SDK per usare OpenCode tramite @opencode-ai/sdk |
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | App Web/Desktop ed estensione VS Code per OpenCode |
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Plugin Obsidian che integra OpenCode nella UI di Obsidian |
| [OpenWork](https://github.com/different-ai/openwork) | Alternativa open source a Claude Cowork, alimentata da OpenCode |
| [ocx](https://github.com/kdcokenny/ocx) | Gestore di estensioni OpenCode con profili portabili e isolati |
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | App client Desktop, Web, Mobile e remota per OpenCode |
---
## Agents
| Nome | Descrizione |
| ----------------------------------------------------------------- | --------------------------------------------------------- |
| [Agentic](https://github.com/Cluster444/agentic) | Agenti AI modulari e comandi per uno sviluppo strutturato |
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Config, prompt, agenti e plugin per workflow migliorati |

View File

@@ -0,0 +1,165 @@
---
title: Enterprise
description: Usa OpenCode in sicurezza nella tua organizzazione.
---
import config from "../../../../config.mjs"
export const email = `mailto:${config.email}`
OpenCode Enterprise e pensato per organizzazioni che vogliono assicurarsi che codice e dati non escano mai dalla propria infrastruttura. Questo e possibile grazie a una config centralizzata che si integra con SSO e con il gateway AI interno.
:::note
OpenCode non memorizza alcun tuo codice o dato di contesto.
:::
Per iniziare con OpenCode Enterprise:
1. Fai una prova interna con il tuo team.
2. **<a href={email}>Contattaci</a>** per parlare di prezzi e opzioni di implementazione.
---
## Trial
OpenCode e open source e non memorizza alcun tuo codice o dato di contesto, quindi i tuoi sviluppatori possono semplicemente [iniziare](/docs/) e fare una prova.
---
### Data handling
**OpenCode non memorizza il tuo codice o i tuoi dati di contesto.** Tutta l'elaborazione avviene in locale o tramite chiamate API dirette al tuo provider AI.
Questo significa che, finche usi un provider di cui ti fidi o un gateway AI interno, puoi usare OpenCode in modo sicuro.
L'unica eccezione e la funzione opzionale `/share`.
---
#### Sharing conversations
Se un utente abilita la funzione `/share`, la conversazione e i dati associati vengono inviati al servizio che usiamo per ospitare queste pagine di condivisione su opencode.ai.
I dati sono serviti tramite la rete edge della nostra CDN e vengono messi in cache vicino ai tuoi utenti.
Ti consigliamo di disabilitarla durante la prova.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled"
}
```
[Learn more about sharing](/docs/share).
---
### Code ownership
**Sei proprietario di tutto il codice prodotto da OpenCode.** Non ci sono restrizioni di licenza o rivendicazioni di proprieta.
---
## Pricing
Usiamo un modello per-seat per OpenCode Enterprise. Se hai un tuo gateway LLM, non addebitiamo i token usati. Per maggiori dettagli su prezzi e opzioni di implementazione, **<a href={email}>contattaci</a>**.
---
## Deployment
Quando hai completato la prova e sei pronto a usare OpenCode nella tua organizzazione, puoi **<a href={email}>contattarci</a>** per discutere prezzi e opzioni di implementazione.
---
### Central Config
Possiamo configurare OpenCode per usare un'unica config centralizzata per tutta l'organizzazione.
Questa config centralizzata puo integrarsi col provider SSO e garantisce che tutti gli utenti accedano solo al gateway AI interno.
---
### SSO integration
Tramite la config centralizzata, OpenCode puo integrarsi col provider SSO della tua organizzazione per l'autenticazione.
Questo consente a OpenCode di ottenere credenziali per il gateway AI interno tramite il sistema di identity management esistente.
---
### Internal AI gateway
Con la config centralizzata, OpenCode puo anche essere configurato per usare solo il tuo gateway AI interno.
Puoi anche disabilitare tutti gli altri provider AI, assicurandoti che tutte le richieste passino dall'infrastruttura approvata dalla tua organizzazione.
---
### Self-hosting
Anche se consigliamo di disabilitare le pagine di condivisione per assicurarti che i dati non escano mai dall'organizzazione, possiamo anche aiutarti a ospitarle sulla tua infrastruttura.
Questa funzionalita e nella nostra roadmap. Se ti interessa, **<a href={email}>faccelo sapere</a>**.
---
## FAQ
<details>
<summary>Che cos'e OpenCode Enterprise?</summary>
OpenCode Enterprise e pensato per organizzazioni che vogliono assicurarsi che codice e dati non escano mai dalla propria infrastruttura. Questo e possibile grazie a una config centralizzata che si integra con SSO e con il gateway AI interno.
</details>
<details>
<summary>Come posso iniziare con OpenCode Enterprise?</summary>
Inizia semplicemente con una prova interna con il tuo team. Per impostazione predefinita OpenCode non memorizza il tuo codice o i dati di contesto, quindi e facile partire.
Poi **<a href={email}>contattaci</a>** per discutere prezzi e opzioni di implementazione.
</details>
<details>
<summary>Come funziona il pricing enterprise?</summary>
Offriamo pricing enterprise per-seat. Se hai un tuo gateway LLM, non addebitiamo i token usati. Per maggiori dettagli, **<a href={email}>contattaci</a>** per un preventivo su misura in base alle esigenze della tua organizzazione.
</details>
<details>
<summary>I miei dati sono al sicuro con OpenCode Enterprise?</summary>
Si. OpenCode non memorizza il tuo codice o i dati di contesto. Tutta l'elaborazione avviene in locale o tramite chiamate API dirette al tuo provider AI. Con config centralizzata e integrazione SSO, i dati restano all'interno dell'infrastruttura della tua organizzazione.
</details>
<details>
<summary>Possiamo usare un registry NPM privato?</summary>
OpenCode supporta registry npm privati tramite il supporto nativo di Bun per i file `.npmrc`. Se la tua organizzazione usa un registry privato, come JFrog Artifactory, Nexus o simili, assicurati che gli sviluppatori siano autenticati prima di eseguire OpenCode.
Per configurare l'autenticazione col registry privato:
```bash
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
```
Questo crea `~/.npmrc` con i dettagli di autenticazione. OpenCode lo rilevera automaticamente.
:::caution
Devi essere autenticato nel registry privato prima di eseguire OpenCode.
:::
In alternativa, puoi configurare manualmente un file `.npmrc`:
```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}
```
Gli sviluppatori devono essere autenticati nel registry privato prima di eseguire OpenCode per garantire che i pacchetti possano essere installati dal registry enterprise.
</details>

View File

@@ -0,0 +1,130 @@
---
title: Formattatori
description: OpenCode usa formattatori specifici per linguaggio.
---
OpenCode formatta automaticamente i file dopo che vengono scritti o modificati usando formattatori specifici per linguaggio. Questo assicura che il codice generato segua lo stile del tuo progetto.
---
## Built-in
OpenCode include diversi formattatori integrati per linguaggi e framework popolari. Qui sotto trovi la lista dei formattatori, delle estensioni supportate e dei comandi o opzioni di config richiesti.
| Formattatore | Estensioni | Requisiti |
| -------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| gofmt | .go | `gofmt` command available |
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` command available |
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://prettier.io/docs/en/index.html) | `prettier` dependency in `package.json` |
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://biomejs.dev/) | `biome.json(c)` config file |
| zig | .zig, .zon | `zig` command available |
| clang-format | .c, .cpp, .h, .hpp, .ino, and [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` config file |
| ktlint | .kt, .kts | `ktlint` command available |
| ruff | .py, .pyi | `ruff` command available with config |
| rustfmt | .rs | `rustfmt` command available |
| cargofmt | .rs | `cargo fmt` command available |
| uv | .py, .pyi | `uv` command available |
| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` command available |
| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` command available |
| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` command available |
| air | .R | `air` command available |
| dart | .dart | `dart` command available |
| ocamlformat | .ml, .mli | `ocamlformat` command available and `.ocamlformat` config file |
| terraform | .tf, .tfvars | `terraform` command available |
| gleam | .gleam | `gleam` command available |
| nixfmt | .nix | `nixfmt` command available |
| shfmt | .sh, .bash | `shfmt` command available |
| pint | .php | `laravel/pint` dependency in `composer.json` |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt` dependency in `package.json` and an [experimental env variable flag](/docs/cli/#experimental) |
| ormolu | .hs | `ormolu` command available |
Quindi, se il progetto ha `prettier` in `package.json`, OpenCode lo usera automaticamente.
---
## How it works
Quando OpenCode scrive o modifica un file:
1. Controlla l'estensione del file rispetto a tutti i formattatori abilitati.
2. Esegue il comando del formattatore appropriato sul file.
3. Applica automaticamente le modifiche di formattazione.
Questo processo avviene in background, mantenendo lo stile del codice senza passaggi manuali.
---
## Configure
Puoi personalizzare i formattatori nella sezione `formatter` della config di OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}
```
Ogni configurazione di formattatore supporta:
| Proprieta | Tipo | Descrizione |
| ------------- | -------- | --------------------------------------------------- |
| `disabled` | boolean | Impostalo a `true` per disabilitare il formattatore |
| `command` | string[] | Il comando da eseguire per la formattazione |
| `environment` | object | Variabili d'ambiente da impostare quando si esegue |
| `extensions` | string[] | Estensioni file gestite da questo formattatore |
Vediamo alcuni esempi.
---
### Disabling formatters
Per disabilitare **tutti** i formattatori globalmente, imposta `formatter` a `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}
```
Per disabilitare un formattatore **specifico**, imposta `disabled` a `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}
```
---
### Custom formatters
Puoi sovrascrivere i formattatori integrati o aggiungerne di nuovi specificando comando, variabili d'ambiente ed estensioni file:
```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"]
}
}
}
```
Il **placeholder `$FILE`** nel comando viene sostituito con il percorso del file in fase di formattazione.

View File

@@ -0,0 +1,321 @@
---
title: GitHub
description: Usa OpenCode in issue e pull request su GitHub.
---
OpenCode si integra nel tuo workflow GitHub. Menziona `/opencode` o `/oc` in un commento e OpenCode eseguira' i task dentro il runner di GitHub Actions.
---
## Funzionalita'
- **Triage delle issue**: chiedi a OpenCode di indagare su una issue e spiegartela.
- **Fix e implementazioni**: chiedi a OpenCode di risolvere una issue o implementare una feature. Lavorera' su un nuovo branch e inviera' una PR con tutte le modifiche.
- **Sicuro**: OpenCode gira all'interno dei runner GitHub.
---
## Installazione
Esegui il comando seguente in un progetto che si trova in un repo GitHub:
```bash
opencode github install
```
Questo ti guidera' nell'installazione della GitHub app, nella creazione del workflow e nella configurazione dei secret.
---
### Configurazione manuale
In alternativa, puoi configurarlo manualmente.
1. **Installa la GitHub app**
Vai su [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Assicurati che sia installata sul repository di destinazione.
2. **Aggiungi il workflow**
Aggiungi il seguente file workflow in `.github/workflows/opencode.yml` nel tuo repo. Assicurati di impostare il `model` appropriato e le API key richieste in `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. **Salva le API key nei secret**
Nelle **impostazioni** della tua organizzazione o progetto, espandi **Secrets and variables** sulla sinistra e seleziona **Actions**. Poi aggiungi le API key richieste.
---
## Configurazione
- `model`: il modello da usare con OpenCode. Usa il formato `provider/model`. E' **obbligatorio**.
- `agent`: l'agente da usare. Deve essere un agente primario. Se non trovato, usa `default_agent` dalla config o `"build"`.
- `share`: se condividere la sessione OpenCode. Di default e' **true** per repository pubblici.
- `prompt`: prompt personalizzato opzionale per sovrascrivere il comportamento di default. Usalo per personalizzare come OpenCode processa le richieste.
- `token`: token di accesso GitHub opzionale per eseguire operazioni come creare commenti, committare modifiche e aprire pull request. Di default, OpenCode usa l'installation access token della OpenCode GitHub App, quindi commit, commenti e pull request risultano provenire dalla app.
In alternativa, puoi usare il [token integrato `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) del runner GitHub Actions senza installare la OpenCode GitHub App. Assicurati solo di concedere i permessi necessari nel workflow:
```yaml
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
```
Se preferisci, puoi anche usare un [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT).
---
## Eventi supportati
OpenCode puo' essere attivato dai seguenti eventi GitHub:
| Tipo evento | Attivato da | Dettagli |
| ----------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `issue_comment` | Commento su una issue o PR | Menziona `/opencode` o `/oc` nel commento. OpenCode legge il contesto e puo' creare branch, aprire PR o rispondere. |
| `pull_request_review_comment` | Commento su specifiche righe in una PR | Menziona `/opencode` o `/oc` durante una review. OpenCode riceve path file, numeri di riga e contesto del diff. |
| `issues` | Issue aperta o modificata | Attiva automaticamente OpenCode quando le issue vengono create o modificate. Richiede l'input `prompt`. |
| `pull_request` | PR aperta o aggiornata | Attiva automaticamente OpenCode quando le PR vengono aperte, sincronizzate o riaperte. Utile per review automatiche. |
| `schedule` | Pianificazione basata su cron | Esegue OpenCode a pianificazione. Richiede l'input `prompt`. Output nei log e nelle PR (nessuna issue su cui commentare). |
| `workflow_dispatch` | Trigger manuale dalla UI GitHub | Attiva OpenCode on-demand dalla tab Actions. Richiede l'input `prompt`. Output nei log e nelle PR. |
### Esempio con schedule
Esegui OpenCode a pianificazione per eseguire task automatizzati:
```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.
```
Per gli eventi schedulati, l'input `prompt` e' **obbligatorio** dato che non c'e' un commento da cui estrarre le istruzioni. I workflow schedulati girano senza un contesto utente per i controlli di permesso, quindi il workflow deve concedere `contents: write` e `pull-requests: write` se ti aspetti che OpenCode crei branch o PR.
---
### Esempio di pull request
Review automatica delle PR quando vengono aperte o aggiornate:
```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
```
Per gli eventi `pull_request`, se non viene fornito alcun `prompt`, OpenCode fa di default la review della pull request.
---
### Esempio di triage delle issue
Triage automatico delle nuove issue. Questo esempio filtra gli account piu' vecchi di 30 giorni per ridurre lo 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.
```
Per gli eventi `issues`, l'input `prompt` e' **obbligatorio** dato che non c'e' un commento da cui estrarre le istruzioni.
---
## Prompt personalizzati
Sovrascrivi il prompt di default per personalizzare il comportamento di OpenCode nel tuo workflow.
```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
```
E' utile per imporre criteri specifici di review, standard di codice o aree di focus rilevanti per il progetto.
---
## Esempi
Ecco alcuni esempi di come puoi usare OpenCode su GitHub.
- **Spiega una issue**
Aggiungi questo commento in una issue GitHub.
```
/opencode explain this issue
```
OpenCode leggera' l'intero thread, inclusi tutti i commenti, e rispondera' con una spiegazione chiara.
- **Risolvi una issue**
In una issue GitHub, scrivi:
```
/opencode fix this
```
OpenCode creera' un nuovo branch, implementera' le modifiche e aprira' una PR con i cambiamenti.
- **Rivedi PR e fai modifiche**
Lascia il seguente commento su una PR GitHub.
```
Delete the attachment from S3 when the note is removed /oc
```
OpenCode implementera' la modifica richiesta e la committera' nella stessa PR.
- **Rivedi righe specifiche di codice**
Lascia un commento direttamente sulle righe di codice nella tab "Files" della PR. OpenCode rileva automaticamente file, numeri di riga e contesto del diff per fornire risposte precise.
```
[Comment on specific lines in Files tab]
/oc add error handling here
```
Quando commenti su righe specifiche, OpenCode riceve:
- Il file esatto in review
- Le righe di codice specifiche
- Il contesto del diff circostante
- Informazioni sul numero di riga
Questo permette richieste piu' mirate senza dover specificare manualmente path file o numeri di riga.

View File

@@ -0,0 +1,195 @@
---
title: GitLab
description: Usa OpenCode in issue e merge request su GitLab.
---
OpenCode si integra nel tuo workflow GitLab tramite la pipeline GitLab CI/CD o con GitLab Duo.
In entrambi i casi, OpenCode girera' sui tuoi runner GitLab.
---
## GitLab CI
OpenCode funziona in una pipeline GitLab standard. Puoi integrarlo nella pipeline come [componente CI](https://docs.gitlab.com/ee/ci/components/).
Qui usiamo un componente CI/CD creato dalla community per OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
---
### Funzionalita'
- **Configurazione personalizzata per job**: configura OpenCode con una directory di configurazione personalizzata, ad esempio `./config/#custom-directory`, per abilitare o disabilitare funzionalita' per ogni invocazione di OpenCode.
- **Setup minimo**: il componente CI prepara OpenCode in background; devi solo creare la configurazione OpenCode e il prompt iniziale.
- **Flessibile**: il componente CI supporta diversi input per personalizzarne il comportamento.
---
### Setup
1. Salva il JSON di autenticazione di OpenCode come variabile d'ambiente CI di tipo File in **Settings** > **CI/CD** > **Variables**. Assicurati di marcarla come "Masked and hidden".
2. Aggiungi quanto segue al tuo file `.gitlab-ci.yml`.
```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"
```
Per altri input e casi d'uso, [consulta la documentazione](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) di questo componente.
---
## GitLab Duo
OpenCode si integra nel tuo workflow GitLab.
Menziona `@opencode` in un commento e OpenCode eseguira' i task dentro la tua pipeline GitLab CI.
---
### Funzionalita'
- **Triage delle issue**: chiedi a OpenCode di indagare su una issue e spiegartela.
- **Fix e implementazioni**: chiedi a OpenCode di risolvere una issue o implementare una feature.
Creera' un nuovo branch e aprira' una merge request con le modifiche.
- **Sicuro**: OpenCode gira sui tuoi runner GitLab.
---
### Setup
OpenCode gira nella pipeline GitLab CI/CD. Ecco cosa ti serve per configurarlo:
:::tip
Dai un'occhiata alle [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) per istruzioni aggiornate.
:::
1. Configura l'ambiente GitLab
2. Configura CI/CD
3. Ottieni una API key di un provider di modelli AI
4. Crea un service account
5. Configura le variabili CI/CD
6. Crea un file di configurazione del flow, ecco un esempio:
<details>
<summary>Flow configuration</summary>
```yaml
image: node:22-slim
commands:
- echo "Installing opencode"
- npm install --global opencode-ai
- echo "Installing glab"
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
- apt-get install --yes glab
- echo "Configuring glab"
- echo $GITLAB_HOST
- echo "Creating OpenCode auth configuration"
- mkdir --parents ~/.local/share/opencode
- |
cat > ~/.local/share/opencode/auth.json << EOF
{
"anthropic": {
"type": "api",
"key": "$ANTHROPIC_API_KEY"
}
}
EOF
- echo "Configuring git"
- git config --global user.email "opencode@gitlab.com"
- git config --global user.name "OpenCode"
- echo "Testing glab"
- glab issue list
- echo "Running OpenCode"
- |
opencode run "
You are an AI assistant helping with GitLab operations.
Context: $AI_FLOW_CONTEXT
Task: $AI_FLOW_INPUT
Event: $AI_FLOW_EVENT
Please execute the requested task using the available GitLab tools.
Be thorough in your analysis and provide clear explanations.
<important>
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
</important>
"
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
- echo "Checking for git changes and pushing if any exist"
- |
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
echo "Git changes detected, adding and pushing..."
git add .
if git diff --cached --quiet; then
echo "No staged changes to commit"
else
echo "Committing changes to branch: $CI_WORKLOAD_REF"
git commit --message "Codex changes"
echo "Pushing changes up to $CI_WORKLOAD_REF"
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
echo "Changes successfully pushed"
fi
else
echo "No git changes detected, skipping push"
fi
variables:
- ANTHROPIC_API_KEY
- GITLAB_TOKEN_OPENCODE
- GITLAB_HOST
```
</details>
Puoi fare riferimento alla [documentazione GitLab CLI agents](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) per istruzioni dettagliate.
---
### Esempi
Ecco alcuni esempi di come puoi usare OpenCode in GitLab.
:::tip
Puoi configurare una frase trigger diversa da `@opencode`.
:::
- **Spiega una issue**
Aggiungi questo commento in una issue GitLab.
```
@opencode explain this issue
```
OpenCode leggera' la issue e rispondera' con una spiegazione chiara.
- **Risolvi una issue**
In una issue GitLab, scrivi:
```
@opencode fix this
```
OpenCode creera' un nuovo branch, implementera' le modifiche e aprira' una merge request con i cambiamenti.
- **Rivedi merge request**
Lascia il seguente commento su una merge request GitLab.
```
@opencode review this merge request
```
OpenCode rivedra' la merge request e fornira' feedback.

View File

@@ -0,0 +1,48 @@
---
title: IDE
description: L'estensione OpenCode per VS Code, Cursor e altri IDE
---
OpenCode si integra con VS Code, Cursor o qualunque IDE che supporti un terminale. Basta eseguire `opencode` nel terminale per iniziare.
---
## Utilizzo
- **Avvio rapido**: usa `Cmd+Esc` (Mac) o `Ctrl+Esc` (Windows/Linux) per aprire OpenCode in una vista terminale divisa, oppure per mettere a fuoco una sessione esistente se e gia in esecuzione.
- **Nuova sessione**: usa `Cmd+Shift+Esc` (Mac) o `Ctrl+Shift+Esc` (Windows/Linux) per avviare una nuova sessione di OpenCode, anche se ne esiste gia una aperta. Puoi anche cliccare il pulsante OpenCode nell'interfaccia.
- **Consapevolezza del contesto**: condividi automaticamente con OpenCode la selezione corrente o la scheda attiva.
- **Scorciatoie per riferimenti file**: usa `Cmd+Option+K` (Mac) o `Alt+Ctrl+K` (Linux/Windows) per inserire riferimenti a file. Per esempio, `@File#L37-42`.
---
## Installazione
Per installare OpenCode su VS Code e fork popolari come Cursor, Windsurf, VSCodium:
1. Apri VS Code
2. Apri il terminale integrato
3. Esegui `opencode` - l'estensione si installa automaticamente
Se invece vuoi usare il tuo IDE quando esegui `/editor` o `/export` dalla TUI, devi impostare `export EDITOR="code --wait"`. [Scopri di piu](/docs/tui/#editor-setup).
---
### Installazione manuale
Cerca **OpenCode** nel Marketplace delle estensioni e clicca **Install**.
---
### Risoluzione dei problemi
Se l'estensione non si installa automaticamente:
- Assicurati di eseguire `opencode` nel terminale integrato.
- Verifica che la CLI del tuo IDE sia installata:
- Per VS Code: comando `code`
- Per Cursor: comando `cursor`
- Per Windsurf: comando `windsurf`
- Per VSCodium: comando `codium`
- In caso contrario, esegui `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux) e cerca "Shell Command: Install 'code' command in PATH" (o l'equivalente per il tuo IDE)
- Assicurati che VS Code abbia i permessi per installare estensioni

View File

@@ -0,0 +1,343 @@
---
title: Introduzione
description: Inizia con OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
import config from "../../../../config.mjs"
export const console = config.console
[**OpenCode**](/) e un agente di programmazione AI open source. E disponibile come interfaccia da terminale, app desktop o estensione per IDE.
![OpenCode TUI con il tema opencode](../../../assets/lander/screenshot.png)
Iniziamo.
---
#### Prerequisiti
Per usare OpenCode nel terminale, ti serve:
1. Un emulatore di terminale moderno, come:
- [WezTerm](https://wezterm.org), cross-platform
- [Alacritty](https://alacritty.org), cross-platform
- [Ghostty](https://ghostty.org), Linux and macOS
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux and macOS
2. Le chiavi API dei provider LLM che vuoi usare.
---
## Installa
Il modo piu semplice per installare OpenCode e usare lo script di installazione.
```bash
curl -fsSL https://opencode.ai/install | bash
```
Puoi anche installarlo con i seguenti comandi:
- **Con 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>
- **Con Homebrew su macOS e Linux**
```bash
brew install anomalyco/tap/opencode
```
> Ti consigliamo di usare il tap di OpenCode per avere le release piu aggiornate. La formula ufficiale `brew install opencode` e mantenuta dal team Homebrew e viene aggiornata meno spesso.
- **Con Paru su Arch Linux**
```bash
paru -S opencode-bin
```
#### Windows
:::tip[Consigliato: usa WSL]
Per la migliore esperienza su Windows, ti consigliamo di usare [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Offre prestazioni migliori e piena compatibilita con le funzionalita di OpenCode.
:::
- **Con Chocolatey**
```bash
choco install opencode
```
- **Con Scoop**
```bash
scoop install opencode
```
- **Con NPM**
```bash
npm install -g opencode-ai
```
- **Con Mise**
```bash
mise use -g github:anomalyco/opencode
```
- **Con Docker**
```bash
docker run -it --rm ghcr.io/anomalyco/opencode
```
Il supporto per installare OpenCode su Windows usando Bun e attualmente in lavorazione.
Puoi anche scaricare il binario dalle [Releases](https://github.com/anomalyco/opencode/releases).
---
## Configura
Con OpenCode puoi usare qualsiasi provider LLM configurando le relative chiavi API.
Se e la prima volta che usi provider LLM, ti consigliamo [OpenCode Zen](/docs/zen).
E una lista curata di modelli testati e verificati dal team di OpenCode.
1. Esegui il comando `/connect` nella TUI, seleziona opencode e vai su [opencode.ai/auth](https://opencode.ai/auth).
```txt
/connect
```
2. Accedi, aggiungi i dettagli di fatturazione e copia la tua chiave API.
3. Incolla la tua chiave API.
```txt
┌ API key
└ enter
```
In alternativa, puoi selezionare uno degli altri provider. [Scopri di piu](/docs/providers#directory).
---
## Inizializza
Ora che hai configurato un provider, puoi spostarti in un progetto su cui vuoi lavorare.
```bash
cd /path/to/project
```
E avviare OpenCode.
```bash
opencode
```
Poi inizializza OpenCode per il progetto eseguendo il comando seguente.
```bash frame="none"
/init
```
Questo fara analizzare il progetto a OpenCode e creera un file `AGENTS.md` nella root del progetto.
:::tip
Dovresti committare il file `AGENTS.md` del progetto su Git.
:::
Questo aiuta OpenCode a capire la struttura del progetto e gli stili di codice usati.
---
## Usage
Ora sei pronto a usare OpenCode sul tuo progetto. Sentiti libero di chiedergli qualsiasi cosa!
Se e la prima volta che usi un agente di programmazione AI, ecco alcuni esempi che possono aiutare.
---
### Fai domande
Puoi chiedere a OpenCode di spiegarti la codebase.
:::tip
Usa il tasto `@` per fare una ricerca fuzzy dei file nel progetto.
:::
```txt frame="none" "@packages/functions/src/api/index.ts"
How is authentication handled in @packages/functions/src/api/index.ts
```
Questo e utile se c'e una parte della codebase su cui non hai lavorato.
---
### Aggiungi funzionalita
Puoi chiedere a OpenCode di aggiungere nuove funzionalita al progetto. Pero ti consigliamo prima di chiedergli di creare un piano.
1. **Create a plan**
OpenCode ha una _Plan mode_ che disabilita la possibilita di fare modifiche e si limita a suggerire _come_ implementera la funzionalita.
Passaci con il tasto **Tab**. Vedrai un indicatore nell'angolo in basso a destra.
```bash frame="none" title="Switch to Plan mode"
<TAB>
```
Ora descriviamo cosa vogliamo che faccia.
```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.
```
Devi dare a OpenCode abbastanza dettagli per capire cosa vuoi. Aiuta parlargli come se stessi parlando a uno sviluppatore junior del tuo team.
:::tip
Dai a OpenCode molto contesto ed esempi per aiutarlo a capire cosa vuoi.
:::
2. **Iterate on the plan**
Una volta che ti da un piano, puoi dargli feedback o aggiungere piu dettagli.
```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.
```
:::tip
Trascina e rilascia le immagini nel terminale per aggiungerle al prompt.
:::
OpenCode puo analizzare le immagini che gli dai e aggiungerle al prompt. Puoi farlo trascinando e rilasciando un'immagine nel terminale.
3. **Build the feature**
Quando ti senti a tuo agio con il piano, torna in _Build mode_ premendo di nuovo il tasto **Tab**.
```bash frame="none"
<TAB>
```
E chiedigli di fare le modifiche.
```bash frame="none"
Sounds good! Go ahead and make the changes.
```
---
### Apporta modifiche
Per modifiche piu semplici, puoi chiedere a OpenCode di implementarle direttamente senza dover prima rivedere un piano.
```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
```
Assicurati di fornire abbastanza dettagli, cosi OpenCode fa le modifiche giuste.
---
### Annulla modifiche
Mettiamo che tu chieda a OpenCode di fare alcune modifiche.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Ma ti accorgi che non e quello che volevi. Puoi **annullare** le modifiche usando il comando `/undo`.
```bash frame="none"
/undo
```
OpenCode ora ripristina le modifiche e mostra di nuovo il tuo messaggio originale.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Da qui puoi modificare il prompt e chiedere a OpenCode di riprovare.
:::tip
Puoi eseguire `/undo` piu volte per annullare piu modifiche.
:::
Oppure puoi **rifare** le modifiche usando il comando `/redo`.
```bash frame="none"
/redo
```
---
## Condividi
Le conversazioni che fai con OpenCode possono essere [condivise con il tuo team](/docs/share).
```bash frame="none"
/share
```
Questo creera un link alla conversazione corrente e lo copiera negli appunti.
:::note
Le conversazioni non vengono condivise per impostazione predefinita.
:::
Ecco un'[esempio di conversazione](https://opencode.ai/s/4XP1fce5) con OpenCode.
---
## Personalizza
E tutto qui! Ora sei un pro nell'usare OpenCode.
Per renderlo davvero tuo, ti consigliamo di [scegliere un tema](/docs/themes), [personalizzare i tasti rapidi](/docs/keybinds), [configurare i formatter](/docs/formatters), [creare comandi personalizzati](/docs/commands) o sperimentare con la [configurazione di OpenCode](/docs/config).

View File

@@ -0,0 +1,192 @@
---
title: Scorciatoie
description: Personalizza le scorciatoie da tastiera.
---
OpenCode ha una lista di scorciatoie che puoi personalizzare tramite la configurazione di OpenCode.
```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"
}
}
```
---
## Tasto leader
OpenCode usa un tasto `leader` per la maggior parte delle scorciatoie. Questo evita conflitti nel terminale.
Per impostazione predefinita, `ctrl+x` e il tasto leader e la maggior parte delle azioni richiede di premere prima il leader e poi la scorciatoia. Per esempio, per avviare una nuova sessione premi `ctrl+x` e poi `n`.
Non sei obbligato a usare un tasto leader per le scorciatoie, ma lo consigliamo.
---
## Disabilitare una scorciatoia
Puoi disabilitare una scorciatoia aggiungendo la chiave nella configurazione con valore "none".
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {
"session_compact": "none"
}
}
```
---
## Scorciatoie del prompt desktop
Il campo di input del prompt nell'app desktop di OpenCode supporta scorciatoie comuni in stile Readline/Emacs per modificare il testo. Sono integrate e al momento non configurabili tramite `opencode.json`.
| Scorciatoia | Azione |
| ----------- | ------------------------------------------ |
| `ctrl+a` | Vai all'inizio della riga corrente |
| `ctrl+e` | Vai alla fine della riga corrente |
| `ctrl+b` | Sposta il cursore indietro di un carattere |
| `ctrl+f` | Sposta il cursore avanti di un carattere |
| `alt+b` | Sposta il cursore indietro di una parola |
| `alt+f` | Sposta il cursore avanti di una parola |
| `ctrl+d` | Elimina il carattere sotto il cursore |
| `ctrl+k` | Elimina fino alla fine della riga |
| `ctrl+u` | Elimina fino all'inizio della riga |
| `ctrl+w` | Elimina la parola precedente |
| `alt+d` | Elimina la parola successiva |
| `ctrl+t` | Scambia i caratteri |
| `ctrl+g` | Annulla popover / interrompe la risposta |
---
## Shift+Enter
Alcuni terminali non inviano di default i tasti modificatori insieme a Invio. Potrebbe essere necessario configurare il terminale per inviare `Shift+Enter` come sequenza di escape.
### Windows Terminal
Apri il tuo `settings.json` in:
```
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
```
Aggiungi questo all'array `actions` a livello root:
```json
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Aggiungi questo all'array `keybindings` a livello root:
```json
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Salva il file e riavvia Windows Terminal oppure apri una nuova scheda.

View File

@@ -0,0 +1,188 @@
---
title: Server LSP
description: OpenCode si integra con i tuoi server LSP.
---
OpenCode si integra con il tuo Language Server Protocol (LSP) per aiutare l'LLM a interagire con la tua codebase. Usa le diagnostiche per fornire feedback all'LLM.
---
## Integrati
OpenCode include diversi server LSP integrati per linguaggi popolari:
| Server LSP | Estensioni | Requisiti |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| astro | .astro | Installazione automatica per progetti Astro |
| bash | .sh, .bash, .zsh, .ksh | Installazione automatica di bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installazione automatica per progetti C/C++ |
| csharp | .cs | `.NET SDK` installato |
| clojure-lsp | .clj, .cljs, .cljc, .edn | comando `clojure-lsp` disponibile |
| dart | .dart | comando `dart` disponibile |
| deno | .ts, .tsx, .js, .jsx, .mjs | comando `deno` disponibile (rileva automaticamente deno.json/deno.jsonc) |
| elixir-ls | .ex, .exs | comando `elixir` disponibile |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | dipendenza `eslint` nel progetto |
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installato |
| gleam | .gleam | comando `gleam` disponibile |
| gopls | .go | comando `go` disponibile |
| hls | .hs, .lhs | comando `haskell-language-server-wrapper` disponibile |
| jdtls | .java | `Java SDK (version 21+)` installato |
| kotlin-ls | .kt, .kts | Installazione automatica per progetti Kotlin |
| lua-ls | .lua | Installazione automatica per progetti Lua |
| nixd | .nix | comando `nixd` disponibile |
| ocaml-lsp | .ml, .mli | comando `ocamllsp` disponibile |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | dipendenza `oxlint` nel progetto |
| php intelephense | .php | Installazione automatica per progetti PHP |
| prisma | .prisma | comando `prisma` disponibile |
| pyright | .py, .pyi | dipendenza `pyright` installata |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | comandi `ruby` e `gem` disponibili |
| rust | .rs | comando `rust-analyzer` disponibile |
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installato (`xcode` su macOS) |
| svelte | .svelte | Installazione automatica per progetti Svelte |
| terraform | .tf, .tfvars | Installazione automatica dalle release GitHub |
| tinymist | .typ, .typc | Installazione automatica dalle release GitHub |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | dipendenza `typescript` nel progetto |
| vue | .vue | Installazione automatica per progetti Vue |
| yaml-ls | .yaml, .yml | Installazione automatica di Red Hat yaml-language-server |
| zls | .zig, .zon | comando `zig` disponibile |
I server LSP vengono abilitati automaticamente quando viene rilevata una delle estensioni qui sopra e i requisiti sono soddisfatti.
:::note
Puoi disabilitare il download automatico dei server LSP impostando la variabile d'ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` a `true`.
:::
---
## Come funziona
Quando opencode apre un file:
1. Controlla l'estensione del file rispetto a tutti i server LSP abilitati.
2. Avvia il server LSP appropriato se non e gia in esecuzione.
---
## Configura
Puoi personalizzare i server LSP tramite la sezione `lsp` nella configurazione di opencode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
Ogni server LSP supporta i seguenti campi:
| Proprieta | Tipo | Descrizione |
| ---------------- | -------- | ------------------------------------------------ |
| `disabled` | boolean | Imposta a `true` per disabilitare il server LSP |
| `command` | string[] | Il comando per avviare il server LSP |
| `extensions` | string[] | Estensioni file gestite da questo server LSP |
| `env` | object | Variabili d'ambiente da impostare all'avvio |
| `initialization` | object | Opzioni di inizializzazione da inviare al server |
Vediamo alcuni esempi.
---
### Variabili d'ambiente
Usa la proprieta `env` per impostare variabili d'ambiente quando avvii il server LSP:
```json title="opencode.json" {5-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}
```
---
### Opzioni di inizializzazione
Usa la proprieta `initialization` per passare opzioni di inizializzazione al server LSP. Sono impostazioni specifiche del server inviate durante la richiesta LSP `initialize`:
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::note
Le opzioni di inizializzazione variano da server a server. Consulta la documentazione del tuo server LSP per le opzioni disponibili.
:::
---
### Disabilitare i server LSP
Per disabilitare **tutti** i server LSP globalmente, imposta `lsp` a `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
Per disabilitare un server LSP **specifico**, imposta `disabled` a `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
### Server LSP personalizzati
Puoi aggiungere server LSP personalizzati specificando il comando e le estensioni file:
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## Informazioni aggiuntive
### PHP Intelephense
PHP Intelephense offre funzionalita premium tramite una chiave di licenza. Puoi fornire la chiave inserendo (solo) la chiave in un file di testo in:
- Su macOS/Linux: `$HOME/intelephense/licence.txt`
- Su Windows: `%USERPROFILE%/intelephense/licence.txt`
Il file deve contenere solo la chiave di licenza, senza contenuti aggiuntivi.

View File

@@ -0,0 +1,511 @@
---
title: Server MCP
description: Aggiungi strumenti MCP locali e remoti.
---
Puoi aggiungere strumenti esterni a OpenCode usando il _Model Context Protocol_, o MCP. OpenCode supporta sia server locali sia remoti.
Una volta aggiunti, gli strumenti MCP sono automaticamente disponibili all'LLM insieme agli strumenti integrati.
---
#### Avvertenze
Quando usi un server MCP, aggiunge contenuto al contesto. Questo puo' crescere rapidamente se hai molti strumenti. Per questo consigliamo di fare attenzione a quali server MCP abiliti.
:::tip
I server MCP aumentano il contesto, quindi e' meglio essere prudenti su quali abilitare.
:::
Alcuni server MCP, come il server MCP di GitHub, tendono ad aggiungere molti token e possono facilmente superare il limite di contesto.
---
## Abilita
Puoi definire server MCP nella tua [OpenCode Config](https://opencode.ai/docs/config/) sotto `mcp`. Aggiungi ogni MCP con un nome univoco. Puoi riferirti a quell'MCP per nome quando fai prompt all'LLM.
```jsonc title="opencode.jsonc" {6}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"name-of-mcp-server": {
// ...
"enabled": true,
},
"name-of-other-mcp-server": {
// ...
},
},
}
```
Puoi anche disabilitare un server impostando `enabled` a `false`. E' utile se vuoi disabilitare temporaneamente un server senza rimuoverlo dalla configurazione.
---
### Sovrascrivere i default remoti
Le organizzazioni possono fornire server MCP predefiniti tramite l'endpoint `.well-known/opencode`. Questi server possono essere disabilitati di default, lasciando agli utenti la possibilita' di fare opt-in su quelli necessari.
Per abilitare un server specifico dalla configurazione remota dell'organizzazione, aggiungilo alla configurazione locale con `enabled: true`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
I valori della configurazione locale sovrascrivono i default remoti. Vedi [config precedence](/docs/config#precedence-order) per maggiori dettagli.
---
## Locali
Aggiungi server MCP locali impostando `type` a `"local"` dentro l'oggetto `mcp`.
```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",
},
},
},
}
```
Il comando e' come viene avviato il server MCP locale. Puoi anche passare un elenco di variabili d'ambiente.
Per esempio, ecco come aggiungere il server MCP di test [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything).
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
},
},
}
```
E per usarlo posso aggiungere `use the mcp_everything tool` ai miei prompt.
```txt "mcp_everything"
use the mcp_everything tool to add the number 3 and 4
```
---
#### Opzioni
Ecco tutte le opzioni per configurare un server MCP locale.
| Opzione | Tipo | Richiesto | Descrizione |
| ------------- | ------- | --------- | ------------------------------------------------------------------------------------ |
| `type` | String | Y | Tipo di connessione del server MCP, deve essere `"local"`. |
| `command` | Array | Y | Comando e argomenti per eseguire il server MCP. |
| `environment` | Object | | Variabili d'ambiente da impostare quando si esegue il server. |
| `enabled` | Boolean | | Abilita o disabilita il server MCP all'avvio. |
| `timeout` | Number | | Timeout in ms per recuperare gli strumenti dal server MCP. Default 5000 (5 secondi). |
---
## Remoti
Aggiungi server MCP remoti impostando `type` a `"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` e' l'URL del server MCP remoto e con l'opzione `headers` puoi passare un elenco di header.
---
#### Opzioni
| Opzione | Tipo | Richiesto | Descrizione |
| --------- | ------- | --------- | ------------------------------------------------------------------------------------ |
| `type` | String | Y | Tipo di connessione del server MCP, deve essere `"remote"`. |
| `url` | String | Y | URL del server MCP remoto. |
| `enabled` | Boolean | | Abilita o disabilita il server MCP all'avvio. |
| `headers` | Object | | Header da inviare con la richiesta. |
| `oauth` | Object | | Configurazione autenticazione OAuth. Vedi sezione [OAuth](#oauth) sotto. |
| `timeout` | Number | | Timeout in ms per recuperare gli strumenti dal server MCP. Default 5000 (5 secondi). |
---
## OAuth
OpenCode gestisce automaticamente l'autenticazione OAuth per i server MCP remoti. Quando un server richiede autenticazione, OpenCode:
1. Rileva la risposta 401 e avvia il flusso OAuth
2. Usa **Dynamic Client Registration (RFC 7591)** se supportato dal server
3. Memorizza i token in modo sicuro per richieste future
---
### Automatico
Per la maggior parte dei server MCP con OAuth, non serve alcuna configurazione speciale. Basta configurare il server remoto:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}
```
Se il server richiede autenticazione, OpenCode ti chiedera' di autenticarti la prima volta che provi a usarlo. In caso contrario, puoi [attivare manualmente il flusso](#authenticating) con `opencode mcp auth <server-name>`.
---
### Pre-registrato
Se hai credenziali client dal provider del server MCP, puoi configurarle:
```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"
}
}
}
}
```
---
### Autenticazione
Puoi avviare manualmente l'autenticazione o gestire le credenziali.
Autentica con un server MCP specifico:
```bash
opencode mcp auth my-oauth-server
```
Elenca tutti i server MCP e il loro stato di autenticazione:
```bash
opencode mcp list
```
Rimuovi credenziali memorizzate:
```bash
opencode mcp logout my-oauth-server
```
Il comando `mcp auth` aprira' il browser per l'autorizzazione. Dopo l'autorizzazione, OpenCode memorizzera' i token in modo sicuro in `~/.local/share/opencode/mcp-auth.json`.
---
#### Disabilitare OAuth
Se vuoi disabilitare l'OAuth automatico per un server (ad esempio per server che usano API key), imposta `oauth` a `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}"
}
}
}
}
```
---
#### Opzioni OAuth
| Opzione | Tipo | Descrizione |
| -------------- | --------------- | --------------------------------------------------------------------------- |
| `oauth` | Object \| false | Oggetto config OAuth, o `false` per disabilitare l'auto-detection di OAuth. |
| `clientId` | String | OAuth client ID. Se non fornito, si prova la dynamic client registration. |
| `clientSecret` | String | OAuth client secret, se richiesto dal server di autorizzazione. |
| `scope` | String | Scope OAuth da richiedere durante l'autorizzazione. |
#### Debug
Se un server MCP remoto non riesce ad autenticarsi, puoi diagnosticare i problemi con:
```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
```
Il comando `mcp debug` mostra lo stato di autenticazione corrente, testa la connettivita' HTTP e prova il flusso di discovery OAuth.
---
## Gestione
I tuoi MCP sono disponibili come strumenti in OpenCode insieme agli strumenti integrati. Quindi puoi gestirli tramite la configurazione OpenCode come qualunque altro strumento.
---
### Globale
Questo significa che puoi abilitarli o disabilitarli globalmente.
```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
}
}
```
Possiamo anche usare un pattern glob per disabilitare tutti gli MCP corrispondenti.
```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
}
}
```
Qui stiamo usando il pattern glob `my-mcp*` per disabilitare tutti gli MCP.
---
### Per agente
Se hai molti server MCP, potresti volerli abilitare solo per agente e disabilitarli globalmente. Per farlo:
1. Disabilitalo globalmente come strumento.
2. Nella tua [config dell'agente](/docs/agents#tools), abilita il server MCP come strumento.
```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
}
}
}
}
```
---
#### Pattern glob
Il pattern glob usa semplici regole di globbing:
- `*` corrisponde a zero o piu' caratteri qualsiasi (ad esempio `"my-mcp*"` corrisponde a `my-mcp_search`, `my-mcp_list`, ecc.)
- `?` corrisponde esattamente a un carattere
- Tutti gli altri caratteri corrispondono letteralmente
:::note
Gli strumenti del server MCP vengono registrati con il nome del server come prefisso, quindi per disabilitare tutti gli strumenti di un server e' sufficiente usare:
```
"mymcpservername_*": false
```
:::
---
## Esempi
Qui sotto trovi esempi di alcuni server MCP comuni. Puoi inviare una PR se vuoi documentare altri server.
---
### Sentry
Aggiungi il [server MCP di Sentry](https://mcp.sentry.dev) per interagire con i tuoi progetti e le issue di Sentry.
```json title="opencode.json" {4-8}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
```
Dopo aver aggiunto la configurazione, autentica con Sentry:
```bash
opencode mcp auth sentry
```
Questo aprira' una finestra del browser per completare il flusso OAuth e collegare OpenCode al tuo account Sentry.
Una volta autenticato, puoi usare gli strumenti Sentry nei tuoi prompt per interrogare issue, progetti e dati sugli errori.
```txt "use sentry"
Show me the latest unresolved issues in my project. use sentry
```
---
### Context7
Aggiungi il [server MCP Context7](https://github.com/upstash/context7) per cercare nella documentazione.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
```
Se ti sei registrato per un account gratuito, puoi usare la tua API key e ottenere rate limit piu' alti.
```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}"
}
}
}
}
```
Qui assumiamo che tu abbia impostato la variabile d'ambiente `CONTEXT7_API_KEY`.
Aggiungi `use context7` ai tuoi prompt per usare il server MCP Context7.
```txt "use context7"
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
```
In alternativa, puoi aggiungere qualcosa del genere al tuo [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
When you need to search docs, use `context7` tools.
```
---
### Grep by Vercel
Aggiungi il server MCP [Grep by Vercel](https://grep.app) per cercare snippet di codice su GitHub.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
```
Dato che abbiamo chiamato il nostro server MCP `gh_grep`, puoi aggiungere `use the gh_grep tool` ai tuoi prompt per fare in modo che l'agente lo usi.
```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
```
In alternativa, puoi aggiungere qualcosa del genere al tuo [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,222 @@
---
title: Modelli
description: Configurare un provider LLM e un modello.
---
OpenCode usa [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) per supportare **75+ provider LLM** e supporta anche l'esecuzione di modelli locali.
---
## Providers
I provider piu popolari sono precaricati per impostazione predefinita. Se hai aggiunto le credenziali di un provider tramite il comando `/connect`, saranno disponibili quando avvii OpenCode.
[Scopri di piu](/docs/providers) sui provider.
---
## Seleziona un modello
Dopo aver configurato il provider, puoi selezionare il modello che vuoi digitando:
```bash frame="none"
/models
```
---
## Modelli consigliati
Esistono moltissimi modelli, e ne escono di nuovi ogni settimana.
:::tip
Valuta di usare uno dei modelli che consigliamo.
:::
Tuttavia, solo alcuni sono davvero bravi sia a generare codice sia a chiamare strumenti.
Ecco alcuni modelli che funzionano bene con OpenCode, in nessun ordine particolare. (Non e una lista esaustiva e potrebbe non essere aggiornata):
- GPT 5.2
- GPT 5.1 Codex
- Claude Opus 4.5
- Claude Sonnet 4.5
- Minimax M2.1
- Gemini 3 Pro
---
## Imposta un predefinito
Per impostarne uno come modello predefinito, puoi impostare la chiave `model` nella config di OpenCode.
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"model": "lmstudio/google/gemma-3n-e4b"
}
```
Qui l'ID completo e `provider_id/model_id`. Per esempio, se usi [OpenCode Zen](/docs/zen), useresti `opencode/gpt-5.1-codex` per GPT 5.1 Codex.
Se hai configurato un [provider personalizzato](/docs/providers#custom), `provider_id` e la chiave nella sezione `provider` della config e `model_id` e la chiave in `provider.models`.
---
## Configure models
Puoi configurare globalmente le opzioni di un modello tramite la config.
```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,
},
},
},
},
},
},
}
```
Qui stiamo configurando impostazioni globali per due modelli integrati: `gpt-5` quando viene usato tramite il provider `openai` e `claude-sonnet-4-20250514` quando viene usato tramite il provider `anthropic`.
I nomi di provider e modelli integrati si trovano su [Models.dev](https://models.dev).
Puoi anche configurare queste opzioni per gli agenti che usi. La config dell'agente sovrascrive le opzioni globali definite qui. [Scopri di piu](/docs/agents/#additional).
Puoi anche definire varianti personalizzate che estendono quelle integrate. Le varianti ti permettono di configurare impostazioni diverse per lo stesso modello senza creare voci duplicate:
```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",
},
},
},
},
},
},
}
```
---
## Variants
Molti modelli supportano piu varianti con configurazioni diverse. OpenCode include varianti predefinite integrate per i provider piu comuni.
### Built-in variants
OpenCode include varianti predefinite per molti provider:
**Anthropic**:
- `high` - High thinking budget (default)
- `max` - Maximum thinking budget
**OpenAI**:
Varies by model but roughly:
- `none` - No reasoning
- `minimal` - Minimal reasoning effort
- `low` - Low reasoning effort
- `medium` - Medium reasoning effort
- `high` - High reasoning effort
- `xhigh` - Extra high reasoning effort
**Google**:
- `low` - Lower effort/token budget
- `high` - Higher effort/token budget
:::tip
Questa lista non e completa. Anche molti altri provider hanno default integrati.
:::
### Custom variants
Puoi sovrascrivere varianti esistenti o aggiungerne di tue:
```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,
},
},
},
},
},
},
}
```
### Cycle variants
Usa il keybind `variant_cycle` per passare rapidamente tra le varianti. [Scopri di piu](/docs/keybinds).
---
## Loading models
Quando OpenCode si avvia, controlla i modelli in questo ordine di priorita:
1. Il flag da riga di comando `--model` o `-m`. Il formato e lo stesso della config: `provider_id/model_id`.
2. La lista dei modelli nella config di OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-20250514"
}
```
Qui il formato e `provider/model`.
3. L'ultimo modello usato.
4. Il primo modello in base a una priorita interna.

View File

@@ -0,0 +1,330 @@
---
title: Modalita
description: Modalita diverse per casi d'uso diversi.
---
:::caution
Le modalita ora si configurano tramite l'opzione `agent` nella configurazione di opencode. L'opzione
`mode` e ora deprecata. [Scopri di piu](/docs/agents).
:::
Le modalita in opencode ti permettono di personalizzare comportamento, strumenti e prompt per casi d'uso diversi.
Include due modalita integrate: **build** e **plan**. Puoi personalizzarle oppure configurarne di tue tramite la configurazione di opencode.
Puoi passare da una modalita all'altra durante una sessione oppure configurarle nel file di configurazione.
---
## Integrate
opencode include due modalita integrate.
---
### Build
Build e la modalita **predefinita** con tutti gli strumenti abilitati. E la modalita standard per il lavoro di sviluppo quando ti serve accesso completo alle operazioni sui file e ai comandi di sistema.
---
### Plan
Una modalita limitata pensata per pianificazione e analisi. In modalita plan, i seguenti strumenti sono disabilitati per impostazione predefinita:
- `write` - Non puo creare nuovi file
- `edit` - Non puo modificare file esistenti, tranne i file in `.opencode/plans/*.md` per dettagliare il piano
- `patch` - Non puo applicare patch
- `bash` - Non puo eseguire comandi shell
Questa modalita e utile quando vuoi che l'AI analizzi il codice, suggerisca modifiche o crei piani senza apportare modifiche effettive alla codebase.
---
## Cambiare modalita
Puoi cambiare modalita durante una sessione usando il tasto _Tab_. In alternativa, puoi usare il keybind `switch_mode` che hai configurato.
Vedi anche: [Formatter](/docs/formatters) per informazioni sulla configurazione della formattazione del codice.
---
## Configura
Puoi personalizzare le modalita integrate o crearne di tue tramite configurazione. Le modalita si possono configurare in due modi:
### Configurazione JSON
Configura le modalita nel file di configurazione `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mode": {
"build": {
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
}
}
}
```
### Configurazione Markdown
Puoi anche definire modalita usando file markdown. Mettili in:
- Globale: `~/.config/opencode/modes/`
- Progetto: `.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.
```
Il nome del file markdown diventa il nome della modalita (ad es. `review.md` crea una modalita `review`).
Vediamo queste opzioni di configurazione nel dettaglio.
---
### Modello
Usa la configurazione `model` per sovrascrivere il modello predefinito per questa modalita. E utile per usare modelli diversi ottimizzati per task diversi: per esempio, un modello piu veloce per la pianificazione e uno piu capace per l'implementazione.
```json title="opencode.json"
{
"mode": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
---
### Temperatura
Controlla casualita e creativita delle risposte dell'AI con la configurazione `temperature`. Valori piu bassi rendono le risposte piu focalizzate e deterministiche, mentre valori piu alti aumentano creativita e variabilita.
```json title="opencode.json"
{
"mode": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
I valori di temperatura di solito vanno da 0.0 a 1.0:
- **0.0-0.2**: risposte molto focalizzate e deterministiche, ideali per analisi del codice e pianificazione
- **0.3-0.5**: risposte bilanciate con un po' di creativita, buone per task di sviluppo generici
- **0.6-1.0**: risposte piu creative e variabili, utili per brainstorming ed esplorazione
```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}"
}
}
}
```
Se non viene specificata alcuna temperatura, opencode usa i default specifici del modello (tipicamente 0 per la maggior parte dei modelli, 0.55 per i modelli Qwen).
---
### Prompt
Specifica un file di prompt di sistema personalizzato per questa modalita con la configurazione `prompt`. Il file dovrebbe contenere istruzioni specifiche per lo scopo della modalita.
```json title="opencode.json"
{
"mode": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Questo percorso e relativo a dove si trova il file di configurazione. Quindi funziona
sia per la configurazione globale di opencode sia per quella specifica del progetto.
---
### Strumenti
Controlla quali strumenti sono disponibili in questa modalita con la configurazione `tools`. Puoi abilitare o disabilitare strumenti specifici impostandoli a `true` o `false`.
```json
{
"mode": {
"readonly": {
"tools": {
"write": false,
"edit": false,
"bash": false,
"read": true,
"grep": true,
"glob": true
}
}
}
}
```
Se non specifichi gli strumenti, tutti gli strumenti sono abilitati per impostazione predefinita.
---
#### Strumenti disponibili
Ecco tutti gli strumenti che possono essere controllati tramite la configurazione della modalita.
| Strumento | Descrizione |
| ----------- | --------------------------------- |
| `bash` | Esegue comandi shell |
| `edit` | Modifica file esistenti |
| `write` | Crea nuovi file |
| `read` | Legge contenuti dei file |
| `grep` | Cerca nei contenuti dei file |
| `glob` | Trova file per pattern |
| `list` | Elenca contenuti di una directory |
| `patch` | Applica patch ai file |
| `todowrite` | Gestisce liste todo |
| `todoread` | Legge liste todo |
| `webfetch` | Recupera contenuti web |
---
## Modalita personalizzate
Puoi creare modalita personalizzate aggiungendole alla configurazione. Ecco esempi con entrambi gli approcci:
### Usando la configurazione JSON
```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
}
}
}
}
```
### Usando file markdown
Crea file di modalita in `.opencode/modes/` per modalita specifiche del progetto oppure in `~/.config/opencode/modes/` per modalita globali:
```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
```
---
### Casi d'uso
Ecco alcuni casi d'uso comuni per le diverse modalita.
- **Modalita Build**: sviluppo completo con tutti gli strumenti abilitati
- **Modalita Plan**: analisi e pianificazione senza apportare modifiche
- **Modalita Review**: code review con accesso in sola lettura piu strumenti di documentazione
- **Modalita Debug**: focalizzata sull'investigazione con strumenti bash e read abilitati
- **Modalita Docs**: scrittura di documentazione con operazioni sui file ma senza comandi di sistema
Potresti anche trovare che modelli diversi funzionano meglio per casi d'uso diversi.

View File

@@ -0,0 +1,57 @@
---
title: Rete
description: Configura proxy e certificati personalizzati.
---
OpenCode supporta le variabili d'ambiente standard per i proxy e certificati personalizzati per ambienti di rete enterprise.
---
## Proxy
OpenCode rispetta le variabili d'ambiente standard dei proxy.
```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
```
:::caution
La TUI comunica con un server HTTP locale. Devi bypassare il proxy per questa connessione per evitare loop di instradamento.
:::
Puoi configurare porta e hostname del server usando i [flag della CLI](/docs/cli#run).
---
### Autenticazione
Se il proxy richiede autenticazione basic, includi le credenziali nell'URL.
```bash
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
```
:::caution
Evita di hardcodare le password. Usa variabili d'ambiente o un archivio sicuro per le credenziali.
:::
Per proxy che richiedono autenticazioni avanzate come NTLM o Kerberos, valuta l'uso di un LLM Gateway che supporti il tuo metodo di autenticazione.
---
## Certificati personalizzati
Se la tua organizzazione usa CA personalizzate per connessioni HTTPS, configura OpenCode in modo che si fidi di esse.
```bash
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
```
Questo funziona sia per connessioni tramite proxy sia per l'accesso diretto alle API.

View File

@@ -0,0 +1,237 @@
---
title: Permessi
description: Controlla quali azioni richiedono approvazione prima di essere eseguite.
---
OpenCode usa la configurazione `permission` per decidere se una determinata azione deve essere eseguita automaticamente, se deve chiederti conferma o se deve essere bloccata.
A partire da `v1.1.1`, la vecchia configurazione booleana `tools` e' deprecata ed e' stata incorporata in `permission`. La vecchia configurazione `tools` e' ancora supportata per retrocompatibilita'.
---
## Azioni
Ogni regola di permesso si risolve in uno tra:
- `"allow"` — esegui senza approvazione
- `"ask"` — chiedi approvazione
- `"deny"` — blocca l'azione
---
## Configurazione
Puoi impostare i permessi globalmente (con `*`) e sovrascrivere quelli di strumenti specifici.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Puoi anche impostare tutti i permessi in una sola volta:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Regole granulari (sintassi a oggetto)
Per la maggior parte dei permessi, puoi usare un oggetto per applicare azioni diverse in base all'input dello strumento.
```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"
}
}
}
```
Le regole vengono valutate per corrispondenza di pattern e **vince l'ultima regola che corrisponde**. Un pattern comune e' mettere prima la regola jolly `"*"` e poi regole piu' specifiche.
### Wildcard
I pattern dei permessi usano un semplice matching con wildcard:
- `*` corrisponde a zero o piu' caratteri qualsiasi
- `?` corrisponde esattamente a un carattere
- Tutti gli altri caratteri corrispondono letteralmente
### Espansione della home directory
Puoi usare `~` o `$HOME` all'inizio di un pattern per riferirti alla tua home directory. Questo e' particolarmente utile per le regole [`external_directory`](#external-directories).
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Directory esterne
Usa `external_directory` per consentire chiamate a strumenti che toccano percorsi al di fuori della directory di lavoro da cui e' stato avviato OpenCode. Si applica a qualsiasi strumento che accetta un path come input (ad esempio `read`, `edit`, `list`, `glob`, `grep` e molti comandi `bash`).
L'espansione della home (come `~/...`) influisce solo su come viene scritto un pattern. Non rende un percorso esterno parte della workspace corrente, quindi i path fuori dalla directory di lavoro devono comunque essere consentiti tramite `external_directory`.
Per esempio, questo consente l'accesso a tutto sotto `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Qualsiasi directory consentita qui eredita gli stessi default della workspace corrente. Dato che [`read` di default e' `allow`](#defaults), anche le letture sono consentite per le voci sotto `external_directory` a meno di sovrascritture. Aggiungi regole esplicite quando uno strumento deve essere limitato su questi path, ad esempio bloccando le modifiche ma lasciando consentite le letture:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
Mantieni l'elenco limitato a percorsi fidati e aggiungi regole extra di allow/deny quando serve per altri strumenti (ad esempio `bash`).
---
## Permessi disponibili
I permessi di OpenCode sono indicizzati per nome dello strumento, piu' un paio di guardrail di sicurezza:
- `read` — lettura di un file (corrisponde al percorso del file)
- `edit` — tutte le modifiche ai file (include `edit`, `write`, `patch`, `multiedit`)
- `glob` — ricerca file tramite glob (corrisponde al pattern glob)
- `grep` — ricerca nel contenuto (corrisponde al pattern regex)
- `list` — elenco file in una directory (corrisponde al path della directory)
- `bash` — esecuzione comandi di shell (corrisponde a comandi parsati come `git status --porcelain`)
- `task` — avvio subagenti (corrisponde al tipo di subagente)
- `skill` — caricamento di una skill (corrisponde al nome della skill)
- `lsp` — esecuzione query LSP (attualmente non granulare)
- `todoread`, `todowrite` — lettura/aggiornamento della todo list
- `webfetch` — fetch di un URL (corrisponde all'URL)
- `websearch`, `codesearch` — ricerca web/codice (corrisponde alla query)
- `external_directory` — si attiva quando uno strumento tocca percorsi fuori dalla working directory del progetto
- `doom_loop` — si attiva quando la stessa chiamata a uno strumento si ripete 3 volte con input identico
---
## Default
Se non specifichi nulla, OpenCode parte da default permissivi:
- La maggior parte dei permessi di default e' `"allow"`.
- `doom_loop` ed `external_directory` di default sono `"ask"`.
- `read` e' `"allow"`, ma i file `.env` sono negati di default:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Cosa fa "Ask"
Quando OpenCode chiede approvazione, la UI offre tre esiti:
- `once` — approva solo questa richiesta
- `always` — approva richieste future che corrispondono ai pattern suggeriti (per il resto della sessione corrente di OpenCode)
- `reject` — nega la richiesta
L'insieme di pattern che `always` approverebbe e' fornito dallo strumento (ad esempio, le approvazioni per bash in genere mettono in whitelist un prefisso di comando sicuro come `git status*`).
---
## Agenti
Puoi sovrascrivere i permessi per agente. I permessi dell'agente vengono uniti alla configurazione globale e le regole dell'agente hanno precedenza. [Scopri di piu'](/docs/agents#permissions) sui permessi degli agenti.
:::note
Fai riferimento alla sezione [Regole granulari (sintassi a oggetto)](#granular-rules-object-syntax) per esempi piu' dettagliati di pattern matching.
:::
```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"
}
}
}
}
}
```
Puoi anche configurare i permessi dell'agente in 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
Usa il pattern matching per comandi con argomenti. `"grep *"` consente `grep pattern file.txt`, mentre `"grep"` da solo lo bloccherebbe. Comandi come `git status` funzionano per il comportamento di default ma richiedono un permesso esplicito (come `"git status *"`) quando vengono passati argomenti.
:::

View File

@@ -0,0 +1,384 @@
---
title: Plugin
description: Scrivi plugin per estendere OpenCode.
---
I plugin ti permettono di estendere OpenCode agganciandoti a vari eventi e personalizzando il comportamento. Puoi creare plugin per aggiungere nuove funzionalita', integrare servizi esterni o modificare il comportamento predefinito di OpenCode.
Per esempi, dai un'occhiata ai [plugin](/docs/ecosystem#plugins) creati dalla community.
---
## Usare un plugin
Ci sono due modi per caricare i plugin.
---
### Da file locali
Metti file JavaScript o TypeScript nella directory dei plugin.
- `.opencode/plugins/` - plugin a livello progetto
- `~/.config/opencode/plugins/` - plugin globali
I file in queste directory vengono caricati automaticamente all'avvio.
---
### Da npm
Specifica i pacchetti npm nel tuo file di configurazione.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
}
```
Sono supportati sia pacchetti npm normali sia scoped.
Sfoglia i plugin disponibili nell'[ecosistema](/docs/ecosystem#plugins).
---
### Come vengono installati i plugin
I **plugin npm** vengono installati automaticamente usando Bun all'avvio. I pacchetti e le loro dipendenze vengono cache-ati in `~/.cache/opencode/node_modules/`.
I **plugin locali** vengono caricati direttamente dalla directory dei plugin. Per usare pacchetti esterni, devi creare un `package.json` nella directory di configurazione (vedi [Dipendenze](#dependencies)) oppure pubblicare il plugin su npm e [aggiungerlo alla configurazione](/docs/config#plugins).
---
### Ordine di caricamento
I plugin vengono caricati da tutte le sorgenti e tutti gli hook vengono eseguiti in sequenza. L'ordine di caricamento e':
1. Config globale (`~/.config/opencode/opencode.json`)
2. Config di progetto (`opencode.json`)
3. Directory plugin globale (`~/.config/opencode/plugins/`)
4. Directory plugin di progetto (`.opencode/plugins/`)
I pacchetti npm duplicati con lo stesso nome e versione vengono caricati una sola volta. Tuttavia, un plugin locale e un plugin npm con nomi simili vengono entrambi caricati separatamente.
---
## Creare un plugin
Un plugin e' un **modulo JavaScript/TypeScript** che esporta una o piu' funzioni di plugin. Ogni funzione riceve un oggetto di contesto e restituisce un oggetto di hook.
---
### Dipendenze
I plugin locali e gli strumenti personalizzati possono usare pacchetti npm esterni. Aggiungi un `package.json` alla tua directory di configurazione con le dipendenze di cui hai bisogno.
```json title=".opencode/package.json"
{
"dependencies": {
"shescape": "^2.1.0"
}
}
```
OpenCode esegue `bun install` all'avvio per installarle. I tuoi plugin e strumenti potranno poi importarle.
```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)
}
},
}
}
```
---
### Struttura base
```js title=".opencode/plugins/example.js"
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
console.log("Plugin initialized!")
return {
// Hook implementations go here
}
}
```
La funzione del plugin riceve:
- `project`: informazioni sul progetto corrente.
- `directory`: la working directory corrente.
- `worktree`: il path del worktree git.
- `client`: un client SDK di opencode per interagire con l'AI.
- `$`: la [shell API](https://bun.com/docs/runtime/shell) di Bun per eseguire comandi.
---
### Supporto TypeScript
Per i plugin TypeScript, puoi importare i tipi dal pacchetto plugin:
```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
}
}
```
---
### Eventi
I plugin possono sottoscrivere eventi come mostrato sotto nella sezione Esempi. Ecco l'elenco dei diversi eventi disponibili.
#### Eventi dei comandi
- `command.executed`
#### Eventi dei file
- `file.edited`
- `file.watcher.updated`
#### Eventi di installazione
- `installation.updated`
#### Eventi LSP
- `lsp.client.diagnostics`
- `lsp.updated`
#### Eventi dei messaggi
- `message.part.removed`
- `message.part.updated`
- `message.removed`
- `message.updated`
#### Eventi dei permessi
- `permission.asked`
- `permission.replied`
#### Eventi del server
- `server.connected`
#### Eventi delle sessioni
- `session.created`
- `session.compacted`
- `session.deleted`
- `session.diff`
- `session.error`
- `session.idle`
- `session.status`
- `session.updated`
#### Eventi della todo
- `todo.updated`
#### Eventi della shell
- `shell.env`
#### Eventi degli strumenti
- `tool.execute.after`
- `tool.execute.before`
#### Eventi TUI
- `tui.prompt.append`
- `tui.command.execute`
- `tui.toast.show`
---
## Esempi
Ecco alcuni esempi di plugin che puoi usare per estendere opencode.
---
### Invia notifiche
Invia notifiche quando avvengono certi eventi:
```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"'`
}
},
}
}
```
Stiamo usando `osascript` per eseguire AppleScript su macOS. Qui lo usiamo per inviare notifiche.
:::note
Se usi l'app desktop di OpenCode, puo' inviare automaticamente notifiche di sistema quando una risposta e' pronta o quando una sessione va in errore.
:::
---
### Protezione .env
Impedisci a opencode di leggere i file `.env`:
```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")
}
},
}
}
```
---
### Inietta variabili d'ambiente
Inietta variabili d'ambiente in tutte le esecuzioni di shell (strumenti AI e terminali utente):
```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
},
}
}
```
---
### Strumenti personalizzati
I plugin possono anche aggiungere strumenti personalizzati a 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})`
},
}),
},
}
}
```
L'helper `tool` crea uno strumento personalizzato che opencode puo' chiamare. Accetta una funzione di schema Zod e restituisce una definizione di tool con:
- `description`: cosa fa lo strumento
- `args`: schema Zod per gli argomenti dello strumento
- `execute`: funzione eseguita quando lo strumento viene chiamato
I tuoi strumenti personalizzati saranno disponibili in opencode insieme agli strumenti integrati.
---
### Logging
Usa `client.app.log()` invece di `console.log` per logging strutturato:
```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" },
},
})
}
```
Livelli: `debug`, `info`, `warn`, `error`. Vedi la [documentazione SDK](https://opencode.ai/docs/sdk) per i dettagli.
---
### Hook di compaction
Personalizza il contesto incluso quando una sessione viene compattata:
```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
`)
},
}
}
```
L'hook `experimental.session.compacting` scatta prima che l'LLM generi un riassunto di continuazione. Usalo per iniettare contesto specifico di dominio che il prompt di compaction predefinito potrebbe non includere.
Puoi anche sostituire completamente il prompt di compaction impostando `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.
`
},
}
}
```
Quando `output.prompt` e' impostato, sostituisce completamente il prompt di compaction predefinito. In questo caso l'array `output.context` viene ignorato.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,180 @@
---
title: Regole
description: Imposta istruzioni personalizzate per opencode.
---
Puoi fornire istruzioni personalizzate a opencode creando un file `AGENTS.md`. E' simile alle regole di Cursor. Contiene istruzioni che verranno incluse nel contesto dell'LLM per personalizzarne il comportamento per il tuo progetto.
---
## Initialize
Per creare un nuovo file `AGENTS.md`, puoi eseguire il comando `/init` in opencode.
:::tip
Dovresti committare il file `AGENTS.md` del progetto in Git.
:::
Questo scansiona il progetto e tutti i suoi contenuti per capire di cosa si tratta e generare un file `AGENTS.md`. Questo aiuta opencode a orientarsi meglio nel progetto.
Se hai gia' un file `AGENTS.md` esistente, cerchera' di aggiungervi contenuti.
---
## Example
Puoi anche creare questo file manualmente. Ecco un esempio di alcune cose che puoi inserire in un file `AGENTS.md`.
```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`
```
Qui stiamo aggiungendo istruzioni specifiche del progetto e saranno condivise con il tuo team.
---
## Types
opencode supporta anche la lettura del file `AGENTS.md` da piu' posizioni, e questo serve a scopi diversi.
### Project
Metti un `AGENTS.md` nella root del progetto per regole specifiche del progetto. Si applicano solo quando stai lavorando in questa directory o nelle sue sottodirectory.
### Global
Puoi anche avere regole globali in un file `~/.config/opencode/AGENTS.md`. Queste si applicano a tutte le sessioni di opencode.
Dato che questo non viene committato in Git o condiviso con il team, consigliamo di usarlo per specificare regole personali che l'LLM deve seguire.
### Claude Code Compatibility
Per gli utenti che migrano da Claude Code, OpenCode supporta come fallback le convenzioni di file di Claude Code:
- **Project rules**: `CLAUDE.md` in your project directory (used if no `AGENTS.md` exists)
- **Global rules**: `~/.claude/CLAUDE.md` (used if no `~/.config/opencode/AGENTS.md` exists)
- **Skills**: `~/.claude/skills/` — see [Agent Skills](/docs/skills/) for details
Per disabilitare la compatibilita' con Claude Code, imposta una di queste variabili d'ambiente:
```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
```
---
## Precedence
Quando opencode si avvia, cerca i file di regole in questo ordine:
1. **Local files** by traversing up from the current directory (`AGENTS.md`, `CLAUDE.md`)
2. **Global file** at `~/.config/opencode/AGENTS.md`
3. **Claude Code file** at `~/.claude/CLAUDE.md` (unless disabled)
In ogni categoria vince il primo file corrispondente. Per esempio, se hai sia `AGENTS.md` sia `CLAUDE.md`, viene usato solo `AGENTS.md`. Allo stesso modo, `~/.config/opencode/AGENTS.md` ha priorita' su `~/.claude/CLAUDE.md`.
---
## Custom Instructions
Puoi specificare file di istruzioni personalizzati nel tuo `opencode.json` o nel globale `~/.config/opencode/opencode.json`. Questo permette a te e al tuo team di riusare regole esistenti invece di doverle duplicare in AGENTS.md.
Example:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
You can also use remote URLs to load instructions from the web.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
}
```
Le istruzioni remote vengono recuperate con un timeout di 5 secondi.
Tutti i file di istruzioni vengono combinati con i tuoi file `AGENTS.md`.
---
## Referencing External Files
Anche se opencode non interpreta automaticamente i riferimenti a file in `AGENTS.md`, puoi ottenere una funzionalita' simile in due modi:
### Using opencode.json
L'approccio consigliato e' usare il campo `instructions` in `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
}
```
### Manual Instructions in AGENTS.md
Puoi insegnare a opencode a leggere file esterni fornendo istruzioni esplicite nel tuo `AGENTS.md`. Ecco un esempio pratico:
```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.
```
Questo approccio ti permette di:
- Create modular, reusable rule files
- Share rules across projects via symlinks or git submodules
- Keep AGENTS.md concise while referencing detailed guidelines
- Ensure opencode loads files only when needed for the specific task
:::tip
Per monorepo o progetti con standard condivisi, usare `opencode.json` con pattern glob (come `packages/*/AGENTS.md`) e' piu' manutenibile rispetto alle istruzioni manuali.
:::

View File

@@ -0,0 +1,391 @@
---
title: SDK
description: Client JS type-safe per il server opencode.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
L'SDK JS/TS di opencode fornisce un client type-safe per interagire con il server.
Usalo per creare integrazioni e controllare opencode in modo programmatico.
[Scopri di piu](/docs/server) su come funziona il server. Per esempi, guarda i [progetti](/docs/ecosystem#projects) creati dalla comunita.
---
## Installa
Installa l'SDK da npm:
```bash
npm install @opencode-ai/sdk
```
---
## Crea un client
Crea un'istanza di opencode:
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()
```
Questo avvia sia un server sia un client
#### Opzioni
| Opzione | Tipo | Descrizione | Predefinito |
| ---------- | ------------- | ------------------------------ | ----------- |
| `hostname` | `string` | Hostname del server | `127.0.0.1` |
| `port` | `number` | Porta del server | `4096` |
| `signal` | `AbortSignal` | Segnale di abort per annullare | `undefined` |
| `timeout` | `number` | Timeout in ms per avvio server | `5000` |
| `config` | `Config` | Oggetto di configurazione | `{}` |
---
## Configurazione
Puoi passare un oggetto di configurazione per personalizzare il comportamento. L'istanza legge comunque `opencode.json`, ma puoi sovrascrivere o aggiungere configurazione 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()
```
## Solo client
Se hai gia un'istanza di opencode in esecuzione, puoi creare un client per collegarti:
```javascript
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})
```
#### Opzioni
| Opzione | Tipo | Descrizione | Predefinito |
| --------------- | ---------- | ----------------------------------- | ----------------------- |
| `baseUrl` | `string` | URL del server | `http://localhost:4096` |
| `fetch` | `function` | Implementazione fetch custom | `globalThis.fetch` |
| `parseAs` | `string` | Metodo di parsing della risposta | `auto` |
| `responseStyle` | `string` | Stile di ritorno: `data` o `fields` | `fields` |
| `throwOnError` | `boolean` | Lancia errori invece di restituirli | `false` |
---
## Tipi
L'SDK include definizioni TypeScript per tutti i tipi API. Importale direttamente:
```typescript
import type { Session, Message, Part } from "@opencode-ai/sdk"
```
Tutti i tipi sono generati dalla specifica OpenAPI del server e disponibili nel <a href={typesUrl}>file dei tipi</a>.
---
## Errori
L'SDK puo lanciare errori che puoi intercettare e gestire:
```typescript
try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}
```
---
## API
L'SDK espone tutte le API del server tramite un client type-safe.
---
### Global
| Metodo | Descrizione | Response |
| ----------------- | --------------------------------- | ------------------------------------ |
| `global.health()` | Controlla stato e versione server | `{ healthy: true, version: string }` |
---
#### Esempi
```javascript
const health = await client.global.health()
console.log(health.data.version)
```
---
### App
| Metodo | Descrizione | Response |
| -------------- | ----------------------- | ------------------------------------------- |
| `app.log()` | Scrive una voce di log | `boolean` |
| `app.agents()` | Elenca tutti gli agenti | <a href={typesUrl}><code>Agent[]</code></a> |
---
#### Esempi
```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()
```
---
### Project
| Metodo | Descrizione | Response |
| ------------------- | ----------------- | --------------------------------------------- |
| `project.list()` | Elenca i progetti | <a href={typesUrl}><code>Project[]</code></a> |
| `project.current()` | Progetto corrente | <a href={typesUrl}><code>Project</code></a> |
---
#### Esempi
```javascript
// List all projects
const projects = await client.project.list()
// Get current project
const currentProject = await client.project.current()
```
---
### Path
| Metodo | Descrizione | Response |
| ------------ | ----------------- | ---------------------------------------- |
| `path.get()` | Percorso corrente | <a href={typesUrl}><code>Path</code></a> |
---
#### Esempi
```javascript
// Get current path information
const pathInfo = await client.path.get()
```
---
### Config
| Metodo | Descrizione | Response |
| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `config.get()` | Ottieni info config | <a href={typesUrl}><code>Config</code></a> |
| `config.providers()` | Elenca provider e modelli default | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
---
#### Esempi
```javascript
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()
```
---
### Sessions
| Metodo | Descrizione | Note |
| ---------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `session.list()` | Elenca le sessioni | Returns <a href={typesUrl}><code>Session[]</code></a> |
| `session.get({ path })` | Ottieni una sessione | Returns <a href={typesUrl}><code>Session</code></a> |
| `session.children({ path })` | Elenca sessioni figlie | Returns <a href={typesUrl}><code>Session[]</code></a> |
| `session.create({ body })` | Crea una sessione | Returns <a href={typesUrl}><code>Session</code></a> |
| `session.delete({ path })` | Elimina una sessione | Returns `boolean` |
| `session.update({ path, body })` | Aggiorna proprieta della sessione | Returns <a href={typesUrl}><code>Session</code></a> |
| `session.init({ path, body })` | Analizza app e crea `AGENTS.md` | Returns `boolean` |
| `session.abort({ path })` | Interrompe una sessione in corso | Returns `boolean` |
| `session.share({ path })` | Condivide la sessione | Returns <a href={typesUrl}><code>Session</code></a> |
| `session.unshare({ path })` | Rimuove la condivisione | Returns <a href={typesUrl}><code>Session</code></a> |
| `session.summarize({ path, body })` | Riassume la sessione | Returns `boolean` |
| `session.messages({ path })` | Elenca i messaggi della sessione | Returns `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}[]` |
| `session.message({ path })` | Ottieni dettagli di un messaggio | Returns `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
| `session.prompt({ path, body })` | Invia un prompt | `body.noReply: true` returns UserMessage (solo contesto). Di default ritorna <a href={typesUrl}><code>AssistantMessage</code></a> con risposta AI |
| `session.command({ path, body })` | Invia un comando alla sessione | Returns `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
| `session.shell({ path, body })` | Esegue un comando shell | Returns <a href={typesUrl}><code>AssistantMessage</code></a> |
| `session.revert({ path, body })` | Ripristina un messaggio | Returns <a href={typesUrl}><code>Session</code></a> |
| `session.unrevert({ path })` | Ripristina messaggi revertiti | Returns <a href={typesUrl}><code>Session</code></a> |
| `postSessionByIdPermissionsByPermissionId({ path, body })` | Risponde a una richiesta permessi | Returns `boolean` |
---
#### Esempi
```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." }],
},
})
```
---
### File
| Metodo | Descrizione | Response |
| ------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------- |
| `find.text({ query })` | Cerca testo nei file | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `find.files({ query })` | Trova file e directory per nome | `string[]` (paths) |
| `find.symbols({ query })` | Trova simboli nel workspace | <a href={typesUrl}><code>Symbol[]</code></a> |
| `file.read({ query })` | Legge un file | `{ type: "raw" \| "patch", content: string }` |
| `file.status({ query? })` | Stato dei file tracciati | <a href={typesUrl}><code>File[]</code></a> |
`find.files` supporta alcuni campi query opzionali:
- `type`: `"file"` or `"directory"`
- `directory`: sovrascrive la root del progetto per la ricerca
- `limit`: risultati massimi (1200)
---
#### Esempi
```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
| Metodo | Descrizione | Response |
| ------------------------------ | -------------------------- | --------- |
| `tui.appendPrompt({ body })` | Aggiunge testo al prompt | `boolean` |
| `tui.openHelp()` | Apre la finestra help | `boolean` |
| `tui.openSessions()` | Apre il selettore sessioni | `boolean` |
| `tui.openThemes()` | Apre il selettore temi | `boolean` |
| `tui.openModels()` | Apre il selettore modelli | `boolean` |
| `tui.submitPrompt()` | Invia il prompt corrente | `boolean` |
| `tui.clearPrompt()` | Pulisce il prompt | `boolean` |
| `tui.executeCommand({ body })` | Esegue un comando | `boolean` |
| `tui.showToast({ body })` | Mostra una notifica toast | `boolean` |
---
#### Esempi
```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
| Metodo | Descrizione | Response |
| ------------------- | ------------------------ | --------- |
| `auth.set({ ... })` | Imposta credenziali auth | `boolean` |
---
#### Esempi
```javascript
await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})
```
---
### Eventi
| Metodo | Descrizione | Response |
| ------------------- | ---------------------------- | ---------------------------- |
| `event.subscribe()` | Stream di server-sent events | Stream di server-sent events |
---
#### Esempi
```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,284 @@
---
title: Server
description: Interagisci con il server opencode via HTTP.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
Il comando `opencode serve` avvia un server HTTP headless che espone un endpoint OpenAPI utilizzabile da un client opencode.
---
### Utilizzo
```bash
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
```
#### Opzioni
| Flag | Descrizione | Predefinito |
| --------------- | --------------------------------------- | ---------------- |
| `--port` | Porta su cui ascoltare | `4096` |
| `--hostname` | Hostname su cui ascoltare | `127.0.0.1` |
| `--mdns` | Abilita la scoperta mDNS | `false` |
| `--mdns-domain` | Nome di dominio personalizzato mDNS | `opencode.local` |
| `--cors` | Origin browser aggiuntive da permettere | `[]` |
`--cors` puo essere passato piu volte:
```bash
opencode serve --cors http://localhost:5173 --cors https://app.example.com
```
---
### Autenticazione
Imposta `OPENCODE_SERVER_PASSWORD` per proteggere il server con HTTP basic auth. Lo username predefinito e `opencode`, oppure imposta `OPENCODE_SERVER_USERNAME` per sovrascriverlo. Questo vale sia per `opencode serve` sia per `opencode web`.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve
```
---
### Come funziona
Quando esegui `opencode` avvia una TUI e un server. La TUI e il client che parla col server. Il server espone un endpoint con specifica OpenAPI 3.1. Questo endpoint viene anche usato per generare un [SDK](/docs/sdk).
:::tip
Usa il server opencode per interagire con opencode in modo programmatico.
:::
Questa architettura permette a opencode di supportare piu client e di essere usato in modo programmatico.
Puoi eseguire `opencode serve` per avviare un server standalone. Se la TUI di opencode e gia in esecuzione, `opencode serve` avviera un nuovo server.
---
#### Connettersi a un server esistente
Quando avvii la TUI assegna casualmente porta e hostname. In alternativa puoi passare i [flag](/docs/cli) `--hostname` e `--port` e poi usare questi valori per connetterti al suo server.
L'endpoint [`/tui`](#tui) puo essere usato per pilotare la TUI tramite il server. Per esempio, puoi precompilare o eseguire un prompt. Questa configurazione e usata dai plugin [IDE](/docs/ide) di OpenCode.
---
## Specifica
Il server pubblica una specifica OpenAPI 3.1 visualizzabile su:
```
http://<hostname>:<port>/doc
```
Per esempio, `http://localhost:4096/doc`. Usa la spec per generare client o ispezionare i tipi di request/response, oppure visualizzala in uno Swagger explorer.
---
## API
Il server opencode espone le seguenti API.
---
### Global
| Metodo | Path | Descrizione | Response |
| ------ | ---------------- | --------------------------- | ------------------------------------ |
| `GET` | `/global/health` | Stato di salute e versione | `{ healthy: true, version: string }` |
| `GET` | `/global/event` | Eventi globali (stream SSE) | Event stream |
---
### Project
| Metodo | Path | Descrizione | Response |
| ------ | ------------------ | ----------------------- | --------------------------------------------- |
| `GET` | `/project` | Elenca tutti i progetti | <a href={typesUrl}><code>Project[]</code></a> |
| `GET` | `/project/current` | Progetto corrente | <a href={typesUrl}><code>Project</code></a> |
---
### Percorso e VCS
| Metodo | Path | Descrizione | Response |
| ------ | ------- | --------------------------------- | ------------------------------------------- |
| `GET` | `/path` | Percorso corrente | <a href={typesUrl}><code>Path</code></a> |
| `GET` | `/vcs` | Info VCS per il progetto corrente | <a href={typesUrl}><code>VcsInfo</code></a> |
---
### Instance
| Metodo | Path | Descrizione | Response |
| ------ | ------------------- | --------------------------- | --------- |
| `POST` | `/instance/dispose` | Rilascia l'istanza corrente | `boolean` |
---
### Configurazione
| Metodo | Path | Descrizione | Response |
| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- |
| `GET` | `/config` | Info sulla config | <a href={typesUrl}><code>Config</code></a> |
| `PATCH` | `/config` | Aggiorna la config | <a href={typesUrl}><code>Config</code></a> |
| `GET` | `/config/providers` | Elenca provider e modelli default | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
---
### Provider
| Metodo | Path | Descrizione | Response |
| ------ | -------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------- |
| `GET` | `/provider` | Elenca tutti i provider | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
| `GET` | `/provider/auth` | Metodi auth dei provider | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
| `POST` | `/provider/{id}/oauth/authorize` | Autorizza un provider via OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
| `POST` | `/provider/{id}/oauth/callback` | Gestisce callback OAuth | `boolean` |
---
### Sessioni
| Metodo | Path | Descrizione | Note |
| -------- | ---------------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
| `GET` | `/session` | Elenca tutte le sessioni | Returns <a href={typesUrl}><code>Session[]</code></a> |
| `POST` | `/session` | Crea una nuova sessione | body: `{ parentID?, title? }`, returns <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/status` | Stato di tutte le sessioni | Returns `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
| `GET` | `/session/:id` | Dettagli di sessione | Returns <a href={typesUrl}><code>Session</code></a> |
| `DELETE` | `/session/:id` | Elimina una sessione e i suoi dati | Returns `boolean` |
| `PATCH` | `/session/:id` | Aggiorna proprieta sessione | body: `{ title? }`, returns <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/:id/children` | Sessioni figlie | Returns <a href={typesUrl}><code>Session[]</code></a> |
| `GET` | `/session/:id/todo` | Todo list della sessione | Returns <a href={typesUrl}><code>Todo[]</code></a> |
| `POST` | `/session/:id/init` | Analizza app e crea `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returns `boolean` |
| `POST` | `/session/:id/fork` | Fork di sessione su un messaggio | body: `{ messageID? }`, returns <a href={typesUrl}><code>Session</code></a> |
| `POST` | `/session/:id/abort` | Interrompe una sessione in esecuzione | Returns `boolean` |
| `POST` | `/session/:id/share` | Condivide una sessione | Returns <a href={typesUrl}><code>Session</code></a> |
| `DELETE` | `/session/:id/share` | Annulla condivisione | Returns <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/:id/diff` | Diff della sessione | query: `messageID?`, returns <a href={typesUrl}><code>FileDiff[]</code></a> |
| `POST` | `/session/:id/summarize` | Riassume la sessione | body: `{ providerID, modelID }`, returns `boolean` |
| `POST` | `/session/:id/revert` | Ripristina un messaggio | body: `{ messageID, partID? }`, returns `boolean` |
| `POST` | `/session/:id/unrevert` | Ripristina tutti i messaggi revertiti | Returns `boolean` |
| `POST` | `/session/:id/permissions/:permissionID` | Risponde a una richiesta permessi | body: `{ response, remember? }`, returns `boolean` |
---
### Messaggi
| Metodo | Path | Descrizione | Note |
| ------ | --------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GET` | `/session/:id/message` | Elenca messaggi in una sessione | query: `limit?`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
| `POST` | `/session/:id/message` | Invia un messaggio e attende risposta | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `GET` | `/session/:id/message/:messageID` | Dettagli messaggio | Returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `POST` | `/session/:id/prompt_async` | Invia un messaggio in async (senza wait) | body: same as `/session/:id/message`, returns `204 No Content` |
| `POST` | `/session/:id/command` | Esegue un comando slash | body: `{ messageID?, agent?, model?, command, arguments }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `POST` | `/session/:id/shell` | Esegue un comando shell | body: `{ agent, model?, command }`, returns `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
---
### Comandi
| Metodo | Path | Descrizione | Response |
| ------ | ---------- | ---------------- | --------------------------------------------- |
| `GET` | `/command` | Elenca i comandi | <a href={typesUrl}><code>Command[]</code></a> |
---
### File
| Metodo | Path | Descrizione | Response |
| ------ | ------------------------ | ------------------------------- | ------------------------------------------------------------------------------------------- |
| `GET` | `/find?pattern=<pat>` | Cerca testo nei file | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `GET` | `/find/file?query=<q>` | Trova file e directory per nome | `string[]` (paths) |
| `GET` | `/find/symbol?query=<q>` | Trova simboli workspace | <a href={typesUrl}><code>Symbol[]</code></a> |
| `GET` | `/file?path=<path>` | Elenca file e directory | <a href={typesUrl}><code>FileNode[]</code></a> |
| `GET` | `/file/content?path=<p>` | Legge un file | <a href={typesUrl}><code>FileContent</code></a> |
| `GET` | `/file/status` | Stato dei file tracciati | <a href={typesUrl}><code>File[]</code></a> |
#### `/find/file` query parameters
- `query` (required) — stringa di ricerca (fuzzy match)
- `type` (optional) — limita i risultati a `"file"` o `"directory"`
- `directory` (optional) — sovrascrive la root del progetto per la ricerca
- `limit` (optional) — massimo risultati (1200)
- `dirs` (optional) — flag legacy (`"false"` restituisce solo file)
---
### Strumenti (sperimentale)
| Metodo | Path | Descrizione | Response |
| ------ | ------------------------------------------- | ------------------------------------------ | -------------------------------------------- |
| `GET` | `/experimental/tool/ids` | Elenca tutti i tool ID | <a href={typesUrl}><code>ToolIDs</code></a> |
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | Elenca tool con JSON schema per un modello | <a href={typesUrl}><code>ToolList</code></a> |
---
### LSP, formatter e MCP
| Metodo | Path | Descrizione | Response |
| ------ | ------------ | --------------------------- | -------------------------------------------------------- |
| `GET` | `/lsp` | Stato server LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> |
| `GET` | `/formatter` | Stato formatter | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
| `GET` | `/mcp` | Stato server MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
| `POST` | `/mcp` | Aggiunge server MCP runtime | body: `{ name, config }`, returns MCP status object |
---
### Agenti
| Metodo | Path | Descrizione | Response |
| ------ | -------- | ----------------------- | ------------------------------------------- |
| `GET` | `/agent` | Elenca tutti gli agenti | <a href={typesUrl}><code>Agent[]</code></a> |
---
### Log
| Metodo | Path | Descrizione | Response |
| ------ | ------ | ------------------------------------------------------------------- | --------- |
| `POST` | `/log` | Scrive una voce di log. Body: `{ service, level, message, extra? }` | `boolean` |
---
### TUI
| Metodo | Path | Descrizione | Response |
| ------ | ----------------------- | -------------------------------------------------- | ---------------------- |
| `POST` | `/tui/append-prompt` | Aggiunge testo al prompt | `boolean` |
| `POST` | `/tui/open-help` | Apre il dialog help | `boolean` |
| `POST` | `/tui/open-sessions` | Apre il selettore sessioni | `boolean` |
| `POST` | `/tui/open-themes` | Apre il selettore temi | `boolean` |
| `POST` | `/tui/open-models` | Apre il selettore modelli | `boolean` |
| `POST` | `/tui/submit-prompt` | Invia il prompt corrente | `boolean` |
| `POST` | `/tui/clear-prompt` | Pulisce il prompt | `boolean` |
| `POST` | `/tui/execute-command` | Esegue un comando (`{ command }`) | `boolean` |
| `POST` | `/tui/show-toast` | Mostra toast (`{ title?, message, variant }`) | `boolean` |
| `GET` | `/tui/control/next` | Attende la prossima richiesta di controllo | Control request object |
| `POST` | `/tui/control/response` | Risponde a una richiesta di controllo (`{ body }`) | `boolean` |
---
### Autenticazione
| Metodo | Path | Descrizione | Response |
| ------ | ----------- | -------------------------------------------------------------------- | --------- |
| `PUT` | `/auth/:id` | Imposta credenziali auth. Il body deve rispettare lo schema provider | `boolean` |
---
### Eventi
| Metodo | Path | Descrizione | Response |
| ------ | -------- | ----------------------------------------------------------- | ------------------------- |
| `GET` | `/event` | Stream SSE. Primo evento `server.connected`, poi eventi bus | Server-sent events stream |
---
### Documentazione
| Metodo | Path | Descrizione | Response |
| ------ | ------ | --------------------- | ---------------------------- |
| `GET` | `/doc` | Specifica OpenAPI 3.1 | Pagina HTML con spec OpenAPI |

View File

@@ -0,0 +1,127 @@
---
title: Condivisione
description: Condividi le tue conversazioni OpenCode.
---
La funzione di condivisione di OpenCode ti permette di creare link pubblici alle tue conversazioni, cosi puoi collaborare con i colleghi o chiedere aiuto ad altre persone.
:::note
Le conversazioni condivise sono accessibili pubblicamente a chiunque abbia il link.
:::
---
## Come funziona
Quando condividi una conversazione, OpenCode:
1. Crea un URL pubblico univoco per la sessione
2. Sincronizza la cronologia della conversazione sui nostri server
3. Rende la conversazione accessibile tramite il link condivisibile: `opncd.ai/s/<share-id>`
---
## Sharing
OpenCode supporta tre modalita di condivisione che controllano come vengono condivise le conversazioni:
---
### Manuale (predefinito)
Per impostazione predefinita, OpenCode usa la condivisione manuale. Le sessioni non vengono condivise automaticamente, ma puoi condividerle manualmente con il comando `/share`:
```
/share
```
Questo genera un URL univoco che viene copiato negli appunti.
Per impostare esplicitamente la modalita manuale nel tuo [file di config](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "manual"
}
```
---
### Auto-share
Puoi abilitare la condivisione automatica per tutte le nuove conversazioni impostando l'opzione `share` su `"auto"` nel tuo [file di config](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "auto"
}
```
Con la condivisione automatica attiva, ogni nuova conversazione verra condivisa automaticamente e verra generato un link.
---
### Disabled
Puoi disabilitare completamente la condivisione impostando l'opzione `share` su `"disabled"` nel tuo [file di config](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "disabled"
}
```
Per applicarlo al tuo team in un progetto specifico, aggiungilo a `opencode.json` nel progetto e versionalo su Git.
---
## Annullare la condivisione
Per smettere di condividere una conversazione e rimuoverla dall'accesso pubblico:
```
/unshare
```
Questo rimuove il link di condivisione ed elimina i dati associati alla conversazione.
---
## Privacy
Ci sono alcune cose da tenere a mente quando condividi una conversazione.
---
### Data retention
Le conversazioni condivise restano accessibili finche non le annulli esplicitamente. Questo include:
- La cronologia completa della conversazione
- Tutti i messaggi e le risposte
- I metadati della sessione
---
### Recommendations
- Condividi solo conversazioni che non contengono informazioni sensibili.
- Rivedi il contenuto della conversazione prima di condividerla.
- Annulla la condivisione quando la collaborazione e conclusa.
- Evita di condividere conversazioni con codice proprietario o dati riservati.
- Per progetti sensibili, disabilita completamente la condivisione.
---
## Per le aziende
Per deploy enterprise, la condivisione puo essere:
- **Disabilitata** completamente per requisiti di conformita e sicurezza
- **Limitata** ai soli utenti autenticati tramite SSO
- **Self-hosted** sulla tua infrastruttura
[Scopri di piu](/docs/enterprise) su come usare opencode nella tua organizzazione.

View File

@@ -0,0 +1,222 @@
---
title: "Competenze dell'agente"
description: "Definisci comportamenti riutilizzabili tramite definizioni in SKILL.md"
---
Le skill degli agenti permettono a OpenCode di individuare istruzioni riutilizzabili dal tuo repo o dalla home directory.
Le skill vengono caricate on-demand tramite lo strumento nativo `skill`: gli agenti vedono le skill disponibili e possono caricarne il contenuto completo quando serve.
---
## Posiziona i file
Crea una cartella per ogni nome di skill e metti un `SKILL.md` al suo interno.
OpenCode cerca in queste posizioni:
- Config di progetto: `.opencode/skills/<name>/SKILL.md`
- Config globale: `~/.config/opencode/skills/<name>/SKILL.md`
- Progetto compatibile con Claude: `.claude/skills/<name>/SKILL.md`
- Globale compatibile con Claude: `~/.claude/skills/<name>/SKILL.md`
- Progetto compatibile con agent: `.agents/skills/<name>/SKILL.md`
- Globale compatibile con agent: `~/.agents/skills/<name>/SKILL.md`
---
## Comprendere la discovery
Per i percorsi locali al progetto, OpenCode risale dalla directory di lavoro corrente finche' non raggiunge il worktree git.
Carica qualsiasi `skills/*/SKILL.md` corrispondente in `.opencode/` e qualsiasi `.claude/skills/*/SKILL.md` o `.agents/skills/*/SKILL.md` corrispondente lungo il percorso.
Le definizioni globali vengono caricate anche da `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` e `~/.agents/skills/*/SKILL.md`.
---
## Scrivi il frontmatter
Ogni `SKILL.md` deve iniziare con frontmatter YAML.
Sono riconosciuti solo questi campi:
- `name` (obbligatorio)
- `description` (obbligatorio)
- `license` (opzionale)
- `compatibility` (opzionale)
- `metadata` (opzionale, mappa stringa-a-stringa)
I campi di frontmatter sconosciuti vengono ignorati.
---
## Valida i nomi
`name` deve:
- Essere lungo 1-64 caratteri
- Essere alfanumerico minuscolo con separatori `-` singoli
- Non iniziare o finire con `-`
- Non contenere `--` consecutivi
- Corrispondere al nome della directory che contiene `SKILL.md`
Regex equivalente:
```text
^[a-z0-9]+(-[a-z0-9]+)*$
```
---
## Rispetta le regole di lunghezza
`description` deve essere lunga 1-1024 caratteri.
Tieni la descrizione abbastanza specifica da permettere all'agente di scegliere correttamente.
---
## Usa un esempio
Crea `.opencode/skills/git-release/SKILL.md` cosi':
```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.
```
---
## Riconoscere la descrizione dello strumento
OpenCode elenca le skill disponibili nella descrizione dello strumento `skill`.
Ogni voce include il nome della skill e la descrizione:
```xml
<available_skills>
<skill>
<name>git-release</name>
<description>Create consistent releases and changelogs</description>
</skill>
</available_skills>
```
L'agente carica una skill chiamando lo strumento:
```
skill({ name: "git-release" })
```
---
## Configura i permessi
Controlla a quali skill gli agenti possono accedere usando permessi basati su pattern in `opencode.json`:
```json
{
"permission": {
"skill": {
"*": "allow",
"pr-review": "allow",
"internal-*": "deny",
"experimental-*": "ask"
}
}
}
```
| Permesso | Comportamento |
| -------- | -------------------------------------------- |
| `allow` | La skill viene caricata immediatamente |
| `deny` | Skill nascosta all'agente, accesso negato |
| `ask` | L'utente viene invitato ad approvare il load |
I pattern supportano wildcard: `internal-*` corrisponde a `internal-docs`, `internal-tools`, ecc.
---
## Sovrascrivi per agente
Dai ad agenti specifici permessi diversi dai default globali.
**Per agenti personalizzati** (nel frontmatter dell'agente):
```yaml
---
permission:
skill:
"documents-*": "allow"
---
```
**Per agenti integrati** (in `opencode.json`):
```json
{
"agent": {
"plan": {
"permission": {
"skill": {
"internal-*": "allow"
}
}
}
}
}
```
---
## Disabilita lo strumento skill
Disabilita completamente le skill per agenti che non dovrebbero usarle:
**Per agenti personalizzati**:
```yaml
---
tools:
skill: false
---
```
**Per agenti integrati**:
```json
{
"agent": {
"plan": {
"tools": {
"skill": false
}
}
}
}
```
Quando e' disabilitato, la sezione `<available_skills>` viene omessa completamente.
---
## Risoluzione problemi di caricamento
Se una skill non compare:
1. Verifica che `SKILL.md` sia scritto in maiuscolo
2. Controlla che il frontmatter includa `name` e `description`
3. Assicurati che i nomi delle skill siano unici in tutte le posizioni
4. Controlla i permessi: le skill con `deny` vengono nascoste agli agenti

View File

@@ -0,0 +1,369 @@
---
title: Temi
description: Seleziona un tema integrato o definiscine uno tuo.
---
Con OpenCode puoi scegliere tra diversi temi integrati, usare un tema che si adatta al tema del tuo terminale oppure definire un tema personalizzato.
Per impostazione predefinita, OpenCode usa il tema `opencode`.
---
## Requisiti del terminale
Per visualizzare correttamente i temi con l'intera palette, il terminale deve supportare **truecolor** (colore a 24 bit). La maggior parte dei terminali moderni lo supporta di default, ma potrebbe essere necessario abilitarlo:
- **Verifica supporto**: esegui `echo $COLORTERM` - dovrebbe stampare `truecolor` o `24bit`
- **Abilita truecolor**: imposta la variabile d'ambiente `COLORTERM=truecolor` nel profilo della shell
- **Compatibilita del terminale**: assicurati che l'emulatore supporti il colore a 24 bit (la maggior parte dei terminali moderni come iTerm2, Alacritty, Kitty, Windows Terminal e le versioni recenti di GNOME Terminal)
Senza truecolor, i temi potrebbero apparire con colori meno accurati oppure fare fallback alla migliore approssimazione a 256 colori.
---
## Temi integrati
OpenCode include diversi temi integrati.
| Nome | Descrizione |
| ---------------------- | ------------------------------------------------------------------------- |
| `system` | Si adatta al colore di sfondo del terminale |
| `tokyonight` | Basato sul tema [Tokyonight](https://github.com/folke/tokyonight.nvim) |
| `everforest` | Basato sul tema [Everforest](https://github.com/sainnhe/everforest) |
| `ayu` | Basato sul tema scuro [Ayu](https://github.com/ayu-theme) |
| `catppuccin` | Basato sul tema [Catppuccin](https://github.com/catppuccin) |
| `catppuccin-macchiato` | Basato sul tema [Catppuccin](https://github.com/catppuccin) |
| `gruvbox` | Basato sul tema [Gruvbox](https://github.com/morhetz/gruvbox) |
| `kanagawa` | Basato sul tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
| `nord` | Basato sul tema [Nord](https://github.com/nordtheme/nord) |
| `matrix` | Tema verde su nero in stile hacker |
| `one-dark` | Basato sul tema Dark [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
E altri ancora: aggiungiamo costantemente nuovi temi.
---
## Tema di sistema
Il tema `system` e progettato per adattarsi automaticamente allo schema colori del tuo terminale. A differenza dei temi tradizionali con colori fissi, il tema _system_:
- **Genera una scala di grigi**: crea una scala di grigi personalizzata in base al colore di sfondo del terminale, garantendo un contrasto ottimale.
- **Usa colori ANSI**: sfrutta i colori ANSI standard (0-15) per evidenziazione della sintassi ed elementi UI, rispettando la palette del terminale.
- **Preserva i default del terminale**: usa `none` per testo e sfondo per mantenere l'aspetto nativo del terminale.
Il tema di sistema e pensato per chi:
- Vuole che OpenCode corrisponda all'aspetto del terminale
- Usa schemi colori personalizzati del terminale
- Preferisce un aspetto coerente tra tutte le applicazioni da terminale
---
## Usare un tema
Puoi selezionare un tema aprendo la selezione temi con il comando `/theme`. In alternativa, puoi specificarlo nella tua [configurazione](/docs/config).
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"theme": "tokyonight"
}
```
---
## Temi personalizzati
OpenCode supporta un sistema di temi flessibile basato su JSON che permette di creare e personalizzare temi facilmente.
---
### Gerarchia
I temi vengono caricati da piu directory nel seguente ordine, dove le directory successive sovrascrivono le precedenti:
1. **Temi integrati** - incorporati nel binario
2. **Directory di configurazione utente** - in `~/.config/opencode/themes/*.json` o `$XDG_CONFIG_HOME/opencode/themes/*.json`
3. **Directory root del progetto** - in `<project-root>/.opencode/themes/*.json`
4. **Directory di lavoro corrente** - in `./.opencode/themes/*.json`
Se piu directory contengono un tema con lo stesso nome, verra usato il tema della directory con priorita piu alta.
---
### Creare un tema
Per creare un tema personalizzato, crea un file JSON in una delle directory dei temi.
Per temi a livello utente:
```bash no-frame
mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json
```
E per temi specifici del progetto.
```bash no-frame
mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json
```
---
### Formato JSON
I temi usano un formato JSON flessibile che supporta:
- **Colori hex**: `"#ffffff"`
- **Colori ANSI**: `3` (0-255)
- **Riferimenti colore**: `"primary"` o definizioni personalizzate
- **Varianti scuro/chiaro**: `{"dark": "#000", "light": "#fff"}`
- **Nessun colore**: `"none"` - usa il colore predefinito del terminale o trasparente
---
### Definizioni dei colori
La sezione `defs` e opzionale e ti permette di definire colori riutilizzabili che possono essere referenziati nel tema.
---
### Valori predefiniti del terminale
Il valore speciale `"none"` puo essere usato per qualunque colore per ereditare il colore predefinito del terminale. E particolarmente utile per creare temi che si fondono con lo schema colori del terminale:
- `"text": "none"` - usa il colore del testo predefinito del terminale
- `"background": "none"` - usa il colore di sfondo predefinito del terminale
---
### Esempio
Ecco un esempio di tema personalizzato:
```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: Strumenti
description: Gestisci gli strumenti che un LLM puo' usare.
---
Gli strumenti permettono all'LLM di eseguire azioni nel tuo codebase. OpenCode include un set di strumenti integrati, ma puoi estenderlo con [strumenti personalizzati](/docs/custom-tools) o con [server MCP](/docs/mcp-servers).
Di default, tutti gli strumenti sono **abilitati** e non richiedono permessi per essere eseguiti. Puoi controllare il comportamento degli strumenti tramite i [permessi](/docs/permissions).
---
## Configura
Usa il campo `permission` per controllare il comportamento degli strumenti. Puoi consentire, negare o richiedere approvazione per ciascuno.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}
```
Puoi anche usare wildcard per controllare piu' strumenti insieme. Per esempio, per richiedere approvazione per tutti gli strumenti di un server MCP:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mymcp_*": "ask"
}
}
```
[Scopri di piu'](/docs/permissions) su come configurare i permessi.
---
## Integrati
Ecco tutti gli strumenti integrati disponibili in OpenCode.
---
### bash
Esegui comandi di shell nel tuo ambiente di progetto.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
}
```
Questo strumento permette all'LLM di eseguire comandi da terminale come `npm install`, `git status` o qualunque altro comando di shell.
---
### edit
Modifica file esistenti usando sostituzioni esatte di stringhe.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Questo strumento esegue modifiche precise ai file sostituendo corrispondenze di testo esatte. E' il modo principale con cui l'LLM modifica il codice.
---
### write
Crea nuovi file o sovrascrive quelli esistenti.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Usalo per consentire all'LLM di creare nuovi file. Sovrascrivera' i file esistenti se sono gia' presenti.
:::note
Lo strumento `write` e' controllato dal permesso `edit`, che copre tutte le modifiche ai file (`edit`, `write`, `patch`, `multiedit`).
:::
---
### read
Leggi il contenuto dei file dal tuo codebase.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"read": "allow"
}
}
```
Questo strumento legge i file e ne restituisce il contenuto. Supporta la lettura di intervalli di righe specifici per file grandi.
---
### grep
Cerca nel contenuto dei file usando espressioni regolari.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"grep": "allow"
}
}
```
Ricerca rapida nel contenuto su tutto il codebase. Supporta la sintassi completa delle regex e il filtro per pattern di file.
---
### glob
Trova file tramite pattern matching.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"glob": "allow"
}
}
```
Cerca file usando pattern glob come `**/*.js` o `src/**/*.ts`. Restituisce i percorsi corrispondenti ordinati per data di modifica.
---
### list
Elenca file e directory in un percorso specifico.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"list": "allow"
}
}
```
Questo strumento elenca il contenuto di una directory. Accetta pattern glob per filtrare i risultati.
---
### lsp (experimental)
Interagisci con i server LSP configurati per ottenere funzionalita' di code intelligence come definizioni, riferimenti, hover info e call hierarchy.
:::note
Questo strumento e' disponibile solo quando `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (oppure `OPENCODE_EXPERIMENTAL=true`).
:::
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
}
```
Le operazioni supportate includono `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` e `outgoingCalls`.
Per configurare quali server LSP sono disponibili per il tuo progetto, vedi [LSP Servers](/docs/lsp).
---
### patch
Applica patch ai file.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Questo strumento applica file patch al tuo codebase. Utile per applicare diff e patch da varie fonti.
:::note
Lo strumento `patch` e' controllato dal permesso `edit`, che copre tutte le modifiche ai file (`edit`, `write`, `patch`, `multiedit`).
:::
---
### skill
Carica una [skill](/docs/skills) (un file `SKILL.md`) e ne restituisce il contenuto nella conversazione.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"skill": "allow"
}
}
```
---
### todowrite
Gestisci todo list durante le sessioni di coding.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todowrite": "allow"
}
}
```
Crea e aggiorna liste di task per tracciare i progressi durante operazioni complesse. L'LLM lo usa per organizzare attivita' multi-step.
:::note
Questo strumento e' disabilitato per i subagenti di default, ma puoi abilitarlo manualmente. [Scopri di piu'](/docs/agents/#permissions)
:::
---
### todoread
Leggi le todo list esistenti.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todoread": "allow"
}
}
```
Legge lo stato corrente della todo list. Usato dall'LLM per tenere traccia di quali task sono in sospeso o completati.
:::note
Questo strumento e' disabilitato per i subagenti di default, ma puoi abilitarlo manualmente. [Scopri di piu'](/docs/agents/#permissions)
:::
---
### webfetch
Recupera contenuti dal web.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"webfetch": "allow"
}
}
```
Permette all'LLM di recuperare e leggere pagine web. Utile per consultare documentazione o ricercare risorse online.
---
### websearch
Cerca informazioni sul web.
:::note
Questo strumento e' disponibile solo quando usi il provider OpenCode o quando la variabile d'ambiente `OPENCODE_ENABLE_EXA` e' impostata a un valore truthy (ad esempio `true` o `1`).
Per abilitarlo all'avvio di OpenCode:
```bash
OPENCODE_ENABLE_EXA=1 opencode
```
:::
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}
```
Esegue ricerche web usando Exa AI per trovare informazioni rilevanti online. Utile per ricercare argomenti, trovare eventi attuali o raccogliere informazioni oltre il cutoff dei dati di addestramento.
Non e' richiesta alcuna API key: lo strumento si connette direttamente al servizio MCP ospitato da Exa AI senza autenticazione.
:::tip
Usa `websearch` quando devi trovare informazioni (discovery) e `webfetch` quando devi recuperare contenuti da un URL specifico (retrieval).
:::
---
### question
Fai domande all'utente durante l'esecuzione.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"question": "allow"
}
}
```
Questo strumento permette all'LLM di porre domande all'utente durante un task. E' utile per:
- Raccogliere preferenze o requisiti dell'utente
- Chiarire istruzioni ambigue
- Ottenere decisioni sulle scelte di implementazione
- Offrire opzioni su che direzione prendere
Ogni domanda include un header, il testo della domanda e una lista di opzioni. Gli utenti possono selezionare dalle opzioni fornite o digitare una risposta personalizzata. Quando ci sono piu' domande, gli utenti possono navigare tra di esse prima di inviare tutte le risposte.
---
## Strumenti personalizzati
Gli strumenti personalizzati ti permettono di definire funzioni che l'LLM puo' chiamare. Sono definiti nel tuo file di configurazione e possono eseguire codice arbitrario.
[Scopri di piu'](/docs/custom-tools) su come creare strumenti personalizzati.
---
## Server MCP
I server MCP (Model Context Protocol) permettono di integrare strumenti e servizi esterni. Questo include accesso a database, integrazioni API e servizi di terze parti.
[Scopri di piu'](/docs/mcp-servers) su come configurare i server MCP.
---
## Interni
Internamente, strumenti come `grep`, `glob` e `list` usano [ripgrep](https://github.com/BurntSushi/ripgrep) sotto al cofano. Di default, ripgrep rispetta i pattern di `.gitignore`, quindi i file e le directory elencati in `.gitignore` vengono esclusi da ricerche ed elenchi.
---
### Pattern di ignore
Per includere file che normalmente verrebbero ignorati, crea un file `.ignore` nella root del progetto. Questo file puo' consentire esplicitamente certi path.
```text title=".ignore"
!node_modules/
!dist/
!build/
```
Per esempio, questo file `.ignore` permette a ripgrep di cercare dentro `node_modules/`, `dist/` e `build/` anche se sono elencate in `.gitignore`.

View File

@@ -0,0 +1,299 @@
---
title: Risoluzione dei problemi
description: Problemi comuni e come risolverli.
---
Per diagnosticare problemi con OpenCode, inizia controllando i log e i dati locali che salva su disco.
---
## Log
I file di log vengono scritti in:
- **macOS/Linux**: `~/.local/share/opencode/log/`
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.local\share\opencode\log`
I file di log hanno nomi con timestamp (ad es. `2025-01-09T123456.log`) e vengono conservati i 10 file di log piu recenti.
Puoi impostare il livello di log con l'opzione a riga di comando `--log-level` per ottenere informazioni di debug piu dettagliate. Per esempio: `opencode --log-level DEBUG`.
---
## Archiviazione
opencode salva i dati delle sessioni e altri dati dell'applicazione su disco in:
- **macOS/Linux**: `~/.local/share/opencode/`
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.local\share\opencode`
Questa directory contiene:
- `auth.json` - dati di autenticazione come chiavi API, token OAuth
- `log/` - log dell'applicazione
- `project/` - dati specifici del progetto come dati di sessione e messaggi
- Se il progetto e dentro un repository Git, viene salvato in `./<project-slug>/storage/`
- Se non e un repository Git, viene salvato in `./global/storage/`
---
## App desktop
OpenCode Desktop esegue in background un server locale di OpenCode (il sidecar `opencode-cli`). La maggior parte dei problemi e causata da un plugin che si comporta male, da una cache corrotta o da un'impostazione del server errata.
### Controlli rapidi
- Chiudi completamente l'app e riaprila.
- Se l'app mostra una schermata di errore, fai clic su **Restart** e copia i dettagli dell'errore.
- Solo macOS: menu `OpenCode` -> **Reload Webview** (utile se l'interfaccia e vuota o bloccata).
---
### Disabilita i plugin
Se l'app desktop va in crash all'avvio, si blocca o si comporta in modo strano, inizia disabilitando i plugin.
#### Controlla la configurazione globale
Apri il tuo file di configurazione globale e cerca la chiave `plugin`.
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (or `~/.config/opencode/opencode.json`)
- **macOS/Linux** (older installs): `~/.local/share/opencode/opencode.jsonc`
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.config\opencode\opencode.jsonc`
Se hai plugin configurati, disabilitali temporaneamente rimuovendo la chiave o impostandola a un array vuoto:
```jsonc
{
"$schema": "https://opencode.ai/config.json",
"plugin": [],
}
```
#### Controlla le directory dei plugin
OpenCode puo anche caricare plugin locali dal disco. Spostali temporaneamente altrove (o rinomina la cartella) e riavvia l'app desktop:
- **Plugin globali**
- **macOS/Linux**: `~/.config/opencode/plugins/`
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.config\opencode\plugins`
- **Plugin del progetto** (solo se usi una configurazione per progetto)
- `<your-project>/.opencode/plugins/`
Se l'app ricomincia a funzionare, riabilita i plugin uno alla volta per capire quale stia causando il problema.
---
### Svuota la cache
Se disabilitare i plugin non aiuta (o l'installazione di un plugin e bloccata), svuota la cache in modo che OpenCode possa ricostruirla.
1. Quit OpenCode Desktop completely.
2. Elimina la directory della cache:
- **macOS**: Finder -> `Cmd+Shift+G` -> paste `~/.cache/opencode`
- **Linux**: elimina `~/.cache/opencode` (oppure esegui `rm -rf ~/.cache/opencode`)
- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.cache\opencode`
3. Restart OpenCode Desktop.
---
### Risolvi problemi di connessione al server
OpenCode Desktop puo avviare il proprio server locale (predefinito) oppure connettersi a un URL server che hai configurato.
Se vedi una finestra **"Connection Failed"** (o l'app non supera mai la schermata di avvio), controlla se hai impostato un URL server personalizzato.
#### Cancella l'URL del server predefinito dell'app desktop
Dalla schermata Home, fai clic sul nome del server (con il pallino di stato) per aprire il selettore dei server. Nella sezione **Default server**, fai clic su **Clear**.
#### Rimuovi `server.port` / `server.hostname` dalla tua configurazione
Se il tuo `opencode.json(c)` contiene una sezione `server`, rimuovila temporaneamente e riavvia l'app desktop.
#### Controlla le variabili d'ambiente
Se hai `OPENCODE_PORT` impostato nell'ambiente, l'app desktop provera a usare quella porta per il server locale.
- Rimuovi `OPENCODE_PORT` (o scegli una porta libera) e riavvia.
---
### Linux: problemi Wayland / X11
Su Linux, alcune configurazioni Wayland possono causare finestre vuote o errori del compositor.
- Se sei su Wayland e l'app e vuota o va in crash, prova ad avviarla con `OC_ALLOW_WAYLAND=1`.
- Se peggiora la situazione, rimuovilo e prova invece ad avviare sotto una sessione X11.
---
### Windows: runtime WebView2
Su Windows, OpenCode Desktop richiede **WebView2 Runtime** di Microsoft Edge. Se l'app si apre su una finestra vuota o non parte, installa/aggiorna WebView2 e riprova.
---
### Windows: problemi generali di prestazioni
Se riscontri prestazioni lente, problemi di accesso ai file o problemi del terminale su Windows, prova a usare [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL fornisce un ambiente Linux che funziona in modo piu fluido con le funzionalita di OpenCode.
---
### Notifiche non visualizzate
OpenCode Desktop mostra le notifiche di sistema solo quando:
- le notifiche sono abilitate per OpenCode nelle impostazioni del sistema operativo, e
- la finestra dell'app non e in primo piano.
---
### Reimposta lo stato dell'app desktop (ultima risorsa)
Se l'app non si avvia e non riesci a ripulire le impostazioni dall'interfaccia, reimposta lo stato salvato dell'app desktop.
1. Quit OpenCode Desktop.
2. Trova ed elimina questi file (si trovano nella directory dati dell'app OpenCode Desktop):
- `opencode.settings.dat` (desktop default server URL)
- `opencode.global.dat` e `opencode.workspace.*.dat` (stato dell'interfaccia come server/progetti recenti)
Per trovare rapidamente la directory:
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (poi cerca i nomi file qui sopra)
- **Linux**: cerca sotto `~/.local/share` i nomi file qui sopra
- **Windows**: premi `WIN+R` -> `%APPDATA%` (poi cerca i nomi file qui sopra)
---
## Ottenere aiuto
Se riscontri problemi con OpenCode:
1. **Segnala i problemi su GitHub**
Il modo migliore per segnalare bug o richiedere funzionalita e tramite il nostro repository GitHub:
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
Prima di creare una nuova issue, cerca tra quelle esistenti per vedere se il problema e gia stato segnalato.
2. **Unisciti al nostro Discord**
Per supporto in tempo reale e discussioni con la community, unisciti al nostro server Discord:
[**opencode.ai/discord**](https://opencode.ai/discord)
---
## Problemi comuni
Ecco alcuni problemi comuni e come risolverli.
---
### OpenCode non si avvia
1. Controlla i log per eventuali messaggi di errore
2. Prova a eseguire con `--print-logs` per vedere l'output nel terminale
3. Assicurati di avere l'ultima versione con `opencode upgrade`
---
### Problemi di autenticazione
1. Prova a riautenticarti con il comando `/connect` nella TUI
2. Controlla che le chiavi API siano valide
3. Assicurati che la rete permetta connessioni all'API del provider
---
### Modello non disponibile
1. Controlla di esserti autenticato con il provider
2. Verifica che il nome del modello nella configurazione sia corretto
3. Alcuni modelli potrebbero richiedere accessi o abbonamenti specifici
Se incontri `ProviderModelNotFoundError`, probabilmente stai facendo riferimento a un modello in modo errato da qualche parte.
I modelli vanno indicati in questo formato: `<providerId>/<modelId>`
Esempi:
- `openai/gpt-4.1`
- `openrouter/google/gemini-2.5-flash`
- `opencode/kimi-k2`
Per capire a quali modelli hai accesso, esegui `opencode models`
---
### ProviderInitError
Se incontri un ProviderInitError, probabilmente la tua configurazione e invalida o corrotta.
Per risolvere:
1. Per prima cosa, verifica che il provider sia configurato correttamente seguendo la [guida ai provider](/docs/providers)
2. Se il problema persiste, prova a cancellare la configurazione salvata:
```bash
rm -rf ~/.local/share/opencode
```
Su Windows, premi `WIN+R` ed elimina: `%USERPROFILE%\.local\share\opencode`
3. Riautenticati con il provider usando il comando `/connect` nella TUI.
---
### AI_APICallError e problemi dei pacchetti provider
Se incontri errori nelle chiamate API, potrebbe dipendere da pacchetti provider non aggiornati. opencode installa dinamicamente i pacchetti provider (OpenAI, Anthropic, Google, ecc.) quando servono e li mette in cache localmente.
Per risolvere problemi coi pacchetti provider:
1. Svuota la cache dei pacchetti provider:
```bash
rm -rf ~/.cache/opencode
```
Su Windows, premi `WIN+R` ed elimina: `%USERPROFILE%\.cache\opencode`
2. Riavvia opencode per reinstallare i pacchetti provider piu recenti
Questo forzera opencode a scaricare le versioni piu recenti dei pacchetti provider, cosa che spesso risolve problemi di compatibilita con parametri dei modelli e cambiamenti delle API.
---
### Copy/paste not working on Linux
Su Linux e necessario avere installata una delle seguenti utility per gli appunti affinche copia/incolla funzioni:
**Per sistemi X11:**
```bash
apt install -y xclip
# or
apt install -y xsel
```
**Per sistemi Wayland:**
```bash
apt install -y wl-clipboard
```
**Per ambienti headless:**
```bash
apt install -y xvfb
# and run:
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
export DISPLAY=:99.0
```
opencode rilevera se stai usando Wayland e preferira `wl-clipboard`; altrimenti provera a trovare gli strumenti per gli appunti nell'ordine: `xclip` e `xsel`.

View File

@@ -0,0 +1,387 @@
---
title: TUI
description: Usa l'interfaccia utente da terminale (TUI) di OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
OpenCode fornisce un'interfaccia interattiva da terminale (TUI) per lavorare sui tuoi progetti con un LLM.
Eseguire OpenCode avvia la TUI per la directory corrente.
```bash
opencode
```
Oppure puoi avviarla per una specifica working directory.
```bash
opencode /path/to/project
```
Una volta nella TUI, puoi inviare un messaggio come prompt.
```text
Give me a quick summary of the codebase.
```
---
## Riferimenti ai file
Puoi riferirti ai file nei messaggi usando `@`. Questo esegue una ricerca fuzzy dei file nella working directory corrente.
:::tip
Puoi anche usare `@` per riferirti ai file nei messaggi.
:::
```text "@packages/functions/src/api/index.ts"
How is auth handled in @packages/functions/src/api/index.ts?
```
Il contenuto del file viene aggiunto automaticamente alla conversazione.
---
## Comandi bash
Inizia un messaggio con `!` per eseguire un comando shell.
```bash frame="none"
!ls -la
```
L'output del comando viene aggiunto alla conversazione come risultato di uno strumento.
---
## Comandi
Quando usi la TUI di OpenCode, puoi digitare `/` seguito dal nome di un comando per eseguire rapidamente azioni. Per esempio:
```bash frame="none"
/help
```
Molti comandi hanno anche una scorciatoia da tastiera che usa `ctrl+x` come tasto leader (predefinito). [Scopri di piu](/docs/keybinds).
Ecco tutti i comandi slash disponibili:
---
### connetti
Aggiunge un provider a OpenCode. Ti permette di selezionare tra i provider disponibili e aggiungere le relative chiavi API.
```bash frame="none"
/connect
```
---
### compatta
Compatta la sessione corrente. _Alias_: `/summarize`
```bash frame="none"
/compact
```
**Scorciatoia:** `ctrl+x c`
---
### dettagli
Attiva/disattiva i dettagli di esecuzione degli strumenti.
```bash frame="none"
/details
```
**Scorciatoia:** `ctrl+x d`
---
### editor
Apre un editor esterno per comporre messaggi. Usa l'editor impostato nella variabile d'ambiente `EDITOR`. [Scopri di piu](#editor-setup).
```bash frame="none"
/editor
```
**Scorciatoia:** `ctrl+x e`
---
### esci
Esce da OpenCode. _Alias_: `/quit`, `/q`
```bash frame="none"
/exit
```
**Scorciatoia:** `ctrl+x q`
---
### esporta
Esporta la conversazione corrente in Markdown e la apre nell'editor predefinito. Usa l'editor impostato nella variabile d'ambiente `EDITOR`. [Scopri di piu](#editor-setup).
```bash frame="none"
/export
```
**Scorciatoia:** `ctrl+x x`
---
### aiuto
Mostra la finestra di aiuto.
```bash frame="none"
/help
```
**Scorciatoia:** `ctrl+x h`
---
### inizializza
Crea o aggiorna il file `AGENTS.md`. [Scopri di piu](/docs/rules).
```bash frame="none"
/init
```
**Scorciatoia:** `ctrl+x i`
---
### modelli
Elenca i modelli disponibili.
```bash frame="none"
/models
```
**Scorciatoia:** `ctrl+x m`
---
### nuovo
Avvia una nuova sessione. _Alias_: `/clear`
```bash frame="none"
/new
```
**Scorciatoia:** `ctrl+x n`
---
### rifai
Rifai un messaggio precedentemente annullato. Disponibile solo dopo aver usato `/undo`.
:::tip
Vengono ripristinate anche eventuali modifiche ai file.
:::
Internamente usa Git per gestire le modifiche ai file. Quindi il progetto **deve essere un repository Git**.
```bash frame="none"
/redo
```
**Scorciatoia:** `ctrl+x r`
---
### sessioni
Elenca e passa tra le sessioni. _Alias_: `/resume`, `/continue`
```bash frame="none"
/sessions
```
**Scorciatoia:** `ctrl+x l`
---
### condividi
Condivide la sessione corrente. [Scopri di piu](/docs/share).
```bash frame="none"
/share
```
**Scorciatoia:** `ctrl+x s`
---
### temi
Elenca i temi disponibili.
```bash frame="none"
/theme
```
**Scorciatoia:** `ctrl+x t`
---
### ragionamento
Attiva/disattiva la visibilita dei blocchi thinking/reasoning nella conversazione. Quando abilitato, puoi vedere il ragionamento del modello per i modelli che supportano extended thinking.
:::note
Questo comando controlla solo se i blocchi di thinking vengono **mostrati**: non abilita o disabilita le capacita di ragionamento del modello. Per cambiare le capacita di ragionamento effettive, usa `ctrl+t` per ciclare tra le varianti del modello.
:::
```bash frame="none"
/thinking
```
---
### annulla
Annulla l'ultimo messaggio nella conversazione. Rimuove l'ultimo messaggio utente, tutte le risposte successive e qualsiasi modifica ai file.
:::tip
Vengono annullate anche eventuali modifiche ai file.
:::
Internamente usa Git per gestire le modifiche ai file. Quindi il progetto **deve essere un repository Git**.
```bash frame="none"
/undo
```
**Scorciatoia:** `ctrl+x u`
---
### annulla condivisione
Annulla la condivisione della sessione corrente. [Scopri di piu](/docs/share#un-sharing).
```bash frame="none"
/unshare
```
---
## Configurazione dell'editor
Sia `/editor` sia `/export` usano l'editor specificato nella variabile d'ambiente `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"
```
Per renderlo permanente, aggiungilo al profilo della shell;
`~/.bashrc`, `~/.zshrc`, ecc.
</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
```
Per renderlo permanente, usa **System Properties** > **Environment Variables**.
</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"
```
Per renderlo permanente, aggiungilo al profilo PowerShell.
</TabItem>
</Tabs>
Opzioni comuni per l'editor includono:
- `code` - Visual Studio Code
- `cursor` - Cursor
- `windsurf` - Windsurf
- `nvim` - Neovim editor
- `vim` - Vim editor
- `nano` - Nano editor
- `notepad` - Windows Notepad
- `subl` - Sublime Text
:::note
Alcuni editor come VS Code devono essere avviati con il flag `--wait`.
:::
Alcuni editor richiedono argomenti da riga di comando per funzionare in modalita bloccante. Il flag `--wait` fa si che il processo dell'editor resti in attesa finche non viene chiuso.
---
## Configura
Puoi personalizzare il comportamento della TUI tramite il file di config di OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
}
}
}
```
### Opzioni
- `scroll_acceleration` - Abilita l'accelerazione di scroll in stile macOS per uno scorrimento fluido e naturale. Quando abilitata, la velocita aumenta con gesture rapide e resta precisa con movimenti lenti. **Questa impostazione ha precedenza su `scroll_speed` e lo sovrascrive quando attiva.**
- `scroll_speed` - Controlla la velocita di scorrimento della TUI quando usi i comandi di scroll (minimo: `1`). Default: `3`. **Nota: viene ignorata se `scroll_acceleration.enabled` e impostato a `true`.**
---
## Personalizzazione
Puoi personalizzare vari aspetti della vista TUI usando la palette dei comandi (`ctrl+x h` o `/help`). Queste impostazioni persistono tra i riavvii.
---
#### Visualizzazione nome utente
Attiva/disattiva se lo username appare nei messaggi della chat. Puoi farlo da:
- Palette comandi: cerca "username" o "hide username"
- L'impostazione viene salvata automaticamente e ricordata tra le sessioni TUI

View File

@@ -0,0 +1,142 @@
---
title: Web
description: Usa OpenCode nel browser.
---
OpenCode puo funzionare come applicazione web nel browser, offrendo la stessa potente esperienza di coding AI senza bisogno di un terminale.
![OpenCode Web - Nuova sessione](../../../assets/web/web-homepage-new-session.png)
## Per iniziare
Avvia l'interfaccia web eseguendo:
```bash
opencode web
```
Questo avvia un server locale su `127.0.0.1` con una porta disponibile scelta a caso e apre automaticamente OpenCode nel browser predefinito.
:::caution
Se `OPENCODE_SERVER_PASSWORD` non e impostata, il server non sara protetto. Va bene per l'uso locale, ma va impostata per l'accesso in rete.
:::
:::tip[Utenti Windows]
Per la migliore esperienza, esegui `opencode web` da [WSL](/docs/windows-wsl) invece che da PowerShell. Questo garantisce accesso corretto al file system e integrazione col terminale.
:::
---
## Configurazione
Puoi configurare il server web con i flag della riga di comando o nel tuo [file di config](/docs/config).
### Porta
Per impostazione predefinita, OpenCode sceglie una porta disponibile. Puoi specificare una porta:
```bash
opencode web --port 4096
```
### Nome host
Per impostazione predefinita, il server si lega a `127.0.0.1` (solo localhost). Per rendere OpenCode accessibile sulla rete:
```bash
opencode web --hostname 0.0.0.0
```
Usando `0.0.0.0`, OpenCode mostrera sia l'indirizzo locale sia quello di rete:
```
Local access: http://localhost:4096
Network access: http://192.168.1.100:4096
```
### Scoperta mDNS
Abilita mDNS per rendere il server individuabile sulla rete locale:
```bash
opencode web --mdns
```
Questo imposta automaticamente l'hostname a `0.0.0.0` e pubblicizza il server come `opencode.local`.
Puoi personalizzare il nome di dominio mDNS per eseguire piu istanze sulla stessa rete:
```bash
opencode web --mdns --mdns-domain myproject.local
```
### CORS
Per consentire domini aggiuntivi per CORS (utile per frontend personalizzati):
```bash
opencode web --cors https://example.com
```
### Autenticazione
Per proteggere l'accesso, imposta una password usando la variabile d'ambiente `OPENCODE_SERVER_PASSWORD`:
```bash
OPENCODE_SERVER_PASSWORD=secret opencode web
```
Lo username predefinito e `opencode`, ma puo essere cambiato con `OPENCODE_SERVER_USERNAME`.
---
## Usa l'interfaccia web
Una volta avviata, l'interfaccia web ti da accesso alle tue sessioni OpenCode.
### Sessioni
Visualizza e gestisci le sessioni dalla homepage. Puoi vedere le sessioni attive e avviarne di nuove.
![OpenCode Web - Sessione attiva](../../../assets/web/web-homepage-active-session.png)
### Stato del server
Fai clic su "See Servers" per vedere i server connessi e il loro stato.
![OpenCode Web - See Servers](../../../assets/web/web-homepage-see-servers.png)
---
## Collegare un terminale
Puoi collegare una TUI da terminale a un server web gia in esecuzione:
```bash
# Start the web server
opencode web --port 4096
# In another terminal, attach the TUI
opencode attach http://localhost:4096
```
Questo ti permette di usare contemporaneamente interfaccia web e terminale, condividendo le stesse sessioni e lo stesso stato.
---
## File di configurazione
Puoi anche configurare le impostazioni del server nel file di config `opencode.json`:
```json
{
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"cors": ["https://example.com"]
}
}
```
I flag della riga di comando hanno precedenza sulle impostazioni del file di config.

View File

@@ -0,0 +1,113 @@
---
title: Windows (WSL)
description: Esegui OpenCode su Windows con WSL per la migliore esperienza.
---
import { Steps } from "@astrojs/starlight/components"
Anche se OpenCode puo essere eseguito direttamente su Windows, consigliamo di usare [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) per la migliore esperienza. WSL fornisce un ambiente Linux che funziona in modo ottimale con le funzionalita di OpenCode.
:::tip[Perche WSL?]
WSL offre prestazioni migliori del file system, supporto completo del terminale e compatibilita con gli strumenti di sviluppo su cui OpenCode fa affidamento.
:::
---
## Configurazione
<Steps>
1. **Installa WSL**
Se non l'hai ancora fatto, [installa WSL](https://learn.microsoft.com/en-us/windows/wsl/install) seguendo la guida ufficiale Microsoft.
2. **Installa OpenCode in WSL**
Dopo aver configurato WSL, apri il terminale WSL e installa OpenCode usando uno dei [metodi di installazione](/docs/).
```bash
curl -fsSL https://opencode.ai/install | bash
```
3. **Usa OpenCode da WSL**
Vai nella directory del progetto (accedi ai file Windows tramite `/mnt/c/`, `/mnt/d/`, ecc.) ed esegui OpenCode.
```bash
cd /mnt/c/Users/YourName/project
opencode
```
</Steps>
---
## App desktop + server WSL
Se preferisci usare l'app desktop di OpenCode ma vuoi eseguire il server in WSL:
1. **Avvia il server in WSL** con `--hostname 0.0.0.0` per consentire connessioni esterne:
```bash
opencode serve --hostname 0.0.0.0 --port 4096
```
2. **Collega l'app desktop** a `http://localhost:4096`
:::note
Se `localhost` non funziona nella tua configurazione, usa l'indirizzo IP di WSL (da WSL: `hostname -I`) e collega `http://<wsl-ip>:4096`.
:::
:::caution
Quando usi `--hostname 0.0.0.0`, imposta `OPENCODE_SERVER_PASSWORD` per proteggere il server.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
```
:::
---
## Client web + WSL
Per la migliore esperienza web su Windows:
1. **Esegui `opencode web` nel terminale WSL** invece che in PowerShell:
```bash
opencode web --hostname 0.0.0.0
```
2. **Accedi dal browser Windows** su `http://localhost:<port>` (OpenCode stampa l'URL)
Eseguire `opencode web` da WSL garantisce accesso corretto al file system e integrazione del terminale, restando comunque accessibile dal browser Windows.
---
## Accesso ai file Windows
WSL puo accedere a tutti i file Windows tramite la directory `/mnt/`:
- Unita `C:` → `/mnt/c/`
- Unita `D:` → `/mnt/d/`
- E cosi via...
Esempio:
```bash
cd /mnt/c/Users/YourName/Documents/project
opencode
```
:::tip
Per un'esperienza piu fluida, valuta di clonare o copiare il repository nel file system di WSL (per esempio in `~/code/`) ed eseguire OpenCode li.
:::
---
## Suggerimenti
- Tieni OpenCode in esecuzione su WSL per i progetti salvati su unita Windows: l'accesso ai file e immediato
- Usa l'[estensione WSL di VS Code](https://code.visualstudio.com/docs/remote/wsl) insieme a OpenCode per un flusso di lavoro integrato
- Configurazione e sessioni di OpenCode sono salvate nell'ambiente WSL in `~/.local/share/opencode/`

View File

@@ -0,0 +1,236 @@
---
title: Zen
description: Lista curata di modelli fornita da OpenCode.
---
import config from "../../../../config.mjs"
export const console = config.console
export const email = `mailto:${config.email}`
OpenCode Zen e una lista di modelli testati e verificati dal team di OpenCode.
:::note
OpenCode Zen e attualmente in beta.
:::
Zen funziona come qualunque altro provider in OpenCode. Accedi a OpenCode Zen e ottieni la tua chiave API. E **completamente opzionale**: non devi usarlo per usare OpenCode.
---
## Contesto
Ci sono moltissimi modelli, ma solo pochi funzionano bene come agenti di coding. Inoltre, la maggior parte dei provider e configurata in modo molto diverso, quindi prestazioni e qualita possono variare parecchio.
:::tip
Abbiamo testato un gruppo selezionato di modelli e provider che funzionano bene con OpenCode.
:::
Quindi, se usi un modello tramite qualcosa come OpenRouter, non puoi mai essere sicuro di ottenere la migliore versione del modello che vuoi.
Per risolvere, abbiamo fatto alcune cose:
1. Abbiamo testato un gruppo selezionato di modelli e parlato coi loro team su come eseguirli al meglio.
2. Poi abbiamo lavorato con alcuni provider per assicurarci che venissero serviti correttamente.
3. Infine, abbiamo fatto benchmark delle combinazioni modello/provider e creato una lista che ci sentiamo di raccomandare.
OpenCode Zen e un gateway AI che ti da accesso a questi modelli.
---
## Come funziona
OpenCode Zen funziona come qualunque altro provider in OpenCode.
1. Accedi a **<a href={console}>OpenCode Zen</a>**, aggiungi i dettagli di fatturazione e copia la chiave API.
2. Esegui il comando `/connect` nella TUI, seleziona OpenCode Zen e incolla la chiave API.
3. Esegui `/models` nella TUI per vedere la lista dei modelli che consigliamo.
Paghi per richiesta e puoi aggiungere credito al tuo account.
---
## Endpoint
Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API.
| Modello | ID modello | Endpoint | Pacchetto AI SDK |
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.2 Codex | gpt-5.2-codex | `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-codex | `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-codex | `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-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Sonnet 4 | claude-sonnet-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 Free | minimax-m2.1-free | `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 Free | glm-4.7-free | `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 Free | kimi-k2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2 Thinking | kimi-k2-thinking | `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 Coder 480B | qwen3-coder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
Il [model id](/docs/config/#models) nella config di OpenCode usa il formato `opencode/<model-id>`. Per esempio, per GPT 5.2 Codex useresti `opencode/gpt-5.2-codex` nella config.
---
### Modelli
Puoi recuperare la lista completa dei modelli disponibili e i relativi metadati da:
```
https://opencode.ai/zen/v1/models
```
---
## Prezzi
Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**.
| Modello | Input | Output | Lettura in cache | Scrittura in cache |
| --------------------------------- | ------ | ------ | ---------------- | ------------------ |
| Big Pickle | Gratis | Gratis | Gratis | - |
| MiniMax M2.1 Free | Gratis | Gratis | Gratis | - |
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
| GLM 4.7 Free | Gratis | Gratis | Gratis | - |
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
| Kimi K2.5 Free | Gratis | Gratis | Gratis | - |
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
| Kimi K2 | $0.40 | $2.50 | - | - |
| Qwen3 Coder 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 | - |
Potresti notare _Claude Haiku 3.5_ nella cronologia d'uso. E un [modello a basso costo](/docs/config/#models) usato per generare i titoli delle sessioni.
:::note
Le commissioni della carta di credito vengono ribaltate al costo (4.4% + $0.30 per transazione); non addebitiamo nulla oltre a questo.
:::
I modelli gratuiti:
- GLM 4.7 Free e disponibile su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
- Kimi K2.5 Free e disponibile su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
- MiniMax M2.1 Free e disponibile su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
- Big Pickle e un modello stealth gratuito su OpenCode per un periodo limitato. Il team usa questo tempo per raccogliere feedback e migliorare il modello.
<a href={email}>Contattaci</a> se hai domande.
---
### Ricarica automatica
Se il saldo scende sotto $5, Zen ricarica automaticamente $20.
Puoi cambiare l'importo della ricarica automatica. Puoi anche disabilitare completamente l'auto-reload.
---
### Limiti mensili
Puoi anche impostare un limite mensile di utilizzo per l'intero workspace e per ogni membro del team.
Per esempio, se imposti un limite mensile a $20, Zen non usera piu di $20 in un mese. Ma se hai l'auto-reload attivo, Zen potrebbe finire per addebitarti piu di $20 se il saldo scende sotto $5.
---
## Privacy
Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una policy di zero-retention e non usano i tuoi dati per training dei modelli, con le seguenti eccezioni:
- Big Pickle: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
- GLM 4.7 Free: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
- Kimi K2.5 Free: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
- MiniMax M2.1 Free: durante il periodo gratuito, i dati raccolti potrebbero essere usati per migliorare il modello.
- OpenAI APIs: le richieste vengono conservate per 30 giorni in conformita alle [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data).
- Anthropic APIs: le richieste vengono conservate per 30 giorni in conformita alle [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage).
---
## Per i team
Zen funziona benissimo anche per i team. Puoi invitare colleghi, assegnare ruoli, curare i modelli usati dal team e altro.
:::note
I workspace sono attualmente gratuiti per i team come parte della beta.
:::
Gestire il workspace e attualmente gratuito per i team come parte della beta. Condivideremo presto piu dettagli sul pricing.
---
### Ruoli
Puoi invitare colleghi nel workspace e assegnare ruoli:
- **Admin**: gestisce modelli, membri, chiavi API e fatturazione
- **Member**: gestisce solo le proprie chiavi API
Gli admin possono anche impostare limiti mensili di spesa per ogni membro per tenere i costi sotto controllo.
---
### Accesso ai modelli
Gli admin possono abilitare o disabilitare modelli specifici per il workspace. Le richieste verso un modello disabilitato restituiscono un errore.
Questo e utile quando vuoi disabilitare l'uso di un modello che raccoglie dati.
---
### Usa le tue chiavi
Puoi usare le tue chiavi API OpenAI o Anthropic continuando ad accedere agli altri modelli in Zen.
Quando usi le tue chiavi, i token vengono fatturati direttamente dal provider, non da Zen.
Per esempio, la tua organizzazione potrebbe avere gia una chiave per OpenAI o Anthropic e vuoi usare quella invece di quella fornita da Zen.
---
## Obiettivi
Abbiamo creato OpenCode Zen per:
1. Fare **benchmark** dei migliori modelli/provider per agenti di coding.
2. Dare accesso alle opzioni di **massima qualita** senza ridurre le prestazioni o instradare verso provider piu economici.
3. Trasferire eventuali **riduzioni di prezzo** vendendo al costo; l'unico markup copre le commissioni di elaborazione.
4. Evitare **lock-in** permettendoti di usarlo con qualunque altro agente di coding e lasciandoti sempre usare anche altri provider con OpenCode.