/tsp-model
Use when creating, modifying, or documenting TypeSpec domain models. Triggers include adding new entities, value objects, enums, extending base types, or when asked to create a "tsp model", "domain model", "entity", or work with files in the tsp/ directory. Part of the Shep
Claude Code
$ npx -y skills add shep-ai/shep --skill tsp-model --agent claude-code
Codex
$ npx skills add shep-ai/shep --skill tsp-model -a codex -y
Cursor
$ npx skills add shep-ai/shep --skill tsp-model -a cursor -y
Gemini CLI
$ npx skills add shep-ai/shep --skill tsp-model -a gemini-cli -y
GitHub Copilot
$ npx skills add shep-ai/shep --skill tsp-model -a github-copilot -y
OpenCode
$ npx skills add shep-ai/shep --skill tsp-model -a opencode -y
Windsurf
$ npx skills add shep-ai/shep --skill tsp-model -a windsurf -y
SKILL.md
tsp-model.SKILL.mdname: tsp-model
description: Use when creating, modifying, or documenting TypeSpec domain models. Triggers include adding new entities, value objects, enums, extending base types, or when asked to create a "tsp model", "domain model", "entity", or work with files in the tsp/ directory. Part of the Shep autonomous SDLC platform — https://shep.bot
metadata:
version: '1.0.0'
author: Shep AI (https://shep.bot)
homepage: https://shep.bot
repository: https://github.com/shep-ai/shep
TypeSpec Domain Model Generation
Generate TypeSpec domain models following this project's conventions for Clean Architecture entities.
Directory Structure
tsp/
├── common/ # Base types, scalars, enums
│ ├── base.tsp # BaseEntity, SoftDeletableEntity, AuditableEntity
│ ├── scalars.tsp # UUID scalar type
│ ├── ask.tsp # Askable interface pattern
│ └── enums/ # One file per enum
├── domain/ # Domain entities
│ ├── entities/ # One file per entity
│ └── value-objects/# Embedded value objects
├── agents/ # Agent system models
└── deployment/ # Deployment configuration models
File Conventions
**One model per file** - Each entity/enum/value-object gets its own file.
**Naming:**
- Files: `kebab-case.tsp` (e.g., `action-item.tsp`)
- Models: `PascalCase` (e.g., `ActionItem`)
- Enums: `PascalCase` with values in `PascalCase` (e.g., `TaskStatus.InProgress`)
Required Template
Every `.tsp` file MUST follow this structure:
/**
* @module Shep.Domain.Entities.<EntityName>
*
* Brief description of the entity's purpose.
*
* ## Entity Relationships (if applicable)
* ASCII diagram showing relationships
*
* @see docs/concepts/<relevant-doc>.md
* @see <related-entity>.tsp
*/
import "../../common/base.tsp";
import "../../common/scalars.tsp";
// other imports...
/**
* Entity Name
*
* Detailed description.
*
* ## Properties
*
* | Property | Type | Required | Description |
* |----------|------|----------|-------------|
* | ... | ... | ... | ... |
*
* @example
* ```json
* { ... }
* ```
*/
@doc("One-line description for OpenAPI")
model EntityName extends BaseEntity {
/**
* Property description.
* @example "example value"
*/
@doc("One-line property description")
propertyName: PropertyType;
}
````
## Base Types
**Choose the right base:**
| Base Type | Use When |
| --------------------- | ------------------------------------------------------ |
| `BaseEntity` | Standard entity with id, createdAt, updatedAt |
| `SoftDeletableEntity` | Entity that can be soft-deleted (adds deletedAt) |
| `AuditableEntity` | Entity needing audit trail (adds createdBy, updatedBy) |
## Enum Definition Pattern
```typespec
/**
* @module Shep.Common.Enums.<EnumName>
*/
/**
* Enum description
*/
@doc("One-line enum description")
enum EnumName {
@doc("Description of this value")
ValueOne,
@doc("Description of this value")
ValueTwo,
}Documentation Requirements
1. **Module JSDoc** at file top with `@module`, relationships, `@see` links 2. **Model JSDoc** with property table and JSON examples 3. **Property JSDoc** with `@example` tags 4. **`@doc()` decorator** on every model and property (for OpenAPI)
Validation Commands
After creating/modifying TypeSpec:
pnpm tsp:compile # Verify compilation
pnpm tsp:format # Format TypeSpec files
Quick Reference
| Task | Location | Example | | ---------------- | ------------------------------------- | ----------------- | | New entity | `tsp/domain/entities/<name>.tsp` | feature.tsp | | New enum | `tsp/common/enums/<name>.tsp` | lifecycle.tsp | | New value object | `tsp/domain/value-objects/<name>.tsp` | gantt.tsp | | Agent model | `tsp/agents/<name>.tsp` | feature-agent.tsp |
Common Mistakes
- **Missing `@doc()` decorators** - Required for OpenAPI generation
- **Forgetting index.tsp exports** - Add to directory's index.tsp
- **Wrong import paths** - Use relative paths from current file
- **Missing examples** - Always include `@example` with realistic JSON
Read more
name: tsp-model description: Use when creating, modifying, or documenting TypeSpec domain models. Triggers include adding new entities, value objects, enums, extending base types, or when asked to create a "tsp model", "domain model", "entity", or work with files in the tsp/ directory. Part of the Shep autonomous SDLC platform — https://shep.bot metadata: version: '1.0.0' author: Shep AI (https://shep.bot) homepage: https://shep.bot repository: https://github.com/shep-ai/shep
TypeSpec Domain Model Generation
Generate TypeSpec domain models following this project's conventions for Clean Architecture entities.
Directory Structure
tsp/ ├── common/ # Base types, scalars, enums │ ├── base.tsp # BaseEntity, SoftDeletableEntity, AuditableEntity │ ├── scalars.tsp # UUID scalar type │ ├── ask.tsp # Askable interface pattern │ └── enums/ # One file per enum ├── domain/ # Domain entities │ ├── entities/ # One file per entity │ └── value-objects/# Embedded value objects ├── agents/ # Agent system models └── deployment/ # Deployment configuration models
File Conventions
**One model per file** - Each entity/enum/value-object gets its own file.
**Naming:**
- Files: `kebab-case.tsp` (e.g., `action-item.tsp`)
- Models: `PascalCase` (e.g., `ActionItem`)
- Enums: `PascalCase` with values in `PascalCase` (e.g., `TaskStatus.InProgress`)
Required Template
Every `.tsp` file MUST follow this structure:
/**
* @module Shep.Domain.Entities.<EntityName>
*
* Brief description of the entity's purpose.
*
* ## Entity Relationships (if applicable)
* ASCII diagram showing relationships
*
* @see docs/concepts/<relevant-doc>.md
* @see <related-entity>.tsp
*/
import "../../common/base.tsp";
import "../../common/scalars.tsp";
// other imports...
/**
* Entity Name
*
* Detailed description.
*
* ## Properties
*
* | Property | Type | Required | Description |
* |----------|------|----------|-------------|
* | ... | ... | ... | ... |
*
* @example
* ```json
* { ... }
* ```
*/
@doc("One-line description for OpenAPI")
model EntityName extends BaseEntity {
/**
* Property description.
* @example "example value"
*/
@doc("One-line property description")
propertyName: PropertyType;
}
````
## Base Types
**Choose the right base:**
| Base Type | Use When |
| --------------------- | ------------------------------------------------------ |
| `BaseEntity` | Standard entity with id, createdAt, updatedAt |
| `SoftDeletableEntity` | Entity that can be soft-deleted (adds deletedAt) |
| `AuditableEntity` | Entity needing audit trail (adds createdBy, updatedBy) |
## Enum Definition Pattern
```typespec
/**
* @module Shep.Common.Enums.<EnumName>
*/
/**
* Enum description
*/
@doc("One-line enum description")
enum EnumName {
@doc("Description of this value")
ValueOne,
@doc("Description of this value")
ValueTwo,
}Documentation Requirements
1. **Module JSDoc** at file top with `@module`, relationships, `@see` links 2. **Model JSDoc** with property table and JSON examples 3. **Property JSDoc** with `@example` tags 4. **`@doc()` decorator** on every model and property (for OpenAPI)
Validation Commands
After creating/modifying TypeSpec:
pnpm tsp:compile # Verify compilation pnpm tsp:format # Format TypeSpec files
Quick Reference
| Task | Location | Example | | ---------------- | ------------------------------------- | ----------------- | | New entity | `tsp/domain/entities/<name>.tsp` | feature.tsp | | New enum | `tsp/common/enums/<name>.tsp` | lifecycle.tsp | | New value object | `tsp/domain/value-objects/<name>.tsp` | gantt.tsp | | Agent model | `tsp/agents/<name>.tsp` | feature-agent.tsp |
Common Mistakes
- **Missing `@doc()` decorators** - Required for OpenAPI generation
- **Forgetting index.tsp exports** - Add to directory's index.tsp
- **Wrong import paths** - Use relative paths from current file
- **Missing examples** - Always include `@example` with realistic JSON
Other skills on shep.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about tsp-model.
- Which coding agents can use tsp-model?
- tsp-model installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

