Echolot
Referenz

Arbeitsbereichsdateien

Das Format des Arbeitsbereichs, Datei für Datei und Schlüssel für Schlüssel, zum Lesen von Diffs, zum Schreiben von Hand und zum Erzeugen.

Ein Arbeitsbereich ist ein Ordner mit der Endung .echolot und einfachen TOML-Dateien darin: eine je Anfrage, Umgebung, MCP-Server, Mock und Flow. Der Finder zeigt ihn als ein Dokument; im Terminal, in Git und in deinem Editor ist er ein normaler Ordner. Echolot schreibt jede Datei jedes Mal gleich (Schlüssel in fester Reihenfolge, nichts, was seinen Standardwert hat), sodass eine Änderung in der App im Diff klein bleibt. Siehe Git und Teams.

Alpenglow.echolot/
  workspace.toml                     der Arbeitsbereich: ID, Name, Variablen, Auth, Agenten, Proxy, Zertifikate
  environments/
    staging.toml                     eine Umgebung
  requests/
    _folder.toml                     die Reihenfolge der obersten Ebene
    _folder.pre.js                   das Pre-Request-Skript des Arbeitsbereichs (und _folder.test.js)
    auth/
      _folder.toml                   ein Ordner: Name, Reihenfolge, Doku, Variablen, Auth
      sign-in.req.toml               eine HTTP-Anfrage
      sign-in.body.json              ihr Body
      sign-in.pre.js                 ihr Pre-Request-Skript
      sign-in.test.js                ihr Test-Skript
    catalog/
      search-products.gql.toml       eine GraphQL-Anfrage
      search-products.graphql        ihre Abfrage
  mcp-servers/
    alpenglow-mcp.toml               ein MCP-Server
  specs/
    alpenglow.yaml                   ein OpenAPI-Dokument
    shop.graphql                     ein GraphQL-Schema
    inventory.proto                  eine Protobuf-Datei
  mocks/
    shop.toml                        ein Mock-Server: Einstellungen und Routen
    shop.js                          seine Routen in JavaScript
  flows/
    place-test-order.flow.toml       ein Flow
  assistant/
    checking-orders.md               eine geteilte Unterhaltung mit dem Assistenten, zum Lesen
    checking-orders.json             dieselbe, zum Öffnen in der App

Regeln für jede Datei

  • Dateien sind TOML 1.0, UTF-8.
  • Jede beginnt mit echolot = 1, der Version des Formats. Eine Datei mit einer höheren Zahl wurde von einem neueren Echolot gesichert; Echolot meldet das, statt sie zu öffnen.
  • Dateinamen sind Slugs: Kleinbuchstaben, Ziffern und Bindestriche, höchstens 80 Zeichen, aus dem Namen des Elements gebildet (Sign in wird zu sign-in). Der Name selbst steht im Schlüssel name.
  • Pfade zwischen Elementen sind durch / verbundene Slugs, relativ zu requests/: auth/sign-in, orders.
  • Textfelder können {{variables}} und dynamische Werte enthalten.
  • Listen von Dingen sind TOML-Arrays aus Tabellen ([[headers]]). Alles mit enabled = false bleibt erhalten, ist aber abgeschaltet; ohne den Schlüssel ist es an.

Was nie in die Dateien kommt

  • Geheime Werte. Eine geheime Variable wird mit ihrem Namen und secret = true ohne Wert geschrieben; der Wert liegt im Schlüsselbund deines Macs. Felder, die ein Secret brauchen (ein Passwort, ein Proxy-Passwort, ein Client-Secret), sollten eine {{variable}} enthalten, die ein Secret ist. Echolot bietet an, ein Passwort, das du tippst, in den Schlüsselbund zu verschieben, und Importe tun das von selbst. Siehe Secrets.
  • OAuth-Tokens und MCP-Anmeldungen: im Schlüsselbund.
  • Werte, die Skripte mit pm.environment.set und Ähnlichem setzen: Sie halten für das Fenster oder den Befehl.
  • Verlauf und Antworten: in Application Support auf deinem Mac, ein Verlauf je Arbeitsbereich. Siehe Verlauf.
  • Dein eigenes Layout: die Anordnung der Bereiche und ihre Größen, die geöffneten Tabs, die Umgebung, die du gewählt hast.

Ein Arbeitsbereich lässt sich also gefahrlos committen und teilen. Ein Teammitglied setzt seine eigenen geheimen Werte.

