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).