# CLI-referencia

> A haszno CLI telepítése, beállítása és használata: globális flagek, kimeneti formátumok, kilépési kódok és minden parancscsoporthoz példák.

## Telepítés

A `haszno` CLI egy Node.js program (Node.js 20 vagy újabb kell hozzá). A csomag **nincs közzétéve npm-en** (`"private": true` a `package.json`-ban). Használd az alábbi módszerek egyikét.

### Egylépéses telepítő (mindhárom eszköz)

Egyszerre telepíti a CLI-t, az MCP-szervert és a skillt. Szükséges: Node.js 20+, `git` és `npm`.

```bash
curl -fsSL https://raw.githubusercontent.com/haszno-labs/haszno-skill/main/install.sh | bash
```

Lásd az [Agentek áttekintése](agents.md) oldalt a telepítő lépésenkénti leírásáért.

### Kézi telepítés (csak a CLI)

```bash
npm install -g github:haszno-labs/haszno-cli
```

> [!NOTE]
> Az `npx haszno-install` és az `npm install -g @haszno/cli` nem működik – a csomag nincs npm-en. A helyes telepítési útvonal: `github:haszno-labs/haszno-cli`.

### Futtatás telepítés nélkül

```bash
npx -y github:haszno-labs/haszno-cli account ping
```

### Telepítés ellenőrzése

```bash
haszno --version
# 0.1.0

haszno account ping
# API: OK elérhető
```

## Beállítás

A CLI az API címét és a hitelesítési adatokat a `--api-url` / `--api-key` jelzőkből, környezeti változókból vagy a `haszno login` által írt konfigurációs fájlból veszi. Saját gépen elég egyszer bejelentkezned:

```bash
haszno login --api-url https://haszno.com --api-key <your-api-key>
```

Szkriptekben, CI-ban és cron-feladatokban inkább exportáld a változókat:

```bash
export HASZNO_API_URL=https://haszno.com
export HASZNO_API_KEY=<your-api-key>
```

> [!NOTE]
> A konfigurációs fájl beolvasásához 2026. november 12-i vagy újabb CLI kell. A régebbi változat csak a jelzőket és a környezeti változókat olvassa; frissíts a telepítővel vagy így: `npx -y github:haszno-labs/haszno-cli`.

### Környezeti változók

| Változó | Leírás |
|---|---|
| `HASZNO_API_URL` | API-alapcím. Alapértelmezés: `https://haszno.com` |
| `HASZNO_API_KEY` | API-kulcs, az `x-api-key: <kulcs>` kérésfejlécben küldve |
| `HASZNO_BASIC` | `felhasználó:jelszó` a HTTP Basic hitelesítéshez, `Authorization: Basic …` fejlécként küldve. Csak akkor használja, ha nincs beállítva API-kulcs. |
| `ARFUTAR_API_URL` | A `HASZNO_API_URL` örökölt aliasa (csendes visszaesés) |
| `ARFUTAR_API_KEY` | A `HASZNO_API_KEY` örökölt aliasa (csendes visszaesés) |
| `ARFUTAR_BASIC` | A `HASZNO_BASIC` örökölt aliasa (csendes visszaesés) |

### Prioritási sorrend

A legmagasabbtól a legalacsonyabbig:

1. `--api-url` / `--api-key` jelzők
2. `HASZNO_API_URL`, `HASZNO_API_KEY`, `HASZNO_BASIC`
3. `ARFUTAR_API_URL`, `ARFUTAR_API_KEY`, `ARFUTAR_BASIC` (régi nevek)
4. `~/.config/haszno/config.json`
5. `~/.config/arfutar/config.json` (régi hely, csak akkor olvassa, ha a fenti fájl nem létezik)
6. `https://haszno.com`, hitelesítés nélkül

Az API-kulcs az `x-api-key` fejlécben megy. HTTP Basic hitelesítést csak akkor használ, ha nem talál API-kulcsot; ehhez nincs jelző.

Két szabály gondoskodik arról, hogy a hitelesítési adat ne kerüljön rossz szerverhez:

