agentsclimarketplace

Selectedleafs pos operations

Skill wemwi/skill-library/selectedleafs-pos-operations

Konsolidierter Runtime-Skill für die selectedleafs POS-Operations-Agenten (Kommissionsware an Kiosk-Partner-Stores). Bündelt Restock (Protokoll auswerten → Drive → City-Channel), Inventory (Bestandsprotokoll ablegen), Invoice (Provisionsabrechnung), Telegram-Handwerk (Format, Pinned), Store (neuen POS-Partner anlegen + 🎉-Broadcast), Salesperson (neuen Vertriebler anlegen: Lexware-Kontakt + Provisions-Sheet-Kopie + POS-SHEET-Notiz) und ein Werte-Verzeichnis (City→Channel-Map, Drive-Root, Topics). Jeder Agent liest nur seine reference(s); diese SKILL.md ist die Landkarte (Dispatch + Invarianten), die Tiefe steckt in references/. IMMER laden, sobald ein POS-Operations-Agent eine Aufgabe verarbeitet — auch ohne das Wort Skill. Triggers on: pos-restock, pos-store, pos-salesperson, pos-operations, Übergabeprotokoll, Kommissionsware, UL-Nummer; telegram post, City-Channel, restock post, neuer partner post, pinned post; Bestandsprotokoll, Provisionsabrechnung, Vertriebler anlegen, Provisions-Sheet, POS-SHEET.From its SKILL.md

Install
npx -y skills add wemwi/skill-library --skill selectedleafs-pos-operations

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.5 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it

selectedleafs POS-Operations — Router

Landkarte für die POS-Operations-Agenten. Diese Datei dispatcht und hält die domänenübergreifenden Invarianten — sie trägt keine Domänen-Prozedur. Die operative Tiefe steckt in references/. Jeder Agent liest nur die reference(s) seiner Domäne (Allowlist), plus registry.md für statische Werte. Das Telegram-Post-Handwerk ist nach seiner Natur aufgeteilt: die geteilte Nachrichten-Konvention (Emoji-Semantik, Format-Klassen, parse_mode/Escaping) steht als Invariante 6 unten — sie gilt für jeden Post und lebt deshalb nicht bei einem einzelnen Agenten; die konkreten Post-Templates liegen bei der erzeugenden Domäne (📦/🌿 in restock.md, 🎉 in store.md); das Channel-Lifecycle (Kanal live schalten, Pinned, Launch, Legal — ein rein manueller Schritt) liegt als Runbook in city.md. Ein separates telegram.md gibt es nicht mehr (in 5.8.0 aufgelöst).

Dispatch — welche reference?

Sub-Task / Auslöserreference
Übergabeprotokoll/Lieferschein auswerten, Store/Stadt/Sorten ableiten, neu vs. aufgefüllt, PDF komprimieren + in Drive ablegen, 📦/🌿 in den City-Channel posten (Channel-Ziel aus registry.md, kein telegram.md-Load nötig)references/restock.md
Statische Werte nachschlagen: City→Channel-Map (direkter Lookup, kein Override-Mechanismus), Drive-Root-parentFolderId, Operations-chat_id/Topic, (später) Sheet-IDsreferences/registry.md
Bestandsprotokoll ablegen — Store-Match (Name → Metaobjekt) + Datum lesen, ohne Sorten-Parsing/Write-back/Postreferences/inventory.md
Provisionsabrechnung POS-Partner (Lexware → Vertriebler-Sheet), Rechnung-Insert, paid-Status-Updatereferences/invoice.md
Neuen POS-Partner anlegen (headless One-Shot: Shopify liftr_store + ggf. liftr_district, Lexware-Kontakt + POS-PARTNER-Notiz, Provisionszeile im Vertriebler-Sheet, 2 Drive-Ordner; Teaser-Bild aus Telegram-Upload → Shopify Files; Status/Rückfrage ins Operations-Topic) plus einmaliger 🎉-„Neuer Partner"-Broadcast in den City-Channel (§8.5, nur CREATE-Zweig, best-effort; Channel-Lookup aus registry.md §1)references/store.md
Neue Stadt onboarden + City-Channel live schalten — manuelles Runbook (kein Agent; store.md §5.1 läuft für die erste Stadt fail-closed): Channel-Setup, Pinned, Launch-Post, Legal-Ankerreferences/city.md
Neuen Vertriebler anlegen (dialog-initiiert: Lexware-Kontakt als Lieferant + eigener Vertriebler-Ordner <Nachname>, <Vorname> mit Sheet-Kopie Provision · <Nachname> · <Jahr> + POS-SHEET-Notiz + Stammdaten Name/Jahr/Besteuerung + optionale Ordner-Freigabe an die E-Mail; damit ohne Skill-Bump für Bridge und alle POS-Agenten sichtbar, registry.md §4)references/salesperson.md
Jahres-Rollover aller Vertriebler (cron-getrieben, Jahreswechsel): pro Vertriebler leere Vorlage kopieren → Stammdaten (Name/Jahr/Besteuerung, letztere aus dem Alt-Sheet) + aktuelle Stores (Lexware-POS-PARTNER-Enumeration → Stores!B) befüllen → POS-SHEET-Marker zuletzt umsetzen; altes Sheet bleibt Archiv (registry.md §2/§4)references/rollover.md

