CommunityCodierung & Entwicklunggithub.com

undefine-org/bl-org-dossier

Erstellen Sie ein Design-/Architektur-/Geschmacksdossier als .bl.org-Datei, die als live, mobilfreundliche Seite mit semantischen Komponenten (Jobs, Telefonbildschirme, Sequenzen, Graphen, Rosetten, Matrizen, Entscheidungen, Fragen) und ausführbaren Beam-Lisp-Zellen gerendert wird – und die Antworten des Lesers zurück in die Datei schreibt, damit Claude sie lesen kann. Verwenden Sie dies, wenn Othman nach einem Dossier, einer Design-Überprüfung, einem Vorschlag, einem Bericht, „zeig mir die App, die du dir vorstellst“ oder einem Entscheidungsdokument fragt, auf das er reagieren soll, insbesondere von seinem Telefon aus.

Was ist bl-org-dossier?

Diese Fähigkeit verwandelt eine einzelne `.bl.org`-Datei in ein lebendiges, interaktives Dossier, das als mobile-optimierte Webseite gerendert wird. Es dient als Quelle, Seite, ausführbare Spezifikation und Antwortbogen in einem. Ein kleiner Beam-Lisp-Server rendert die Datei mit der `bl.doc.spans`-Partition, veröffentlicht sie im Tailnet und schreibt jede Antwort des Lesers zurück in den Block, auf den sie sich bezieht – ohne Datenbank oder zweite Kopie. `git diff` zeigt dann, was Othman gesagt hat. Der Workflow folgt einer klaren Schleife: Zuerst Recherche, dann Schreiben der `.bl.org`-Datei mit einer vorgegebenen Struktur (These, Jobs, Bildschirme, Sequenzen, ausführbare Zellen, Entscheidungen), gefolgt von der Ausführung und Überprüfung mit `bl doc run`. Nach der visuellen Prüfung auf Telefonbreite wird das Dossier veröffentlicht. Die Antworten werden mit `bl run` ausgelesen und direkt in die Datei geschrieben, was eine nahtlose Iteration ermöglicht. Die Fähigkeit unterstützt eine Vielzahl semantischer Komponenten wie `lede`, `stats`, `terms`, `screen`, `desk`, `sequence`, `graph`, `decision`, `ask` und `schema`. Jede Komponente hat eine spezifische Syntax und Darstellung. Besonders hervorzuheben sind die ausführbaren Beam-Lisp-Zellen (`#+begin_src beam-lisp`), die Design-Invarianten durch `assert`s prüfen und so die Spezifikation beweisbar machen. Antwortbare Blöcke benötigen eine eindeutige `:id`. Das Dossier ist als App lesbar: Auf breiten Bildschirmen wird es zu einer zweispaltigen App mit Seitenleiste, auf Telefonen wechseln Chips die Abschnitte. Es unterstützt Design-Sprachen wie „forest“ (Nurturing Forest), die das Erscheinungsbild von Mockups an das eigentliche Produkt anpassen. Das Kit enthält den Server, die Render-Logik und Tests.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/undefine-org/enchanted-skills/tree/main/bl-org-dossier

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

.bl.org-Dossiers, die zurücksprechen

Ein Dossier ist eine .bl.org-Datei. Sie ist die Quelle, die Seite, die ausführbare Spezifikation und der Antwortbogen. Ein kleiner Beam-Lisp-Server (das Kit neben dieser Datei) rendert sie mit der echten bl.doc.spans-Partition, veröffentlicht sie im Tailnet und schreibt jede Antwort des Lesers in den Block, den sie beantwortet. Keine Datenbank, keine zweite Kopie: git diff zeigt, was Othman gesagt hat.

Beispiel, lesen Sie es, bevor Sie ein neues schreiben: ~/projects/tiny-tools/mobile-app/dossier/pocket-harness.bl.org (umbenannt von baton.bl.org am 31.10.2026). Ein desktop-lastiges Beispiel mit Schreibtischen und einem ausführbaren Lebenszyklus: ~/projects/knowledger-interface-review/docs/reports/interface-review-20261031/knowledger-interface.bl.org. Hausgeschmack, von dem es abstammt: ~/code/undefine/omega/spikes/mobile/design-review/design-review.bl.org.

