meno-meno
Skill for comparing utility (electricity, gas) and telco (mobile, fixed-line) offers from operators registered in the Italian market. It aggregates the data published by individual operators into a neutral format (Markdown, CSV, JSON) ready to be analyzed, sorted by ranking tier, or exported.
Commands
Main command — Skill name: meno-meno
Invoke the skill from the Claude Code prompt with Skill name: meno-meno or by directly asking for the comparison. The skill runs the scraper registered for the requested operator and commodity and returns the formatted output in-line. By default all three formats (Markdown, CSV, JSON) are output in the same message.
Sub-command: doctor
Sub-command doctor (T5, #20). It runs a health check of all registered scrapers: HTTP status, number of parsed offers, parse failures, and drift compared with the last known run. Output as a Markdown table with one row per operator. Operators without a registered scraper (today 23 out of 24, enel is the only live one) are marked with scraper not yet registered for v1 instead of an error — this is the correct v1 behavior, not a failure. For the full reference see ADR 0007.
Invocable in two ways:
- Standalone CLI:
node --experimental-strip-types src/cli/doctor-cli.ts [--operatore <id>] [--output <path>] [--json] - As a Claude Code sub-skill:
runSkillDoctor({ operatore: 'enel' })(seesrc/skills/doctor.ts)
Flags
| Flag | Required | Default | Description |
|---|---|---|---|
--operatore |
no* | — | Registered operator ID (e.g. enel, edison, windtre). *Required only for the single-operator path; omitting it with --commodity makes the skill fan out to all operators registered for that commodity (see below). |
--commodity |
yes | — | One of luce, gas, mobile, fisso. |
--fixture |
no | — | Path to a local HTML file to use as the scrape source (offline mode). |
--live |
no | false |
Runs live scraping from the operator's site instead of reading from a fixture. Only for operators with a live source registered in scripts/v1-sources.ts. |
--format |
no | all |
Filters the emitted formats: all, markdown, csv, or json. Default all outputs all three (Markdown, CSV, JSON) in the same invocation, as per ADR 0003. |
--filter |
no | — | Commodity-aware numeric constraint, repeatable. Expression: alias<op>valore with <op> ∈ < <= = >= > !=. AND between flags, OR within the same flag via ` |
Exit codes: 0 success, 1 scrape/aggregate error, 2 usage error (missing, invalid argument, or unregistered operator). Full reference: ADR 0003.
Multi-operator fan-out
Without --operatore and with --commodity (excluding the mono-op path of [ci-live-gate]) the skill iterates aggregate() over all operators registered for that commodity, applies rankOfferte() (top-3 + trade-off) to the survivors, and emits markdown/csv/json with the filter expression in the header. The single-operator path (with --operatore X) remains bit-identical to the previous one — backward compat with ADR 0002 and [ci-live-gate].
Filter alias per commodity
| Commodity | Alias | Field schema |
|---|---|---|
mobile |
prezzo |
prezzo_effettivo_euro_mese |
mobile |
gb |
gb |
fisso |
prezzo |
prezzo_effettivo_euro_mese |
luce |
prezzo |
prezzo_effettivo_euro_kwh |
luce |
costo_commercializzazione |
quota_fissa_euro_anno |
gas |
prezzo |
prezzo_effettivo_euro_smc |
gas |
costo_commercializzazione |
quota_fissa_euro_anno |
Examples
Example invocations from the Claude Code chat. Adapt operator and commodity to the ones you are interested in.
Electricity
Usa la skill meno-meno per confrontare le offerte luce di enel.
Gas
Usa la skill meno-meno per confrontare le offerte gas di enel con --fixture fixtures/enel/luce.html --format csv.
Mobile
Usa la skill meno-meno per confrontare le offerte mobile di windtre.
Fixed
Usa la skill meno-meno per confrontare le offerte fisso di windtre con --live.