本文へ移動
cccskills
無料GitHub で公開

generate-requirement-drafts

Generates draft requirements from Simulink models. Use when drafting or updating requirement artifacts from a model. Prefers Requirements Toolbox (.slreqx) when available; falls back to structured YAML.

インストール方法を見る

含まれるファイル(6)

  • SKILL.md11.1 KB
  • assets/requirements.yaml1.8 KB
  • assets/slreq_from_model.m2.7 KB
  • manifest.yaml679 B
  • references/slreq-patterns.md4.8 KB
  • references/yaml-requirements.md2.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Generate Requirement Drafts

Generate draft requirements from Simulink models using the richest artifact the environment supports. All outputs are drafts requiring human review and approval before baselining.

When to Use

  • Drafting or updating requirements from a Simulink model
  • Creating .slreqx or .yaml requirements artifacts
  • Establishing model-to-requirement traceability

When NOT to Use

  • Importing requirements from an existing source of truth (ReqIF, DOORS, Word, Excel) — use Requirements Toolbox import APIs directly
  • Writing or running tests — use the testing-simulink-models skill
  • Free-form prose notes with no saved artifact
  • User explicitly wants a different text format (markdown, Word)

Output Conventions

  • Default file names: <Model>_Requirements.slreqx or <model>_requirements.yaml
  • Stable IDs: REQ_<SYSTEM>_001, REQ_<SYSTEM>_002, … — use one consistent project-wide prefix with sequential integers across all requirements, even when they derive from different subsystems. Do not switch to per-subsystem prefixes or hierarchical decimal numbering (e.g. CB-1.1, TP-1.1).
  • Follow repo conventions if .slreqx or .yaml files already exist
  • When updating an existing artifact, preserve existing IDs — append new IDs, never renumber
  • Every generated requirement must be marked as draft — use "draft" in Keywords (slreq) or status: Draft + keywords: [draft] (YAML)

Writing Good Requirements

Requirements must express behavioral intent (WHAT the system shall do), not restate model topology (HOW it is implemented). Put the WHY in Rationale. Use EARS (Easy Approach to Requirements Syntax) patterns:

EARS Patterns

Choose the pattern that best fits the model behavior:

PatternTemplateWhen to Use
UbiquitousThe <system> shall <response>.Always-on behavior, invariants
Event-drivenWhen <trigger>, the <system> shall <response>.A momentary trigger causes a one-time response: input events, entering a Stateflow state (the transition itself)
State-drivenWhile <state>, the <system> shall <response>.Behavior that holds continuously while in a Stateflow state or mode — the ongoing response, not the entry transition
Unwanted behaviorIf <condition>, then the <system> shall <response>.Error handling, safety limits, saturation
Optional featureWhere <feature>, the <system> shall <response>.Variant subsystems, configurable features
CombinedWhile <state>, when <trigger>, the <system> shall <response>.State + event combinations

Examples — Model Concepts to EARS Requirements

❌ Bad — restates implementation✅ Good — EARS pattern
"Saturation block limits output to [0,1]""If throttle command exceeds ThrottleMax (1.0) or falls below ThrottleMin (0.0), then the controller shall clamp the output to the valid range."
"BrakeLogic subsystem disengages controller""When brake pedal input exceeds BrakeThreshold (0.0), the controller shall disengage cruise control."
"Gain block multiplies by 2.5""While cruise control is active, the controller shall amplify speed error by Kp (2.5) to compute proportional correction."
"Stateflow chart transitions to Idle""When the driver presses the off button, the system shall transition to the Idle state."
"Defrost state runs the heater at full power""While in the Defrost state, the system shall drive the heater at full power."
"Variant subsystem selects Algorithm A""Where the adaptive mode is enabled, the controller shall use the predictive algorithm."