Der Kreislauf

  1. Zuerst recherchieren. Jede Behauptung auf einen Dateipfad, einen ausgeführten Befehl oder eine zitierte Quelle stützen.
  2. NAME.bl.org schreiben (Struktur unten). Zellen erhalten keine handgeschriebenen #+RESULTS – lassen Sie bl doc run sie schreiben.
  3. bl doc run DATEI.bl.org dann bl doc run DATEI.bl.org --check (Exit 0 = Zellen grün und Ergebnisse aktuell).
  4. Vor dem Behaupten von irgendetwas in Telefonbreite ansehen (siehe Ansehen).
  5. Veröffentlichen:
    work serve NAME --http auto --cwd ~/.claude/skills/bl-org-dossier/kit \
      --env-file ~/.config/baton-dossier/service.env --ready-timeout 120 \
      -- /etc/profiles/per-user/othman/bin/bl serve serve.bl -- /abs/pfad/NAME.bl.org
    
    Die Env-Datei enthält DOSSIER_OWNER=, den Tailscale-Login des Besitzers; nur diese Identität darf antworten (Serve setzt Tailscale-User-Login; verifiziert am 31.10.2026). DOSSIER_HANDLE=timinou ist der Name, den Antworten in :by tragen; ein Login (eine E-Mail-Adresse) wird niemals in die Datei geschrieben. Der Server liest die Datei pro Anfrage neu: Das Bearbeiten der .bl.org erfordert keinen Neustart. Das Bearbeiten des .bl-Codes des Kits schon: work restart NAME.
  6. Antworten lesen:
    bl run ~/.claude/skills/bl-org-dossier/kit/answers.bl -- /abs/pfad/NAME.bl.org
    
    Antworten leben im Block-Header: :answer B :at "2026-10-31 17:14" :note "…". Darauf reagieren, das Dossier aktualisieren (den :status einer Entscheidung auf decided setzen, eine Roster-Überschrift nach DONE verschieben) und sagen, was sich geändert hat.

Form (Othmans Geschmack)

Eröffnen Sie mit der These, beenden Sie mit dem, was er entscheiden muss. Dazwischen verdienen Sie sich jeden Abschnitt.

  • #+title: benennt das Ding und sein Versprechen. #+subtitle: ein Satz. #+kicker: wo es lebt. #+status: ehrlich (Vorschlag · nichts gebaut).
  • In einem Atemzug – lede + stats. Zwei kurze Absätze, vier Zahlen.
  • Definieren Sie die Wörter – terms für jedes Nomen, auf das Sie sich stützen werden. Wenn ein Satz wie „nahtlos“ die Anfrage trägt, spalten Sie ihn in die einzelnen Versprechen auf, die er verbirgt, und sagen Sie, was er niemals bedeutet (honest).
  • Jobs – ein job pro Nutzungsmoment, jeweils mit der Art und Weise des Referenzprodukts und einer Entscheidung.
  • Bildschirme – screen-Blöcke, aus Text gezeichnet. Echte Namen, echte Repos, echte Maschinen aus der tatsächlichen Umgebung – niemals Lorem Ipsum.
  • Wie es wirklich funktioniert – sequence für alles, was eine Leitung kreuzt; graph für Topologie; rosetta für eine Idee über mehrere Systeme hinweg.
  • Das Modell, ausführbar – Beam-Lisp-Zellen mit asserts, die die Invarianten des Designs festnageln. Das unter jeder Zelle gedruckte Ergebnis ist der Beweis.
  • Vorherige Arbeiten – matrix, Quellen aufgelistet, Behauptungen Dritter als aus Dokumenten stammend gekennzeichnet.
  • Entscheidungen (decision, mit den abgelehnten Optionen sichtbar) → Fragen (ask) → Roster (* TODO/DONE-Überschriften mit :PROPERTIES: :JOBS: :AREA: :PROTO:).
  • Der Text ist kurz. Platzierung und Gewicht tragen den Zustand. Keine Marketing-Adjektive. Sagen Sie, was nicht verifiziert ist.

