i18n/de/skills/create-glyph/SKILL.md
R-basierte Piktogramm-Glyphen fuer Skill-, Agent- oder Team-Icons in der Visualisierungsschicht erstellen. Umfasst Konzeptskizze, ggplot2-Ebenenzusammenstellung mit der Primitives-Bibliothek, Farbstrategie, Registrierung in der passenden Glyph-Zuordnungsdatei und im Manifest, Rendering ueber die Build-Pipeline sowie visuelle Ueberpruefung der Neon-Glow-Ausgabe. Verwenden, wenn eine neue Entitaet hinzugefuegt wurde und ein visuelles Icon fuer die Force-Graph-Visualisierung braucht, eine bestehende Glyphe ersetzt werden soll, oder beim Batch-Erstellen von Glyphen fuer eine neue Domaene.
npx skillsauth add pjt222/agent-almanac create-glyphInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
R-basierte Piktogramm-Glyphen fuer Skill-, Agent- oder Team-Icons in der viz/-Visualisierungsschicht erstellen. Jede Glyphe ist eine reine ggplot2-Funktion, die eine erkennbare Form auf einer 100x100-Leinwand zeichnet und mit einem Neon-Glow-Effekt als transparentes WebP gerendert wird.
skill, agent oder teamcreate-glyph, mystic, r-package-review) und Domaene (fuer Skills)--glow-sigma-Wert (Standard: 4)Die zu ikonifizierende Entitaet identifizieren und eine visuelle Metapher waehlen.
skills/<id>/SKILL.mdagents/<id>.mdteams/<id>.mdComplexity Tiers:
+----------+--------+-------------------------------------------+
| Tier | Layers | Examples |
+----------+--------+-------------------------------------------+
| Simple | 2 | glyph_flame, glyph_heartbeat |
| Moderate | 3-5 | glyph_document, glyph_experiment_flask |
| Complex | 6+ | glyph_ship_wheel, glyph_bridge_cpp |
+----------+--------+-------------------------------------------+
glyph_<beschreibender_name> (snake_case, eindeutig)Erwartet: Eine klare gedankliche Skizze der Form mit 2-6 geplanten Ebenen.
Bei Fehler: Falls das Konzept zu abstrakt ist, auf ein verwandtes konkretes Objekt zurueckgreifen. Bestehende Glyphen in derselben Domaene zur Inspiration durchsehen.
Die R-Funktion schreiben, die ggplot2-Ebenen erzeugt.
Funktionssignatur (unveraenderlicher Vertrag):
glyph_<name> <- function(cx, cy, s, col, bright) {
# cx, cy = center coordinates (50, 50 on 100x100 canvas)
# s = scale factor (1.0 = fill ~70% of canvas)
# col = domain color hex (e.g., "#ff88dd" for design)
# bright = brightened variant of col (auto-computed by renderer)
# Returns: list() of ggplot2 layers
}
Skalierungsfaktor * s auf ALLE Dimensionen anwenden fuer konsistente Skalierung:
r <- 20 * s # radius
hw <- 15 * s # half-width
lw <- .lw(s) # line width (default base 2.5)
lw_thin <- .lw(s, 1.2) # thinner line width
Geometrie mit verfuegbaren Primitives erstellen:
| Geometrie | Verwendung |
|-----------|------------|
| ggplot2::geom_polygon(data, .aes(x, y), ...) | Gefuellte Formen |
| ggplot2::geom_path(data, .aes(x, y), ...) | Offene Linien/Kurven |
| ggplot2::geom_segment(data, .aes(x, xend, y, yend), ...) | Liniensegmente, Pfeile |
| ggplot2::geom_rect(data, .aes(xmin, xmax, ymin, ymax), ...) | Rechtecke |
| ggforce::geom_circle(data, .aes(x0, y0, r), ...) | Kreise |
Die Farbstrategie anwenden:
Alpha Guide:
+----------------------+------------+--------------------------+
| Purpose | Alpha | Example |
+----------------------+------------+--------------------------+
| Large fill (body) | 0.08-0.15 | hex_with_alpha(col, 0.1) |
| Medium fill (accent) | 0.15-0.25 | hex_with_alpha(col, 0.2) |
| Small fill (detail) | 0.25-0.35 | hex_with_alpha(bright, 0.3) |
| Outline stroke | 1.0 | color = bright |
| Secondary stroke | 1.0 | color = col |
| No fill | --- | fill = NA |
+----------------------+------------+--------------------------+
Eine flache list() von Ebenen zurueckgeben (der Renderer iteriert und umgibt jede mit Glow)
Die Funktion in der passenden Primitives-Datei basierend auf dem Entitaetstyp platzieren:
primitives.R — bushcraft, compliance, containerization, data-serialization, defensiveprimitives_2.R — devops, general, git, mcp-integrationprimitives_3.R — mlops, observability, PM, r-packages, reporting, review, web-dev, esoteric, designprimitives_4.R bis primitives_19.R fuer neuere Domaenenviz/R/agent_primitives.Rviz/R/team_primitives.RErwartet: Eine funktionierende R-Funktion, die eine Liste von 2-6 ggplot2-Ebenen zurueckgibt.
Bei Fehler: Falls ggforce::geom_circle Fehler verursacht, sicherstellen, dass ggforce installiert ist. Falls Koordinaten nicht stimmen, bedenken, dass die Leinwand 100x100 mit (0,0) unten links ist. Die Funktion interaktiv testen:
source("viz/R/utils.R"); source("viz/R/primitives.R") # etc.
layers <- glyph_<name>(50, 50, 1.0, "#ff88dd", "#ffa8f0")
p <- ggplot2::ggplot() + ggplot2::coord_fixed(xlim=c(0,100), ylim=c(0,100)) +
ggplot2::theme_void()
for (l in layers) p <- p + l
print(p)
Die Entitaet-zu-Glyphe-Zuordnung in der passenden Glyph-Zuordnungsdatei hinzufuegen.
Fuer Skills:
viz/R/glyphs.R oeffnen# -- design (3))"skill-id" = "glyph_function_name",
Fuer Agents:
viz/R/agent_glyphs.R oeffnenAGENT_GLYPHS finden"agent-id" = "glyph_function_name",
Fuer Teams:
viz/R/team_glyphs.R oeffnen
Die alphabetische Position in TEAM_GLYPHS finden
Den Eintrag hinzufuegen:
"team-id" = "glyph_function_name",
Sicherstellen, dass keine doppelte ID in der Zielliste existiert
Erwartet: Die entsprechende *_GLYPHS-Liste enthaelt die neue Zuordnung.
Bei Fehler: Falls der Build spaeter "No glyph mapped" meldet, nochmals pruefen, dass die Entitaets-ID exakt mit der im Manifest und in der Registry uebereinstimmt.
Das Icon im passenden Manifest registrieren.
Fuer Skills: viz/data/icon-manifest.json
{
"skillId": "skill-id",
"domain": "domain-name",
"prompt": "<domain basePrompt>, <descriptors>, dark background, vector art",
"seed": <next_seed>,
"path": "public/icons/cyberpunk/<domain>/<skill-id>.webp",
"status": "pending"
}
Fuer Agents: viz/data/agent-icon-manifest.json
{
"agentId": "agent-id",
"prompt": "<agent-specific descriptors>, dark background, vector art",
"seed": <next_seed>,
"path": "public/icons/cyberpunk/agents/<agent-id>.webp",
"status": "pending"
}
Fuer Teams: viz/data/team-icon-manifest.json
{
"teamId": "team-id",
"prompt": "<team-specific descriptors>, dark background, vector art",
"seed": <next_seed>,
"path": "public/icons/cyberpunk/teams/<team-id>.webp",
"status": "pending"
}
Erwartet: Gueltiges JSON mit dem neuen Eintrag bei den zugehoerigen Typ-Geschwistern.
Bei Fehler: JSON-Syntax validieren. Haeufige Fehler: nachgestelltes Komma nach dem letzten Array-Element, fehlende Anfuehrungszeichen.
Die Build-Pipeline ausfuehren, um das WebP zu rendern.
viz/-Verzeichnis navigierenFuer Skills:
cd viz && Rscript build-icons.R --only <domain>
# Or skip existing: Rscript build-icons.R --only <domain> --skip-existing
Fuer Agents:
cd viz && Rscript build-agent-icons.R --only <agent-id>
# Or skip existing: Rscript build-agent-icons.R --only <agent-id> --skip-existing
Fuer Teams:
cd viz && Rscript build-team-icons.R --only <team-id>
# Or skip existing: Rscript build-team-icons.R --only <team-id> --skip-existing
--dry-run an einen beliebigen Befehl anhaengenviz/public/icons/<palette>/<domain>/<skill-id>.webpviz/public/icons/<palette>/agents/<agent-id>.webpviz/public/icons/<palette>/teams/<team-id>.webpErwartet: Das Log zeigt OK: <entity> (seed=XXXXX, XX.XKB) und die WebP-Datei existiert.
Bei Fehler:
"No glyph mapped" — Zuordnung aus Schritt 3 fehlt oder hat einen Tippfehler"Unknown domain" — Domaene nicht in get_palette_colors() in palettes.Rinstall.packages(c("ggplot2", "ggforce", "ggfx", "ragg", "magick")) ausfuehrenDie gerenderte Ausgabe auf Qualitaetsstandards pruefen.
Datei-Existenz und angemessene Groesse pruefen:
ls -la viz/public/icons/cyberpunk/<type-path>/<entity-id>.webp
# Expected: 15-80 KB typical range
Das WebP in einem Bildbetrachter oeffnen und pruefen:
Bei kleinen Groessen pruefen (das Icon wird mit ~40-160px im Force-Graph gerendert):
Erwartet: Ein klares, erkennbares Piktogramm mit gleichmaessigem Neon-Glow auf transparentem Hintergrund.
Bei Fehler:
--glow-sigma 2 neu rendern (Standard ist 4)--glow-sigma 8 neu rendern.lw(s, base) Basiswert erhoehen)Anpassungen vornehmen und erneut rendern.
Haeufige Anpassungen:
.lw(s, base) erhoehen — base = 3.0 oder 3.5 versuchens anpassen (z.B. 20 * s -> 24 * s)Zum erneuten Rendern nach Aenderungen:
# Delete the existing icon first, then re-render
rm viz/public/icons/cyberpunk/<type-path>/<entity-id>.webp
# Use the appropriate build command from Step 5
Wenn zufriedenstellend, pruefen, ob der Manifest-Status "done" zeigt (das Build-Skript aktualisiert ihn automatisch bei Erfolg)
Erwartet: Das fertige Icon besteht alle Pruefungen aus Schritt 6.
Bei Fehler: Falls die Glyphe nach 3+ Iterationen immer noch nicht gut lesbar ist, eine voellig andere visuelle Metapher in Betracht ziehen (zurueck zu Schritt 1).
Alle 58 Domaenenfarben (fuer Skills) sind in viz/R/palettes.R definiert (die einzige Quelle der Wahrheit). Agent- und Team-Farben werden ebenfalls in palettes.R verwaltet. Die Cyberpunk-Palette (handabgestimmte Neonfarben) ist in get_cyberpunk_colors(). Viridis-Familienpaletten werden automatisch ueber viridisLite generiert.
Zum Nachschlagen einer Farbe:
source("viz/R/palettes.R")
get_palette_colors("cyberpunk")$domains[["design"]] # skill domain
get_palette_colors("cyberpunk")$agents[["mystic"]] # agent
get_palette_colors("cyberpunk")$teams[["tending"]] # team
Beim Hinzufuegen einer neuen Domaene an drei Stellen in palettes.R eintragen:
PALETTE_DOMAIN_ORDER (alphabetisch)get_cyberpunk_colors() DomaenenlisteRscript generate-palette-colors.R ausfuehren, um JSON + JS zu regenerierenDen vollstaendigen Katalog verfuegbarer Glyphen-Funktionen in den Primitives-Quelldateien einsehen:
viz/R/primitives.R bis viz/R/primitives_19.R (domaenengruppiert)viz/R/agent_primitives.Rviz/R/team_primitives.R| Funktion | Signatur | Zweck |
|----------|----------|-------|
| .lw(s, base) | (scale, base=2.5) | Skalierungsbewusste Linienbreite |
| .aes(...) | alias fuer ggplot2::aes | Kurzform-Aesthetic-Mapping |
| hex_with_alpha(hex, alpha) | (string, 0-1) | Alpha zu Hex-Farbe hinzufuegen |
| brighten_hex(hex, factor) | (string, factor=1.3) | Hex-Farbe aufhellen |
| dim_hex(hex, factor) | (string, factor=0.4) | Hex-Farbe abdunkeln |
glyph_<name>(cx, cy, s, col, bright) -> list() Signatur* s Skalierungsfaktorcol fuer Fuellungen, bright fuer Umrisse, hex_with_alpha() fuer Transparenz*_glyphs.R-Datei hinzugefuegt"status": "pending" hinzugefuegt"done" aktualisiert* s vergessen: Hartcodierte Pixelwerte brechen, wenn sich die Skalierung aendert. Immer mit s multiplizieren.y-Werte bewegen sich NACH OBEN.ggfx::with_outer_glow() auf jede Ebene an. Keinen Glow INNERHALB der Glyphen-Funktion hinzufuegen.get_cyberpunk_colors() in palettes.R ist, wird das Rendering einen Fehler werfen. Zuerst die Farbe hinzufuegen, dann regenerieren.primitives*.R, Agents in agent_primitives.R, Teams in team_primitives.R.testing
Launch all available agents in parallel waves for open-ended hypothesis generation on problems where the correct domain is unknown. Use when facing a cross-domain problem with no clear starting point, when single-agent approaches have stalled, or when diverse perspectives are more valuable than deep expertise. Produces a ranked hypothesis set with convergence analysis and adversarial refinement.
tools
Write integration tests for a Node.js CLI application using the built-in node:test module. Covers the exec helper pattern, output assertions, filesystem state verification, cleanup hooks, JSON output parsing, error case testing, and state restoration after destructive tests. Use when adding tests to an existing CLI, testing a new command, verifying adapter behavior across frameworks, or setting up CI for a CLI tool.
development
Screen a proposed trademark for conflicts and distinctiveness before filing. Covers trademark database searches (TMview, WIPO Global Brand Database, USPTO TESS), distinctiveness analysis using the Abercrombie spectrum, likelihood of confusion assessment using DuPont factors and EUIPO relative grounds, common law rights evaluation, and goods/services overlap analysis. Produces a conflict report with a risk matrix. Use before adopting a new brand name, logo, or slogan — distinct from patent prior art search, which uses different databases, legal frameworks, and analysis methods.
tools
Scaffold a new CLI command using Commander.js with options, action handler, three output modes (human-readable, quiet, JSON), and optional ceremony variant. Covers command naming, option design, shared context patterns, error handling, and integration testing. Use when adding a command to an existing Commander.js CLI, designing a new CLI tool from scratch, or standardizing command structure across a multi-command CLI.