Agent Skill

Copy the prompt below into your agent's system instructions to teach it TypedMind syntax. The grammar reference below covers all entity types and operators.

Prompt

Paste this into your agent's system prompt or skill file.

You write TypedMind (.tmd) files — a DSL for describing software architecture. Every entity must be referenced bidirectionally: a function must be exported by a file, imported by its consumers, and called by at least one caller. The checker validates these constraints; orphaned entities are errors unless suppressed. ## Shortform declarations (one entity per line) Program: Name -> entryFile [version] File: Name @ path/to/file: Function: Name :: (params) => ReturnType Class: Name <: [ParentClass] ClassFile: Name #: path/to/file [<: ParentClass] DTO: Name % ["description"] Constants: Name ! path/to/file Asset: Name ~ "description" UIComponent: Name &! "description" (root) or Name & "description" RunParameter: Name $env|$iam|$runtime|$config "description" [(required)] Dependency: Name ^ "description" [version] TypeDef enum: Name = enum [MemberA, MemberB] TypeDef alias: Name = targetType ## Continuation operators (indented, attach to the entity above) <- [A, B] imports -> [A, B] exports <-> [A, B] re-exports (File only) ~> [A, B] calls (function/method references) => [A, B] methods ~ [A, B] affects > [A, B] contains (UI) < [A, B] contained by (UI) >> Name contains program $< [A, B] consumes (run parameters, assets) = "value" default value # text comment ## DTO fields (indented under a DTO) - name: type "description" - name?: type "description" optional field - name: type "desc" (optional) also optional ## Suppression suppress EntityName checker/orphaned-entity "reason text" ## Rules - Every entity must be imported by at least one file (or suppressed). - File exports must name entities declared in the document. - Function calls entries: fn, File.fn, Class.method, or Class.constructor. - Import entries: bare name if unambiguous, Owner.name if multiple files export it. - Programs need an entry file. Files need a path and at least one import or export. - Use shortform by default; longform (brace blocks) when typed class members are needed.

Grammar Reference

Shortform Declarations

EntitySyntax
ProgramName -> entryFile [version]
FileName @ path:
FunctionName :: signature
ClassName <: [Parent]
ClassFileName #: path [<: Parent]
DTOName % ["desc"]
ConstantsName ! path [: type]
AssetName ~ "desc"
UIComponentName &! "desc" or Name & "desc"
RunParameterName $env "desc" [(required)]
DependencyName ^ "desc" [version]
TypeDef (enum)Name = enum [A, B, C]
TypeDef (alias)Name = targetType

Continuation Operators

OperatorMeaningAttaches to
<- [...]ImportsFile, ClassFile, Function
-> [...]ExportsFile, ClassFile, Dependency
<-> [...]Re-exportsFile
~> [...]CallsFunction, Class, ClassFile, Constants
=> [...]MethodsClass, ClassFile
~ [...]AffectsFunction
> [...]ContainsUIComponent
< [...]Contained byUIComponent
>> NameContains programAsset
$< [...]ConsumesFunction, Class, ClassFile
= "..."Default valueRunParameter
# textCommentAny

Quick Reference Example

TodoApp -> main v1.0.0
main @ src/index.ts:
  <- [UserService, Config, App, Logger, createLogger]
  -> [startApp]

UserService #: src/services/user.ts
  <- [UserDTO, startApp]
  => [createUser, findUser]

startApp :: () => void
  ~> [createUser]
  ~ [App]
  $< [DATABASE_URL, Logo]

createUser :: (data: UserDTO) => UserDTO
  <- UserDTO
  -> UserDTO
  ~> [createLogger, Logger.info]

UserDTO %
  - name: string "User name"
  - email: string "Email"

App &! "Root component"
DATABASE_URL $env "DB connection" (required)
Config ! src/config.ts
Logo ~ "Company logo"
winston ^ "Logging library" v3.0.0
  -> [Logger, createLogger]

Logger <:
  => [info]

createLogger :: (options?: object) => Logger

Suppression

suppress LegacyHelper checker/orphaned-entity "kept for integration tests"
suppress {
  OtherLegacy checker/orphaned-entity "also for tests"
}