Get the FREE Ultimate OpenClaw Setup Guide →

project-settings

npx machina-cli add skill LiorCohen/sdd/project-settings --openclaw
Files (1)
SKILL.md
7.6 KB

Project Settings

Single source of truth for the sdd/sdd-settings.yaml schema, component settings, validation rules, and directory mappings. Component types and their settings schemas are defined by the active tech pack — invoke techpacks.listComponents and techpacks.routeSkills rather than hardcoding type-specific knowledge.


Input

Schema: schemas/input.schema.json

Accepts operation type and operation-specific parameters for managing sdd-settings.yaml.

Output

Schema: schemas/output.schema.json

Returns success status, file path, and current component configurations.

Purpose

Manage the sdd/sdd-settings.yaml file that stores project configuration and component settings. Component settings are structural decisions that drive scaffolding, config initialization, and deployment.

File Location

Settings file: sdd/sdd-settings.yaml (git-tracked)

The sdd/ directory contains all SDD metadata. Create this directory if it doesn't exist.

Migration from Legacy Location

If sdd-settings.yaml exists at project root (legacy location):

  1. Create sdd/ directory
  2. Move sdd-settings.yaml to sdd/sdd-settings.yaml
  3. Delete the root file
  4. Commit the change

Quick migration command:

mkdir -p sdd && mv sdd-settings.yaml sdd/ && git add -A && git commit -m "Migrate sdd-settings.yaml to sdd/"

Schema

Formal definition: schemas/sdd-settings.schema.json (JSON Schema Draft 2020-12)

The schema defines three top-level sections: sdd (plugin metadata), project (project metadata), and components (list of typed components with settings). Component types and their settings schemas are defined by the active tech pack.

Example

sdd:
  initialized_by_plugin_version: "7.0.0"
  updated_by_plugin_version: "7.1.0"
  initialized_at: "2026-02-07 00:00:00Z"
  updated_at: "2026-02-09 14:30:00Z"

project:
  name: "my-app"
  description: "A task management SaaS application"

techpacks:
  <namespace>:
    name: <tech-pack-name>
    namespace: <namespace>
    version: "1.0.0"
    mode: internal  # or external, git
    path: <tech-pack-directory>

components:
  my-component:
    type: <type-from-tech-pack>
    techpack: <namespace>
    directory: <directory-from-tech-pack-pattern>

  other-component:
    type: <type-from-tech-pack>
    techpack: <namespace>
    directory: <directory-from-tech-pack-pattern>

Settings vs Config

AspectSettingsConfig
WhatStructural capabilitiesRuntime values
When setAt component creation, changeablePer-environment
Examplesdepends_on, component-type-specific fieldsport: 3000, replicas: 3
AffectsWhat gets scaffoldedValues in scaffolded files
Stored insdd/sdd-settings.yamlConfig component envs/ directory

Component Settings

Component types and their settings schemas are defined by the active tech pack. Core does not hardcode component type definitions.

To discover available component types and their settings schemas:

Invoke techpacks.listComponents for the active tech pack namespace.

To load type-specific settings schemas during validation:

Invoke techpacks.routeSkills with:
  namespace: <active-namespace>
  phase: implementation

The tech pack's techpack-settings skill contains the full component type definitions, settings tables per type, directory patterns, and validation rules.

Directory Structure

Component directory patterns are defined in the tech pack manifest under components.<type>.directory_pattern. Invoke techpacks.listComponents to get the directory pattern for each component type. Do NOT hardcode type→directory mappings.

Validation Rules

  • Config mandatory singleton: Every project must have exactly one config component (if the tech pack defines a config component type)
  • Component references: Cross-references between components (e.g., depends_on) must reference existing component instances
  • Tech-pack-specific validation: Additional validation rules are provided by the tech pack. Invoke techpacks.routeSkills(phase: implementation) for component-type-specific settings schemas.

Operations

Operation: create

Initialize a new settings file.

Input:

ParameterRequiredDescription
initialized_by_plugin_versionYesCurrent SDD plugin version
project_nameYesProject name
project_descriptionNoProject description
componentsYesList of components with settings

Operation: read

Load and return current settings.

Operation: update

Merge partial updates into existing settings. Triggers automatic sync of affected artifacts.

Operation: get_component_dirs

