I have been building NS8 community modules with an AI coding agent for about three months. This week Stéphane pointed me to NethServer/agents, the agent skills with the NS8 module conventions. I only found them because he answered in one of my threads. I think they belong where module developers look.
Where they are not mentioned
- Developer manual: searching the
docs/tree of ns8-core for “agents”, “skill”, “AI” and “Claude” returns nothing. - Development handbook: neither the “AI coding agents” section nor the
Assisted-by:trailer in the commit message guide links to the skills. - ns8-kickstart: no
AGENTS.md, noCLAUDE.md, no README line. An agent in a fresh module repository cannot discover the conventions. - GitHub code search for “NethServer/agents” in the organisation: one hit, the repository’s own README.
What the skills found in my modules
I checked all 19 of my modules against the ns8-module skill. They were built with the developer manual and by reading existing modules, and all of them worked.
- 15 stored passwords, tokens or keys with
agent.set_env(), so they ended up in Redis in plain text. The manual does not warn about this; the skill does. To put it in proportion: a good part were low-risk values, such as database passwords that are only reachable inside the pod, LDAP bind passwords of read-only accounts, and initial admin passwords meant to be changed after the first login. But not all of them: there were also session and JWT signing secrets, an OpenAI API key, an SMTP password, a Steam server token and the password of a timestamp signing key. - 12 had no
restore-module, 7 nostate-include.conf. A restored instance came up with fresh secrets and no settings. - 5 used rolling image tags.
- One passed a key password on a container command line, visible in the node’s process list.
Combined with Stéphane’s QEMU test workflow (thread) it also found a module that could never be updated once configured: its state directory held files owned by a container sub-UID, and the core’s image extraction ends with a recursive chown. All of these modules had passed my manual install test.
The manual documents the platform contracts. The skills add the “do not do this” list the manual leaves implicit, which is what agents and newcomers need, provided they can find it.
Suggestions
- A short “Coding agents” page in the developer manual, next to “Testing”: what the skills are, what each covers, how to install them.
- A link in the handbook’s “AI coding agents” section.
- An
AGENTS.mdin ns8-kickstart pointing to the skills. Every new module starts from that template, and the agent reads that file first. Probably the change with the largest effect. - On the “Testing” page, a pointer to the QEMU workflow. As Stéphane explained in his thread, the ns8-github-actions test workflow linked there needs the Nethesis DigitalOcean account and has never run outside Nethesis.
I am not part of the dev team and will not open pull requests against your repositories, but I can draft the manual page and post it here for you to edit.
Three questions
- The handbook asks for
Assisted-by: AGENT_NAME:MODEL_VERSIONin commit messages. Should community modules follow that? Mine usedCo-Authored-By:until today, I have switched now. - “Clone and Move” is on the certification checklist, and the reference modules symlink
clone-module/50configure-moduleto the restore step. None of my modules had aclone-moduleaction. The skill covers it in the backup reference under “Clone vs restore”, but neither my agent nor I picked it up there. Since a missing clone step fails silently, would a line under “Always applies” make sense? - I come from pharmaceutical quality, where we typically have a reviewer pool. Reviews with standards as high as @stephdl’s are only as valuable as reviewers are available: if nobody reviews a pull request, the author will merge it unreviewed after a while. Is there a way to arrange reviews within the community?
Thanks to @stephdl for the skills, the CI workflow and all the help today.
@mrmarkuz I do need a reviewer on GitHub. What do you plan for the next few days? ![]()
Best
Thorsten