Komponenten

Header-Attribute: :key value oder :key "quoted value". Körper sind Zeilensprachen; a | b | c-Zeilen, sofern nicht anders angegeben.

BlockKörperDarstellung
ledeProsagroße Serif-Eröffnung
statsvalue | label | noteStatistik-Kacheln
termsterm | bedeutungDefinitionsliste
principlestitel | textnummerierte Karten
note / warning / honest (:title)ProsaCallouts (Schiefer / Ton / Ocker)
rosettaerste Zeile = Kopfzeilenausgerichtete Tabelle; Karten auf einem Telefon
matrixerste Zeile = Kopfzeilen; Zellen y, ~, n + optionale WörterPunktmatrix mit Legende
job :id :title :codex :claude :decision :screender JTBD-SatzJobkarte + Antwort
decision :id :title :status proposed|decided- [x] gewählt, - [ ] abgelehnt, dann BegründungEntscheidungskarte + Zustimmen/Überarbeiten/Ablehnen
ask :id :title :options "A|B|C"KontextFragekarte + Optionen
screen :id :title :job :caption [:theme dark]Bildschirmsprache (unten)Telefon-Mockup + Reaktion; aufeinanderfolgende Bildschirme bilden einen durchstreifbaren Streifen
desk :id :title :job :caption [:url]Schreibtischsprache (unten)ein Desktop-App-Rahmen + Reaktion; gleiche Antwort-Buttons wie bei Bildschirmen
sequence :titlelanes a · sub | b · sub, a -> b : label (Aufruf), a --> b : label (Antwort), a => b : label (der Schlüsselmoment), note a, b : text, == dividerSVG auf breiten Bildschirmen, nummerierte Schritte auf Telefonen
graph :titlenode id | label | sub | col,row | tone (you door station builder foreign), edge a -> b | label | style (baton solid dash none; <->, -- auch)SVG-Topologie
schema :id :titlenicht eingerückt entity @icon | gloss; eingerückt attr type | note. Typen: text date, -> kind (Ref), ->> kind (viele), a > b / c (Zustandsfluss), a, b, c (Enum)Entitätskarten, Referenzen verlinken auf #entity-NAME, eine Anzahl von Entitäten · Attributen · Zuständen; beantwortbar
procedure :id :title :makesstep @icon Titel | wer | name · art, … (produziert; ein drittes · draft = das Harness entwirft es, während die Aufgabe startet), check @icon Titel | wer | name, … (Ratschlag eines Prüfers, Agent oder Person), gate @icon Titel | wer | name, … (wartet auf Übergabe); wer benennt eine Rolle; andere Zeilen sind Prosaeine Schrittschiene, Checks gestrichelt, Gates als Rauten; beantwortbar

Ein schema- oder procedure-Block ist auch die Quelle, die eine Zelle kompilieren kann: bl doc run übergibt die Datei in (BeamLisp/argv), sodass eine Zelle ihren eigenen Block lesen und in Datom-Attribute oder Aufgaben umwandeln kann (Beispiel: team-machine/design/work/WORK.bl.org, Zellen spine, procedure).

Bildschirmsprache, ein Verb pro Zeile: bar Titel | rechts (< Titel fügt zurück hinzu), sub, chips a* | b (* = ausgewählt), section Label | anzahl, card ton | titel | meta | körper (Töne turn approve run done fail idle), ask, actions Primär! | Normal? | Gefahr^, msg du|agent | text, tool label | detail, diff +12 −3 | pfad, code text, strip ton | text | button, row label | wert, banner warn|ok | text, dest icon | titel | körper, note, spacer, input platzhalter | ↑, tabs A* | B, lock zeit | datum + notif app | titel | körper | Aktion, Aktion (mit :theme dark), sheet Titel – alles danach sitzt in einem Bottom-Sheet über dem Bildschirm. card ton | titel | meta | körper | @check! @x @next? – eine fünfte Spalte setzt symbolbasierte Aktionen auf die Karte (sagen Sie, was in der Karte benötigt wird, behalten Sie die Aktionen als Symbole; Othman findet Button-Reihen schwer zu parsen), machine ton | @server name | rolle | detail | rechts (Töne up busy asleep you), search platzhalter + pick @ordner name* | detail | rechts (eine Projektauswahl, * = gewählt), listen hinweis (Mikrofon + Wellenform), heard transkript, intent @senden Verb | ziel | text (Sprache), choices A | B* | C (eine Multiple-Choice-Frage, * = gewählt), reply platzhalter (eine Freitextantwort mit Mikrofon und Senden). Nebenfakten zu pick und machine fließen in den Text ein; Kartenaktionen stehen unter den Wörtern.