Die Post-Templates der Restock-Domäne (📦/🌿) liegen in restock.md, der 🎉-Broadcast in store.md — jede Kette kommt ohne Sprung in eine fremde reference aus; die geteilte Nachrichten-Grammatik dafür steht in Invariante 6. City→Channel ist ein direkter Lookup in registry.md — kein Ableitungsmechanismus, kein Override, da Test- und Prod-Agenten getrennte System-Prompts/Configs fahren (global-agent-framework), nicht einen geteilten Per-Run-Schalter. references referenzieren einander nicht quer — wer eine Domäne fährt, kommt mit seiner reference (+ registry.md) aus. city.md ist die Ausnahme im Sinne von: es ist ein manuelles Runbook, das kein laufender Agent lädt, sondern ein Mensch beim City-Onboarding.

Universelle Invarianten (für alle Domänen)

Diese sechs Grundsätze gelten domänenübergreifend; die Domänen-references konkretisieren sie, widersprechen ihnen aber nie:

  1. Idempotenz-Grundsatz — jede Einheit genau einmal. Vor Posten/Ablegen/Schreiben prüfen, ob die Einheit (Protokoll, Beleg, Partner) schon verarbeitet wurde, und bei Treffer abbrechen. Der Idempotenz-Schlüssel ist deterministisch aus stabiler Quelle (z. B. Protokollnummer), nie aus volatilem/geratenem Input. Drive/Ziel ist die Quelle der Wahrheit — kein externer State nötig (web-only-tauglich).

  2. IDs aus Registry oder Webhook — nie raten. Statische Ziele (Channel, Drive-Root, Operations-Chat) kommen aus registry.md bzw. der Agent-Config; lauf-spezifische IDs (file_id, per-Lauf chat_id) aus der Webhook-Injektion. Ist eine ID nicht eindeutig auflösbar → nicht öffentlich raten, sondern still abbrechen + Rückfrage in den Operations-Chat (Mensch-im-Loop-Ersatz).

  3. Append-only bei kuratierten Listen. Schreibseitige Mutationen an Sortiments-/Listendaten (product_list etc.) nur anhängen, nie entfernen, idempotent (kein Doppel-Eintrag, kein Clobbern bestehender Werte). Löschen/Auslisten bleibt manueller Menschen-Job.

  4. Kein Chip-Spaltentyp auf Spalten, die ein Agent liest oder schreibt. Eine native Sheets-Table-Spalte mit columnType PLACE_CHIP, FILES_CHIP, PEOPLE_CHIP o. ä. liefert über die Values-API einen leeren Wert — kein Fehler, kein Hinweis, der Agent liest still Nichts und schreibt still ins Leere. Chips sind ein reines UI-Feature. Jede Spalte, die in einer Agenten-Kette vorkommt (Key, Match-Spalte, Wertespalte), bleibt ein einfacher Typ. Aufgefallen an Stores!C (PLACE_CHIP); der Duplikat-Check auf Stores!B war nie betroffen, jede künftige Logik auf C wäre es gewesen. Chip-Inhalt ≠ Chip-Spaltentyp: einen Rich-Link-Chip per update_cells_chips in eine Nicht-Chip-Spalte zu schreiben ist erlaubt, solange kein Agent die Zelle per Values-API liest und die Rück-Lesung über get_range_chips läuft — so setzt store.md §8.4 die Protokoll-Ordner-Chips (E/F, rein menschlich). Verboten bleibt allein der Chip-Spaltentyp auf Lese-/Match-/Key-Spalten.

  5. Lexware-note-Marker sind zeilen-gebunden — eine Zeile je Marker, so lesen UND schreiben. Die note eines Kontakts ist ein menschlich sichtbares Freitextfeld und trägt seit POS-TG mehrere Marker gleichzeitig (Vertriebler-Kontakt: POS-SHEET und POS-TG). Lesen extrahiert den Wert der eigenen Marker-Zeile (getrimmter Rest dieser Zeile, nie „alles nach dem ersten Doppelpunkt"); Schreiben ändert nur die eigene Zeile und lässt jeden anderen Marker unangetastet (read-modify-write, zeilen-gebundene Regex, kein Dotall, nie die ganze note neu setzen). Ein Verstoß läuft still in die falsche (geld­relevante) Sheet-ID oder löscht POS-TG — gleiche Klasse wie Invariante 4. Vollständige Definition + Lifecycle: registry.md §4.

  6. Telegram-Posts folgen einer geteilten Konvention — Emoji trägt den Ausgang, nicht den Typ. Jeder Post (interner Status und öffentlicher Broadcast) folgt derselben Grammatik; die konkreten Zeilen leben in der §Status-Sektion der jeweiligen Domänen-reference, die Regeln hier.

    Emoji-Präfix = Ausgang, genau vier, trennscharf:

    EmojiBedeutungRegel
    ErfolgEinheit verarbeitet / Batch ohne Ausnahmen
    ℹ️No-opIdempotenz-Treffer, nichts zu tun, kein Problem
    ⚠️Aufmerksamkeit nötigLauf lief, aber ein Mensch muss ran (Mehrdeutigkeit, Jahr-Mismatch, Dublette prüfen, fehlendes Pflicht-/Input-Feld)
    Technischer FehlschlagTool/Netz/Upload kaputt, Re-Run/Wiederholung ist die Antwort (kein Datenproblem)

    Der Lauf-Typ (Backstop, Rollover, Sync, Restock …) steht im Titel-Text, nie im Emoji — deshalb kein Sonder-Emoji wie ♻️/↩︎ mehr. Broadcast-Anker sind separat und typ-tragend: 📦 Restock · 🌿 Neue Sorte · 🎉 Neuer Partner · 🕒 Öffnungszeiten (diese stehen in der Broadcast-Zeile, nicht als Status-Ausgang).

    Zwei Format-Klassen:

    • Single-Unit (restock, inventory, invoice-Event, store, salesperson) — genau eine Zeile pro Lauf: {emoji} {Schlüssel} — {Entität}: {Ergebnis}. Der Schlüssel (UL-…, RG-…, Datum, Name) steht in <code>.
    • Batch (rollover, invoice-Backstop) — report-by-exception: fette Kopfzeile mit Aggregat + Zählerzeile (die aufgehen muss: Summe = geprüfte Einheiten, das ist der Detektor gegen still fehlgezählte Einheiten), dann nur die Ausnahmen (⚠️/❌) einzeln — je mit Grund, nie nackt. Erfolge werden nicht einzeln gelistet. Kappung bei Masse: erste ~15 Ausnahmen, dann „…und {N} weitere" (Telegram-Limit 4096 Zeichen). Batch-Kopf führt mit ✅ (0 Ausnahmen) bzw. ⚠️ (Ausnahmen > 0) bzw. ❌ (Lauf gar nicht angelaufen).

    Mechanik (jeder Post): parse_mode = HTML. Jeder interpolierte dynamische Wert (Store-/Kontaktname, Adresse, <konkreter Fehler>) wird escaped: &&amp;, <&lt;, >&gt; — sonst bricht ein Name mit & die Nachricht still. Fett via <b>…</b>, Schlüssel/IDs via <code>…</code>. Ein fehlgeschlagener Status-Post darf den Lauf nicht kippen (best-effort). General-Topic wird durch Weglassen von message_thread_id adressiert (message_thread_id: 1 wird als „thread not found" abgelehnt).

What ships with it: 9 files

228.9 KB alongside SKILL.md

references/

Gives 0 of the 12 instructions most operations skills give in ~3.0k tokens

Counted across 483 of the 484 authors here whose files we hold, read 2026-08-07

  • Collect monitoring data throughout the simulationin 14 of 483, across 6 files
  • Set the random seed for reproducibilityin 14 of 483, across 6 files
  • Validate simulations against analytical solutionsin 12 of 483, across 4 files
  • Clarify goals, constraints, and inputsin 11 of 483, across 2 files
  • Implement contract tests for integration pointsin 11 of 483, across 2 files
  • Implement strangler fig infrastructure with API gatewayin 11 of 483, across 2 files
  • Audit modernized components for security vulnerabilitiesin 11 of 483, across 2 files
  • Avoid Python blocking calls in processesin 10 of 483, across 3 files
  • Use resource context managers for automatic cleanupin 9 of 483, across 2 files
  • Maintain consistent time unitsin 9 of 483, across 2 files
  • Validate outcomes against success criteriain 8 of 483, across 1 file
  • Analyze the legacy codebase for technical debtin 8 of 483, across 1 file

Said here and by no other author read

  • read only your domain references and registry
  • check idempotency before processing each unit
  • resolve IDs from registry or webhook only
  • abort silently if ID is ambiguous
  • append only to curated lists
  • keep agent columns simple non-chip types

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.