workspace.toml

# Echolot workspace. Requests live in requests/, one file each.
echolot = 1
id = "0b7d4c1e-2f6a-4e38-9c51-7a1e3d9b5f20"
name = "Alpenglow"

[[variables]]
name = "baseURL"
value = "https://demo.echolot.dev/v1"

[[variables]]
name = "token"
secret = true
SchlüsselBedeutung
idDie ID des Arbeitsbereichs. Secrets im Schlüsselbund gehören dazu, Kopien mit derselben ID teilen sie also. Eine exportierte Kopie bekommt eine neue.
nameDer Name des Arbeitsbereichs.
[[variables]]Variablen des Arbeitsbereichs. Siehe Variablen.
[auth]Auth für jede Anfrage, die sie übernimmt. Siehe Auth. Standard: keine.
[agents]Regeln für KI-Agenten. Siehe Agenten.
[proxy]Der eigene Proxy des Arbeitsbereichs statt dem der App.
[[certificates]]CA-Zertifikate, denen vertraut wird, und Client-Zertifikate, die gesendet werden, je Host.

Proxy

SchlüsselBedeutung
modemanual (Standard), system, environment (die Familie HTTPS_PROXY) oder none.
urlDer Proxy: http://host:port, https://… oder socks5://host:port.
username, passwordZugangsdaten für den Proxy. Schreibe das Passwort als geheime {{variable}}.
bypassHosts, die direkt erreicht werden, als Array.

Zertifikate

Jede Tabelle [[certificates]] ist eine Regel für einen Host:

SchlüsselBedeutung
hostDer Host, für den die Regel gilt.
trustPEM-Dateien von CA-Zertifikaten, denen vertraut wird, als Array.
certificateEin Client-Zertifikat: eine PEM-Datei oder eine .p12-/.pfx-Datei.
keyDer PEM-Schlüssel des Client-Zertifikats, wenn die Zertifikatsdatei keinen enthält.
passphraseDie Passphrase des Schlüssels oder der PKCS#12-Datei. Schreibe sie als geheime {{variable}}.

Agenten

[agents] legt fest, was KI-Agenten in diesem Arbeitsbereich dürfen, über den MCP-Server von Echolot und den Assistenten. Siehe Agenten.

[agents]
allowed-hosts = ["demo.echolot.dev"]
max-requests = 200
max-requests-per-minute = 30

[agents.rules]
unsafe-send = "ask"
destructive = "refuse"
SchlüsselBedeutung
enabledfalse schaltet Agenten für den Arbeitsbereich ab: Sie bekommen nichts daraus. Standard true.
allowed-hostsHosts, die als eigene des Arbeitsbereichs gelten, zusätzlich zu denen, die seine Anfragen verwenden.
max-requestsAnfragen, die eine Agentensitzung insgesamt senden darf.
max-requests-per-minuteAnfragen, die eine Agentensitzung pro Minute senden darf.
[agents.rules]Eine Regel je Art von Aktion: allow, ask oder refuse.

Die Arten von Aktionen sind read, safe-send, unsafe-send, protected-send, new-host, workspace-write und destructive. Eine strengere Regel gilt immer. Eine lockerere gilt erst, wenn du ihr vertraust (die App fragt nach; die Befehlszeile braucht --trust-workspace-policy). protected-send und new-host lassen sich nie auf allow setzen.

environments/

Eine Datei je Umgebung; ihr Dateiname ist ihr Slug, den --env verwendet.

echolot = 1
name = "Production"
protected = true

[[variables]]
name = "baseURL"
value = "https://api.alpenglow.example/v1"

[[variables]]
name = "password"
secret = true
SchlüsselBedeutung
nameDer Name der Umgebung.
protectedtrue macht sie zu einer geschützten Umgebung: Jedes Senden fragt zuerst nach.
[[variables]]Ihre Variablen.

Variablen

In workspace.toml, Umgebungen, Ordnern und Anfragen gleich:

SchlüsselBedeutung
nameDer Name der Variablen, verwendet als {{name}}.
valueIhr Wert. Bei einem Secret weggelassen.
secrettrue für ein Secret: Der Wert liegt im Schlüsselbund.
enabledfalse schaltet sie ab.

requests/

Der Ordner requests enthält den Baum, den du in der Seitenleiste siehst. Jeder Ordner darin ist ein Ordner des Baums, jede Anfragedatei eine Anfrage. Die Art der Anfrage ergibt sich aus der Endung der Datei:

EndungArt
.req.tomlHTTP, einschließlich Server-Sent Events
.gql.tomlGraphQL
.grpc.tomlgRPC
.ws.tomlWebSocket
.sio.tomlSocket.IO
.mqtt.tomlMQTT
.mcp.tomlEin Aufruf an einen MCP-Server

Neben einer Anfrage, mit demselben Slug:

DateiEnthält
<slug>.body.<ext>Den Body der Anfrage in seinem eigenen Format: .json, .xml, .txt, .html, .graphql oder .form.txt.
<slug>.graphqlDie Abfrage einer GraphQL-Anfrage.
<slug>.pre.jsDas Pre-Request-Skript.
<slug>.test.jsDas Test-Skript.

_folder.toml

Jeder Ordner hat eine, und requests/ selbst auch, für die oberste Ebene.

echolot = 1
name = "Auth"
order = ["sign-in", "who-am-i", "client-credentials"]
docs = "Send \"Sign in\" first: it captures the access token into {{token}}."
SchlüsselBedeutung
nameDer Name des Ordners. Nicht in requests/_folder.toml.
orderDie Slugs dessen, was im Ordner liegt, in der Reihenfolge, die Seitenleiste und Durchläufe verwenden. Was nicht aufgeführt ist, kommt danach, nach Slug sortiert.
docsDie Dokumentation des Ordners, in Markdown.
specDie Spec, der der Ordner folgt, etwa specs/alpenglow.yaml.
spec-urlWoher diese Spec geholt wird, wenn sie von einer URL kam.
agent-toolstrue bietet die Anfragen des Ordners Agenten als Tools an.
[[variables]]Die Variablen des Ordners, für alles darin.
[auth]Die Auth des Ordners, für alles darin, das sie übernimmt. Standard: übernehmen.

Daneben sind _folder.pre.js und _folder.test.js die Skripte des Ordners; in requests/ sind es die des Arbeitsbereichs. Sie laufen für jede Anfrage darin, von der des Arbeitsbereichs abwärts bis zur Anfrage selbst. Ein Ordner, der einer Spec folgt, hat außerdem _spec-lock.json, was er zuletzt aus der Spec übernommen hat; überlass sie Echolot.

Schlüssel jeder Anfrage

echolot = 1
name = "Sign in"
method = "POST"
url = "{{baseURL}}/auth/token"

[body]
syntax = "json"
file = "sign-in.body.json"

[[headers]]
name = "Content-Type"
value = "application/json"

[[assertions]]
target = "status"
check = "equals"
expected = "200"

[[captures]]
variable = "token"
from = "json"
path = "$.access_token"
scope = "workspace"
secret = true
SchlüsselBedeutung
nameDer Name der Anfrage.
urlDie URL, mit ihrem Query-String. Jede Art außer MCP-Aufrufen hat eine.
docsDie Dokumentation der Anfrage, in Markdown.
spec-operationDie Operation der Spec, aus der sie entstand, etwa POST /auth/token.
[[headers]]name, value und enabled = false für einen, der aus ist.
[[disabled-params]]Query-Parameter, die abgeschaltet sind: name, value. Die eingeschalteten stehen in der URL.
[[disabled-form-fields]]Formularfelder, die abgeschaltet sind: name, value.
[[variables]]Die eigenen Variablen der Anfrage.
[[assertions]]Ihre Prüfungen.
[[captures]]Werte, die sie nach jeder Antwort in Variablen ablegt.
[auth]Ihre Auth. Standard: von ihrem Ordner übernehmen.
[settings]Einstellungen, die von denen der App abweichen.

HTTP-Anfragen (.req.toml)

SchlüsselBedeutung
methodDie Methode: GET, POST oder ein beliebiges Token. Standard GET.
[body]Der Body; ohne ihn keiner.

Die Tabelle [body] nimmt eine von drei Formen an:

FormSchlüssel
Textsyntax: json, xml, text, html, graphql oder form (URL-kodierte Formularfelder). file: die Body-Datei neben der Anfrage.
Eine Datei, die von der Platte gestreamt wirdstream-from: der Pfad der Datei.
Multipartsyntax = "multipart" und eine Tabelle [[body.parts]] je Teil: name, dann value (Text) oder file (ein Pfad), content-type, enabled.

GraphQL-Anfragen (.gql.toml)

