Communitygithub.com

PaeoniaCommon/SkillsOdea

Schreibe eine neue Process-Unterklasse mit dem Paket toy_process (set_parameters, set_steps, Schrittmethoden, verschachtelte Unterprozesse) sowie den dazugehörigen Test. Verwende es, wenn Du nach der Planung mit design-process einen Prozess, Workflow oder eine Pipeline im process_package erstellst.

Was ist SkillsOdea?

Diese Fähigkeit hilft Entwicklern, neue benutzerdefinierte Prozesse zu erstellen, indem sie von der Klasse `Process` im Paket `toy_process` erben. Sie bietet eine strukturierte Vorlage, bei der Schlüsselmethoden – `set_parameters` für Standardparameter und `set_steps` für eine geordnete Liste von Schritten – implementiert werden müssen. Jeder Schritt kann entweder eine gebundene Methode der Unterklasse oder eine verschachtelte Instanz eines anderen `Process` sein, was modulare und wiederverwendbare Workflows ermöglicht. Die zugehörige Testdatei wird mit `unittest` erstellt und validiert sowohl die Standardausführung als auch die korrekte Überschreibung von Parametern. Die Fähigkeit ist plattformunabhängig konzipiert und kann mit textbasierten AI-Agenten wie Claude Code, Cursor oder Codex genutzt werden; sie empfiehlt, nach der Implementierung die Fähigkeit `run-process` zur Überprüfung zu verwenden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PaeoniaCommon/SkillsOdea/tree/HEAD/.opencode/skills/create-process

In Ihrer bevorzugten KI fragen

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

Dokumentation

Erstelle einen Prozess

Alle Pfade sind relativ zum Repository-Root. Das Paket befindet sich in process_package/.

Wie die Elternklasse funktioniert

process_package/toy_process/process.py definiert Process:

  • __init__(**overrides) setzt self.params = {**self.set_parameters(), **overrides}, dann self.steps = self.set_steps().
  • set_parameters() und set_steps() sind abstrakt. Eine Kindklasse, der eine der beiden fehlt, kann nicht instanziiert werden.
  • run(context=None) durchläuft self.steps in der Reihenfolge:
    • eine Process-Instanz → step.run(context), verschachtelt, mit dem selben context-Dict
    • jedes andere Callable → step(context)
    • alles andere → TypeError
  • run gibt das context-Dict zurück und gibt eine eingerückte Ablaufverfolgung aus.

Verändere weder toy_process/ noch überschreibe __init__ oder run in einer Kindklasse.

Regeln für die Kindklasse

  1. from toy_process import Process und erbe davon.
  2. set_parameters(self) gibt ein dict mit Standardwerten zurück. Verwende {}, falls es keine gibt.
  3. set_steps(self) gibt eine list zurück. Jedes Element ist entweder:
    • eine gebundene Methode: self.count_words, ohne Klammern, oder
    • eine Process-Instanz: CleanText(lowercase=self.params["lowercase"]).
  4. Jede Schrittmethode hat die Signatur def name(self, context):.
    • Lese Einstellungen aus self.params["..."].
    • Lese und schreibe Daten in context["..."].
    • Gib nichts zurück. Rückgabewerte werden ignoriert.
  5. Definiere eine Unterprozessklasse oberhalb der Klasse, die sie verwendet, oder importiere sie.

Vorlage

"""Einzeilige Beschreibung, was der Prozess macht.

Ausführen von process_package/ aus:
    python -m examples.<module_name>
"""

from toy_process import Process


class Unteraufgabe(Process):
    def set_parameters(self):
        return {"option": True}

    def set_steps(self):
        return [self.teil_ausfuehren]

    def teil_ausfuehren(self, context):
        if self.params["option"]:
            context["value"] = context["value"] * 2


class Hauptaufgabe(Process):
    def set_parameters(self):
        return {"start": 1, "option": True}

    def set_steps(self):
        return [
            self.laden,
            Unteraufgabe(option=self.params["option"]),  # verschachtelter Unterprozess
            self.abschliessen,
        ]

    def laden(self, context):
        context["value"] = self.params["start"]

    def abschliessen(self, context):
        context["result"] = f"Wert ist {context['value']}"


if __name__ == "__main__":
    print(Hauptaufgabe(start=5).run()["result"])

Zu erstellende Dateien

  1. process_package/examples/<module_name>.py: der Prozess, basierend auf der Vorlage.
  2. process_package/tests/test_<module_name>.py: ein unittest-Test, der .run() aufruft und auf Schlüssel im zurückgegebenen context prüft. Überprüfe auch, dass das Überschreiben eines Parameters das Ergebnis ändert.
import unittest

from examples.<module_name> import Hauptaufgabe


class HauptaufgabeTests(unittest.TestCase):
    def test_run(self):
        self.assertEqual(Hauptaufgabe(start=5).run()["result"], "Wert ist 10")

    def test_parameter_ueberschreiben(self):
        self.assertEqual(Hauptaufgabe(start=5, option=False).run()["result"], "Wert ist 5")


if __name__ == "__main__":
    unittest.main()

Überprüfe anschließend mit der Fähigkeit run-process. Ein vollständiges funktionierendes Beispiel ist process_package/examples/word_report.py.

Individual skills in this repo

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

Verwandte Skills