---
title: "CLI-automatisering en uitvoer"
description: "Gebruik de AI Glot CLI veilig in scripts en CI met JSON of NDJSON, omgevingsreferenties, profielen, afsluitcodes en begrensde nieuwe pogingen."
canonical: "https://ai-glot.com/docs/nl/cli/automation"
updated: "2026-10-12"
---

# CLI-automatisering en uitvoer

De CLI toont leesbare tabellen in een terminal en JSON wanneer de uitvoer wordt doorgestuurd. Zo werkt dezelfde opdracht zowel interactief als in automatisering.

```bash
aiglot batches list                    # tabel in een terminal
aiglot batches list | jq '.data[0].id' # JSON bij doorsturen
aiglot batches list --output ndjson    # één object per regel
aiglot account --json                  # expliciet JSON
```

Fouten gaan naar standaardfout, net als waarschuwingen die de aanroeper moet kunnen zien, bijvoorbeeld wanneer een pagina met resultaten is afgekapt. Standaarduitvoer kan daardoor veilig naar een ander programma worden doorgestuurd.

## Wachten tot een vertaling klaar is

Maak eerst het plan en controleer de omvang, uitsluitingen en berekende kosten.
De CLI geeft afzonderlijke objecten rechtstreeks terug: lees `.id`, `.status` en `.plan`,
niet `.data.id` of `.data.status`. Opdrachten voor lijsten gebruiken nog steeds een `data`-array.

```bash
set -euo pipefail

batch=$(aiglot batches create catalogue.csv --instruction "Translate into French" --json)
id=$(printf '%s' "$batch" | jq -er '.id')
printf '%s\n' "$batch" | jq '.plan'
```

Voer het volgende blok pas uit nadat het plan, de geselecteerde Standard-kwaliteit en de berekende kosten zijn goedgekeurd. Bestaande goedkeuring volstaat als die hierop van toepassing is.
Er wordt maximaal 60 keer gepolld. Het wachten stopt bij de status completed, failed of cancelled.
Wordt het proces onderbroken of loopt het vast door een time-out, bewaar dan de batch-ID en hervat die batch zonder een nieuwe vertaling te starten.

```bash
aiglot batches approve "$id" --quality standard --json

for ((attempt = 0; attempt < 60; attempt++)); do
  status=$(aiglot batches get "$id" --timeout 15 --json | jq -er '.status')
  case "$status" in
    completed)
      aiglot batches download "$id" --output result.csv
      break
      ;;
    failed|cancelled)
      printf 'Batch %s is geëindigd met status %s.\n' "$id" "$status" >&2
      exit 1
      ;;
    awaiting_instructions|awaiting_approval)
      printf 'Voor batch %s is een beslissing nodig; controleer het plan voordat je verdergaat.\n' "$id" >&2
      exit 2
      ;;
  esac
  if ((attempt == 59)); then
    printf 'Wachtlimiet bereikt. Hervat batch %s; maak geen duplicaat aan.\n' "$id" >&2
    exit 1
  fi
  sleep 5
done
```

Dit zijn alle statussen die een vertaling kan melden, waaronder de drie eindstatussen. Ze geven allemaal antwoord op dezelfde vraag: wie wacht, en waarop?

| Status                  | Betekenis                                                                              | Wie wacht                       | Eindstatus |
| ----------------------- | -------------------------------------------------------------------------------------- | ------------------------------- | :--------: |
| `analyzing`             | de structuur van het bestand wordt uitgelezen                                          | wij, enkele seconden            |            |
| `awaiting_instructions` | het bestand is uitgelezen; er is nog geen opdracht gegeven                             | **jij**                         |            |
| `awaiting_approval`     | er staat een plan klaar met de bijbehorende kosten                                     | **jij**                         |            |
| `translating`           | de vertaling wordt uitgevoerd; dit is de enige status waarbij credits worden verbruikt | wij                             |            |
| `completed`             | klaar, het resultaatbestand is beschikbaar                                             | niemand                         |      ✓     |
| `failed`                | beëindigd zonder resultaat; lees `error.code`                                          | jij, om het opnieuw te proberen |      ✓     |
| `cancelled`             | opzettelijk gestopt; alleen uitgevoerd werk wordt in rekening gebracht                 | niemand                         |      ✓     |

> **Warning: Wacht op een eindstatus, niet op één specifieke status**
>
> Let op `completed`, `failed` en `cancelled` en behandel elke andere waarde als 'nog bezig', in plaats van alle niet-eindstatussen afzonderlijk op te sommen. Als er later een status wordt toegevoegd, zou die anders als eindstatus worden gezien en zou je script een bestand downloaden dat er niet is.
>
> Twee namen waarop een script niet moet wachten: `done`, de interne naam die vroeger voor `completed` werd gebruikt, en `queued`, die wel in de enum stond maar nooit is uitgegeven en inmiddels is verwijderd. Een lus die op een van beide wacht, eindigt nooit, hoe lang de vertaling ook duurt. Een vergelijking met een waarde die nooit voorkomt, levert namelijk geen fout op. Ze is simpelweg altijd onwaar.