- A konfigurációs fájlt csak akkor olvassa be, ha sem jelző, sem környezeti változó nem ad hitelesítési adatot. A környezeti változóból jövő kulcsot soha nem küldi olyan URL-re, amelyet csak a konfigurációs fájl nevez meg.
- A konfigurációs fájlban lévő hitelesítési adatot csak arra az URL-re küldi el, amelyhez mentetted (a fájl `apiUrl` értéke, vagy `https://haszno.com`, ha nincs benne). Ha a `--api-url` vagy a `HASZNO_API_URL` másik szerverre mutat, ahhoz külön add meg a kulcsot.

Ha semmi nincs beállítva, a kérések hitelesítés nélkül mennek. A nyilvános demóvégpontokhoz ez elég.

### Konfigurációs fájl

A `haszno login` a `~/.config/haszno/config.json` fájlt írja (`600`-as fájlmóddal). A CLI és az [MCP-szerver](mcp.md#config-file) is ezt olvassa, így egy bejelentkezés mindkettőt beállítja.

```json
{
  "apiUrl": "https://haszno.com",
  "apiKey": "<your-api-key>"
}
```

A fájlban lévő `basicAuth` értéket (`user:password`) is figyelembe veszi. Ha a fájl nem érvényes JSON, vagy nem JSON-objektum, figyelmen kívül hagyja.

### Kérések

Minden kérés `Content-Type: application/json`, `Accept: application/json` és `User-Agent: haszno-cli/0.1.0` fejlécet küld. A HTTP `429` és `5xx` válaszokat, valamint a hálózati hibákat újrapróbálja, összesen legfeljebb 3 kísérlettel, 500 ms-ról induló exponenciális várakozással. Minden kísérlet 30 másodperc után időtúllépéssel leáll.

## Globális flagek

Ezek a flagek a gyökér `haszno` parancshoz tartoznak. Az alparancs elé és mögé is írhatod őket (a `haszno --json products list` és a `haszno products list --json` ugyanaz).

| Flag | Leírás |
|---|---|
| `--json` | Géppel olvasható JSON-kimenet |
| `--api-url <url>` | Felülírja a `HASZNO_API_URL`-t erre a hívásra |
| `--api-key <key>` | Felülírja a `HASZNO_API_KEY`-t erre a hívásra |
| `-V`, `--version` | A CLI verziójának kiírása |
| `-h`, `--help` | A parancs súgójának megjelenítése |

## Kimeneti formátumok

`--json` nélkül: ember által olvasható szöveg és táblázatok, magyar feliratokkal és üzenetekkel.

`--json` esetén: egyetlen JSON-dokumentum az stdout-on. A listázó parancsok JSON-tömböt adnak, kivéve, ha lent a parancs leírása burkoló objektumot említ (`catalogue search`, `ideas list`, `blog latest`). Egyes parancsok formázva, mások egy sorban írják ki a JSON-t; JSON-elemzővel (például `jq`-val) dolgozd fel, ne soronként.

A hibák sima szövegként kerülnek az stderr-re (többnyire `Hiba: <üzenet>`), `--json` módban is. Az egyetlen kivétel a `haszno ideas`, amely `--json` módban `{"error": "<üzenet>"}` formában írja a hibát az stderr-re.

## Kilépési kódok

| Kód | Jelentés |
|---|---|
| `0` | Sikeres. Akkor is ez, ha megszakítod a megerősítést, és akkor is, ha egy írási parancs `--yes` nélkül csak előnézetet ír ki (kivétel: `peers invite`, lásd lent). |
| `1` | Futási hiba: az API hibastátuszt adott vissza (a `401`-et is beleértve), a hálózati hiba 3 kísérlet után is fennállt, vagy a kért elem nem található. Az argumentumelemző által jelzett használati hibák (ismeretlen parancs vagy opció, hiányzó kötelező opció) szintén `1`-gyel lépnek ki. |
| `2` | A parancs által észlelt érvénytelen bemenet (például hibás `--status`-, `--days`- vagy azonosítóérték). Továbbá: az `account settings update` és a `feeds import-*` `--yes` nélkül, nem interaktív shellben, valamint a `haszno login` terminál nélkül. |

## Írási parancsok és megerősítés

Az írási parancsok `--yes` nélkül háromféleképpen viselkednek:

| Viselkedés `--yes` nélkül | Parancsok |
|---|---|
| **Előnézet, majd kilépés.** Kiírja, mi történne, és az írási végpont hívása nélkül kilép. Kilépési kód `0`, kivéve a `peers invite`-ot, amely `1`-gyel lép ki. | `proposals approve`, `proposals reject`, `proposals rollback`, `rules create`, `rules enable`, `rules disable`, `rules update`, `rules delete`, `rules run`, `rules run-all`, `rules trigger`, `rules automation pause`, `rules automation resume`, `import push`, `peers invite`, `peers accept` |
| **Interaktív kérdés.** `[y/N]` kérdést tesz fel (válasz: `y`), és csak igen esetén folytatja. | `account settings update`, `products update`, `products listing`, `products apply-prices`, `products describe`, `feeds import-supplier`, `feeds import-market`, `ideas fill-keywords` |
| **Interaktív kérdés `[i/n]`.** A folytatáshoz válaszolj `i`-vel (igen). Terminál nélkül a válasz nemnek számít. | `orders ship`, `orders demo` |

A `haszno import add` azonnal ír; nincs megerősítése és nincs `--yes` flagje.

Szkriptekben és agentekben mindig add meg a `--yes`-t egy írási parancsnál, miután a felhasználó jóváhagyta a műveletet. Terminál nélkül az `account settings update` és a `feeds import-*` `2`-es kóddal kilép, az `ideas fill-keywords --json` pedig megtagadja a futást.

---

## haszno login

Elmenti az API URL-t és a kulcsot a `~/.config/haszno/config.json` fájlba a CLI és az MCP-szerver számára. A `haszno configure` ugyanezt teszi.

**Szintaxis:** `haszno login [--api-url <url>] [--api-key <key>]`

Jelzőkkel kérdés nélkül elmenti a megadott értékeket, így szkriptből is használható. Jelzők nélkül bekéri az API URL-t (Enterrel marad az alapértelmezett `https://haszno.com`) és az API-kulcsot; jelzők és terminál nélkül `2`-es kóddal kilép. A fájlban már meglévő értékek megmaradnak, hacsak nem írod felül őket, a fájl pedig `600`-as móddal jön létre.

```bash
haszno login --api-url https://haszno.com --api-key <your-api-key>
# Konfigurációs fájl elmentve: /home/you/.config/haszno/config.json
```

> [!WARNING]
> A jelzőként megadott kulcs bekerülhet a shell előzményei közé. Közös gépen használd az interaktív bekérést.

---

## haszno account

| Alparancs | Mód | Leírás |
|---|---|---|
| `ping` | **Csak olvasás** | API-kapcsolat ellenőrzése (`GET /api/health`) |
| `whoami` | **Csak olvasás** | API-állapot és az aktuális árazási beállítások |
| `stats` | **Csak olvasás** | Irányítópult-összesítő: products, losing, overMarket, toFix, orders |
| `impact [--days <n>]` | **Csak olvasás** | Haszon-mérő az utolsó N napra (alapértelmezés: 30) |
| `suppliers` | **Csak olvasás** | Saját beszállítók listázása |
| `settings` | **Csak olvasás** | Az aktuális árazási beállítások megjelenítése |
| `settings update [--undercut-pct <n>] [--min-margin-pct <n>] [--vat-pct <n>] [--yes]` | **Írás** | Árazási beállítások frissítése |
| `version` | **Csak olvasás** | A CLI verziója, és hogy elérhető-e az API |

### haszno account ping

API-kapcsolat ellenőrzése. Az `/api/health`-hez nem kell hitelesítés. `1`-es kóddal lép ki, ha az API nem `ok`-val válaszol.

**Szintaxis:** `haszno account ping`

```bash
haszno account ping
```

### haszno account stats

Az irányítópult-összesítő kiírása.

**Szintaxis:** `haszno account stats [--json]`

```bash
haszno account stats --json
```

**JSON-kimenet:** `{ products, losing, overMarket, toFix, orders }`

**Lásd még:** `haszno account impact` · MCP: `haszno_account_get_stats`

### haszno account impact

Haszon-mérő az utolsó N napra.

**Szintaxis:** `haszno account impact [--days <n>] [--json]`

| Flag | Típus | Alapértelmezés | Leírás |
|---|---|---|---|
| `--days` | int | 30 | Visszatekintési napok száma (pozitív egész) |

```bash
haszno account impact --days 7 --json
```

**JSON-kimenet:** többek között `days`, `extraProfit`, `baseline`, `pctGain`, `orders`, `autoForwardedOrders`

### haszno account settings update

Árazási beállítások frissítése. **Írás** – `[y/N]` kérdést tesz fel, hacsak nem adod meg a `--yes`-t. A három flag közül legalább egyet adj meg; a többi megtartja az aktuális értékét.

**Szintaxis:** `haszno account settings update [--undercut-pct <n>] [--min-margin-pct <n>] [--vat-pct <n>] [--yes]`

| Flag | Típus | Leírás |
|---|---|---|
| `--undercut-pct` | number | Hány százalékkal áraz a piaci minimum alá |
| `--min-margin-pct` | number | Minimális haszon százalékban |
| `--vat-pct` | number | ÁFA-kulcs a bruttó/nettó átváltáshoz |
| `--yes` | bool | A megerősítő kérdés kihagyása |

```bash
haszno account settings update --undercut-pct 1 --min-margin-pct 10 --vat-pct 27 --yes
```

---

## haszno products

A saját boltod termékei és árazása.

| Alparancs | Mód | Leírás |
|---|---|---|
| `list [--all] [--losing] [--over-market] [--cats <names>]` | **Csak olvasás** | Termékek listázása árréssel és árállapottal |
| `show <id>` | **Csak olvasás** | Egy termék összes adatának megjelenítése |
| `update <id> [--price <gross>] [--market-min <gross>] [--market-shop <name>] [--yes]` | **Írás** | Piaci adatok frissítése vagy saját eladási ár beállítása |
| `listing <id> --on\|--off [--yes]` | **Írás** | Termék listára tétele vagy levétele |
| `apply-prices [--ids <id,...>] [--yes]` | **Írás** | A javasolt árak alkalmazása |
| `describe <id> [--yes]` | **Írás** | AI-termékleírás generálása |
| `stats` | **Csak olvasás** | Ugyanaz az irányítópult-összesítő, mint az `account stats` |
| `impact [--days <n>]` | **Csak olvasás** | Ugyanaz a Haszon-mérő, mint az `account impact`; `--days` nélkül az API alapértéke érvényes |

Az írási alparancsok `[y/N]` kérdést tesznek fel, hacsak nem adod meg a `--yes`-t.

### haszno products list

A termékeid lekérése és kiírása.

**Szintaxis:** `haszno products list [--all] [--losing] [--over-market] [--cats <names>] [--json]`

| Flag | Típus | Alapértelmezés | Leírás |
|---|---|---|---|
| `--all` | bool | false | A listán kívüli termékek is szerepeljenek |
| `--losing` | bool | false | Csak a negatív aktuális árrésű termékek |
| `--over-market` | bool | false | Csak a piaci minimum fölé árazott termékek |
| `--cats` | string | (mind) | Vesszővel elválasztott **beszállítónév**-részletek (kis- és nagybetű nem számít), például `auto,kert`. A beszállító nevére szűr, nem kategóriakulcsokra. |

```bash
# Human-readable table
haszno products list

# JSON output — all fields
haszno products list --json

# Include unlisted, filter with jq
haszno products list --all --json | jq '.[] | select(.current.marginPct < 10)'
```

**JSON-mezők termékenként (válogatás):** `id`, `sku`, `name`, `supplierName`, `listed`, `priceGross`, `costNet`, `stock`, `current.marginPct`, `recommended.priceGross`, `marketMinGross`, `marketShop`

> [!NOTE]
> Az MCP-szervernek még nincsenek `haszno_products_*` eszközei (**Tervezett**). Amíg meg nem jelennek, termékműveletekhez a CLI-t használd.

### haszno products update

**Szintaxis:** `haszno products update <id> [--price <gross>] [--market-min <gross>] [--market-shop <name>] [--yes]`

| Flag | Típus | Leírás |
|---|---|---|
| `--price` | int | Saját eladási ár (bruttó HUF) |
| `--market-min` | int | Piaci minimumár (bruttó HUF); a `null` törli |
| `--market-shop` | string | A piaci forrásbolt neve; a `null` törli |
| `--yes` | bool | A megerősítő kérdés kihagyása |

Adj meg legalább egyet a `--price`, `--market-min`, `--market-shop` közül, különben a parancs `2`-es kóddal kilép.

### haszno products apply-prices

A motor által javasolt árak alkalmazása. **Írás** – `[y/N]` kérdést tesz fel, hacsak nem adod meg a `--yes`-t.

**Szintaxis:** `haszno products apply-prices [--ids <id,...>] [--yes] [--json]`

| Flag | Típus | Alapértelmezés | Leírás |
|---|---|---|---|
| `--ids` | string | (mind) | Vesszővel elválasztott termékazonosítók. Elhagyva az összes termékre vonatkozik. |
| `--yes` | bool | false | A megerősítő kérdés kihagyása |

```bash
# Prompts before changing anything
haszno products apply-prices --ids 1,2,3

# After the user has confirmed
haszno products apply-prices --ids 1,2,3 --yes
```

**JSON-kimenet:** `{ changed, total }`

---

## haszno catalogue

Keresés a partnerkatalógusban.

| Alparancs | Mód | Leírás |
|---|---|---|
| `search [flags]` | **Csak olvasás** | Keresés a partnerkatalógusban (`GET /api/catalogue/products`) |

> [!NOTE]
> A CLI 0.1.0-ban nincs `haszno catalog` parancscsoport. A hálózati beszállítók listázásához vagy egy beszállító katalógusának böngészéséhez használd a `haszno_catalog_list_suppliers`, `haszno_catalog_supplier_products` és `haszno_catalog_supplier_view` MCP-eszközt, vagy a `haszno catalogue search --partner <id>` parancsot.

### haszno catalogue search

**Szintaxis:** `haszno catalogue search [--q <szöveg>] [--cats <kulcsok>] [--partner <id>] [--min-margin <pct>] [--max-price <ft>] [--min-price <ft>] [--in-stock] [--country <kód>] [--sort <kulcs>] [--page <n>] [--page-size <n>] [--json]`

| Flag | Típus | Alapértelmezés | Leírás |
|---|---|---|---|
| `--q` | string | (mind) | Szabad szöveges keresés (név vagy kategória) |
| `--cats` | string | (mind) | Vesszővel elválasztott kategóriakulcsok |
| `--partner` | int | (mind) | Szűrés partner- (beszállító-) azonosítóra |
| `--min-margin` | number | – | Minimális árrés (%) |
| `--max-price` | int | – | Maximális ajánlott fogyasztói ár (bruttó HUF) |
| `--min-price` | int | – | Minimális ajánlott fogyasztói ár (bruttó HUF) |
| `--in-stock` | bool | false | Csak raktáron lévő tételek |
| `--country` | string | (mind) | A beszállító országkódja, például `HU`, `DE` |
| `--sort` | string | `name_asc` | `margin_desc`, `price_asc`, `price_desc`, `name_asc` |
| `--page` | int | 1 | Oldalszám (1-től) |
| `--page-size` | int | 24 | Találatok oldalanként (az API legfeljebb 100-at enged) |

**JSON-kimenet:** `{ items, total, facets }`. Minden tételben van `id` (a katalógustermék-azonosító, amelyet a `haszno import add` vár), `name`, `partnerId`, `partnerName`, `categoryKey`, `wholesaleNet`, `rrpGross`, `marginPct`, `stock`, `inImportList`, `inShop`.

```bash
# Find in-stock garden items with at least 20% margin
haszno catalogue search --cats kert --min-margin 20 --in-stock --json \
  | jq '.items[] | {id, name, marginPct, stock}'
```

---

## haszno import

Importlista: katalógustermékek előkészítése, majd létrehozásuk a boltodban vagy kiküldésük egy bekötött webshopba.

| Alparancs | Mód | Leírás |
|---|---|---|
| `list [--status <s>] [--partner <id>] [--q <szöveg>]` | **Csak olvasás** | Az importlista tételeinek listázása |
| `add <id> [<id>...]` | **Írás** | Katalógustermékek (katalógustermék-azonosítók) felvétele az importlistára. Azonnal lefut, megerősítés nélkül. |
| `push --ids <ids> [--target <connectionId>] [--yes]` | **Írás** | Importlista-tételek kiküldése (importlistatétel-azonosítók, kötelező) |

**Állapotértékek a `--status`-hoz:** `varakozik`, `feltoltve`, `elvetve` Az API ezekre az értékekre szűr; a CLI beépített súgója a `varakozik`, `kuldve`, `kesz`, `hiba` értékeket sorolja fel, amelyek célboltonkénti küldési állapotok, nem tételállapotok.

A `push` `--target` nélkül a `POST /api/import-list/push` végpontot hívja, amely létrehozza a termékeket a Haszno-boltodban, és `{ pushed }`-ot ad vissza. `--target <connectionId>` megadásával (a `haszno connections list`-ből) a `POST /api/connect/stores/<connectionId>/push` végpontot hívja, amely az adott bekötött webshopba küldi őket, és `{ pushed, failed, errors }`-t ad vissza.

> [!WARNING]
> A `haszno import push` `--yes` nélkül csak előnézetet ír ki, és nem küld semmit. A tényleges kiküldéshez add meg a `--yes`-t.

```bash
# Stage two catalogue products (catalogue product IDs from `catalogue search`)
haszno import add 101 102

# Look up the import list item IDs
haszno import list --status varakozik --json

# Preview: what push would do
haszno import push --ids 5,6

# Create the items in your Haszno shop
haszno import push --ids 5,6 --yes

# Push to a specific connected webshop
haszno import push --ids 5,6 --target 1 --yes
```

---

## haszno connections

| Alparancs | Mód | Leírás |
|---|---|---|
| `list [--status <s>]` | **Csak olvasás** | Bekötött webshopok listázása |

**Állapotértékek:** `uj`, `domain_ok`, `kapcsolva`, `hiba`

```bash
haszno connections list --status kapcsolva --json
```

---

## haszno proposals

| Alparancs | Mód | Leírás |
|---|---|---|
| `list [-s, --status <s>]` | **Csak olvasás** | Árjavaslatok listázása (alapértelmezett állapot: `pending`) |
| `show <id>` | **Csak olvasás** | Egy árjavaslat megjelenítése |
| `approve [--ids <id,...>] [--yes]` | **Írás** | Árjavaslatok jóváhagyása (`--ids` nélkül az összes függőben lévőé). Visszaad egy `batchId`-t. |
| `reject --ids <id,...> [--yes]` | **Írás** | Megadott árjavaslatok elutasítása |
| `rollback --batch <batchId> [--yes]` | **Írás** | Jóváhagyott batch visszagörgetése |

**Állapotértékek a `--status`-hoz:** `pending`, `approved`, `rejected`, `rolled_back`

`--yes` nélkül az `approve`, a `reject` és a `rollback` egy `[DRY-RUN]` sort ír ki, és `0`-val kilép.

> [!WARNING]
> Jegyezd fel az `approve` által visszaadott `batchId`-t: a `rollback`-hez kell. A jóváhagyott árjavaslatoknál a `haszno proposals list --status approved --json` kimenetében is megtalálod.

```bash
# List pending proposals
haszno proposals list --status pending --json

# Preview the approval
haszno proposals approve --ids 10,11,12

# Approve after the user has confirmed
haszno proposals approve --ids 10,11,12 --yes
# Jóváhagyva: 3 javaslat (batch: <batchId>)

# Roll back if needed
haszno proposals rollback --batch <batchId> --yes
```

---

## haszno rules

Automatizálási szabályok. Minden írási alparancs `[DRY-RUN]` előnézetet ír ki és `0`-val kilép, hacsak nem adod meg a `--yes`-t.

| Alparancs | Mód | Leírás |
|---|---|---|
| `templates` | **Csak olvasás** | Beépített szabálysablonok listázása |
| `list [--enabled\|--disabled]` | **Csak olvasás** | Szabályok listázása |
| `runs [--limit <n>]` | **Csak olvasás** | Szabályfuttatási napló (alapértelmezett limit: 50) |
| `automation` | **Csak olvasás** | A kill switch állapotának megjelenítése (`{ paused }`) |
| `create --template <key> --name <name> [--disabled] [--yes]` | **Írás** | Szabály létrehozása sablonból (aktív, hacsak nem adod meg a `--disabled`-t) |
| `enable <id> [--yes]` | **Írás** | Szabály bekapcsolása |
| `disable <id> [--yes]` | **Írás** | Szabály kikapcsolása |
| `update <id> [--name <name>] [--trigger <trigger>] [--enable\|--disable] [--yes]` | **Írás** | Szabály nevének, triggerének vagy állapotának módosítása |
| `delete <id> [--yes]` | **Írás** | Szabály végleges törlése |
| `run <id> [--yes]` | **Írás** | Egyetlen szabály azonnali futtatása |
| `run-all [--yes]` | **Írás** | Minden manuális triggeres szabály futtatása |
| `trigger <name> [--ids <id,...>] [--yes]` | **Írás** | Névvel azonosított trigger indítása, igény szerint csak a megadott termékazonosítókra |
| `automation pause [--yes]` | **Írás** | Az automatizálás szüneteltetése |
| `automation resume [--yes]` | **Írás** | Az automatizálás folytatása |

**Sablonkulcsok:** `keszlet_or`, `arjavaslat`, `felar_savok`, `veszteseg_riasztas`. **Beépített triggerek:** `feed_import`, `market_price`, `manual`. A CLI csak sablonból tud szabályt létrehozni; egyéni feltételekhez vagy műveletekhez nincs flagje.

> [!WARNING]
> Minden tömeges írás előtt ellenőrizd a `haszno rules automation --json` paranccsal. Ha a `paused` értéke `true`, ne hagyj jóvá árjavaslatokat és ne futtass szabályokat.

```bash
# Check kill switch
haszno rules automation --json

# Browse templates
haszno rules templates --json

# View execution log
haszno rules runs --limit 10 --json

# Pause automation (without --yes this is only a preview)
haszno rules automation pause --yes
```

---

## haszno orders

| Alparancs | Mód | Leírás |
|---|---|---|
| `list [--status <s>]` | **Csak olvasás** | Az 50 legutóbbi rendelés listázása tételekkel és eseményekkel |
| `show <id>` | **Csak olvasás** | Egy rendelés tételekkel és eseménynaplóval |
| `ship <id> [--yes]` | **Írás** | Rendelés megjelölése szállítottként |
| `demo [--yes]` | **Írás** | Demórendelés létrehozása (`POST /api/demo/order`) |

**Állapotértékek a `--status`-hoz:** `received`, `forwarded`, `shipped`, `error`

A `ship` és a `demo` `[i/n]` kérdést tesz fel, hacsak nem adod meg a `--yes`-t.

```bash
# Find error-status orders
haszno orders list --status error --json

# Mark shipped
haszno orders ship 42 --yes
```

---

## haszno peers

P2P-partnermeghívók a beszállítói hozzáférés megosztásához egy partnerbolttal.

| Alparancs | Mód | Leírás |
|---|---|---|
| `list` | **Csak olvasás** | Saját meghívók listázása |
| `invite --supplier <id> --expires <datetime> [--yes]` | **Írás** | Meghívó létrehozása |
| `accept <code> --acceptor <shop> [--yes]` | **Írás** | Partnermeghívó elfogadása |

> [!NOTE]
> `--yes` nélkül az `invite` és az `accept` is csak előnézetet ír ki, és nem hozza létre, illetve nem fogadja el a meghívót. Ilyenkor az `invite` `1`-es, az `accept` `0`-s kóddal lép ki.

```bash
# Preview (no --yes)
haszno peers invite --supplier 7 --expires 2026-12-01T00:00:00Z

# Create invite
haszno peers invite --supplier 7 --expires 2026-12-01T00:00:00Z --yes

# Accept a received invite code
haszno peers accept INVITE-XYZ --acceptor my-shop --yes
```

---

## haszno ideas

Termékötletek a saját termékeidből, trendpontszám és árrés szerint rangsorolva (`GET /api/recommendations`).

| Alparancs | Mód | Leírás |
|---|---|---|
| `list [--min-score <n>] [--supplier <name>] [--limit <n>]` | **Csak olvasás** | Ötletek trendpontszám, majd árrés szerint rendezve |
| `fill-keywords [--yes]` | **Írás** | Hiányzó trendkulcsszavak kitöltése AI-jal |

| Flag (`list`) | Típus | Leírás |
|---|---|---|
| `--min-score` | number | Minimális trendpontszám (0–100) |
| `--supplier` | string | Beszállítónév-részlet (kis- és nagybetű nem számít) |
| `--limit` | int | Tételek maximális száma |

**JSON-kimenet (`list`):** `{ anchor, geo, total, filtered, items }`. Minden tételben van `rank`, `id`, `sku`, `name`, `supplier`, `stock`, `costNet`, `suggestedPriceGross`, `marginNet`, `marginPct`, `trendScore`.

```bash
haszno ideas list --limit 10 --json | jq '.items[] | {name, trendScore}'
```

---

## haszno feeds

Feedimport és kimenő feedek URL-jei.

| Alparancs | Mód | Leírás |
|---|---|---|
| `import-supplier --supplier <id> --format <csv\|xml> [--file <path>] [--yes]` | **Írás** | Beszállítói feed importálása fájlból vagy stdin-ről |
| `import-market [--file <path>] [--yes]` | **Írás** | Piaci árak importálása CSV-fájlból vagy stdin-ről |
| `urls [--fetch]` | **Csak olvasás** | A kimenő Árukereső- és Google Shopping-feed URL-jének kiírása |

Az `import-supplier`-nél a `--supplier` és a `--format` kötelező. `--file` nélkül a parancsok az stdin-ről olvasnak; mivel ilyenkor az stdin nem terminál, a `--yes`-t is add meg.

Az `urls` a `<alapcím>/feed/arukereso.xml` és a `<alapcím>/feed/google.xml` címet írja ki. `--fetch` esetén le is tölti őket, hitelesítési adatok küldése nélkül.

```bash
# Import a CSV supplier feed
haszno feeds import-supplier --supplier 3 --format csv --file ./supplier-feed.csv --yes
# Létrehozva   142
# Frissítve    7
# Összesen     149
```

**JSON-kimenet:** `import-supplier` → `{ created, updated, total }`; `import-market` → `{ matched, total }`

---

## haszno blog

| Alparancs | Mód | Leírás |
|---|---|---|
| `latest [--period <het\|honap>] [--limit <n>]` | **Csak olvasás** | Legfrissebb piaci összefoglaló(k); a `--limit` alapértéke 1 |

> [!NOTE]
> A blogbejegyzések legalább 5 bolt összesített adatait tartalmazzák. Egyedi boltadatok soha nem kerülnek elő.

**JSON-kimenet:** `{ posts, total, … }`

```bash
haszno blog latest --period honap --limit 3 --json
```

---

## Lásd még

- [Agentek áttekintése](agents.md) – döntési táblázat, egylépéses telepítő, biztonsági modell
- [MCP-szerver](mcp.md) – teljes eszközhivatkozás a Claude Code-hoz és MCP-kliensekhez
- [Hitelesítés](authentication.md) – hogyan szerezhetsz API-kulcsot a demón túl
