Salta al contenuto principale

Estendere bea ask con le skill

Insegna a bea ask le tue convenzioni contabili con un file SKILL.md: dove vive una skill, quale copia vince, cosa deve contenere il frontmatter e come dimostrare che la skill è stata caricata.

Inserisci un file SKILL.md accanto al tuo registro e bea ask seguirà le tue convenzioni contabili — i tuoi nomi di categoria, il tuo layout di report, le tue regole interne — senza che tu le ripeta in ogni domanda.

Una skill è semplice Markdown con una piccola intestazione YAML. bea ask la rileva all'avvio e la offre all'assistente ospitato, che carica il testo completo quando una domanda lo richiede.

Questa pagina presuppone che bea ask funzioni già per te. Richiede l'extra ask (uv tool install 'beancount-io[ask]') e le credenziali Beancount.io da bea cloud login o BEA_TOKEN. Le query vengono eseguite sul tuo registro locale, ma la domanda e il contesto della skill vanno al servizio AI ospitato di Beancount.io. bea ask non ha output JSON. Consulta il riferimento CLI per il contratto completo del comando.

Dove vive una skill

bea ask legge due directory, in questo ordine:

PosizioneAmbito
<dir-registro>/.agents/skills/Livello di progetto — un registro, di solito versionato nel suo repository
~/.config/bea/skills/Livello utente — ogni registro che apri su questa macchina

La directory di progetto viene risolta dalla directory di lavoro in cui esegui bea ask, non da --file. Quando entrambe le directory contengono una skill con lo stesso name, vince la copia di progetto e quella utente viene ignorata.

BEA_CONFIG_DIR sposta la directory a livello utente: impostala e le skill verranno lette da $BEA_CONFIG_DIR/skills/. Altrimenti si applica $XDG_CONFIG_HOME/bea/skills/, con fallback a ~/.config/bea/skills/.

Scrivi il file della skill

Una directory per skill, contenente un unico file chiamato SKILL.md:

.agents/skills/
└── monthly-report/
    └── SKILL.md

Il file è un'intestazione YAML seguita dalle tue istruzioni:

---
name: monthly-report
description: Generates monthly expense summaries grouped by category.
---
 
When the user asks for a spending summary or monthly report:
1. Group all expenses by the top-level account category.
2. Show totals for each category, sorted highest to lowest.
3. Include a grand total at the end.
4. Always specify the currency next to each amount.

Due campi sono obbligatori. Un file a cui manca uno dei due viene saltato in silenzio, quindi una skill assente di solito è un problema di intestazione.

CampoObbligatorioCosa fa
nameLettere minuscole e trattini. Mantienilo uguale al nome della directory — la precedenza tra le due posizioni viene abbinata su questo valore, quindi una discrepanza rende gli override difficili da prevedere.
descriptionUna riga che dice all'assistente quando applicare la skill. È ciò che l'assistente vede prima di decidere di caricare il corpo.
licensenoTesto libero, registrato con la skill.
compatibilitynoTesto libero, registrato con la skill.
metadatanoUna mappa chiave-valore, registrata con la skill.
allowed-toolsnoUn elenco separato da spazi, analizzato e registrato.

Scrivi il corpo come istruzioni a un collega: cosa fare, in che ordine e come presentare il risultato. Limitati alle convenzioni che sono davvero tue. I fatti che l'assistente può leggere dal tuo registro non appartengono a una skill.

allowed-tools non è un confine di autorizzazione. bea 0.1.0 analizza il campo e nient'altro lo legge, quindi non limita nulla. Trattalo come documentazione delle intenzioni. I controlli che valgono davvero sono quelli nel comando stesso: le scritture interattive vengono anteprime, confermate e validate prima di toccare il file, --yes globale non concede il permesso di scrittura e la modalità --print non applica mai una scrittura proposta.

Verifica che sia stata caricata

Dai a una skill usa e getta un'istruzione che non puoi non notare, poi fai una domanda qualsiasi.

Crea la skill:

mkdir -p .agents/skills/test-skill
cat > .agents/skills/test-skill/SKILL.md << 'EOF'
---
name: test-skill
description: Test skill to verify skill loading works.
---
 
IMPORTANT: Whenever the user asks any question, start your response with the exact phrase "SKILL LOADED".
EOF

Fai una domanda in modalità a risposta singola:

bea ask "what accounts do I have?" --print

Una risposta che inizia con SKILL LOADED significa che la skill è stata rilevata e offerta all'assistente.

Poi dimostra che la frase proviene dalla skill, spostando la directory fuori dall'albero delle skill e chiedendo di nuovo:

mv .agents/skills/test-skill ./test-skill.off
bea ask "what accounts do I have?" --print
mv ./test-skill.off .agents/skills/test-skill

La frase dovrebbe essere sparita. Sposta la directory fuori da .agents/skills/, anziché rinominarla sul posto: il rilevamento si basa sul campo name nell'intestazione, quindi una directory rinominata in test-skill.bak viene ancora trovata e caricata.

Per verificare una skill a livello utente, metti lo stesso file in ~/.config/bea/skills/test-skill/SKILL.md e ripeti. Per verificare la precedenza, tieni entrambe le copie con lo stesso name e dai loro frasi diverse: la frase di progetto è quella che dovresti vedere.

Rimuovi la skill di test quando hai finito. Si applica a ogni domanda che fai da quella directory.

Le skill per bea ask non sono skill per il tuo agente

Queste skill estendono solo l'helper integrato bea ask. Sono una cosa diversa dalle skill canoniche Beancount.io che installi in un agente di codifica esterno come Claude Code o Codex, che guidano i comandi bea dall'esterno. Se è quello che cerchi, leggi invece Contabilità con agenti AI — copre le ricette per agenti esterni dall'inizio alla fine, e nessuna di esse richiede l'extra ask o un account ospitato.

Fonte: https://beancount.io/it/docs/Solutions/bea-ask-skills