Zum Inhalt springen

Workflows

Mit einem persönlichen Zugriffstoken können deine anderen Tools Kombine lesen und darin schreiben. Hier sind ein paar Dinge, für die Leute das nutzen, mit Setups zum Kopieren. Die Befehle verwenden den k-Helfer aus Die API nutzen.

KI-Coding-Agenten wie Claude Code, Codex oder Cursor können die API für dich aufrufen. Du fragst in normalen Worten („Was ist diese Woche fällig?“, „Füge für morgen eine Aufgabe hinzu, Annas PR zu reviewen, hohe Priorität“, „Trag 45 Minuten Deep Work an der Migration ein“), und der Agent schickt die Anfragen. Am schnellsten geht es, wenn du den Kombine-Skill installierst. Die Schritte unten machen dasselbe von Hand, für Agenten, die keine Skills unterstützen.

  1. Erstelle ein Token für den Agenten. Fang nur mit Lesen an und gib Lesen & Schreiben für die Bereiche frei, die er ändern soll.
  2. Leg das Token in eine Umgebungsvariable, die der Agent nutzen kann, zum Beispiel KOMBINE_TOKEN. Füge es nicht in den Chat ein.
  3. Sag dem Agenten, wie er Kombine erreicht. Schreib das in seine Anweisungsdatei (CLAUDE.md, AGENTS.md oder Ähnliches):
## Kombine (my tasks and focus sessions)
- API: https://api.kombine.dev/v1, auth header `Authorization: Bearer $KOMBINE_TOKEN`
- Reference: https://api.kombine.dev/v1/openapi.json (read it before your first call)
- Creating anything: generate the `id` yourself (a lowercase UUID).
- Show me what you're about to create or change, and wait for my OK.
- Never print the token.

Behalte die Zeile „wait for my OK“, zumindest am Anfang. Der Agent schreibt direkt in deine echten Daten.

Wenn du es ständig nutzt, pack eine Aufgabe, die du oft wiederholst, in ein Skript und lass den Agenten das Skript ausführen. So hat der Jira-Import unten angefangen: ein Claude-Code-Skill, der das Skript mit --dry-run ausführt, die Liste zeigt und bei einem Ja importiert.

Hol Arbeit aus Jira, GitHub Issues, Linear oder allem mit einer API in Kombine, damit deine Fokus-Sessions und Statistiken sie mit einbeziehen. Führ den Import so oft aus, wie du willst: Jeder Eintrag kommt nur einmal rein.

Das funktioniert dank der external_ref der Aufgabe: ein dauerhafter Verweis auf den Eintrag, aus dem sie stammt, geschrieben als <source>:<id>, zum Beispiel jira:PROJ-123 oder github:kombine#42.

  • Die Quelle besteht aus Kleinbuchstaben, Ziffern und Bindestrichen. Die ID ist alles ohne Leerzeichen.
  • Jede external_ref kann pro Konto nur einmal verwendet werden. Eine zweite Aufgabe damit anzulegen schlägt mit 409 und Fehlercode 4010 fehl.
  • Das gilt auch für gelöschte Aufgaben. Eine importierte Aufgabe zu löschen heißt „nicht mehr verfolgen“, und der Importer kann sie nicht zurückholen.
  • Setz sie beim Anlegen der Aufgabe. Später lässt sie sich nicht mehr ändern.
  • Liste auf, was du schon importiert hast, archivierte und gelöschte Aufgaben eingeschlossen: k "$API/tasks?external_ref_prefix=jira:"

Regeln, die Importe angenehm halten:

  • Die Quelle bestimmt Titel, Priorität und Beschreibung. Alles andere gehört dir: Status, Fälligkeitsdatum, Energie, Erinnerungen. Ein Importer sollte das nicht überschreiben.
  • Füg ein Tag wie jira hinzu, damit importierte Aufgaben leicht zu finden und zu filtern sind.

