Skip to main content Skills Marketplace Descubre y explora habilidades de IA creadas por la comunidad.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Copiar promptMostrar detalles del prompt Un comando directo omite el prompt de revisión. Revisa el origen antes de ejecutarlo.
npx skills add https://github.com/johnalbertini14-glitch/openclaw-skills --skill fosmvvm-fields-generatorEl comando permanece en una sola línea. Desplázate horizontalmente para revisarlo antes de copiarlo.
¿Prefieres una copia local? Descarga los archivos que SkillsMP tiene disponibles ahora.
Descargar Zip Descargando... Explorador de archivos
3 archivos Ocupaciones relacionadas SOC
Basado en la clasificación ocupacional SOC
name fosmvvm-fields-generator description Generate FOSMVVM Fields protocols with validation rules, FormField definitions, and localized messages. Define form contracts once, validate everywhere. homepage https://github.com/foscomputerservices/FOSUtilities metadata {"clawdbot":{"emoji":"📋","os":["darwin","linux"]}}
FOSMVVM Fields Generator
Generate Form Specifications following FOSMVVM patterns.
Conceptual Foundation
For full architecture context, see FOSMVVMArchitecture.md | OpenClaw reference
A Form Specification (implemented as a {Name}Fields protocol) is the single source of truth for user input. It answers:
What data can the user provide? (properties)
How should it be presented? (FormField with type, keyboard, autofill semantics)
What constraints apply? (validation rules)
What messages should be shown? (localized titles, placeholders, errors)
Why This Matters
The Form Specification is defined once, used everywhere :
: , { }
: { }
: , { }
struct
CreateIdeaRequestBody
ServerRequestBody
IdeaFields
...
@ViewModel
struct
IdeaFormViewModel
IdeaFields
...
final
class
Idea
Model
IdeaFields
...
Consistent validation - Same rules on client and server
Shared localization - One YAML file, used everywhere
Single source of truth - Change once, applies everywhere
Connection to FOSMVVM Form Specifications integrate with:
Localization System - FormField titles/placeholders and validation messages use LocalizableString
Validation System - Implements ValidatableModel protocol
Request System - RequestBody types adopt Fields for validated transmission
ViewModel System - ViewModels adopt Fields for form rendering
When to Use This Skill
Defining a new form (create, edit, filter, search)
Adding validation to a request body
Any type that needs to conform to ValidatableModel
When fosmvvm-fluent-datamodel-generator needs form fields for a DataModel
What This Skill Generates A complete Form Specification consists of 3 files :
File Purpose {Name}Fields.swiftProtocol + FormField definitions + validation methods {Name}FieldsMessages.swift@FieldValidationModel struct with @LocalizedString properties{Name}FieldsMessages.ymlYAML localization (titles, placeholders, error messages)
Project Structure Configuration Replace placeholders with your project's actual paths:
Placeholder Description Example {ViewModelsTarget}Shared ViewModels SPM target ViewModels, SharedViewModels{ResourcesPath}Localization resources path Sources/Resources
Sources/
{ViewModelsTarget}/
FieldModels/
{Name}Fields.swift
{Name}FieldsMessages.swift
{ResourcesPath}/
FieldModels/
{Name}FieldsMessages.yml
How to Use This Skill Invocation:
/fosmvvm-fields-generator
Form purpose understood from conversation context
Field requirements discussed (names, types, constraints)
Entity relationship identified (what is this form creating/editing)
Workflow integration:
This skill is used when defining form validation and user input contracts. The skill references conversation context automatically—no file paths or Q&A needed. Often precedes fosmvvm-fluent-datamodel-generator for form-backed models.
Pattern Implementation This skill references conversation context to determine Fields protocol structure:
Form Analysis From conversation context, the skill identifies:
Form purpose (create, edit, filter, login, settings)
Entity relation (User, Idea, Document - what's being created/edited)
Protocol naming (CreateIdeaFields, UpdateProfile, LoginCredentials)
Field Design For each field from requirements:
Property specification (name, type, optional vs required)
Presentation type (FormFieldType: text, textArea, select, checkbox)
Input semantics (FormInputType: email, password, tel, date)
Constraints (required, length range, value range, date range)
Localization (title, placeholder, validation error messages)
File Generation Order
Fields protocol with FormField definitions and validation
FieldsMessages struct with @LocalizedString properties
FieldsMessages YAML with localized strings
Context Sources Skill references information from:
Prior conversation : Form requirements, field specifications discussed
Specification files : If Claude has read form specs into context
Existing patterns : From codebase analysis of similar Fields protocols
Key Patterns
Protocol Structure public protocol {Name }Fields : ValidatableModel , Codable , Sendable {
var fieldName: FieldType { get set }
var {name}ValidationMessages : {Name }FieldsMessages { get }
}
FormField Definition static var contentField: FormField <String ?> { .init (
fieldId: .init (id: "content" ),
title: .localized(for: {Name }FieldsMessages .self , propertyName: "content" , messageKey: "title" ),
placeholder: .localized(for: {Name }FieldsMessages .self , propertyName: "content" , messageKey: "placeholder" ),
type: .textArea(inputType: .text),
options: [
.required(value: true )
] + FormInputOption .rangeLength(contentRange)
) }
FormField Types Reference FormFieldType Use Case .text(inputType:)Single-line input .textArea(inputType:)Multi-line input .checkboxBoolean toggle .selectDropdown selection .colorPickerColor selection
FormInputType Reference (common ones) FormInputType Keyboard/Autofill .textDefault keyboard .emailAddressEmail keyboard, email autofill .passwordSecure entry .telPhone keyboard .urlURL keyboard .date, .datetimeLocalDate picker .givenName, .familyNameName autofill
Validation Method Pattern internal func validateContent (_ fields : [FormFieldBase ]? ) -> [ValidationResult ]? {
guard fields == nil || (fields? .contains(Self .contentField) == true ) else {
return nil
}
var result = [ValidationResult ]()
if content.isEmpty {
result.append(.init (
status: .error,
field: Self .contentField,
message: {name}ValidationMessages .contentRequiredMessage
))
} else if ! Self .contentRange.contains(NSString (string: content).length) {
result.append(.init (
status: .error,
field: Self .contentField,
message: {name}ValidationMessages .contentOutOfRangeMessage
))
}
return result.isEmpty ? nil : result
}
Messages Struct Pattern @FieldValidationModel public struct {Name }FieldsMessages {
@LocalizedString ("content" , messageGroup: "validationMessages" , messageKey: "required" )
public var contentRequiredMessage
@LocalizedString ("content" , messageGroup: "validationMessages" , messageKey: "outOfRange" )
public var contentOutOfRangeMessage
}
YAML Structure en:
{Name }FieldsMessages:
content:
title: "Content"
placeholder: "Enter your content..."
validationMessages:
required: "Content is required"
outOfRange: "Content must be between 1 and 10,000 characters"
Naming Conventions Concept Convention Example Protocol {Name}FieldsIdeaFields, CreateIdeaFieldsMessages struct {Name}FieldsMessagesIdeaFieldsMessagesMessages property {name}ValidationMessagesideaValidationMessagesField definition {fieldName}FieldcontentFieldRange constant {fieldName}RangecontentRangeValidate method validate{FieldName}validateContentRequired message {fieldName}RequiredMessagecontentRequiredMessageOutOfRange message {fieldName}OutOfRangeMessagecontentOutOfRangeMessage
See Also
Version History Version Date Changes 1.0 2024-12-24 Initial skill 2.0 2024-12-26 Rewritten with conceptual foundation; generalized from Kairos-specific 2.1 2026-01-24 Update to context-aware approach (remove file-parsing/Q&A). Skill references conversation context instead of asking questions or accepting file paths.