Yaak CLI Skill
Die yaak CLI (@yaakapp/cli) steuert den Yaak Desktop-API-Client vom Terminal aus. Sie liest und schreibt dieselbe lokale SQLite-Datenbank wie die Desktop-App – Änderungen werden sofort in beide Richtungen übernommen.
Voraussetzungen
yaakCLI installiert:npm install -g @yaakapp/cli- Yaak Desktop-App (optional, aber für visuelle Überprüfung empfohlen)
Globale Flags
| Flag | Zweck |
|---|---|
--data-dir <DIR> | Benutzerdefiniertes Datenverzeichnis |
-e, --environment <ID> | Umgebungs-ID für Variablenersetzung |
--cookie-jar <ID> | Cookie-Jar-ID für die Ausführung von Requests |
-v, --verbose | Ausführliche Ausgabe (Ereignisse, gestreamter Body) |
--log [LEVEL] | CLI-Protokollierung (error|warn|info|debug|trace) |
Befehlsbaum
yaak
├── workspace list | show <id> | create | update <id> | delete <id> [--yes]
├── request list [<ws-id>] | show <id> | create [<ws-id>] | update <id> | delete <id> [--yes] | send <id> | schema <type>
├── folder list [<ws-id>] | show <id> | create -n <name> [<ws-id>] | update <id> | delete <id> [--yes]
├── environment list [<ws-id>] | show <id> | create | update <id> | delete <id> [--yes]
├── cookie-jar list [<ws-id>]
├── send <ID> # request, folder, oder workspace
├── auth login | logout | whoami
└── plugin build | dev | generate | install | publish
Multi-Workspace-Regel: Wenn nur ein Workspace existiert, ist [<ws-id>] optional. Bei mehreren Workspaces MUSS die Workspace-ID als erstes positionsabhängiges Argument übergeben werden.
Workspaces
yaak workspace list # Alle Workspaces auflisten
yaak workspace show <ws-id> # Vollständiges JSON
yaak workspace create -n "Meine API" # Nach Namen erstellen
yaak workspace create --json '{"name":"Meine API","headers":[...]}' # Mit Konfiguration erstellen
yaak workspace update <ws-id> --json '{"name":"Umbenannt"}'
yaak workspace delete <ws-id> --yes # Nicht-interaktives Löschen
Ordner
yaak folder list [<ws-id>] # Ordner im Workspace auflisten
yaak folder show <folder-id> # Vollständiges JSON
yaak folder create -n "Auth" [<ws-id>] # Im Workspace erstellen
yaak folder create --json '{"name":"Auth","workspaceId":"wk_..."}' [<ws-id>]
yaak folder update <folder-id> --json '{"name":"Umbenannt"}'
yaak folder delete <folder-id> --yes
Requests
Auflisten & Inspizieren
yaak request list [<ws-id>] # Alle Requests auflisten
yaak request show <req-id> # Vollständiges JSON (Methode, URL, Header, Body usw.)
Erstellen
Kurze Flags:
yaak request create [<ws-id>] -n "Benutzer abrufen" -m GET -u "https://api.example.com/users"
Vollständiges JSON:
yaak request create [<ws-id>] --json '{
"name": "Benutzer erstellen",
"method": "POST",
"url": "https://api.example.com/users",
"folderId": "fl_...",
"bodyType": "application/json",
"body": {
"text": "{\"name\":\"test\",\"email\":\"[email protected]\"}"
},
"headers": [
{"name":"Authorization","value":"Bearer token","enabled":true}
]
}'
Wichtige Felder für --json:
| Feld | Typ | Hinweise |
|---|---|---|
name | string | Anzeigename |
method | string | GET, POST, PUT, PATCH, DELETE |
url | string | Request-URL |
folderId | string | ID des übergeordneten Ordners |
bodyType | string | application/json, multipart/form-data, application/x-www-form-urlencoded, text/plain usw. |
body.text | string | Body-Inhalt (JSON für application/json stringifizieren) |
headers | array | [{name, value, enabled}] |
authenticationType | string | basic, bearer, oauth2 usw. |
authentication | object | Auth-Konfiguration pro Typ |
Aktualisieren
yaak request update <req-id> --json '{"name":"Aktualisierter Name","url":"https://new-url.com"}'
Löschen
yaak request delete <req-id> --yes
Senden
yaak send <req-id> # Einen einzelnen Request senden
yaak send <req-id> -v # Ausführlich (Header, Ereignisse)
yaak send <folder-id> # Alle Requests im Ordner senden
yaak send <ws-id> --parallel --fail-fast # Gesamten Workspace senden
Send-Flags:
--parallel— Requests parallel ausführen--fail-fast— Bei erstem Fehler abbrechen (funktioniert mit Ordner-/Workspace-Sendungen)-e <env-id>— Umgebung für Variablenersetzung verwenden-v— Ausführliche Ausgabe (zeigt Request-/Response-Header, gestreamten Body)
Schema-Introspection
yaak request schema http # JSON-Schema für HTTP-Requests
yaak request schema grpc # JSON-Schema für gRPC-Requests
yaak request schema websocket # JSON-Schema für WebSocket-Requests
Verwenden Sie dies, um die genaue --json-Payload-Struktur für create/update zu verstehen.
Umgebungen
yaak environment list [<ws-id>] # Umgebungen auflisten
yaak environment show <env-id> # Vollständiges JSON mit Variablen
yaak environment create [<ws-id>] -n "Produktion"
yaak environment update <env-id> --json '{
"name": "Produktion",
"variables": [
{"name":"BASE_URL","value":"https://api.prod.com"},
{"name":"API_KEY","value":"secret123"}
]
}'
yaak environment delete <env-id> --yes
Umgebungen verwenden
Übergeben Sie -e <env-id> an jeden send-Befehl für die Variablenersetzung:
yaak send <req-id> -e <env-id>
Vorlagensyntax in Requests:
- Variablen:
${[ my_var ]} - Funktionen:
${[ uuid() ]},${[ timestamp() ]},${[ fs.readFile('/pfad') ]}
Auth
yaak auth whoami # Anmeldestatus prüfen
yaak auth login # Über Browser anmelden
yaak auth logout # Abmelden
Batch-Operationen
Mehrere Requests aus einem Skript erstellen
#!/bin/bash
WS="wk_..."
FL_AUTH="fl_..."
FL_PROD="fl_..."
# Auth-Endpunkte
yaak request create "$WS" --json '{"name":"Anmelden","method":"POST","url":"https://api.example.com/auth/login","folderId":"'"$FL_AUTH"'","bodyType":"application/json","body":{"text":"{\"username\":\"user\",\"password\":\"pass\"}"}}'
yaak request create "$WS" --json '{"name":"Ich","method":"GET","url":"https://api.example.com/auth/me","folderId":"'"$FL_AUTH"'"}'
# CRUD-Endpunkte
for op in "GET list /users" "POST create /users" "GET get /users/1" "PUT update /users/1" "DELETE delete /users/1"; do
read -r method label path <<< "$op"
yaak request create "$WS" --json '{"name":"'"${label^}"' '"${path#/}"'","method":"'"$method"'","url":"https://api.example.com'"$path"'","folderId":"'"$FL_PROD"'"}'
done
Alle Requests in einem Workspace löschen
yaak request list <ws-id> | awk '{print $1}' | while read id; do
yaak request delete "$id" --yes
done
Workspace-Struktur in neuen Workspace klonen
# Neuen Workspace erstellen
NEW_WS=$(yaak workspace create -n "Kopie" | awk '{print $NF}')
# Ordner erstellen
yaak folder list <alter-ws> | while read id name; do
yaak folder create -n "$name" "$NEW_WS"
done
# Dann Requests mit neuen Ordner-IDs erstellen
JSON-Ausgabe
Alle show- und list-Befehle geben JSON aus (oder eine Zeile pro Element bei list). Zur Filterung an jq weiterleiten:
yaak request show <req-id> | jq '.url'
yaak workspace list | jq -r '.[] | .id + " " + .name'
Häufige Muster
Nach Ressource organisieren
Erstellen Sie einen Ordner pro API-Ressource und darin CRUD-Requests:
WS="wk_..."
FL=$(yaak folder create -n "Benutzer" "$WS" | awk '{print $NF}')
yaak request create "$WS" --json '{"name":"Benutzer auflisten","method":"GET","url":"https://api.example.com/users","folderId":"'"$FL"'"}'
yaak request create "$WS" --json '{"name":"Benutzer abrufen","method":"GET","url":"https://api.example.com/users/1","folderId":"'"$FL"'"}'
yaak request create "$WS" --json '{"name":"Benutzer erstellen","method":"POST","url":"https://api.example.com/users","folderId":"'"$FL"'","bodyType":"application/json","body":{"text":"{\"name\":\"neuer Benutzer\"}"}}'
Umgebungsbasiertes URL-Switching
# Dev-Umgebung
yaak environment create "$WS" -n "Dev"
yaak environment update <dev-env-id> --json '{"variables":[{"name":"BASE_URL","value":"http://localhost:3000"}]}'
# Prod-Umgebung
yaak environment create "$WS" -n "Prod"
yaak environment update <prod-env-id> --json '{"variables":[{"name":"BASE_URL","value":"https://api.production.com"}]}'
# In Request-URL verwenden
yaak request create "$WS" --json '{"name":"Benutzer abrufen","method":"GET","url":"${[ BASE_URL ]}/users","folderId":"..."}'
# Mit Umgebung senden
yaak send <req-id> -e <dev-env-id> # Trifft localhost
yaak send <req-id> -e <prod-env-id> # Trifft Produktion
Workspace-weite Standardwerte
Setzen Sie Header/Auth auf Workspace-Ebene (von allen Requests geerbt):
yaak workspace update "$WS" --json '{
"headers": [
{"name":"Content-Type","value":"application/json","enabled":true},
{"name":"Accept","value":"application/json","enabled":true}
],
"authenticationType": "bearer",
"authentication": {"token":"${[ API_TOKEN ]}"}
}'
Tipps
- Verwenden Sie immer
yaak request schema <type>, bevor Sie komplexe Payloads erstellen – das Schema zeigt die genauen Feldnamen und -typen. - Nutzen Sie
--verbosebeisend, um Request-/Response-Details zu debuggen. - Die CLI ist für Lesevorgänge idempotent – sicher für Skripte und wiederholte Ausführung.
- Die Desktop-App spiegelt CLI-Änderungen sofort wider (gemeinsame SQLite-Datenbank).
--yesüberspringt Bestätigungsaufforderungen – unerlässlich für skriptgesteuerte Löschungen.