Get the actual directory names for all components.

Settings Lifecycle

┌─────────────────┐
│   /sdd (init)   │  Settings defined during project creation
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Scaffolding    │  Settings drive what files/templates are created
│  (initial)      │  Settings drive initial config values
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Development    │  Settings changes come from:
│                 │  - Specs (new components, capability changes)
│                 │  - Plans (implementation decisions)
│                 │  - /sdd with natural language about settings (manual adjustments)
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Settings Sync  │  Changes propagate to affected artifacts
│  (incremental)  │  Only adds/updates, never deletes user content
└─────────────────┘

Naming Rules

  • Names must be lowercase
  • Use hyphens, not underscores
  • No spaces allowed
  • Names should be multi-word and domain-specific
    • Good: order-service, analytics-db, customer-portal, task-api
    • Avoid: api, public, primary, main, server
  • Exception: config (singleton)

Minimal Template

Template for initializing a new sdd/sdd-settings.yaml:

# ============================================================================
# SDD PROJECT SETTINGS - DO NOT EDIT MANUALLY
# ============================================================================
# This file is generated and maintained by SDD commands.
# To modify settings, use: /sdd with natural language about settings
# ============================================================================

sdd:
  initialized_by_plugin_version: "{{PLUGIN_VERSION}}"
  updated_by_plugin_version: "{{PLUGIN_VERSION}}"
  initialized_at: "{{CURRENT_UTC_DATETIME}}"
  updated_at: "{{CURRENT_UTC_DATETIME}}"

project:
  name: "{{PROJECT_NAME}}"

# Tech packs and components are added here during init and implementation.

techpacks:
  <namespace>:
    name: <tech-pack-name>
    namespace: <namespace>
    version: "1.0.0"
    mode: internal
    path: <tech-pack-directory>

components:
  my-component:
    type: <type-from-tech-pack>
    techpack: <namespace>
    directory: <directory-from-tech-pack-pattern>

Source

git clone https://github.com/LiorCohen/sdd/blob/main/plugin/core/skills/project-settings/SKILL.mdView on GitHub

Overview

Project Settings provides a single source of truth for sdd/sdd-settings.yaml, capturing project metadata, component definitions, and validation rules. It relies on the active tech pack to define component types and their settings schemas, so you should use techpacks.listComponents and techpacks.routeSkills rather than hardcoding knowledge. This ensures scaffolding and deployment decisions are driven by consistent settings.

How This Skill Works

The skill reads and updates sdd/sdd-settings.yaml, which stores sdd metadata, project info, and a list of typed components with their settings. Component types and their schemas come from the active tech pack; validation and directory mappings are loaded via techpacks.routeSkills and techpacks.listComponents. It returns success status, the file path, and current component configurations to confirm changes.

When to Use It

  • Centralize project and component settings in the sdd/sdd-settings.yaml.
  • Migrate a legacy sdd-settings.yaml from the project root to sdd/sdd-settings.yaml.
  • Drive scaffolding and deployment decisions from up-to-date tech-pack-defined component settings.
  • Validate component settings against the active tech pack definitions before deployment.
  • Obtain a verification snapshot with success status, file path, and current component configurations.

Quick Start

  1. Step 1: Ensure an active tech pack and run techpacks.listComponents to discover component types.
  2. Step 2: Invoke project-settings with operation type and parameters to update sdd/sdd-settings.yaml.
  3. Step 3: Review the returned status, file path, and current component configurations; commit changes if needed.

Best Practices

  • Rely on techpacks.listComponents to discover available component types instead of hardcoding.
  • Load type-specific schemas with techpacks.routeSkills during validation.
  • Keep the sdd directory under version control and commit migrations with clear messages.
  • Prefer managing sdd-settings.yaml via the skill rather than manual edits.
  • Keep tech packs updated so component settings reflect current scaffolding rules.

Example Use Cases

  • Migrate legacy root sdd-settings.yaml to sdd/sdd-settings.yaml and commit.
  • Add a new component type in the tech pack and update its settings in the YAML.
  • Update project metadata (name/description) and see changes reflected in sdd Settings.
  • Validate a component's settings against the active tech pack definitions with techpacks.routeSkills.
  • Invoke the skill to produce an output with success, file path, and current component configurations.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers