Blog • AI / Agent

Warum wirkt Claude Code immer mehr wie ein echter AI Agent? Tool Use, MCP, Session, Permission und der JSON-Workflow

Claude Code wirkt wie ein Agent, weil eine Sitzung drei JSON-Dokumente bindet: ein fortsetzbares Gespräch, die Rechteprüfung bei jedem Tool Use und die beim Start gelesene MCP-Konfiguration. Fortsetzen mit --resume, Rechte in settings.json, Werkzeuge aus .mcp.json. Fehlt eines, ist der fortgesetzte Lauf nicht dieselbe Arbeit.

Die Tool-Schleife steht schon in Wie Coding Agents arbeiten. Unterschiede der Harnesses stehen in dem Harness-Rennen. Dieser Artikel zerlegt nur Claude Code: was eine Sitzung zurückbringt, wann der Modus wechselt, wann MCP neu gelesen wird und welches Workflow-JSON Sie selbst behalten.

Dieser Artikel behandelt:

Zuerst festhalten: Eine Sitzung fortsetzen heißt nicht, die Startflags wiederherzustellen. Gespräch und manche Modi kommen zurück. --mcp-config nicht. Unten: Sitzung, Rechte, MCP, eigenes Workflow-JSON.

Was eine Sitzung zurückbringt und was nicht

Eine Sitzung ist ein Gespräch, gebunden an ein Projektverzeichnis. Siehe Sitzungen verwalten. Das Transkript wird lokal mitgeschrieben, deshalb können Sie nach dem Beenden zurück.

Einstieg Was zurückkommt Berechtigungsmodus
claude --continue Das letzte interaktive Gespräch in diesem Verzeichnis, inklusive Tool-Aufrufen und Ergebnissen Im Terminal ohne -p gilt die offizielle Tabelle. bypassPermissions und plan kommen nicht unverändert zurück
claude --resume <name> Diese Sitzung direkt über den Namen fortsetzen Ein eindeutiger Name öffnet sie. Ein doppelter Name öffnet die Auswahl, und die stellt den gespeicherten Modus nicht wieder her
claude -p --resume Nicht-interaktives Fortsetzen, für Skripte Der Modus ist der eines neuen claude -p. Plan kommt nur zurück, wenn die Sitzung in plan endete und die vier offiziellen Bedingungen gelten

Zurück kommen auch das damalige Modell, ein aktives Ziel und nicht abgelaufene geplante Aufgaben. Hintergrund-Bash nicht.

Das Transkript ist standardmäßig JSONL unter ~/.claude/projects/ in einem Ordner aus dem Arbeitsverzeichnis. Die Doku sagt, das Format ändert sich. Nicht als stabilen Vertrag behandeln. Stabile Felder in ein eigenes JSON legen.

Der Berechtigungsmodus gehört zur Sitzung

Der Modus ist kein Satz im Prompt. In der Sitzung wechselt Shift+Tab zwischen default, acceptEdits und plan. Beim Start --permission-mode. Der dauerhafte Standard ist Berechtigungsmodi, Feld permissions.defaultMode. Das Modell im Chat um einen anderen Modus zu bitten ändert das Tor nicht.

Standardmodus und Regeln einer Sitzung. Deny vor ask, ask vor allow.
{
  "permissions": {
    "defaultMode": "default",
    "allow": ["Bash(npm test *)"],
    "ask": ["Bash(git push *)"],
    "deny": ["Read(./.env)", "Read(./.env.*)"]
  }
}

Die Reihenfolge steht in Claude-Code-Rechte. Ein spezielleres allow hebt ein schon getroffenes deny nicht auf.

Wie Sie fortsetzen Berechtigungsmodus
Terminal --continue oder --resume eines eindeutigen Namens, ohne -p Stellt den Modus vom Ende wieder her, außer bypassPermissions und plan starten wie eine neue Sitzung. auto nur, wenn das Konto noch qualifiziert ist.
Die Auswahl beim Start oder ein Name mit mehreren Treffern Stellt den gespeicherten Modus nicht wieder her. Startet im Modus einer neuen Sitzung für diesen Start.
/resume Stellt den gespeicherten Modus der Zielsitzung nicht wieder her. Läuft im Modus der Sitzung weiter, in der Sie schon sind.