kombine-jira-import.sh importiert die offenen Jira-Issues, die dir zugewiesen sind:

  • Titel PROJ-123: summary, der Issue-Link als Beschreibung, Tag jira.
  • Jira-Prioritäten werden auf Kombine abgebildet: Highest und High → Hoch, Medium → Mittel, Low und Lowest → Niedrig.
  • Bereits importierte, archivierte oder gelöschte Issues werden übersprungen.
Terminal-Fenster
curl -O https://kombine.dev/examples/kombine-jira-import.sh && chmod +x kombine-jira-import.sh
export JIRA_SITE='your-company.atlassian.net' JIRA_EMAIL='you@company.com'
export JIRA_TOKEN='…' # id.atlassian.com › Security › API tokens
export KOMBINE_TOKEN='…' # tasks: Read & write, sessions: Read
./kombine-jira-import.sh --dry-run # see what would be created
./kombine-jira-import.sh

Mit JIRA_JQL änderst du, welche Issues es auswählt, und mit KOMBINE_ACTIVITY="Work" versiehst du neue Aufgaben mit einer Aktivität. Lies das Skript, bevor du es ausführst; es ist kurz.

Kleine Funktionen für deine .zshrc oder .bashrc. Sie brauchen ein Token mit Aufgaben: Lesen & Schreiben und Sessions: Lesen & Schreiben.

Terminal-Fenster
# kadd "Call the bank" [LOW|MEDIUM|HIGH]
kadd() {
k -X POST "$API/tasks" -d "$(jq -n --arg id "$(uuidgen | tr A-Z a-z)" --arg t "$1" --arg p "${2:-}" \
'{id: $id, title: $t} + (if $p == "" then {} else {priority: $p} end)')" | jq -r '"added: \(.title)"'
}
# ktoday: open tasks due today or earlier
ktoday() {
k "$API/tasks?limit=500" | jq -r --arg d "$(date +%F)" '
.data[] | select(.status != "DONE" and .is_archived == false and .due_date != null and .due_date[0:10] <= $d)
| "• \(.title)"'
}
# klog 45 "Code review": log a finished focus session of N minutes, ending now
klog() {
local end start
end=$(date -u +%Y-%m-%dT%H:%M:%SZ)
start=$(date -u -v-"$1"M +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d "-$1 min" +%Y-%m-%dT%H:%M:%SZ)
k -X POST "$API/sessions" -d "$(jq -n --arg id "$(uuidgen | tr A-Z a-z)" --arg s "$start" --arg e "$end" \
--argjson ms "$(( $1 * 60000 ))" --arg n "${2:-}" \
'{id: $id, mode: "POMODORO", started_at: $s, ended_at: $e, duration_ms: $ms, note: $n}')" >/dev/null && echo "logged $1 min"
}

Timer in deiner Statusleiste. Mit einem Token mit Timer: Lesen kannst du in tmux, einem Menüleisten-Tool oder deinem Prompt anzeigen, was gerade auf deinem Handy läuft:

Terminal-Fenster
k "$API/timer/state" | jq -r '"\(.mode) · \(.status)"'

Wenn kein Timer läuft, gibt es nichts aus. Aktualisiere etwa alle 30 Sekunden; das Token erlaubt 60 Anfragen pro Minute.

Ein Token nur mit Statistiken: Lesen (und Sessions: Lesen für Details) ist ein sicherer Weg, deine Zahlen woanders hinzuschicken: in eine Tabelle, nach Grafana, in eine wöchentliche E-Mail an dich selbst.

Terminal-Fenster
# sessions per day this month, and whether you hit your daily target, as CSV
k "$API/daily-snapshots?from=$(date +%Y-%m-01)&to=$(date +%F)" | jq -r '.snapshots[] | [.date, .sessions_completed, .achieved] | @csv'
# all-time totals
k "$API/stats/all-time" | jq '{totalFocusSessions, hours: ((.totalFocusSeconds // 0) / 3600 | floor), longestStreakLength}'

Die OpenAPI-Spezifikation listet jedes Feld auf, das die Statistik- und Session-Endpunkte zurückgeben.