Build a plugin with AI
OADM is developed together with an AI assistant, and the repository is set up for it. You describe what the plugin should do; the assistant asks, writes the spec, then builds the plugin with tests.
What the assistant needs
Section titled “What the assistant needs”CLAUDE.md: the spec and the rules for code, UI, wording, device safety and tests. Claude Code reads it by itself; give it to other assistants first.plugins/README.md: the plugin SDK with examples.- A working checkout that builds: see Build from source.
How to start
Section titled “How to start”-
Clone the repository and open it in your assistant, for example Claude Code.
-
Describe the plugin like a user story and ask the assistant to ask first:
Read CLAUDE.md and plugins/README.md. I want a task plugin "Set host name" in theNetwork group, with a dialog for one or many devices. Ask me what is unclear, writethe spec, then build it with tests and headless screenshots. -
Answer its questions. Decisions go into the spec, so the next session knows them too.
-
Let it build in small steps. After each step:
manage test unit, then look at the screenshots it rendered. -
Try the plugin with
manage run dev. The build puts it intoartifacts/plugins/, where OADM loads it.
How the assistant works
Section titled “How the assistant works”- Copies what works. It starts from the closest built-in plugin and uses the shared controls and styles, so the plugin looks and behaves like the rest of OADM.
- Tests everything. Every non-trivial class gets tests with fake devices; nothing needs a network.
- Checks the UI headless. It renders the dialogs and pages offscreen as screenshots. It never clicks on your desktop.
- Keeps devices safe. A plugin that changes a device checks the device first, validates every input before the first write and never locks OADM out.
Real devices
Section titled “Real devices”Share your plugin
Section titled “Share your plugin”Open a pull request on GitHub. Every contributed plugin is reviewed for quality and security before it becomes part of a release. Keep the change focused: one plugin, its tests and its spec.