Einen Agenten in Nemia erstellen
Ein Agent ist eine Einstellung: eine Person mit einer Aufgabe, Standards (seinen Fähigkeiten) und Ausrüstung (seinen Werkzeugen). Ein Schritt in einem Workflow ist eine Position, die er besetzt; ein Agent kann Positionen in mehreren Workflows besetzen. Die Fabriken einer Person erhalten keine Agenten von Nemia: Das Team eines Repositorys befindet sich in dessen workflows/, das einer Person in ~/.agent-workflows/workflows/, und die Agents-Seite des Boards schreibt das Zweite. Lies Nemias README, An agent is a node's attachment, für das vollständige Format; dies hier ist die Vorgehensweise und was es gekostet hat, es zu lernen.
Wer es ist
- Sein Name ist der seiner Datei,
agents/<name>.md, der Vorname einer Person in Kleinbuchstaben (nora), und ein Schritt bezeichnet ihn damit (agent: nora). Das Board zeigt den Namen als den einer Person (Nora) neben einem daraus generierten Gesicht (Blobatar), überall gleich. role:ist die Stelle, die es bekleidet, in wenigen Worten (Product engineer);description:sagt, wann es anzuhängen ist, eine Zeile. Beides sind eigene Zeilen des Agenten, zusammen mitharnessPrompt:: Ein Schritt, der eines setzt, wird abgelehnt. Ein Schritt fügt mitskills:zu den Fähigkeiten seines Agenten hinzu (Seine Fähigkeiten).mcp:nennt die MCP-Server, die seine Sitzungen laden, mit den Namen, die ihnen die.mcp.jsondes Checkouts gibt (mcp: playwright). Ein Schritt fügt mitmcp:zu denen seines Agenten hinzu, wie esskills:tut: Ein Server, den nur ein Repository hat, wird von dem Schritt benannt, der ihn braucht, damit der Agent portabel bleibt. Eine Sitzung lädt die von ihrem Agenten und Schritt genannten Server und sonst keine: Ohne entsprechende Zeile bei beiden lädt sie keine, und ein Name, den der Checkout nicht deklariert, lehnt die Sitzung bei ihrem Start ab. Das Laden eines Servers erlaubt keines seiner Werkzeuge: Der Fence des Agenten entscheidet weiterhin. Ein Agent, der einen Server nennt, kann nicht probeweise ausgeführt werden, da ein Testlauf keinen Checkout hat.- Eine
name:-Zeile muss mit dem Dateinamen übereinstimmen;card:ist veraltet (die Karte wird aus seinen Fähigkeiten generiert:npx wf agents card <name>).
Die Datei
Frontmatter, dann seine Anweisungen. Die anderen Schlüssel legen fest, wie seine Sitzungen ablaufen – harness, model, effort, context, remote, output und sein Fence – und ein Schritt, der ihn benennt, übernimmt jeden, es sei denn, er setzt seinen eigenen. Die Verdrahtung ist Sache des Schritts und wird hier abgelehnt: after, input, workspace, check, gate, loop, budget, background.
- Der Fence steht unter dem Block seines Harness:
claude: { fence: { permissionMode, tools, allowedTools, disallowedTools } }odercodex: { fence: { sandbox } }. Der Block enthält nurfence, und ein Block für einen anderen Harness als den der Datei wird abgelehnt. Ein Fence-Schlüssel auf oberster Ebene ist die alte Schreibweise, wird aber noch gelesen;nemia frontmatter rewrite <folder>verschiebt ihn in den Block. - Sage, was ein Schritt überschreiben darf:
overridable: model, effort, fence, skills, jedes Wort eines ausOVERRIDABLE(model,effort,context,harness,remote,output,fence,skills,mcp). Ein Schritt, der etwas anderes setzt, wird beim Laden abgelehnt, unter Nennung des Schlüssels und des Agenten. Ohne diese Zeile darf ein Schritt alles überschreiben, undnemia startsagt, eine hinzuzufügen.
---
role: Code reviewer
harness: claude
model: opus
overridable: model, effort, fence
claude:
fence:
permissionMode: dontAsk
tools: Read, Grep, Glob, Bash
allowedTools: Bash(git log:*), Bash(git diff:*)
---
- Das Frontmatter ist YAML, wie das eines Schritts und eines Skills; jeder Wert wird als geschriebener Text gelesen. Setze einen Wert in Anführungszeichen, der
:oder#enthält oder mit einem YAML-Zeichen beginnt ([,{,*,&,!,|,>,-,?), wie indescription: "Reviews a change: its correctness". Schreibe einen langen Wert als Literalblock,|-und den Wert in den eingerückten Zeilen darunter. Ein Listenschlüssel akzeptiertRead, Grepoder[Read, Grep]; das Board schreibt die erste Form. - Sage
effort:undcontext:(200k): Ein Job liest keine Benutzereinstellungen, und eine unbegrenzte Sitzung liest bei jedem Aufruf bis zu einer Million Token. autowird beim Laden für die Modelle abgelehnt, bei denen gemessen wurde, dass es abfällt (haiku,claude-sonnet-4-5); nennedontAskmit Regeln dort.
Seine Anweisungen
Der Körper sind seine Anweisungen, angehängt an Claude Codes eigenen Prompt (harnessPrompt: keep; no-coding entfernt den Coding-Abschnitt des Harness, replace setzt die Anweisungen an seine Stelle). Halte sie generisch und kurz: Wer es ist, wofür es verantwortlich ist, was es niemals tut, wie es eine Runde beendet, was sein Abschluss enthält. Die Vorgehensweise gehört in einen Skill, und eine Regel, die die Maschinerie bereithält (ein Fence, ein Gate), braucht keinen Satz. Eine fortgesetzte Sitzung behält den Körper, mit dem sie gestartet wurde: Eine Bearbeitung erreicht die nächste Ausführung, niemals eine laufende.
Die fünf Ebenen
Die Anweisungen sind eine von fünf Ebenen, die einen Agenten unabhängig von seiner Aufgabe formen, jede geschrieben von dem, dem sie gehört:
- Anweisungen — der Körper des Agenten: Wer es ist, wo immer es eingestellt ist.
- Benutzerdefinierte Anweisungen — was eine Person einem Agenten hinzufügt, den sie verwendet, ohne ihn umzuschreiben, gespeichert in ihrem Store, eine Datei pro Agentenname (
wf agents custom <name>), niemals im Ordner des Agenten. Nur Worte: Sie setzen keinen Schlüssel, also erweitern sie nie den Fence oder geben ein Tool. Eine Ausführung friert sie bei ihrem Start ein, sodass eine Bearbeitung nur die Ausführungen danach erreicht. - Die Dateien des Ordners — die Dateien, die der Harness aus dem Ordner liest, in dem der Agent arbeitet (heute
CLAUDE.md,AGENTS.md): Was dort für jeden Agenten steht, der darin arbeitet. Nemia setzt nichts daraus zusammen. Sie rangieren über den eigenen Anweisungen des Agenten und unter den Regeln der Fabrik und der Richtlinie des Schritts, obwohl ein Harness sie als alles überschreibend darstellt: Diese Rahmung stammt vom Harness. - Die Regeln der Fabrik — die Regeln und Richtlinien einer Fabrik, jedem in ihr eingestellten Agenten mitgeteilt: eine Datei pro Fabrik, gespeichert im Store (
nemia factory rules <name>), niemals in einem Repository. Nur Worte und von einer Ausführung bei ihrem Start eingefroren, wie benutzerdefinierte Anweisungen. Ein Schritt bei einem entfernten Agenten erhält keine. - Die Richtlinie des Schritts — die eigenen Worte und Schlüssel des Schritts: Was diese Position dieses Prozesses von einer Rolle verlangt. Eine normale Ebene, kein Workaround: Sage dort, was ein Workflow erwartet, und halte es aus den Anweisungen heraus. Ein Schritt kann Fähigkeiten hinzufügen, niemals entfernen.
Die Zahl ist die Rangfolge: Wo zwei Ebenen Unterschiedliches sagen, gewinnt die höhere Zahl, und die Aufgabe steht über allen. Die Reihenfolge, in der die Worte ankommen, ist eine separate Sache — Anweisungen, benutzerdefinierte Anweisungen, die Regeln der Fabrik, die Richtlinie des Schritts, dann die Aufgabe, wobei die Dateien des Ordners vom Harness dort gelesen werden, wo der Agent arbeitet. Welcher Ebene eine neue Anweisung gehört, ist Nemias eigene Routing-Regel, Where a new instruction goes, einmal im ausgelieferten Five layers-Abschnitt gesagt: Frage sie, anstatt zu raten. Fences verengen sich nur: Ein Schritt kann den Fence seines Agenten verengen, niemals erweitern – die disallowedTools: eines Schritts werden zu denen seines Agenten hinzugefügt, und der Lader lehnt die tools:, allowedTools:, permissionMode: oder sandbox: eines Schritts ab, die dem Agenten etwas geben würden, was seine Datei nicht hat. Also sagen die Anweisungen, was für die Rolle überall gilt, und nichts über einen einzelnen Workflow oder Arbeitsbereich.
Sein Abschluss
output: <name>.schema.json, ein JSON Schema neben dem Agenten: Was der Schritt übergibt, streng dekodiert. Hausstil: jedes Feld described, required, additionalProperties: false.
- Reserviert:
outcome,summary,artifacts,needssind bei jedem Abschluss die eigenen des Laufs; der Lader lehnt ein Schema ab, das eines deklariert. (Iris Absicht sagt aus diesem GrundproposedOutcome.) - Halte ein Schema über die Versuche einer Sitzung hinweg gleich: Eine fortgesetzte Sitzung, der ein geändertes Schema gegeben wird, baut ihren gesamten Prompt-Cache neu auf.
- Ein Schritt liest einen Abschluss mit
input: <step>von jedem Schritt, auf den er wartet, auch über die dazwischenliegenden Schritte hinweg; ein Schritt, der eine Schleife bildet (loop:), darf nur auf einen Schritt warten, also liest er auf diese Weise, was vor der Schleife kam (ein Review-Schritt liest so die Spezifikation).
Seine Fähigkeiten
skills: <a>, <b> nennt Ordner, die eine SKILL.md enthalten, gesucht in skills/ neben dem Agenten-Ordner, dann im .claude/skills/ des Repositorys, dann im Store, zuletzt in Nemias eigenen Fähigkeiten. tools: muss Skill erlauben. Das .claude/skills/ des Repositorys wird nur gefunden, wenn das Repository der Ort des Schritts ist, wie ein Start es vorgibt: Ein Test, der einen Ordner lädt, übergibt den Ort ebenfalls. Ein Schritt mit einem Agenten darf mit seinem eigenen skills: Fähigkeiten hinzufügen: Die Sitzung erhält die des Agenten, dann die des Schritts, jede einmal. Der Fence des Agenten muss sie bereits laden; ein Schritt erweitert ihn nie.
- Schreibe einen Skill mit der Methode des Skill-Erstellers: Eine
description:, die sagt, wann er zu verwenden ist, einen kurzen Körper, Details in Dateien daneben. - Verwende den eines anderen unverändert: In einem Scratch-Projekt,
DO_NOT_TRACK=1 npx skills add <owner>/<repo> --skill <name> --agent claude-code --copy -y; kopiere den Ordner in.claude/skills/, füge seinen Eintrag inskills-lock.jsonein, und füge seinen Autor, Quelle und Lizenz zuTHIRD_PARTY_NOTICES.mdhinzu (MIT verlangt den Hinweis in jeder Kopie). Bearbeite es niemals – der Lock fixiert es – und passe es im Körper des Agenten an. Verkaufe den Skill, den ein Modell aufrufen kann: Ein Skill mitdisable-model-invocation: trueist ein Slash-Befehl einer Person (grill-meruft nurgrillingauf).
Sein Fence
- Eine Rolle, die nichts schreibt, verwendet
dontAsk. Nur Lesezugriffe in ihrem Arbeitsbereich, schreibgeschützte Befehle und was eine Erlaubnisregel benennt, läuft; der Rest wird abgelehnt, ohne zu fragen. Die Einstellungen des Repositorys können Befehle erlauben, die andere Rollen brauchen und die in den Arbeitsbereich schreiben (einen Build zum Beispiel), also verweigert ein Agent mitBashjeden davon namentlich indisallowedTools:. Ein Unter-Agent erbt den Modus und die Regeln; listeAgentinallowedTools:auf, damit die Dispatch selbst nie abgelehnt wird. Erlaube namentlich jede Prüfung, die die Rolle ausführt und die die Einstellungen nicht abdecken; sein Skill buchstabiert jede einzeln, einen pro Aufruf (einer, der umschlossen, gepiped, umgeleitet oder hintercd,git -C,VAR=oderforsteht, wird abgelehnt), und sendet einen Lese- oder Suchvorgang an Read, Grep oder Glob, nicht an Bash. - Eine Rolle, die bearbeitet, verwendet
autound verweigert namentlich, was sie niemals tun darf:Bash(git push),Bash(git push:*),Bash(git branch -D:*),Bash(git branch --delete --force:*),Bash(pkill:*),Bash(killall:*),mcp__playwright__browser_run_code_unsafe. - Ein Schritt verengt nur, und nur wo
overridable:fencenennt. Ein Schritt, der ein Werkzeug, eine Erlaubnis oder einen Modus braucht, den die Datei seines Agenten nicht hergibt, benötigt einen anderen Agenten; diedisallowedTools:eines Schritts werden zu denen seines Agenten hinzugefügt: Schreibe nur die Verweigerungen, die der Schritt hinzufügt; er kann niemals eine von denen des Agenten entfernen.
Mit einer Person sprechen
Ein Schritt ist ein Job im Agent SDK: Er kann nicht innerhalb eines Gesprächs warten. Um zu fragen, meldet er sich mit blocked und seinen Fragen ab; die Person antwortet auf dem Board oder mit wf retry <run> <step> --message "…", und dieselbe Sitzung wird mit den Antworten als nächster Runde fortgesetzt. Sage dies im Körper eines Agenten, der befragt, und schalte den Schritt mit Gate, dessen Abschluss eine Person akzeptieren muss (gate: true). Die letzte Runde eines Jobs ist seine Abmeldung: Ein Agent, der lange Befehle ausführt (der E2E-Test), wird angewiesen, sie im Vordergrund auszuführen oder auf sie zu warten, niemals, während einer läuft, abzumelden (ein erster Web-Build eines Ingenieurs meldete sich einmal ab, bevor sein E2E endete). Ein als blocked abgemeldeter Abschluss wird für sich allein gelesen, daher trägt ein Agent, der in Runden fragt, alles bisher Festgelegte in jeder Runde mit sich: Die dritte Runde eines Interviewers ließ einmal seine früheren Entscheidungen fallen. Deklariere die Fragen als Feld des Ausgabeschemas, { "x-shape": "questions", "description": "…" }, das der Lader zu einer strengen Form erweitert: Das Board zeichnet sie als Auswahlmöglichkeiten, die eine Person durch Klicken beantwortet. Ein mit Gate versehener Schritt, der weiß, was die Schritte nach ihm kosten werden, deklariert { "x-shape": "budgets", "description": "…" } daneben: eine Liste von { step, usd, why }, jeder ein Schritt nach dem Gate, einmal, in Dollar über Null, why die Gründe für den Betrag. Das Gate zeigt sie neben dem Abschluss an, und die Genehmigung macht sie zu den Obergrenzen dieser Schritte, mit jedem Betrag, den die Person geändert hat (nemia approve <run> <step> --budget <step>=<amount>); eine Obergrenze über dem eigenen budget: eines Schritts wird dort genannt und niemals ungefragt genehmigt. Ein Abschluss, dessen Budgets einen anderen Schritt nennen oder keinen Betrag enthalten, wird an seine Sitzung zurückgewiesen.
Überprüfe es
npx wf agents card <name>aus dem Repository: Der echte Lader liest die Datei – ihre Schlüssel, die reservierten Namen ihres Schemas, jede gefundene Fähigkeit – und gibt die Karte aus oder lehnt mit Worten ab, die die Behebung nennen.- Die eigenen Prüfungen des Repositorys, wo seine Guards jeden Ordner lesen, den es ausliefert (die Fences, die eingefrorenen Schritte, der Render-Roundtrip): Führe sie an jedem Cache vorbei aus, der den Workflows-Ordner nicht sieht.
- Führe es aus: einen mit Gate versehenen Workflow, der es benennt, auf einer kleinen echten Karte, und lese seinen Abschluss vor der Genehmigung.
- Nenne den neuen Agenten dort, wo das Repository seine Agenten auflistet.
Wenn du etwas lernst
Einen Agenten zu erstellen ist, wie dieser Skill getestet wird. Wenn ein Schritt hier falsch war oder fehlte – eine Ablehnung, der du begegnet bist, ein Schlüssel, der dich überrascht hat – korrigiere diese Datei in derselben Änderung wie den Agenten, in höchstens drei Zeilen, zusammen mit der Datei, die die Regel enthält.