Rules

  • Write requirements using EARS patterns — pick the pattern that matches the model behavior
  • Use block/subsystem names (e.g. Saturation, BrakeLogic) only in Rationale, Description, or provenance notes — never in the requirement Summary. (A workspace parameter rendered as VarName (value) is required in the Summary and is not a block name.)
  • When referencing a numeric value, include the workspace variable name and resolved value: VarName (value). If the model uses a literal with no variable, record the numeric literal directly
  • Put the WHY in Rationale, not in the requirement statement
  • One subsystem may support zero, one, or several behavioral requirements — don't force a 1:1 mapping
  • For a Stateflow state or mode, separate entering it from being in it: the entry transition is event-driven (When <trigger>, … shall transition to <state>), but the behavior that holds throughout the mode is state-driven (While <state>, … shall <response>). When asked for a mode's behavior, prefer the While <state> form — do not fold it into a When entry statement

Backend Decision Gate

Choose once at the start, then stay on that path.

SituationBackend
User explicitly asks for .slreqx, traceability views, or repo already uses .slreqxRequirements Toolbox — if probe fails, inform the user that Requirements Toolbox is unavailable; do NOT silently fall back
User explicitly asks for .yaml, or repo already uses .yaml requirementsStructured YAML
No format specified — probe for Requirements ToolboxRequirements Toolbox if probe succeeds
No format specified and probe failsStructured YAML (silent fallback is OK here since user had no preference)

Probe (run via evaluate_matlab_code):

hasSlreq = ~isempty(which('slreq.new'));
if hasSlreq, try, slreq.find(Type="Link"); catch, hasSlreq = false; end, end
disp(hasSlreq)

Workflow

  • Call model_overview, model_read, model_query_params, model_resolve_params as MCP tools — never pass their names to evaluate_matlab_code.
  • Use evaluate_matlab_code only for MATLAB code, such as the backend probe and the slreq.* APIs in Path A.
  1. Understand the model — use the model_overview and model_read tools to understand subsystems, interfaces, control logic.

  2. Extract parameters — use the model_query_params / model_resolve_params tools for thresholds, gains, sample times that should appear in requirement text. Record both variable names and resolved values.

  3. Build a capture table (backend-neutral):

    IdParentIdSummaryDescriptionSourceBlockRationaleASILPriorityKeywords
  4. Run the backend path (A or B below).

  5. Review using the gate below.

Path A — Requirements Toolbox (.slreqx)

Use when probe succeeds. For full API patterns see references/slreq-patterns.md.

model = "CruiseControl";
load_system(model);
rs = slreq.new(model + "_Requirements");

% Add requirements with hierarchy — note behavioral "shall" statements
req = add(rs, Id="REQ_CC_001", ...
    Summary="If throttle command exceeds ThrottleMax (1.0) or falls below ThrottleMin (0.0), then the controller shall clamp the output to the valid range.", ...
    Description="Derived from CruiseControl/ThrottleCmd.");
req.Rationale = "Prevents invalid actuator commands that could damage the throttle body.";
req.Keywords = ["draft","auto-generated","control","safety"];

child = add(req, Id="REQ_CC_002", ...
    Summary="When brake pedal input exceeds BrakeThreshold (0.0), the controller shall disengage cruise control.", ...
    Description="Derived from CruiseControl/BrakeLogic.");
child.Keywords = ["draft","auto-generated","safety","brake"];

% Create traceability links: use block handle from SID (blk_X → X) for robustness
lnk = slreq.createLink(Simulink.ID.getHandle(model + ":5"), req);
slreq.createLink(Simulink.ID.getHandle(model + ":8"), child);

save(rs);
% Save all link sets
linkSets = slreq.find(Type="LinkSet");
for i = 1:numel(linkSets), save(linkSets(i)); end

Link rules:

  • Source = model element, destination = requirement → link type is automatically Implement
  • Prefer subsystem-level links; use block-level only when the requirement is block-specific
  • Every model-derived requirement must have at least one traceability link
  • The model must be loaded (load_system) before creating links with block paths

Path B — Structured YAML fallback

Use when Requirements Toolbox is unavailable. For schema and field rules see references/yaml-requirements.md.

  1. Generate a <model>_requirements.yaml file from the capture table
  2. Set status: Draft and include draft in keywords for every requirement
  3. Self-review: all required fields set, asil/status/priority use valid values, IDs sequential, derived_from references valid IDs or is null
  4. Validate:
python -c "import yaml, sys; yaml.safe_load(open(sys.argv[1])); print('OK')" path/to/requirements.yaml

Guardrails