## Paginering

`batches list` en `glossaries list` gebruiken cursors. Geef de `next_cursor` uit het vorige antwoord ongewijzigd mee met `--cursor`, of laat `--all` de cursor volgen tot `has_more` `false` is (met een maximum van 200 pagina's als extra begrenzing):

```bash
aiglot batches list --status completed --all
aiglot glossaries list --all --output ndjson
```

Met `--output ndjson` geeft `--all` elke rij van elke pagina weer zodra die binnenkomt. In de modi `table` en `json` geeft de opdracht één gecombineerd resultaat weer met `has_more: false`, `next_cursor: null` en een aantal opgehaalde pagina's in `pages_fetched` in plaats van `request_id`, omdat er geen enkele aanvraag kan worden vermeld wanneer er meerdere zijn uitgevoerd.

> **Warning: Bij een afgekapt resultatenoverzicht verschijnt een waarschuwing op standaardfout**
>
> Zonder `--all` geeft de CLI telkens wanneer een pagina `has_more: true` heeft in elke uitvoermodus een waarschuwing op standaardfout, met daarin de `next_cursor`. Dit is vooral belangrijk bij `ndjson`, omdat de standaarduitvoer daarin alleen onbewerkte rijen bevat: de waarschuwing is het enige signaal dat een gedeeltelijke pagina niet de volledige lijst is.

## Verificatie in CI

Maak een API-sleutel met alleen de minimaal benodigde rechten en sla deze op in de geheimenbeheerder van de CI-provider:

```bash
export AIGLOT_API_KEY="aig_live_…"
aiglot account --json
```

De CLI controleert de referenties in deze volgorde: `AIGLOT_API_KEY`, de OS-sleutelhanger en daarna het beveiligde configuratiebestand.

## Afsluitcodes

| Code | Betekenis                          |
| ---: | ---------------------------------- |
|    0 | Geslaagd                           |
|    1 | API- of serverfout                 |
|    2 | Ongeldige opdracht of argumenten   |
|    3 | Verificatie- of toegangsprobleem   |
|    4 | Bron niet gevonden                 |
|    5 | Verzoeklimiet bereikt              |
|    6 | Conflict met de status van de bron |

Scripts moeten beslissingen baseren op de afsluitcode of de gestructureerde `error.code`, niet op de tekst van de foutmelding.

## Nieuwe pogingen

Opnieuw proberen gebeurt automatisch, maar alleen als dat veilig is. `429` wordt bij elke opdracht opnieuw geprobeerd, met inachtneming van `Retry-After` en begrensde wachttijden. `408` en `5xx` worden alleen opnieuw geprobeerd voor verzoeken die idempotent zijn (RFC 9110 §9.2.2): leesverzoeken, `glossaries replace` en `glossaries delete`.

`glossaries create`, `glossaries add`, `glossaries remove`, `batches rename` en `batches archive` worden niet opnieuw geprobeerd na een `5xx`, omdat de wijziging mogelijk al is doorgevoerd en een tweede poging deze dubbel zou toepassen. Zulke fouten worden aan je script gemeld met afsluitcode `1`. Lees de bron opnieuw uit en bepaal zelf of je het opnieuw probeert, in plaats van blind opnieuw te proberen.

Gebruik `--no-retry` als de aanroeper het beleid voor nieuwe pogingen bepaalt, en `--timeout <seconds>` (standaard 60) om de duur van één verzoek te begrenzen. Bij destructieve opdrachten wordt nooit eindeloos op een interactieve prompt gewacht: bij niet-interactief gebruik moet `--force` worden meegegeven.

## Profielen

Gebruik benoemde profielen om referenties voor verschillende werkruimten of omgevingen gescheiden te houden:

```bash
aiglot --profile client-a auth login --key "$CLIENT_A_KEY"
aiglot --profile client-a account
export AIGLOT_PROFILE=client-a
```

## Omgevingsvariabelen

| Variabele            | Doel                                                                                       |
| -------------------- | ------------------------------------------------------------------------------------------ |
| `AIGLOT_API_KEY`     | API-sleutel; krijgt voorrang op opgeslagen referenties                                     |
| `AIGLOT_PROFILE`     | Benoemd referentieprofiel                                                                  |
| `AIGLOT_NO_TUI`      | Dwingt machineleesbare uitvoer af                                                          |
| `AIGLOT_NO_KEYCHAIN` | Slaat de sleutelhanger van het besturingssysteem over                                      |
| `NO_COLOR`           | Standaard (no-color.org). Schakelt alleen kleur uit en **wijzigt niet** de uitvoerindeling |

> **Warning: Druk geen geheimen af**
>
> Gebruik geen shell-tracing rond verificatie en geef `AIGLOT_API_KEY` nooit weer. Scherm autorisatieheaders af in CI-logboeken en foutartefacten.
