Files
LabApiPluginTemplate/AGENTS.md
T

3.6 KiB

AGENTS.md

This repo is the source of a dotnet new template (shortName labapi-plugin) that scaffolds SCP: Secret Laboratory LabAPI plugins. This file follows the editor/vendor-agnostic agents.md convention for AI coding tools other than Claude Code (Cursor, Codex, etc.). CLAUDE.md is this repo's primary, detailed instructions file — read it first if your tooling can. What follows is the condensed subset any agent needs, kept in sync with CLAUDE.md.

This is template source, not a plugin

This section applies only while .template.config/ is present next to this file — i.e. you're editing the template repo itself, not a plugin already generated from it.

.template.config/template.json makes the dotnet templating engine do a literal, repo-wide string replacement at generation time (not semantic renaming): this folder's own name (sourceName) becomes whatever project name a consumer picks, the placeholder author name in EntryPoint.cs becomes their --PluginAuthor, and the LabAPI version pinned in the .csproj/EntryPoint.cs becomes their --LabApiVersion. See template.json for the exact current literals — don't repeat them verbatim in prose here, since this file ships inside every generated project and an exact match would get silently rewritten too. Don't introduce an exact match of one of those literals elsewhere in the repo unless you mean for it to be substituted; add a new template.json symbol instead of hardcoding a magic string. EntryPoint/ Config (the class names) are intentionally not substituted — only the namespace tracks the project name.

Never invent LabAPI API surface

Don't assume a LabAPI class/namespace/method/property/attribute exists. Verify it against the restored Northwood.LabAPI package (LabApi.dll/LabApi.xml under %userprofile%\.nuget\packages\northwood.labapi\<version>\lib\net48\) or https://github.com/northwood-studios/LabAPI first. If you can't verify a member, say so instead of guessing.

Toolchain choices — don't change without being asked

TargetFramework is netstandard2.1 on purpose (LabAPI itself only ships net48/net481), chosen so the plugin still loads under the game's Mono/.NET Framework 4.8 host. LangVersion is pinned to 14.0. The .csproj suppresses exactly NU1701 (scoped to the Northwood.LabAPI PackageReference) and MSB3270 (via ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=None) because of that netstandard2.1/net48-only-package combination — don't broaden either into a blanket suppression or remove them.

Code style and language

No //, /* */, or /// comments unless the user explicitly asks for them in that request; don't add comments restating self-explanatory code — EntryPoint.cs/ Config.cs are already comment-free, follow the same standard for new files. All text embedded in code (log/console messages, exceptions, config descriptions, user-facing strings) defaults to English — e.g. Logger.Info("Plugin initialized successfully") — except identifiers the user requested (project name, namespace, class/method/property/variable names), which are never translated, and text the user explicitly asks to be in another language.

Verifying a change

No automated tests exist. Verify by generating a real project and building it:

dotnet new uninstall . && dotnet new install .
dotnet new labapi-plugin -n VerifyPlugin -o ../_verify/VerifyPlugin
cd ../_verify/VerifyPlugin && dotnet build

Expect Build succeeded. 0 Warning(s) 0 Error(s). See CLAUDE.md for the full verification notes (cache invalidation after editing template.json, Windows cleanup caveats).