agentleFS
VPDPersonalVPDPersonal/Aspid.MVVM/.claude/skills/starterkit-layout/SKILL.md

starterkit-layout

Skill65 starsChanged 18 days agoMITView on GitHub

Where a new file goes inside `Packages/tech.aspid.mvvm/StarterKit/` and how to name it — the Core/General/Helpers/thematic folder taxonomy, singular binder folders, `ToBool/ToString/ToValue` subfolders, where extensions and shared helpers live, type and enum naming, `.meta` files. Use when creating a binder, converter or helper, or moving a file inside StarterKit, when the user asks "where does this go", "what do I call it", or adds a folder.

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Every new file and folder gets a .meta (folder: folderAsset: yes, fresh guid).

    line 50
  2. Distinctive:

    Do not stage new files: the user reviews them as untracked first.

    line 51
  3. Very specific:

    After a move, update references: other scripts, tests, Docs/docs//*.md (and the ru twins in Docs/i18n/), Samples~.

    line 53

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

StarterKit layout and naming

One assembly, Aspid.MVVM.StarterKit (StarterKit/Runtime), with editor code next to it in StarterKit/Editor. Every family (Binders/, Converters/, Commands/, Collections/, Views/) follows the same structure.

Taxonomy inside a family

FolderContentExamples
Core/Infrastructure the family stands on: base interfaces, declarative generation attributesIConverter, ITwoWayConverter, ICanExecuteHandler, GenerateSerializableBinderAttribute, IViewFactory
General/Types with logic shared across the family: abstract bases, helper interfaces that cut duplicationBinder, TargetBinder, INumberBinder, IColorBinder, Fallback/ConverterFallback, Numbers/NumberConverter
General/Mono/Abstract Mono bases, kept apart from the serializable onesMonoBinder, ComponentMonoBinder, Enum/EnumMonoBinder, Addressable/AddressableMonoBinder
Helpers/Plain helpers: *Mode enums, loggers, mathComparisonMode, ConverterLogger, BinderLogger, BinderMath, ShaderPropertyId
ThematicConcrete implementations only; subfolders by target type ToBool/, ToString/, ToValue/, ToVector/Objects/ToBool/EqualityToBoolConverter, Graphic/Color/GraphicColorMonoBinder

INumberBinder/IColorBinder are not Core: they cut duplication for some binders rather than holding the family up.

Placement rules

  • Shared by the whole assembly (binders and converters alike) goes to the root Runtime/Helpers/<Topic>/: Globalization/CultureInfoMode, Logging/LogMessageText, Numeric/NumericSaturation, Collections/EnumerableCountExtensions, Time/UnixTime, Transforms/, Colors/ColorChannels.
  • "Shared" means potential applicability, not current callers. An IEnumerable count helper is shared even if only converters use it today. ComparisonMode is converter-only → Converters/Helpers.
  • Extensions sit next to the extended type, not in Helpers: ConverterFallbackExtensions in General/Fallback/, FuncConverterExtensions beside FuncConverter, AudioSourceExtensions at the root of Binders/AudioSource/.
  • An enum or extension needed by one binder group lives in that group's subfolder, beside its consumers.
  • No Mono/ subfolder in thematic binder folders: a Binder and its MonoBinder sit side by side (Object/ObjectNameBinder, Object/ObjectNameMonoBinder).
  • No OneWayToSource/ folder: *ToSourceMonoBinder sits at the root of its subfolder.
  • Abstract bases of concrete families (SwitcherMonoBinder, EnumMonoBinder, CasterMonoBinder) go to General/ or the root of their family (Caster/CasterMonoBinder), never into a thematic subfolder.
  • Editor code (drawers, editors) goes to StarterKit/Editor/<Family>/…, mirroring runtime.

Folder names

  • Binders: singular (Binders/Command, Caster, Collection, Graphic, AudioSource, Collider2D). Exceptions: General, Helpers.
  • Converters: plural (Converters/Numbers, Strings, Vectors, Bounds).
  • Inside a group, a subfolder per property or operation: AudioSource/Clip, Collider/Box, Graphic/ColorChannel, Numbers/ToString/Plural.

Type names

  • The name says what the type does. No Generic prefix: CasterBinder, ValueToStringConverter.
  • The name does not lie about scope: text used by binders too is LogMessageText, not ConverterMessageText.
  • Short XxxText-style names are fine only for internal helpers; a public type explains itself fully.
  • Settings enums take a role suffix: *Mode (ComparisonMode, ColorBlendMode, SizeDeltaMode), *Operation (LogicOperation, ChannelOperation), flags in plural (ColorChannels). Members are consistent (Equal/NotEqual, not Equal/NotEquals).
  • Nested record-like types are named by meaning (OptionEntry, not Entry).
  • Converter naming ("To", the numeric family): skill starterkit-converter-authoring; binder naming (Mono, ToSource, Switcher): starterkit-binder-authoring.

.meta and git

  • Every new file and folder gets a .meta (folder: folderAsset: yes, fresh guid). Move with git mv together with the .meta.
  • Do not stage new files: the user reviews them as untracked first.
  • Rename serialized types and fields directly, without [FormerlySerializedAs]: the user has a tool that repairs serialized references.
  • After a move, update references: other scripts, tests, Docs/docs/**/*.md (and the ru twins in Docs/i18n/), Samples~.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.