echolot = 1
name = "Search products"
url = "{{baseURL}}/graphql"
operation = "SearchProducts"
schema = "specs/shop.graphql"
query-file = "search-products.graphql"
graphql-variables = """
{
  "text": "ultralight"
}"""
SchlüsselBedeutung
query-fileDie Datei neben der Anfrage mit der Abfrage, <slug>.graphql.
operationDie Operation, die ausgeführt wird, wenn die Abfrage mehrere hat.
graphql-variablesDie GraphQL-Variablen als JSON-Text. Ältere Dateien nennen ihn variables.
schemaDas Schema, gegen das geprüft und vervollständigt wird: eine Datei in specs/.
transportpost (Standard), get oder websocket für Subscriptions.
persisted-queriestrue sendet zuerst nur den SHA-256 der Abfrage und die Abfrage, wenn der Server ihn nicht kennt (Automatic Persisted Queries).
batchtrue sendet ein Dokument mit mehreren Operationen als ein Array, ein Eintrag je Operation.
[[uploads]]Datei-Uploads: variable (die Variable, in die die Datei geht) und path.

gRPC-Anfragen (.grpc.toml)

SchlüsselBedeutung
protoDie .proto-Datei, die den Service beschreibt, etwa specs/inventory.proto.
reflectiontrue fragt stattdessen die Reflection des Servers.
serviceDer Service, etwa alpenglow.inventory.v1.Inventory.
rpcDie Methode, etwa Reserve.
messageDie Nachricht als JSON-Text; ein Array von Nachrichten bei einer Methode mit Client-Streaming.
deadline-msDie Frist in Millisekunden.
compressiongzip oder deflate für die gesendeten Nachrichten.

WebSocket-Anfragen (.ws.toml)

SchlüsselBedeutung
subprotocolsSubprotokolle, die angeboten werden, als Array.
[[messages]]Gesicherte Nachrichten: name, text, enabled.

Socket.IO-Anfragen (.sio.toml)

SchlüsselBedeutung
versionDie Socket.IO-Version des Servers: 4 (Standard), 3 oder 2.
pathWo der Server lauscht. Standard /socket.io/.
namespaceDer Namespace, dem beigetreten wird, etwa /support.
socket-authDie Auth-Payload als JSON-Text.
[[emits]]Gesicherte Ereignisse: name, event, arguments (JSON-Text), ack = true, um eine Bestätigung anzufordern, enabled.

MQTT-Anfragen (.mqtt.toml)

SchlüsselBedeutung
version5 (Standard) oder 3.1.1.
client-idDie Client-ID; eine zufällige, wenn leer.
clean-startfalse bittet den Broker, die Sitzung zu behalten. Standard true.
keep-aliveSekunden zwischen Pings. Standard 60.
[will]Das Last Will: topic, payload, qos, retain.
[[subscriptions]]filter, qos (Standard 0), no-local, enabled.
[[messages]]Gesicherte Nachrichten zum Veröffentlichen: name, topic, payload, qos, retain, content-type, enabled.

Benutzername und Passwort sind die Basic-Auth der Anfrage.

MCP-Aufrufe (.mcp.toml)

echolot = 1
name = "search_catalog"
server = "alpenglow-mcp"
tool = "search_catalog"
arguments = """
{
  "query": "ultralight tent",
  "limit": 3
}"""
SchlüsselBedeutung
serverDer Slug des Servers in mcp-servers/.
tool, resource, prompt oder methodWas aufgerufen wird: ein Tool nach Namen, eine Ressource nach URI, ein Prompt nach Namen oder eine rohe JSON-RPC-Methode. Eines davon.
argumentsDie Argumente als JSON-Text.

Assertions

SchlüsselBedeutung
targetWas geprüft wird: status, header, json, body, time (Millisekunden), size (Bytes), schema (JSON Schema), graphql-errors, mcp-error, mcp-output-schema, openapi, grpc-status.
nameBei header: der Name des Headers.
pathBei json: ein JSONPath, etwa $.items.length.
checkequals, not-equals, contains, not-contains, less-than, at-most, greater-than, at-least, exists, not-exists, matches (ein regulärer Ausdruck), is-type, is-one-of, matches-schema.
expectedDer Wert, mit dem verglichen wird; nicht geschrieben bei Prüfungen, die keinen brauchen.
enabledfalse schaltet sie ab.

Welche Prüfungen jedes Ziel anbietet, steht unter Skripte und Tests.

