matlab/matlab-define-toolbox-api
Scan a folder, triage files into include/exclude, identify the public API, and produce a toolboxSpecification.m Interface Spec — all in one pass. Use when turning loose code into a toolbox.
npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-define-toolbox-api
You take a folder of code, figure out what belongs in the toolbox, identify the public API, and produce the Interface Spec — the contract defining what the toolbox exposes. One skill, one artifact.
buildUtilities/toolboxSpecification.m directlymatlab-analyze-dependencies after the spec is approvedmatlab-build-toolboxmatlab-document-toolbox| Function | Purpose |
|----------|---------|
| dir | Recursive file listing for inventory |
| which | Resolve function locations on path |
| exist | Check whether a name resolves to a file, folder, or built-in |
| matlab.codetools.requiredFilesAndProducts | Trace caller/callee relationships for Support classification |
| Input | Required | Description |
|-------|----------|-------------|
| path | No | Folder or list of files to analyze. If not provided, prompt the user. |
| purpose | No | What the toolbox does and who uses it. If not provided, prompt the user. |
If path is not provided:
> What folder or files would you like to package as a toolbox?
If purpose is not provided:
> In a sentence or two, what does this toolbox do? Who will use it?
Do not proceed until both are provided.
Scan the path recursively. Classify every file:
| Category | Detection Rule |
|----------|---------------|
| Function | .m file with function keyword on first non-comment line |
| Class | .m file with classdef keyword |
| Script | .m file with no function/classdef keyword |
| Live Script | .mlx file |
| Test | In tests//test/ folder, or name matches *Test.m, *_test.m, test_*.m |
| Data | .mat, .csv, .xlsx, .json, .xml (non-config) |
| Config/Meta | buildfile.m, projectStartup.m, Contents.m, .prj, resources/ |
| Scratch/Temp | In scratch/, tmp/, or names like untitled*.m, Copy_of_* |
| Other | READMEs, images, licenses, etc. |
Using the purpose as guide, classify each file:
Heuristics:
| Signal | Disposition |
|--------|-------------|
| Function name aligns with purpose keywords | Include |
| H1 text mentions concepts from purpose | Include |
| Called by an included file | Support |
| In private/ or +internal folder | Support |
| Test file for an included function | Exclude |
| Script with no connection to purpose | Exclude |
| Data file referenced by included code | Include |
| Scratch/temp naming pattern | Exclude |
From the Include set, determine visibility:
| Signal | Classification |
|--------|---------------|
| Has H1 help text | Likely public |
| Has arguments block or input validation | Likely public |
| Descriptive action-oriented name | Likely public |
| Classdef with public methods | Public |
| Called by others but not standalone | Internal |
| In private/ or generic utility name | Internal |
| Script | Example/entry point |
Display a combined scope + API report:
## Toolbox Scope & API — [Name]
**Purpose:** [user's stated purpose]
**Source:** [path]
**Total files:** N
### Public API (N functions)
| Function | Signature | H1 | Category |
|----------|-----------|-----|----------|
### Internal Support (N files)
| File | Type | Reason |
|------|------|--------|
### Excluded (N files)
| File | Reason |
|------|--------|
### Uncertain — Need Your Input
| File | Why Uncertain |
|------|--------------|
Then ask:
> Please review:
> 1. Should any excluded files be included?
> 2. Should any included files be removed?
> 3. For uncertain files — include or exclude?
> 4. Is the public API surface correct?
> 5. What categories should functions be grouped into? (e.g., "Analysis", "I/O", "Visualization")
Incorporate feedback before proceeding.
Produce toolboxSpecification.m using scripts/toolboxSpecificationTemplate.m as the structure. spec.entries is a cell array (not a struct array) because classdef entries have extra fields (methods, properties) that function entries lack — MATLAB cannot concatenate structs with mismatched fields. Access entries via spec.entries{i}. Each entry has a "type" field — either "function" or "classdef". See the template for the full field conventions for both types.
Save to buildUtilities/toolboxSpecification.m in the project root (create the folder if needed). This folder is excluded from the toolbox package via toolbox.ignore or package.ignore.
buildUtilities/toolboxSpecification.m — executable spec as a MATLAB structmatlab-assess-toolbox, matlab-build-toolbox, matlab-analyze-dependencies) consume toolboxSpecification.mThis skill always pauses for user approval at Step 5. The user must confirm scope and public API before the spec is generated. Nothing is written until confirmation.
matlab-assess-toolbox later.function keyword are examples/entry points, not public API.toolboxSpecification.m is written, to buildUtilities/ — keeps source clean and is excluded from the packaged toolbox./matlab-analyze-dependencies — resolve external dependencies identified in the Interface Spec/matlab-create-project — organize files into a MATLAB project using the spec as a guide----
Copyright 2026 The MathWorks, Inc.
----
Take matlab/matlab-define-toolbox-api from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.