Spartisco
Entra Prova

Agenti

Un file da copiare. Una chiave per la casa. L’agente legge i conti e prepara le bozze. Confermi tu.

Come funziona

  1. Scarica la skill. Un cartella spartisco/ con un SKILL.md. La incolli in Claude, Cursor o Codex.
  2. Crea la chiave in Casa. Connettori → Nuova chiave. La vedi una volta. Tienila in una variabile d'ambiente (file .env) o nel gestore di password del tuo agente, mai dentro il file della skill.
  3. Chiedi in italiano. «Chi deve cosa a giugno», «prepara la luce di agosto». L’agente chiama Spartisco. Tu confermi in app.

Cosa può

  • Leggere spese confermate, split, saldi, giorni di presenza.
  • Scrivere i giorni, se gli dai il permesso occupazione.
  • Creare una bozza di spesa, se gli dai il permesso bozze.

Cosa non può

  • Confermare una spesa.
  • Chiudere un periodo.
  • Vedere abbonamento, fatture, altre case.
  • Estrarre una bolletta con l’AI (resta un tuo click: le letture costano).

Incolla la skill

La skill è lo standard SKILL.md (Claude, Cursor, Codex).

spartisco/
  SKILL.md
  references/openapi.md
  references/lexicon.md
  assets/.env.example
  • Claude: cartella in Impostazioni → Skills, oppure ~/.claude/skills/spartisco/.
  • Cursor: .cursor/skills/spartisco/ nel progetto, o skills utente.
  • Codex: ~/.codex/skills/spartisco/.

Poi, nello stesso ambiente, la variabile:

SPARTISCO_API_KEY=spt_live_…

Il SKILL.md che scarichi da Connettori ha già host e id della casa. Quello da questa pagina no: serve solo a leggere le regole.

Scarica la skill

La chiave

Si crea solo in app: Casa → Connettori. Da Lite in su. Demo no.

La vedi una volta. Se la perdi, ruoti. Revocare è un click.

Non metterla:

  • nel SKILL.md
  • in una chat
  • in un testo pubblico o in un repo

Un agente con lettura vede nomi, saldi e chi ha dormito in casa. È lo stesso peso di un link /r, più i giorni.

Permessi

PermessoDefaultFa
Letturasìsaldi, spese confermate, occupazione
Occupazione (giorni)noscrive i giorni (Home Assistant, calendari)
Bozzenocrea una spesa da confermare in app
Consuntivinoscarica un PDF già emesso

90 giorni, poi scade. 60 chiamate al minuto.

Contratto HTTP

Se non usi una skill: stessa allowlist, Bearer, centesimi interi.

Base: https://app.spartisco.casa/api/v1

/api/v1/openapi.json

POST /spaces/:id/expenses (scope draft.write) crea sempre una bozza. L’agente non conferma.

Header opzionale `Idempotency-Key`: stessa chiave e stessa key entro 24 ore restituisce la stessa spesa (201), senza un duplicato.

Corpo JSON:

| Campo | Tipo | Obbligatorio | Note |
|---|---|---|---|
| `voce` | stringa | no | Voce già esistente. `tag` e `name` sono campi sconosciuti (422). Una voce sconosciuta è 422 `unknown_voce`: l’API non ne crea di nuove. Senza voce la bozza si salva e la Conferma chiede «Scegli la voce.» |
| `amount_cents` | intero | sì | Centesimi. `12850` = 128,50 €. Maggiore di zero |
| `period_id` | stringa | sì | Id da GET /periods. Periodo pareggiato → 409 |
| `payer` | stringa | no | Id persona da GET /people, solo la stringa. Un oggetto (`{id}`, `{person_id}`, `{type,id}`) è 422 `invalid_body`. Se manca, la bozza non ha pagatore: lo scegli tu al conferma |
| `competence_from` | stringa | no | Data `YYYY-MM-DD` |
| `competence_to` | stringa | no | Data `YYYY-MM-DD` |
| `note` | stringa | no | Nota visibile sulla bozza |

Qualsiasi altro campo in cima (`correction`, `corrections`, `correction_units`, …) è 422 `invalid_body`; `fields` elenca i nomi.

Esempio:

```json
{
  "voce": "Luce agosto",
  "amount_cents": 12850,
  "period_id": "01PERIODO",
  "payer": "01PERSONA",
  "competence_from": "2026-08-01",
  "competence_to": "2026-08-31",
  "note": "bolletta luce"
}
```

Risposta 201, e ogni spesa nei GET, ha questi campi:

| Campo | Note |
|---|---|
| `id` | Id della spesa |
| `review_state` | `draft` oppure `confirmed`. Una bozza non entra nei totali |
| `created_via` | `agent` oppure `app` |
| `voce` | Voce, oppure `null` se la bozza non ne ha |
| `title` | Titolo `Voce · competenza`. Senza voce è il nome già in archivio |
| `amount_cents` | Centesimi |
| `currency` | `EUR` |
| `period_id` | Periodo |
| `competence_from` | Data `YYYY-MM-DD`, oppure `null` |
| `competence_to` | Data `YYYY-MM-DD`, oppure `null` |
| `note` | Nota, oppure `null` |
| `payer` | Id persona, oppure `null` se non c’è pagatore |

GET `/spaces/:id/expenses/:eid` aggiunge `split_line` (persona, alloggio, centesimi). L’agente non conferma.

Domande

Serve saper programmare?

No. Copi la cartella, crei la chiave, parli in italiano.

Lite ce l’ha?

Sì. Lite, Casa, Famiglia: stessi permessi. Demo no.

L’agente può sbagliare i conti?

Non deve. I riparti li legge già calcolati. Se non tornano, deve dirtelo.

Posso dare la chiave allo zio?

No. Allo zio mandi il link del consuntivo. La chiave è per un agente, su una casa, col permesso che hai scelto.

Francia / Écot?

Stessa cosa su ecot.fr/agents. Stesso motore, altra lingua.

Da Lite, 29 € l’anno. L’agente non paga un extra.

Vedi i piani