Erfassungen

SchlüsselBedeutung
variableDie Variable, in der der Wert abgelegt wird.
fromjson, form, msgpack, xml, header, cookie, status oder body.
pathWo der Wert steht: ein JSONPath, ein XPath, ein Header- oder Cookie-Name. Nicht bei status und body.
scopeenvironment (Standard: die aktive Umgebung) oder workspace.
secrettrue legt den Wert als Secret im Schlüsselbund ab.
enabledfalse schaltet sie ab.

Eine Antwort ab 400 oder ein Wert, der nicht da ist, lässt die Variable, wie sie war. Siehe Erfassungen.

Einstellungen

SchlüsselBedeutung
timeoutSekunden für den gesamten Austausch.
rawtrue sendet keine automatischen Header.
verify-tlsfalse überspringt die Zertifikatsprüfung.
follow-redirectsfalse hält bei einer Weiterleitung an.
max-redirectsWie vielen Weiterleitungen gefolgt wird.
decompressfalse behält den Body so, wie der Server ihn kodiert hat.
cookiesfalse sendet und speichert keine Cookies.
http-versionautomatic, http1, http2 oder http3.
stream-limitSekunden, die ein Ereignis-Stream oder eine Sitzung abgehört wird.

Siehe Anfrageeinstellungen.

Auth

[auth] hat einen type und die Schlüssel dieses Typs. Eine Anfrage oder ein Ordner ohne [auth] übernimmt; der Standard des Arbeitsbereichs ist keine Auth.

typeSchlüssel
inheritKeine: die des Ordners übernehmen.
noneKeine: keine Auth, auch wenn der Ordner eine hat.
basic, digestusername, password
bearertoken; prefix, wenn nicht Bearer
api-keyname, value, in (header oder query)
oauth2grant (authorization-code, client-credentials, device-code), authorization-url, token-url, device-authorization-url, client-id, client-secret, scope, audience, redirect-uri; pkce = false, um PKCE abzuschalten; client-authentication = "body", um die Zugangsdaten des Clients statt per Basic im Body zu senden; header-prefix, wenn nicht Bearer
aws-signatureaccess-key-id, secret-access-key, session-token, region, service
jwtalgorithm (HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384), secret, secret-base64, payload, header, issued-at = false, um iat wegzulassen, expires-in (Sekunden, Standard 300), in (header oder query), prefix, query-name (Standard token)
hawkid, key, algorithm (sha256 oder sha1), ext, payload-hash
edgegridclient-token, client-secret, access-token, max-body (Standard 131072), headers-to-sign
ntlmusername, password, domain, workstation

Schreibe jedes Passwort, jedes Token und jeden Schlüssel als geheime {{variable}}. Siehe Auth.

mcp-servers/

Eine Datei je MCP-Server; der Dateiname ist der Slug, den MCP-Aufrufe nennen.

echolot = 1
name = "Alpenglow MCP"
transport = "http"
url = "https://demo.echolot.dev/mcp"
SchlüsselBedeutung
nameDer Name des Servers.
transporthttp (Streamable HTTP) oder stdio (ein Programm, das Echolot startet).
urlBei http: der Endpunkt.
[[headers]]Bei http: name, value, enabled.
commandBei stdio: das Programm, das gestartet wird.
argumentsBei stdio: seine Argumente als Array.
working-directoryBei stdio: der Ordner, in dem es startet.
[[environment]]Bei stdio: Umgebungsvariablen, name, value, enabled.
[oauth]Client-Einstellungen für einen Server, der sich mit OAuth anmeldet: client-id, client-secret, scope, redirect-uri.

Siehe Server hinzufügen.

specs/

Spec-Dateien, wie sie sind: OpenAPI-Dokumente (.yaml, .yml, .json), GraphQL-Schemas (.graphql-SDL oder ein Introspektionsergebnis als JSON) und Protobuf-Dateien (.proto). Echolot bearbeitet sie an Ort und Stelle und behält deine Formatierung. Anfragen und Mocks nennen sie mit ihrem Pfad, etwa specs/alpenglow.yaml. Siehe Specs.

mocks/

Eine Datei je Mock-Server und daneben seine JavaScript-Routen.

echolot = 1
name = "Shop"
spec = "specs/alpenglow.yaml"
port = 4010
delay = 200

[[scenarios]]
operation = "GET /products/{sku}"
status = "404"