Schreibtischsprache — jedes Bildschirmverb, plus Desktop-Regionen und ein Dokument: nav @home Accueil* | @matter Affaires (Seitenleiste, * = hier), crumb a › b, head Titel | ton · Status | Aktion! | Andere? (der Aktionsslot, oben rechts), meta a | b, tabs, col doc|rail|main (Spalten; doc zeichnet Papier; wiederholen Sie col main für eine Reihe von Karten), page Titel, para text mit {+eingefügt+} {-gelöscht-} {~vorgeschlagen~} {!zu verifizieren!} ‹P-01› (Quell-Chip) ^1 (Kommentar-Anker), point ton | @icon art | titel | körper | Option* | Option, comment 1 | wer | text (gleiche Nummer wie sein ^1), opts A* | B. Zeilen vor der ersten col erstrecken sich über die gesamte Breite. Schreibtische verwenden die Warm-Signal-Palette von Knowledger (Lampe im Dunkelmodus).

Symbole: @name an einer beliebigen Stelle in einer Bildschirm- oder Schreibtischzeile zeichnet ein Liniensymbol – home matter library playbook people audit settings search plus send file word check x alert clock user bot chat comment link seal eye edit version diff filter more back next down up bell wait calendar scale flag play undo lock attach grid list board split spark. Bevorzugen Sie ein Symbol gegenüber einem Wort für Arten von Dingen.

Beantwortbare Blöcke: ask decision screen desk job schema procedure. Jeder benötigt eine eindeutige :id.