Wie Regeln zur Warteschlange und zur Ablehnungsrückgabe werden, steht in Rechtekontrolle anschließen. Hier ist der Modus nur Sitzungszustand. Die Regeldatei wird beim Fortsetzen neu gelesen.

MCP wird beim Sitzungsstart gelesen

Ein Projektserver liegt in .mcp.json im Repo-Wurzelverzeichnis und wird beim Start gelesen. Nach einer Änderung beenden und neu starten. Siehe MCP verbinden. Beim ersten Projektserver wird um Zustimmung gebeten. Ein geklontes Repo darf ohne sie keinen Prozess auf Ihrem Rechner starten.

Projekt-MCP. Der Servername wird zum Präfix des Toolnamens.
{
  "mcpServers": {
    "docs": {
      "type": "http",
      "url": "https://code.claude.com/docs/mcp"
    }
  }
}

Der volle Toolname nutzt ein Präfix wie mcp__docs__. Rechte-Regeln treffen diesen vollen Namen. Nicht nur den Kurznamen vom Server schreiben.

Das Workflow-JSON, das Sie behalten

Das JSONL-Transkript ist kein stabiler Vertrag. Das Dokument unten gehört Ihnen. Es merkt, was Sie beim nächsten Fortsetzen übergeben. Es ist kein Claude-Code-Request, und die CLI liest es nicht.

Ein fortsetzbarer Workflow-Eintrag. Das resume-Array sind die Flags, die Sie erneut übergeben.
{
  "name": "auth-refactor",
  "cwd": "/repo/app",
  "permission_mode": "default",
  "settings": ".claude/settings.json",
  "mcp_config": ".mcp.json",
  "resume": ["--resume", "auth-refactor"],
  "last_tool": {
    "name": "mcp__docs__search",
    "decision": "allow"
  }
}

name ist der Name aus claude -n oder /rename, damit --resume ihn findet. cwd muss das damalige Projektverzeichnis sein. Sitzungen liegen pro Verzeichnis.

  1. 1
    Zuerst die Sitzung treffen

    name geht an --resume. cwd entscheidet, in welchem Projektverzeichnis das Transkript liegt. Falsches Verzeichnis: derselbe Name wird nicht gefunden.

  2. 2
    Dann den Modus angleichen

    permission_mode in --permission-mode des Resume-Befehls kopieren. Auswahl und /resume stellen den alten Modus nicht wieder her.

  3. 3
    Zuletzt MCP anhängen

    Zeigt mcp_config auf eine Datei im Repo, liest der Start sie neu. Hing der ursprüngliche Lauf an einer Kommandozeilen-Datei, den Pfad in --mcp-config legen.

Wie ein Tool Use die drei Dokumente ändert

Ein Zug ist kein weiterer Prompt-Absatz. Die Reihenfolge ist fest.

  1. 1
    Laden

    Die Sitzung lädt das Gespräch und liest settings.json sowie .mcp.json neu. Kommandozeilen-MCP ist nur da, wenn Sie es diesmal übergeben.

  2. 2
    Aufruf vorschlagen

    Das Modell gibt ein tool_use aus: voller Toolname und input. Ein MCP-Tool trägt das Server-Präfix.

  3. 3
    Rechte prüfen

    Zuerst deny, dann ask, dann allow. Deny führt nicht aus. Ask wartet auf eine Person. Allow ruft das Tool auf.

  4. 4
    Zurückschreiben

    Das Ergebnis wird ans Sitzungstranskript angehängt. Ihr Workflow-JSON aktualisiert nur last_tool. Nicht das ganze Transkript hineinkopieren.

Beim nächsten Fortsetzen wissen Sie, bei welchem Tool Sie standen, welcher Modus galt und welche Datei MCP lieferte. Das Transkript speichert weiter Claude Code.

Abgrenzung zu den anderen beiden Artikeln

Wie Coding Agents arbeiten Das Harness-Rennen Dieser Artikel
Frage Wie eine Tool-Schleife allgemein dreht Worin sich die Hüllen unterscheiden Was jedes der drei JSON-Dokumente tut, wenn eine Claude-Code-Sitzung fortgesetzt wird
Hier nicht suchen Noch eine Übersicht zum Tool Calling Noch eine Produktvergleichstabelle Das JSONL-Transkript als stabile API zu parsen

Das Workflow-JSON in JSONNote prüfen

  1. 1
    Formatieren

    Öffnen Sie settings.json und den Workflow-Eintrag in JSON formatieren. Ein Kommentar oder ein nachgestelltes Komma führt beim nächsten Start zu einem Settings Error.

  2. 2
    Workflow-Eintrag prüfen

    Fügen Sie das Schema unten in JSON Schema ein. Fehlen name oder cwd oder liegt permission_mode außerhalb des enum, erst korrigieren, dann fortsetzen.

  3. 3
    Rechte-Regeln vergleichen

    Vor und nach einer Änderung an deny / allow mit JSON Diff prüfen, ob eine deny-Regel nach allow gewandert ist. Diese Änderung wiegt mehr als der Sitzungsname.

JSON Schema für den Workflow-Eintrag. permission_mode nutzt die offiziellen Modusnamen.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": ["name", "cwd", "permission_mode", "settings", "mcp_config"],
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "cwd": { "type": "string", "minLength": 1 },
    "permission_mode": {
      "enum": ["default", "acceptEdits", "plan", "auto", "dontAsk", "bypassPermissions"]
    },
    "settings": { "type": "string", "minLength": 1 },
    "mcp_config": { "type": "string", "minLength": 1 },
    "resume": { "type": "array", "items": { "type": "string" } },
    "last_tool": {
      "type": "object",
      "required": ["name", "decision"],
      "properties": {
        "name": { "type": "string" },
        "decision": { "enum": ["allow", "deny", "ask"] }
      }
    }
  }
}

Häufige Fragen

Sind MCP-Server nach resume noch da?

Server in .mcp.json oder ~/.claude.json werden beim Start neu gelesen. Was nur über --mcp-config kam, kommt nicht zurück. Beim Fortsetzen erneut übergeben.

Kommt der Berechtigungsmodus mit dem Gespräch zurück?

Nicht immer. Ein Terminal --continue oder --resume eines eindeutigen Namens ohne -p folgt der offiziellen Tabelle. bypassPermissions und plan kommen nicht unverändert zurück. Auswahl und /resume nutzen den Modus dieses Starts.

Darf man das JSONL unter ~/.claude/projects als Workflow parsen?

Nein. Die Doku behandelt das Format als interne Datei, die sich ändert. Stabile Felder gehören ins Workflow-JSON dieses Artikels: Name, Verzeichnis, Modus, Pfade und die letzte Tool-Entscheidung.

Hilft es, das Modell im Chat um einen anderen Modus zu bitten?

Nein. Den Modus setzen Shift+Tab, --permission-mode oder defaultMode in den Settings. Ein Prompt ändert das Tor nicht.

Ist das dieselbe Sache wie die Freigabe-Warteschlange?

Nein. permission_mode hier ist das Tor dieser Sitzung. Warteschlange, Ablehnungsrückgabe und tool_use_id stehen im Artikel zur Rechtekontrolle. Beides braucht es: Der Modus entscheidet, ob gefragt wird, die Warteschlange, wie die Antwort gespeichert wird.

Fazit

Claude Code wirkt wie ein Agent, weil eine Sitzung Gespräch, Modus und MCP-Tools zu einer fortsetzbaren Arbeit bindet. Das Gespräch zurückzuholen ist nicht dasselbe wie die Startflags. Das JSONL-Transkript bleibt bei der CLI. Behalten Sie Ihr eigenes Workflow-JSON.

Direktes Fazit: Sitzung über Name und Verzeichnis finden. Den Modus bei Auswahl und /resume erneut übergeben. --mcp-config bei jedem Resume erneut mitgeben.

Als Nächstes: den Workflow-Eintrag prüfen, dann die Sitzung mit den resume-Argumenten darin öffnen.

Zurück zum Blog