[[routes]]
id = "e5f6a7b8"
method = "GET"
path = "/users/{id}"
summary = "One user"

[[routes.responses]]
name = "OK"
status = 200
content-type = "application/json"
headers = [{ name = "X-Request-Id", value = "{{$randomUUID}}" }]
body = """
{
  "id": "{{request.params.id}}",
  "name": "{{$randomFullName}}"
}"""

[[routes.responses]]
name = "Not found"
status = 404
content-type = "application/json"
rules = [{ source = "path", name = "id", value = "0" }]
body = """{ "error": "no user {{request.params.id}}" }"""
SchlüsselBedeutung
nameDer Name des Mocks.
specDie Spec, die er bereitstellt. Ohne sie antworten nur die Routen des Mocks.
portDer Port. Standard 4010.
share-on-networktrue antwortet auf jeder Netzwerkschnittstelle, nicht nur auf diesem Mac.
delayMillisekunden vor jeder Antwort.
failure-rateProzent der Anfragen, die mit einem eingefügten 500 beantwortet werden, 0 bis 100.
validate-requestsfalse beantwortet Anfragen, die gegen die Spec verstoßen. Standard true.
[[scenarios]]Die für eine Operation der Spec gewählte Antwort: operation (etwa GET /pets), status, example (der Name des Beispiels).
[[routes]]Eine von Hand angelegte Route: id (bleibt gleich, während sich die Route ändert), method (oder ANY), path ({id} für einen Parameter), summary, enabled = false für eine Route, die aus ist, response (der Name der Standardantwort; die erste, wenn weggelassen), request-content-type und request-body (was daraus erstellte Anfragen senden).
[[routes.responses]]Eine Antwort der obigen Route: name, status, content-type, headers (name und value), rules (source ist path, query, header oder body; name; value, mit * für beliebig und leer für keinen) und body.

mocks/<slug>.js enthält die Routen des Mocks in JavaScript, die vor den von Hand angelegten Routen und der Spec antworten. Für die Operationen der Spec stehen Antworten nie im Mock: Beispiele gehören in die Spec. Siehe Mocks, Routen und Beispieldaten und Routen per Skript.

flows/

Eine Datei je Flow, <slug>.flow.toml. Echolot schreibt Blöcke, Verbindungen und Notizen in fester Reihenfolge, sodass das Verschieben eines Blocks zwei Zeilen ändert.

echolot = 1
name = "Place a test order"
description = "Places an order, then asks a person whether to keep it."

[mcp]
tool = "place_test_order"
description = "Places a test order on the demo shop, asking a person before keeping it."

[[blocks]]
id = "signin"
kind = "request"
title = "Sign in"
position = [330, 250]

[blocks.settings]
request = "auth/sign-in"

[[wires]]
from = "start.run"
to = "signin.run"
SchlüsselBedeutung
name, descriptionDer Name des Flows und was er tut.
[mcp]Bietet den Flow Agenten als Tool an: tool (sein Name) und description.
[schedule]Führt ihn nach einem Zeitplan aus: every-minutes oder cron (etwa "0 6 * * *").
[webhook]Führt ihn aus, wenn eine Anfrage eintrifft: method (Standard POST) und path.
[[inputs]]Seine Eingaben: name, type (any, text, number, bool, object, list, secret), description, default, required.
[[blocks]]Seine Blöcke: id, kind, title, position ([x, y] auf der Arbeitsfläche), paused, color und [blocks.settings] mit den Einstellungen der Art.
[[wires]]Verbindungen: from und to, jeweils block.port.
[[groups]]Gruppen von Blöcken: title, blocks (ihre IDs), color.
[[notes]]Notizen auf der Arbeitsfläche: text, frame ([x, y, width, height]).

Die Arten von Blöcken und ihre Einstellungen stehen unter Blöcke.

assistant/

Unterhaltungen mit dem Assistenten, die du im Arbeitsbereich teilst: <slug>.md zum Lesen in jedem Editor und <slug>.json, damit Echolot sie wieder öffnen kann.

Weitere Dateien

Dateien, die Echolot nicht kennt, bleiben unangetastet, sodass eine README, eine .gitignore oder Datendateien im Arbeitsbereich liegen können. Daten, die ein Agent oder ein Flow sichert (etwa exports/products.csv), landen dort, wo darum gebeten wurde, innerhalb des Arbeitsbereichs.

Auf dieser Seite