Zum Inhalt springen

KI-Import — Workspace mit KI einrichten

Mit dem KI-Import richtest du komplette Workspaces ein, indem eine KI (z. B. ChatGPT, Gemini, Claude) sie in einem einfachen Textformat beschreibt — dem Pachurros-Markup. Du fügst das Ergebnis ein, prüfst die Vorschau und importierst mit einem Klick.

Der Import findet sich in der linken Seitenleiste unter KI-Import (Route /w/<workspace>/ki-import).

  1. Prompt kopieren — Auf der KI-Import-Seite den System-Prompt kopieren (Button „Prompt kopieren”) und deiner KI geben.
  2. KI beschreiben lassen — Der KI sagen, was du brauchst, z. B. „Richte mir einen Workspace für ein Video-Projekt ein: Projekt, Aufgaben-Tabelle mit Status und Verantwortlichen, eine Kanban-Ansicht, eine Dashboard-Seite und ein paar To-dos.” Die KI antwortet mit Pachurros-Markup.
  3. Einfügen & importieren — Das Markup ins Eingabefeld einfügen → Vorschau (zeigt, was angelegt wird) → Importieren. Danach landest du direkt auf dem ersten erstellten Element.

Referenzen (Relations, Projektzuordnungen, Erwähnungen, eingebettete Ansichten) werden beim Import automatisch aufgelöst.

Auf der KI-Import-Seite stehen zwei Textblöcke zum Kopieren — sie tun Verschiedenes:

  • System-Prompt — eine Anweisung: „erzeuge Pachurros-Markup, gib nur das Markup aus”. Der kurze Weg: kopieren, der KI geben, sagen was du brauchst.
  • Vollständige Format-Referenz — eine Erklärung: das ganze Pachurros-Markdown in einem Text. Fließtext, alle Blöcke, der Rahmen (Tabellen, Seiten, Ansichten, Kennzahlen), das Verknüpfen, ein vollständiges Beispiel und eine Prüfliste. Gedacht für den Fall, dass deine KI das Format wirklich verstehen soll: einmal einfügen, danach ganz normal beschreiben, was entstehen soll. Auch gut für Modelle, die mit knappen Anweisungen schlampen.

Beide gibt es als Kopier-Knopf und als .md-Download. Ändert sich das Format, ändern sich beide mit — kopier sie bei Bedarf neu.

Umgekehrt exportierst du deinen bestehenden Workspace als Pachurros-Markup — auf der KI-Import-Seite über „Workspace als Markup exportieren”. So gibst du vorhandene Inhalte an eine KI, lässt sie ergänzen oder überarbeiten und importierst das Ergebnis wieder.

Der Export umfasst: Projekte, Tabellen (inkl. Relations, Formeln, Ansichten mit Filter/Sortierung/Gruppierung, Unteraufgaben), Seiten (mit Erwähnungen & eingebetteten Ansichten), Rich-Zeilen, Sessions, Boards und Aufgaben. Berechnete Spalten (Formel/Lookup/Rollup/Anzahl) werden beim Re-Import automatisch neu berechnet und nicht als Werte übertragen.

Der Umlauf ist an einer Seite mit allen Blockarten geprüft: Sie kommen im Zielworkspace vollständig an, Texte wortgleich. Verweise laufen über Namen statt interner Kennungen — im Zielworkspace gibt es die Kennung nicht, den Namen schon; der Import verbindet Seiten-, Tabellen- und Projektnamen wieder.

Zwei Dinge verhalten sich bewusst anders:

  • Dateien reisen nicht mit. Bild, Ton, Galerie und Dokument verweisen auf die Mediathek des Ursprungs-Workspaces. Beim Import in einen anderen Workspace bleibt der Name als Text stehen — ein Block ohne Datei wäre ein leeres Versprechen.
  • Ein eingebetteter Tabellen-Block kommt als Tabellen-Ansicht an. Beide werden gleich dargestellt; das Markup kennt dafür eine Schreibweise (@embed).

Der Import legt Inhalte immer neu an — importierst du denselben Export erneut in denselben Workspace, entsteht alles doppelt. Um stattdessen den bearbeiteten Stand an Stelle des alten zu setzen, aktiviere vor dem Import die Option „Workspace vor dem Import leeren”: Der Workspace wird geleert (mit Warnung und Bestätigung) und anschließend neu befüllt — ohne Duplikate. Alternativ importierst du in einen frischen, leeren Workspace.

Jeder Inhalt steht in einem Block, der mit ::: beginnt und mit ::: endet:

::: table Aufgaben
...
:::

Blocktypen: table, page, project, session, board, view, tasks, row, template. Ein optionales Emoji darf hinter dem Namen stehen (::: table Aufgaben ✅).

Die deutschen Namen gehen genauso: tabelle/datenbank, seite/notiz, projekt, termin, tafel, ansicht, aufgaben, zeile/eintrag, vorlage. Einrückung vor dem ::: und vier statt drei Doppelpunkte stören ebenfalls nicht.

KI-Ausgaben sind selten formal perfekt. Der Import ist darauf ausgelegt, dass kein Inhalt still verschwindet — er landet notfalls als lesbarer Seitentext. Was auffiel, steht nach der Vorschau unter „Beim Lesen aufgefallen”:

Fehler der KIWas passiert
Abschnitt ohne schließendes :::Der Rest wird trotzdem gelesen und dem Abschnitt zugeschlagen — mit Hinweis
Unbekannter Abschnitt (::: kalender …)Inhalt landet als Seitentext — mit Hinweis
Tabelle ohne - Name: typ-ZeilenSpalten werden aus der Kopfzeile abgeleitet, Typ aus dem Spaltennamen geraten (erste Spalte immer Titel)
Tabelle ohne Rand-|Wird gelesen wie mit
Zeile mit zu wenigen ZellenWird aufgefüllt statt verschoben
::: in einem Code-BlockSchließt den Abschnitt nicht
Antwort in ```markdown verpacktWird ausgepackt
Titel-Überschrift zusätzlich zum SeitentitelWird einmal entfernt statt doppelt angezeigt

Der Seitentext selbst ist Standard-Markdown (CommonMark + GFM) — die vollständige Liste steht unter Alle Block-Typen.

Spalten werden mit Typ deklariert, danach folgt nach --- eine Markdown-Tabelle mit den Daten. Die Kopfzeile muss die Spaltennamen enthalten.

::: table Aufgaben ✅
- Titel: text
- Status: select (Offen, In Arbeit, Erledigt)
- Fällig: date
- Projekt: relation → Projekte
---
| Titel | Status | Fällig | Projekt |
| Konzept | In Arbeit | 2026-07-10 | Website-Relaunch |
:::
  • Die erste text-Spalte ist der Titel der Zeile — darauf verweisen Relations und Erwähnungen.
  • Zell-Formate: date = YYYY-MM-DD, checkbox = true/false, relation/multiselect = mehrere Werte per Komma.
TypBeschreibung / Syntax
text, longtextKurzer / langer Text
numberZahl — optional (currency EUR) oder (percent)
date, timeDatum / Uhrzeit
checkboxJa/Nein
url, email, phoneWeb-Adresse / E-Mail / Telefon
ratingSterne-Bewertung
select (A, B, C)Einfachauswahl mit Optionen
multiselect (A, B, C)Mehrfachauswahl
relation → ZieltabelleVerknüpfung zu einer anderen Tabelle
assigneePerson zuweisen — Zelle = Name oder E-Mail eines Mitglieds
locationOrt / Adresse
formula (Ausdruck)Berechnetes Feld, z. B. formula (Budget - Ausgaben)
lookup (via <Relation> → <Feld>)Wert aus verknüpfter Tabelle holen
rollup (via <Relation> <agg> <Feld>)Aus verknüpfter Tabelle aggregieren (agg: sum, avg, min, max, count)

Beispiele für berechnete Spalten:

::: table Aufgaben
- Titel: text
- Projekt: relation → Projekte
- Verantwortlich: assignee
- Restbudget: formula (Budget - Ausgaben)
- Projekt-Budget: lookup (via Projekt → Budget)
- Aufwand gesamt: rollup (via Projekt sum Budget)
---
| Titel | Projekt | Verantwortlich |
| Konzept | Website-Relaunch | anna@firma.de |
:::

lookup und rollup verweisen über eine Relations-Spalte derselben Tabelle (via) auf eine Spalte der Zieltabelle.

Eine Zeile wird zur Unteraufgabe der vorherigen Top-Level-Zeile, wenn ihr Titel mit beginnt:

::: table Aufgaben
- Titel: text
- Status: select (Offen, Erledigt)
---
| Titel | Status |
| Hauptaufgabe | Offen |
| ↳ Teilschritt 1 | Offen |
| ↳ Teilschritt 2 | Erledigt |
:::

Eine eigene Ansicht einer Tabelle — mit Gruppierung, Filter, Sortierung und sichtbaren Spalten:

::: view Nach Status on Aufgaben
type: kanban
group: Status
sort: Fällig desc
filter: Status is Offen
columns: Titel, Status
:::
  • type: table, kanban, calendar, gallery, list, timeline, chart
  • group: Spalte für Kanban-Gruppierung · calendar: Datums-Spalte für Kalender
  • filter: <Spalte> <op> <Wert>op: is, is not, contains, not contains, empty, not empty, gt, lt, gte, lte · sort: <Spalte> <asc | desc>
  • columns: — sichtbare Spalten (kommagetrennt)

Timeline (Gantt): type: timeline + start: <Datums-Spalte> + end: <Datums-Spalte>

Diagramm: type: chart + chart: bar | donut | line + group: <Spalte> (X-Achse) + value: <Zahlen-Spalte> (optional) + agg: count | sum | avg | min | max

Eine eigene Zeile im Seitentext bettet eine Tabelle oder eine bestimmte Ansicht ein:

@embed Aufgaben (ganze Tabelle, Standardansicht)
@embed Aufgaben / Nach Status (bestimmte Ansicht)
@embed Aufgaben / Board | Liste | Kalender (mehrere Ansichten als Tabs)

Mehrere @embed-Zeilen jeweils durch eine Leerzeile trennen.

In einer Ansicht mit filter: <Relation> is @current löst der Platzhalter beim Rendern auf die Zeile auf, zu deren Datensatz-Seite der Embed gehört. So zeigt eine generische Ansicht auf jeder Zeile automatisch die verknüpften Einträge (z. B. „Aufgaben dieses Meetings”) — und eine dort neu angelegte Zeile bekommt die Relation automatisch gesetzt.

::: view Aufgaben dieses Meetings on Aufgaben
type: table
filter: Meeting is @current
:::

Auf gewöhnlichen Seiten (ohne Datensatz-Kontext) wird ein solcher Embed ausgegraut.

Eine Rich-Text-Seite mit Überschriften, Listen, Aufgaben, Zitaten und Code:

::: page Projektnotiz 📝
# Projektnotiz
Fließtext mit **fett**, *kursiv*, `Code` und [Links](https://example.com).
- Aufzählung
1. Nummerierte Liste
- [ ] offene Aufgabe
- [x] erledigte Aufgabe
> Zitat
---
:::
:::collapsible Mehr Details
Aufklappbarer Abschnitt.
:::
:::columns2
Linke Spalte
---col---
Rechte Spalte
:::
:::callout 💡
Farbig hervorgehobener Hinweis.
:::
:::toc
:::
:::equation
E = mc^2
:::

:::columns3 erzeugt drei Spalten (jeweils mit ---col--- getrennt).

Ganz oben im ::: page-Block (vor dem Inhalt):

::: page Detailkonzept
parent: Projektnotiz (hängt die Seite unter „Projektnotiz")
project: Website-Relaunch (ordnet sie einem Projekt zu)
# Detailkonzept
...
:::

Innerhalb von Seitentext verlinkst du mit [[…]]:

[[Aufgaben/Konzept]] → verlinkt eine Tabellen-Zeile
[[Projektnotiz]] → verlinkt eine Seite

Einer Tabellenzeile eine ausführliche Seite geben, die sich beim Klick auf die Zeile öffnet — mit Fließtext, Listen und sogar eingebetteten Ansichten:

::: row Aufgaben / Konzept
project: Website-Relaunch (optional — ordnet die Datensatz-Seite einem Projekt zu)
# Details zum Konzept
Ausführliche Beschreibung, Checklisten, eingebettete Ansichten (@embed) …
:::

::: row <Tabelle> / <Zeilentitel> — die Zeile wird über ihren Titel gefunden.

Eine benannte Vorlage pro Tabelle: neue Zeilen starten mit vorgegebener Seiten-Struktur und Feld-Werten. Genau eine Vorlage kann default: true sein — sie greift beim „Neue Zeile”-Button der Tabelle.

::: template Standard on Meetings
default: true
Status: To Do
## Entscheidungen
-
## Action Items
@embed Aufgaben / Aufgaben dieses Meetings
## Diskussion
-
:::
  • Führende key: value-Zeilen sind entweder default: true oder Property-Defaults (z. B. Status: To Do setzt die Spalte „Status” beim Anlegen vor).
  • Platzhalter: {{title}} (Zeilentitel) und {{today}} (heutiges Datum) werden beim Erstellen aufgelöst.
  • Enthaltene @current-Embeds lösen bei jeder neuen Zeile automatisch auf die neue Zeile auf.

Auf einer Seite mit mehreren eingebetteten Ansichten (Overview/Dashboard):

@filter Projekte (ein Button je Zeile der Tabelle „Projekte")
@filter Aufgaben / Status (ein Button je Auswahl-Option der Spalte „Status")
@filter Aufgaben / Status (multi) (Mehrfachauswahl erlauben)
@button Aufgaben (Button: neue leere Zeile anlegen + öffnen)
@button Aufgaben / Standard (neue Zeile aus der Vorlage „Standard")
  • @filter setzt einen seitenweiten Filter. Jeder Embed, dessen Tabelle passt, filtert automatisch mit: im Relations-Modus alle Embeds mit einer Relation zur Zieltabelle (z. B. „ein Button pro Projekt filtert alle Ansichten”), im Select-Modus alle Embeds mit einer gleichnamigen Auswahl-Spalte.
  • @button legt per Klick eine neue Zeile an (optional aus einer Zeilen-Vorlage) und öffnet sie.
  • Jede @filter/@button-Zeile steht in einer eigenen Zeile (durch Leerzeile getrennt).

Eine große Zahl aus einer Tabelle — als eigener Block im Seitentext:

:::metric Offene Aufgaben
table: Aufgaben
agg: count
filter: Status is Offen
form: none
:::
SchlüsselBedeutung
table:Tabelle, aus der gerechnet wird
agg:count, sum, avg, min, max — Kurzform agg: sum Betrag
value:Zahlen-Spalte (bei allem außer count)
filter:<Spalte> <is|is not|contains|not contains|empty|not empty|gt|lt|gte|lte> <Wert>, mehrfach erlaubt
form:Bild über der Zahl (siehe unten). Fehlt es, steht nur die Zahl da.
prefix: / suffix:Einheit davor bzw. dahinter
format:plain, thousands, currency CHF, percent · decimals: auto|0|1|2|3
emphasis:strong (Leitzahl) oder quiet (Nebenzahl)
  • form: none — nur die Zahl. Das ist auch die Voreinstellung, wenn form: fehlt.
  • form: line · area · barsVerlauf. Dazu gehört axis: <Datums-Spalte>; ohne sie zählt das Anlagedatum der Zeilen, und bei eingespielten Daten liegen die alle im selben Monat. Optional range: 12m | 6m | 12w | 30d und cumulative: yes (jeder Punkt zeigt alles bis dahin).
  • form: progress · ringAnteil an einem Ziel. Braucht goal: <Zahl> oder goal: metric <Name einer anderen Kennzahl der Seite>.
  • form: delta — Pfeil mit Abstand: compare: previous (Zeitraum davor, braucht axis) oder compare: goal.

Mehrere metric: <Titel>-Gruppen in einem Block; grid: bestimmt die Kacheln pro Zeile:

:::metric
grid: 3
metric: Budget gesamt
table: Finanzierung
agg: sum Betrag
form: area
axis: Datum
cumulative: yes
metric: Abgerufen
table: Finanzierung
agg: sum Betrag
filter: Typ is Abruf
form: progress
goal: metric Budget gesamt
emphasis: strong
:::

Benannte Bausteine und eine Formel darüber — so lassen sich Zeilenmengen verrechnen:

:::metric Offenes Budget
term Budget: table Finanzierung, agg sum Betrag, filter Typ is Budget
term Abrufe: table Finanzierung, agg sum Betrag, filter Typ is Abruf
formula: {Budget} - {Abrufe}
:::

Ein Baustein darf auch auf eine andere Kennzahl der Seite zeigen: term Plan: metric Budget gesamt.

Ein Projekt klammert Tabellen, Seiten, Sessions und Boards:

::: project Website-Relaunch 🚀
status: Aktiv
color: #3b82f6
Neugestaltung der Firmenwebsite (optionale Beschreibung, mehrzeilig).
:::

Zuordnung: project: <ProjektName> als erste Zeile in einem table-, page-, session-, board- oder row-Block.

In der Seitenleiste hat jedes Element genau einen Platz — es erscheint nie doppelt:

Wo es erscheint
mit project:nur im Projekt, unter Projekte
ohne project:nur unter Workspace, als allgemeines Element

Ordne deshalb konsequent zu: Alles, was inhaltlich zu einem Vorhaben gehört, bekommt project:. Ohne Zuordnung landet es im allgemeinen Bereich und wirkt dort unsortiert. Nur wirklich projektübergreifende Dinge (Kontakte, Vorlagen, persönliche Notizen) bleiben bewusst ohne.

Unterelemente erben das Projekt vom übergeordneten Element — bei einer Unterseite (parent:) ist project: also nicht nötig.

::: session Kickoff
type: Meeting
date: 2026-07-05
time: 14:00
location: Zürich
project: Website-Relaunch
Beschreibung (optional).
:::

Jede Zeile wird eine Haftnotiz auf dem Board:

::: board Ideen
project: Website-Relaunch
- Erste Notiz
- Zweite Notiz
:::

Erzeugt echte Einträge im Aufgaben-Modul:

::: tasks
project: Website-Relaunch
- [ ] Angebot schreiben | due 2026-07-10 | @anna@firma.de
- [x] Rechnung senden
:::

- [ ] offen, - [x] erledigt. Optional pro Zeile: | due JJJJ-MM-TT | @Name/E-Mail.

::: project Website-Relaunch 🚀
status: Aktiv
Neugestaltung der Firmenwebsite.
:::
::: table Aufgaben ✅
project: Website-Relaunch
- Titel: text
- Status: select (Offen, In Arbeit, Erledigt)
- Fällig: date
- Verantwortlich: assignee
---
| Titel | Status | Fällig | Verantwortlich |
| Konzept | In Arbeit | 2026-07-10 | anna@firma.de |
:::
::: view Nach Status on Aufgaben
type: kanban
group: Status
:::
::: session Kickoff
type: Meeting
date: 2026-07-05
location: Zürich
project: Website-Relaunch
:::
::: page Dashboard 📊
project: Website-Relaunch
# Überblick
Aktuelle Aufgaben — siehe [[Aufgaben/Konzept]].
@embed Aufgaben / Nach Status
:::
::: tasks
project: Website-Relaunch
- [ ] Kickoff vorbereiten | due 2026-07-04
:::

Manches lässt sich per Text nicht sinnvoll erzeugen und ist bewusst nicht enthalten:

  • Bild-, Datei- und Video-Uploads sowie Mediathek-Inhalte
  • Board-Elemente über Haftnotizen hinaus (Formen, Rahmen, Verbindungslinien)
  • Spalten-Beschreibung / Pflichtfeld
  • Vorschau nutzen: Vor dem Import zeigt die Vorschau, wie viele Projekte, Tabellen, Seiten, Sessions, Boards und Aufgaben angelegt werden.
  • Namen konsistent halten: Relations, Projekt- und Ansichts-Zuordnungen funktionieren über exakte Namen/Titel — die KI sollte sie einheitlich verwenden.
  • In Etappen arbeiten: Große Setups kannst du in mehreren Imports aufbauen; bereits angelegte Elemente lassen sich per Namen weiter referenzieren.
  • Prompt aktuell halten: Der auf der KI-Import-Seite hinterlegte System-Prompt enthält immer die vollständige, aktuelle Format-Referenz — bei Bedarf neu kopieren.
  • Hinweise lesen: Erscheinen nach der Vorschau Hinweise, sag der KI kurz, was sie falsch gemacht hat (meist ein vergessenes :::). Der Import selbst läuft trotzdem durch.