{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://aitention.app/schema/status-v1.json",
  "title": "AItention Statusdatei, Fassung 1",
  "description": "Eine Datei je Sitzung unter ~/.claude/aitention/status/<session-id>.json. AItention liest sie und zeigt die Sitzung an. Jedes Werkzeug, das bei Ereignissen ein Programm starten kann, darf sie schreiben — es braucht keine Änderung an AItention. Geschrieben wird die ganze Datei bei jedem Ereignis; Felder, die ein Werkzeug nicht kennt, bleiben weg.",
  "type": "object",
  "required": [
    "session_id",
    "state",
    "ts"
  ],
  "additionalProperties": true,
  "properties": {
    "session_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Kennung der Sitzung. Muss zum Dateinamen passen und darf weder \"/\" enthalten noch mit \".\" beginnen.",
      "pattern": "^[^/][^/]*$"
    },
    "agent": {
      "type": "string",
      "maxLength": 32,
      "pattern": "^[a-z0-9._-]+$",
      "default": "claude",
      "description": "Welches Werkzeug die Sitzung führt: claude, codex, gemini, cursor, aider — oder ein eigener Bezeichner. Fehlt das Feld, gilt claude. Nicht zu verwechseln mit \"tool\".",
      "examples": [
        "claude",
        "codex",
        "opencode"
      ]
    },
    "state": {
      "type": "string",
      "enum": [
        "idle",
        "working",
        "waiting",
        "decision",
        "done",
        "failed",
        "scheduled",
        "waitingForSubagents",
        "compacting",
        "dormant",
        "unknown"
      ],
      "description": "idle: bereit. working: arbeitet. waiting: braucht eine Eingabe. decision: hat eine Frage mit Auswahl gestellt. done: fertig, Antwort ungelesen. failed: der Zug ist gescheitert. waitingForSubagents: der Hauptagent hat Unteragenten losgeschickt und führt selbst gerade kein Werkzeug aus — leitet AItention aus \"subagents\" ab, ein Werkzeug muss ihn nicht schreiben. compacting: verdichtet gerade. dormant: beendet, aber fortsetzbar. scheduled: wartet nicht auf den Anwender, sondern auf einen geplanten Weckruf — leitet AItention selbst aus \"wakeup_at\" ab, ein Werkzeug muss ihn nicht setzen."
    },
    "ts": {
      "type": "number",
      "description": "Wann die Sitzung **in diesen Zustand** gewechselt ist, in Sekunden seit 1970. Nicht der Zeitpunkt des letzten Ereignisses — sonst springt \"fertig seit 5 Min.\" auf null zurück, sobald irgendetwas nachklappert."
    },
    "event_ts": {
      "type": "number",
      "description": "Wann das letzte Ereignis eintraf, in Sekunden seit 1970."
    },
    "event": {
      "type": "string",
      "maxLength": 64,
      "description": "Name des auslösenden Ereignisses, unübersetzt."
    },
    "tool": {
      "type": "string",
      "maxLength": 64,
      "description": "Der gerade laufende Werkzeugaufruf innerhalb der Sitzung (Bash, Edit, …) — nicht das Werkzeug aus \"agent\"."
    },
    "activity": {
      "type": "string",
      "maxLength": 200,
      "description": "Was gerade geschieht, in einer Zeile. Wird angezeigt."
    },
    "message": {
      "type": "string",
      "maxLength": 500,
      "description": "Was die Sitzung vom Anwender will. Nur setzen, wenn der Zustand Aufmerksamkeit verlangt."
    },
    "cwd": {
      "type": "string",
      "description": "Arbeitsverzeichnis. AItention zeigt davon nur den Ordnernamen."
    },
    "permission_mode": {
      "type": "string",
      "maxLength": 32,
      "description": "Wie viel die Sitzung ohne Rückfrage darf."
    },
    "turn_started_at": {
      "type": "number",
      "description": "Wann der laufende Zug begann, in Sekunden seit 1970."
    },
    "done_at": {
      "type": "number",
      "description": "Wann zuletzt ein Zug fertig wurde. Überlebt das Ende der Sitzung, damit eine ungelesene Antwort erkennbar bleibt."
    },
    "wakeup_at": {
      "type": "number",
      "description": "Wann die Sitzung von selbst weitermacht, falls geplant."
    },
    "subagents": {
      "type": "integer",
      "minimum": 0,
      "description": "Wie viele Unteragenten gerade laufen."
    },
    "background": {
      "type": "object",
      "description": "Hintergrundbefehle, die diese Sitzung gestartet hat, nach Auftragskennung. AItention zeigt Laufende und kürzlich Gescheiterte.",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "at": {
            "type": "number",
            "description": "Start, Sekunden seit 1970."
          },
          "command": {
            "type": "string",
            "maxLength": 500,
            "description": "Die Befehlszeile, gekürzt."
          }
        }
      }
    },
    "monitors": {
      "type": "object",
      "description": "Laufende Beobachter, nach Werkzeugaufruf. Der Wert ist ein Feld aus Text und Beginn (Sekunden seit 1970) — zwei Typen in einer Liste.",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": [
            "string",
            "number"
          ]
        },
        "minItems": 1,
        "maxItems": 2
      }
    }
  }
}
