docs/guides/configuration.it.md
Torna al README
File di configurazione: ~/.picoclaw/config.json
Puoi sovrascrivere i percorsi predefiniti usando variabili d'ambiente. Questo è utile per installazioni portatili, distribuzioni containerizzate, o per eseguire picoclaw come servizio di sistema. Queste variabili sono indipendenti e controllano percorsi diversi.
| Variabile | Descrizione | Percorso Predefinito |
|---|---|---|
PICOCLAW_CONFIG | Sovrascrive il percorso al file di configurazione. Indica direttamente a picoclaw quale config.json caricare, ignorando tutte le altre posizioni. | ~/.picoclaw/config.json |
PICOCLAW_HOME | Sovrascrive la directory radice per i dati di picoclaw. Modifica la posizione predefinita del workspace e delle altre directory dati. | ~/.picoclaw |
Esempi:
# Esegui picoclaw usando un file di configurazione specifico
# Il percorso del workspace verrà letto da quel file di configurazione
PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway
# Esegui picoclaw con tutti i dati salvati in /opt/picoclaw
# La configurazione verrà caricata dal percorso predefinito ~/.picoclaw/config.json
# Il workspace verrà creato in /opt/picoclaw/workspace
PICOCLAW_HOME=/opt/picoclaw picoclaw agent
# Usa entrambi per un setup completamente personalizzato
PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway
Lo streaming del provider usa un double opt-in ed è disattivato per impostazione predefinita. L'agent prova lo streaming solo quando il canale corrente ha settings.streaming.enabled: true, l'entry del modello attivo ha streaming.enabled: true, e sia il provider sia il canale supportano lo streaming. Se manca una qualsiasi condizione, PicoClaw usa il normale percorso di richiesta non streaming.
Pico WebUI è il primo canale completamente collegato. Pico crea il primo messaggio assistant con il wire message esistente message.create, poi aggiorna lo stesso messaggio con message.update; non viene introdotto alcun nuovo tipo di wire message Pico.
Lascia streaming assente quando non vuoi usare lo streaming. Un blocco streaming omesso significa disattivato; non è necessario scrivere "streaming": {"enabled": false}.
Esempio di attivazione:
{
"model_list": [
{
"model_name": "gpt-5.4",
"provider": "openai",
"model": "gpt-5.4",
"api_keys": ["sk-your-openai-key"],
"streaming": {
"enabled": true
}
}
],
"channel_list": {
"pico": {
"enabled": true,
"type": "pico",
"settings": {
"token": "YOUR_PICO_TOKEN",
"streaming": {
"enabled": true
}
}
}
}
}
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
channel_list.<name>.settings.streaming.enabled | bool | false | Permette a questo canale di mostrare l'output streaming del provider |
channel_list.<name>.settings.streaming.throttle_seconds | int | Predefinito Pico dopo l'attivazione: 0 | Intervallo minimo tra aggiornamenti intermedi; il contenuto finale viene sempre inviato |
channel_list.<name>.settings.streaming.min_growth_chars | int | Predefinito Pico dopo l'attivazione: 1 | Crescita minima del testo prima di inviare un aggiornamento intermedio; il contenuto finale viene sempre inviato |
model_list[].streaming.enabled | bool | false | Permette a questa entry di modello di provare richieste provider streaming |
Le variabili d'ambiente legacy di Telegram restano compatibili: PICOCLAW_CHANNELS_TELEGRAM_STREAMING_ENABLED, PICOCLAW_CHANNELS_TELEGRAM_STREAMING_THROTTLE_SECONDS e PICOCLAW_CHANNELS_TELEGRAM_STREAMING_MIN_GROWTH_CHARS. Si applicano solo alle settings Telegram e non attivano né modificano settings.streaming di Pico.
Il comportamento in caso di errore è intenzionalmente conservativo: se lo streaming fallisce prima che venga inviato un chunk visibile, PicoClaw riprova una volta tramite il normale percorso Chat(). Se un chunk è già stato mostrato all'utente, PicoClaw non invia una seconda risposta non streaming, evitando output duplicato.
PicoClaw salva i dati nel workspace configurato (predefinito: ~/.picoclaw/workspace):
~/.picoclaw/workspace/
├── sessions/ # Sessioni di conversazione e cronologia
├── memory/ # Memoria a lungo termine (MEMORY.md)
├── state/ # Stato persistente (ultimo canale, ecc.)
├── cron/ # Database dei job pianificati
├── skills/ # Skill personalizzate
├── AGENT.md # Guida al comportamento dell'agent
├── HEARTBEAT.md # Prompt per task periodici (controllato ogni 30 min)
├── SOUL.md # Anima dell'agent
└── USER.md # Preferenze dell'utente
Nota: Le modifiche a
AGENT.md,SOUL.md,USER.mdememory/MEMORY.mdvengono rilevate automaticamente a runtime tramite il tracciamento della data di modifica (mtime). Non è necessario riavviare il gateway dopo aver modificato questi file — l'agent caricherà il nuovo contenuto alla prossima richiesta.
Per impostazione predefinita, le skill vengono caricate da:
~/.picoclaw/workspace/skills (workspace)~/.picoclaw/skills (globale)<current-working-directory>/skills (builtin)Per configurazioni avanzate/di test, puoi sovrascrivere la directory radice delle skill builtin con:
export PICOCLAW_BUILTIN_SKILLS=/path/to/skills
pkg/agent/loop.go via commands.Executor./foo) viene passato all'elaborazione LLM come se fosse un messaggio dell'utente./show su WhatsApp) restituisce un errore esplicito all'utente e interrompe l'elaborazione.La dichiarazione dei tool per-agent vive nel frontmatter di AGENT.md, non in config.json.
Se tools è omesso nel frontmatter, l'agent riceve il normale set globale dei tool abilitati. Se tools è presente, PicoClaw registra per quell'agent solo i tool runtime elencati.
---
name: Research Agent
description: Specialista per ricerca web e analisi approfondita.
tools: [read_file, write_file, web_search, web_fetch, message]
skills: [deep-research]
mcpServers: [web-index]
---
Sei l'agent di ricerca.
Note:
web_search, web_fetch, spawn, subagent, send_file.AGENT.md sono usate dal runtime e dai tool, ma non vengono iniettate nel prompt di discovery.Quando un agent ha peer spawnabili, PicoClaw inietta automaticamente nel suo system prompt un registry strutturato dei peer. Non serve una chiamata aggiuntiva a un tool list_agents.
Questa discovery serve soprattutto a rendere affidabile la delega tramite spawn con agent_id esplicito.
Ogni entry include:
| Campo | Significato |
|---|---|
id | ID stabile dell'agent |
name | Nome identitario da AGENT.md frontmatter |
description | Descrizione identitaria da AGENT.md frontmatter |
Dettagli importanti:
subagents.allow_agents.id, name, description.config.json resta il layer infrastrutturale: workspace, agent di default, routing e permessi di subagent. Questi permessi controllano anche la visibilità nella discovery.AGENT.md resta il layer di identità. Il codice runtime e i tool possono comunque usare tools, skills, mcpServers e model quando avviene la delega.Forma dell'oggetto iniettato:
{
"agents": [
{
"id": "research",
"name": "Research Agent",
"description": "Specialista per investigazioni e lavoro web."
}
]
}
In pratica, un agent generalista sceglie un peer in base alla descrizione del suo ruolo, poi chiama spawn con l'agent_id del peer. Il runtime risolve il resto.
PicoClaw esegue in un ambiente sandboxed per impostazione predefinita. L'agent può accedere solo ai file ed eseguire comandi all'interno del workspace configurato.
{
"agents": {
"defaults": {
"workspace": "~/.picoclaw/workspace",
"restrict_to_workspace": true
}
}
}
| Opzione | Predefinito | Descrizione |
|---|---|---|
workspace | ~/.picoclaw/workspace | Directory di lavoro dell'agent |
restrict_to_workspace | true | Limita l'accesso a file/comandi al workspace |
Quando restrict_to_workspace: true, i seguenti strumenti sono in sandbox:
| Strumento | Funzione | Restrizione |
|---|---|---|
read_file | Legge file | Solo file all'interno del workspace |
write_file | Scrive file | Solo file all'interno del workspace |
list_dir | Elenca directory | Solo directory all'interno del workspace |
edit_file | Modifica file | Solo file all'interno del workspace |
append_file | Aggiunge ai file | Solo file all'interno del workspace |
exec | Esegue comandi | I percorsi dei comandi devono essere nel workspace |
Anche con restrict_to_workspace: false, lo strumento exec blocca questi comandi pericolosi:
rm -rf, del /f, rmdir /s — Cancellazione di massaformat, mkfs, diskpart — Formattazione del discodd if= — Imaging del disco/dev/sd[a-z] — Scritture dirette su discoshutdown, reboot, poweroff — Spegnimento del sistema:(){ :|:& };:| Chiave di configurazione | Tipo | Predefinito | Descrizione |
|---|---|---|---|
tools.allow_read_paths | string[] | [] | Percorsi aggiuntivi consentiti per la lettura al di fuori del workspace |
tools.allow_write_paths | string[] | [] | Percorsi aggiuntivi consentiti per la scrittura al di fuori del workspace |
| Chiave di configurazione | Tipo | Predefinito | Descrizione |
|---|---|---|---|
tools.exec.allow_remote | bool | false | Consente lo strumento exec da canali remoti (Telegram/Discord ecc.) |
tools.exec.enable_deny_patterns | bool | true | Abilita l'intercettazione dei comandi pericolosi |
tools.exec.custom_deny_patterns | string[] | [] | Pattern regex personalizzati da bloccare |
tools.exec.custom_allow_patterns | string[] | [] | Pattern regex personalizzati da consentire |
Nota di sicurezza: La protezione dei symlink è abilitata per impostazione predefinita — tutti i percorsi file vengono risolti tramite
filepath.EvalSymlinksprima del confronto con la whitelist, prevenendo attacchi di escape tramite symlink.
Il controllo di sicurezza exec ispeziona solo la riga di comando avviata direttamente da PicoClaw. Non ispeziona ricorsivamente i processi figlio generati da strumenti di sviluppo consentiti come make, go run, cargo, npm run o script di build personalizzati.
Ciò significa che un comando di primo livello può comunque compilare o avviare altri binari dopo aver superato il controllo iniziale. In pratica, tratta gli script di build, i Makefile, gli script di pacchetti e i binari generati come codice eseguibile che richiede lo stesso livello di revisione di un comando shell diretto.
Per ambienti ad alto rischio:
[ERROR] tool: Tool execution failed
{tool=exec, error=Command blocked by safety guard (path outside working dir)}
[ERROR] tool: Tool execution failed
{tool=exec, error=Command blocked by safety guard (dangerous pattern detected)}
Se hai bisogno che l'agent acceda a percorsi al di fuori del workspace:
Metodo 1: File di configurazione
{
"agents": {
"defaults": {
"restrict_to_workspace": false
}
}
}
Metodo 2: Variabile d'ambiente
export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false
⚠️ Attenzione: Disabilitare questa restrizione consente all'agent di accedere a qualsiasi percorso sul tuo sistema. Usare con cautela solo in ambienti controllati.
L'impostazione restrict_to_workspace si applica in modo coerente a tutti i percorsi di esecuzione:
| Percorso di esecuzione | Confine di sicurezza |
|---|---|
| Main Agent | restrict_to_workspace ✅ |
| Subagent / Spawn | Eredita la stessa restrizione ✅ |
| Heartbeat tasks | Eredita la stessa restrizione ✅ |
Tutti i percorsi condividono la stessa restrizione del workspace — non è possibile aggirare il confine di sicurezza tramite subagent o task pianificati.
PicoClaw può eseguire task periodici automaticamente. Crea un file HEARTBEAT.md nel tuo workspace:
# Periodic Tasks
- Check my email for important messages
- Review my calendar for upcoming events
- Check the weather forecast
L'agent leggerà questo file ogni 30 minuti (configurabile) ed eseguirà tutti i task usando gli strumenti disponibili.
Per task di lunga durata (ricerca web, chiamate API), usa lo strumento spawn per creare un subagent:
# Periodic Tasks