CommunityCodierung & Entwicklunggithub.com

BlackAgents

Referenz für die Entwicklung von BlackAgents-Funktionen – die geschichtete Architektur, Seiten-/Routen-Konventionen des App Router, das API-Envelope- und Zod-Rezept, die Domain lib/artifacts sowie das workspace-begrenzte Dateisystem. Lesen beim Hinzufügen oder Ändern von App-Verhalten, API-Routen oder Domänenlogik.

Was ist BlackAgents?

Dieses Dokument beschreibt die Architektur und die zentralen Rezepte für die Entwicklung der BlackAgents-Anwendung. Es definiert eine strikte Schichtentrennung: Die UI (React-Komponenten) kommuniziert über API-Routen, die ausschließlich in `app/api/` definiert sind, mit der Domänenlogik in `lib/artifacts/`. Der gesamte Dateisystemzugriff wird durch die Funktion `resolveInWorkspace` in `lib/fs-service.ts` abgesichert, um Pfad-Escapes zu verhindern. Die API-Routen folgen einem einheitlichen Muster mit den Hilfsfunktionen `ok`, `fail` und `handle`. Das Dokument erläutert außerdem die Konventionen für Querverweise zwischen Agenten, Regeln und Skills, die von einem automatischen Graph-Dienst ausgewertet werden. Es ist als reine Referenz für Entwickler gedacht, die neue Features implementieren oder bestehende Logik ändern.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/cristoferdomingues/BlackAgents/tree/HEAD/.agents/skills/nextjs-app-patterns

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

BlackAgents App Patterns

Anwendungsbereich

Lesen, wenn eine Funktion oder Korrektur implementiert wird, die app/**, app/api/** oder lib/** betrifft. Die harten Beschränkungen sind in den Regeln typescript-strict und api-response-format festgelegt; diese Datei erklärt die Schichten und die Rezepte.

Architektur (die Schichten respektieren)

UI (components/features/, client) ──fetch──▶ API routes (app/api/**/route.ts)
                                                    │  { success, data | error }
                                              Domain (lib/artifacts/, lib/standards/)
                                                    │  parse / serialize / graph
                                              Filesystem (lib/fs-service.ts)
                                                    │  resolveInWorkspace (no escape)
                                              Workspace folder (.cursor / .claude ...)

Verhaltensregeln:

  • Reine, plattformunabhängige Logik lebt in lib/artifacts/**. Sie importiert niemals React oder next/server.
  • HTTP-Belange leben ausschließlich in app/api/**/route.ts.
  • Jeder Plattenzugriff erfolgt über lib/fs-service.ts; node:fs niemals direkt aus einer Route aufrufen.

App Router Konventionen

  • Seiten sind standardmäßig Serverkomponenten; füge "use client" nur für Interaktivität/State/Effekte hinzu.
  • Routengruppen: /agents, /commands, /rules, /skills haben jeweils eine Listenseite, eine [name]-Bearbeitungsseite und eine new-Seite; /new ist der geführte Assistent. Weitere Routen: /graph, /standards, /export, /sync, /chat, /providers, /settings.
  • Client-Feature-Komponenten rufen apiFetch (lib/api.ts) auf und lesen den aktiven Workspace-State aus WorkspaceProvider – kein rohes fetch und keine direkten Konfigurationszugriffe im Client.

API-Route Rezept

import { ok, fail, handle } from "@/lib/api-response"
import { artifactInputSchema } from "@/lib/artifacts/schemas"

export async function POST(req: Request) {
  return handle(async () => {
    const parsed = artifactInputSchema.safeParse(await req.json())
    if (!parsed.success) return fail(parsed.error.issues[0].message, 400)
    // ...Domänenarbeit via lib/artifacts + lib/fs-service...
    return ok({ /* data */ })
  })
}
  • Immer über ok / fail zurückgeben; in handle einwickeln, damit Würfe zu einem 500-Envelope werden.
  • Workspace-Wurzel aus der Konfiguration lesen (lib/config.ts), dann resolveInWorkspace(root, relPath) verwenden.
  • Geheimnisse mit lib/secrets.ts nur serverseitig lesen; fehlende Zugangsdaten → fail("...", 412).

Das Domänenmodell

lib/artifacts/:

  • types.ts — Artifact, ArtifactType, Platform, ArtifactFrontmatter (werkzeugunabhängig).
  • layout.ts — PLATFORM_LAYOUTS + artifactRelPath() / artifactDeletePath(); der einzige Ort, der die Ordner/Erweiterungen einer Plattform kennt. ACTIVE_PLATFORMS = ["cursor", "claude"], Standard cursor.
  • parser.ts — scanWorkspace(root) und parseArtifact (via gray-matter); Skills werden als ein <name>/SKILL.md-Verzeichnis rekursiv durchlaufen.
  • serializer.ts — serializeArtifact(input) schreibt Frontmatter + Body; Regeln lassen name weg (werden per Dateinamen identifiziert).
  • schemas.ts — nameSchema (kebab-case), artifactInputSchema, normalizeExtra (pro Typ Frontmatter).
  • graph.ts — extrahiert Querverweise aus den Autorenkonventionen.

Querverweis-Konventionen (was der Graph liest)

Von → NachKonvention im Body
Befehl → Agentagent-name (fett)
Agent → Regel`rule-name` Regel
Agent → Skill`skill-name` Skill
Regel → RegelVerwandte Regeln: a, b.
Regel → SkillSiehe auch: x Skill.

Schreibe Bodies mit diesen genauen Konventionen, damit der Beziehungsgraph und die Linkerkennung des Assistenten sie aufgreifen.

Dateisystemsicherheit

export function resolveInWorkspace(root: string, relativePath: string): string {
  // löst relativePath unterhhalb von root auf und wirft WorkspaceError, wenn es escaped
}

Jeder Lese-/Schreibzugriff muss über diese Funktion aus einem workspace-relativen Pfad aufgebaut werden. Niemals absolute Pfade konkatenieren oder einen client-gelieferten absoluten Pfad akzeptieren.

Persistenz außerhalb des Workspace

  • ~/.black-agents/config.json — gespeicherte Workspaces + aktiver currentPath (lib/config.ts).
  • ~/.black-agents/secrets.json — LLM-Schlüssel, Modus 0600, nur server (lib/secrets.ts).
  • <workspace>/.black-agents/standards.md — workspace-spezifische Überschreibung der Autorenstandards.
  • Konfigurationsverzeichnis mit BLACK_AGENTS_CONFIG_DIR überschreiben (nützlich in Tests).

Verwendung

Nur Referenz. Die Persona und der Arbeitsablauf leben im Feature-Entwickler-Agenten; die Leitplanken in den Regeln typescript-strict und api-response-format. Diese Datei verwenden, um Logik in die richtige Schicht zu platzieren und das Routenrezept zu kopieren, dann die UI an den UiUx-Designer-Agenten und die Testabdeckung an den Tester-Agenten übergeben.

Verwandte Skills