AlwaysNever
Mark every generated requirement as DRAFTEmit markdown or ad hoc text when .slreqx is available and no text format was requested
Write requirements using EARS patternsRestate block topology as the requirement summary
Include parameter name + value: VarName (value)Create both .slreqx and .yaml unless user asks for both
Link direction: model element → requirementReverse the link direction (requirement → block)
load_system before creating traceability linksOver-link every primitive block — prefer subsystem links
Use only R2023a+ APIsSilently fall back to YAML when user explicitly requested .slreqx
Stay consistent with existing repo formatRenumber existing requirement IDs on regeneration

Review Gate

Before finishing, verify (both backends):

  • Every requirement has Id, Summary, and Description
  • Every requirement is marked as DRAFT (via Keywords or status field)
  • Summaries use EARS patterns, not block-topology restatements
  • Numeric values include parameter name + value where a workspace variable exists
  • IDs are stable and sequential; existing IDs preserved on regeneration

slreq path only:

  • Model-derived requirements have a traceability link to the source model element
  • Link direction is model element → requirement (not reversed)
  • Subsystem-level linking preferred over block-level
  • Requirement set and all link sets are saved

YAML path only:

  • File parses without errors
  • asil and priority use valid enum values (or Unset when unknown)

References

  • references/slreq-patterns.md — Requirements Toolbox API cookbook
  • references/yaml-requirements.md — Structured YAML schema and field rules
  • assets/slreq_from_model.m — End-to-end slreq example
  • assets/requirements.yaml — Structured YAML example

Copyright 2026 The MathWorks, Inc.


レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Author or upgrade Model Advisor checks for Simulink and System Composer models. Covers the full lifecycle: guideline authoring, check specification, Model Advisor check implementation, and qualification testing. Use when creating new checks (edit-time, standard batch, config-parameter, auto-fix), converting legacy StyleOne/StyleTwo/StyleThree checks to modern DetailStyle, creating a guideline for modeling, enforcing a modeling rule, or testing/qualifying a check. Triggers on any modeling constraint (e.g., "blocks shall...", "signals must match...", "parameters shall be set to...").

日本語の概要は準備中です。原文の説明を表示しています。

matlab/simulink-agentic-toolkit1,2142026年10月8日 更新

Synthesize new waveforms from scratch for Simulink inports using createInputDataset. Use ONLY when the user asks to generate, create, or synthesize signals (step, ramp, sine, chirp, pulse, noise) to populate a Dataset for External Inputs or Signal Editor. Covers timeseries and timetable formats with correct data type, interpolation, units, and dimensions. Also covers function-call and trigger inport timing setup. Do NOT use when the user wants to load, import, or read existing data from files (MAT, CSV, spreadsheet) — even if that data will be used as model input. Do NOT use for running simulations or plotting outputs.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/simulink-agentic-toolkit1,2142026年10月8日 更新

Common steps for building multi-layer system architecture models using System Composer. Use when implementing architecture models or when interacting with interface dictionaries, allocation sets, stereotypes, and requirements for architecture components.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/simulink-agentic-toolkit1,2142026年10月8日 更新

Builds and edits Simulink, System Composer, Stateflow, and Simscape models. Use when modifying model structure, parameters, ports, connections, or Stateflow chart internals.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/simulink-agentic-toolkit1,2142026年10月8日 更新

Use this skill when the user asks to check Simulink model compliance against a standard (MISRA, MAB, JMAAB, ISO, DO, IEC, EN, CERT C/CWE, AUTOSAR, Simulink Code Inspector (SLCI)), wants to run Model Advisor checks, or needs a compliance report with fix suggestions. For JMAAB/MAB, supplement deterministic checks with agentic review of uncheckable guidelines.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/simulink-agentic-toolkit1,2142026年10月8日 更新

Guide users through creating and managing .satk/block-policy.json for controlling which blocks the agent can use, which are excluded, and which block parameters the agent should not modify. Use when setting up block usage policy for a project.

日本語の概要は準備中です。原文の説明を表示しています。

matlab/simulink-agentic-toolkit1,2142026年10月8日 更新

matlab のスキルをすべて見る

このスキルの問題を報告する