Einfaches Org funktioniert auch: Überschriften mit TODO-Keywords und Tags, :PROPERTIES:-Drawer (Chips), Tabellen, Listen, [ ]/[X]-Checkboxen, =code=, *bold*, /italic/, [[url][label]], [[#screen-ID][label]].

Ausführbare Zellen

#+begin_src beam-lisp :id lifecycle
(ns project.model)           ; erste Zelle benennt den Namensraum; alle Zellen teilen ihn
(defn advance [s e] …)
(assert (= … …))             ; ein fehlgeschlagenes assert wird zum Ergebnis und --check beendet sich mit 1
{:what "der letzte Wert ist der gedruckte Beweis"}
#+end_src

Nur kleingeschriebenes #+begin_src beam-lisp (Großschreibung wird nie ausgeführt). Modellieren Sie die Invarianten des Designs (ein Schreiber, Reihenfolge von Effekten, Abdeckung einer Abbildung), keine Belanglosigkeiten.

Beim Schreiben dieser Dossiers gefundene Fallstricke von Beam Lisp (installiertes bl, Stand 31.10.2026): nicht im Kern – ffirst, reductions, spit, replace, format, parse-long, prn. Verwenden Sie File/read!, File/write!, File/rename!, String/replace, Regex/run|scan|split|replace, erlang/binary_to_integer, (println (pr-str x)). Argumente werden von rechts nach links ausgewertet. Benennen Sie niemals eine öffentliche Funktion nach einer Kernfunktion. Hiccup-Kinder müssen Seq's sein (map/for), keine Vektoren: (map identity v).

Ansehen

chromium --headless=new --no-sandbox --hide-scrollbars --window-size=412,16000 \
  --virtual-time-budget=5000 --screenshot=/tmp/d.png http://127.0.0.1:PORT/
nix shell nixpkgs#imagemagick --command magick /tmp/d.png -crop 412x1000+0+0 +repage /tmp/d0.png

Seiten größer als 16000 px: HTML speichern, frühere section.parts verstecken und diese aufnehmen. Prüfen: zuerst Telefonbreite, jedes Diagramm lesbar, beide Designs, keine ✗ failed-Zelle.

Als App lesen

Auf einem breiten Bildschirm ist die Seite eine zweispaltige App ohne Änderung an der Datei: Jede Überschrift der Ebene 1 wird zu einer Seite in einer Seitenleiste (mit ihren Überschriften der Ebene 2 darunter, wenn sie geöffnet ist). Ein Abschnitt zeigt, wie viele Antworten noch ausstehen, ein ✓, sobald beantwortet, und einen Roster mit seinem DONE/Gesamt. Ein Abschnitt wird auf einmal angezeigt, mit zurück/vorwärts am Fuß und ←/→ zum Bewegen. #all (« Gesamtes Dokument ») zeigt alles; jeder #anchor öffnet den Abschnitt, der ihn enthält. Auf einem Telefon wechseln die Chips die Abschnitte auf die gleiche Weise. Schreiben Sie Überschriften der Ebene 1 als die Seiten des Berichts und Ebene 2 als deren Teile.

Designsprachen

Mockups können die echte Designsprache eines Produkts tragen. #+design: forest am Anfang eines Dossiers zeichnet jeden screen und desk darin (ein Block kann mit :design NAME überschreiben, oder mit :design none abwählen); die Mockup-Zeilen ändern sich nicht. Bevorzugen Sie die eigene Sprache des Produkts gegenüber der Standardpalette des Kits, wann immer eine existiert.

Eine Sprache ist ein literarisches Modul, kit/dossier/design/NAME.bl.org, dessen Zellen der Namensraum schema.design.NAME sind: Token (hell und dunkel), Schriftgrößen, Radien, Schatten, Bewegungs-Token und das CSS, das die Mockup-Variablen des Kits neu bindet. Registrieren Sie es in kit/dossier/design.bl. Dieselbe Datei ist seine Exemplarseite, durch vier Blöcke, die sich aus dem Modul selbst zeichnen: #+begin_palette, #+begin_type, #+begin_shape, #+begin_motion (jeweils mit :design NAME, leerem Körper). Führen Sie eine parity-Zelle, die die Token mit dem ausgelieferten CSS des Produkts vergleicht; der Kit-Test stellt keine Abweichung fest.

Ausgeliefert: forest – Nurturing Forest, Orams Team-Maschine (design/forest.bl.org, veröffentlicht als der forest-language-Dienst).

Kit

kit/serve.bl (Routen / /doc /rev /src /answers POST /answer), kit/answers.bl, kit/dossier/{org,attrs,ui,page,answer,design}.bl (rein), kit/dossier/design/*.bl.org, kit/style.css, kit/live.js. Tests: bl test -p ~/.claude/skills/bl-org-dossier/kit kit/test/kit_test.bl. Eine neue Komponente = eine -h-Funktion in ui.bl, ein Fall in block->h, CSS, eine Nadel im Test. Antworten werden von patch-line geschrieben: nur :answer :note :at :by ändern sich; jedes andere Byte der Datei bleibt.

Die Fähigkeit lebt in ~/projects/enchanted-skills/bl-org-dossier (das öffentliche undefine-org/enchanted-skills-Repo); ~/.claude/skills/bl-org-dossier ist ein Symlink darauf. Sie wird von jeder Sitzung, die diese Fähigkeit nutzt, geteilt. Committen Sie nach und nach, eine Idee pro Commit, und stagen Sie nur Ihre eigenen Dateien (git status zuerst: eine andere Sitzung könnte gerade bearbeiten). Ein work restart eines Dossier-Dienstes lädt, was auf der Festplatte ist, einschließlich nicht committeter Bearbeitungen. Behalten Sie die Antworten eines Lesers in einem eigenen Commit im Repo des Dossiers, damit git diff zeigt, was sie gesagt haben.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills