executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
matlab-configure-toml-projectUse whenever "project" or "matlab.toml" is mentioned in a MATLAB context. This includes creating, editing, organizing, or configuring MATLAB projects, declaring MATLAB package dependencies or reference projects, setting up paths, lifecycle scripts, shortcuts, MATLAB packages, or asking about project structure.
Independent GitHub snapshot · Automated classification · Original documentation governs
matlab.toml is a TOML-based configuration file for MATLAB projects. It defines project structure, dependencies, lifecycle scripts, shortcuts, labels, packaging, deployment, and Simulink settings. Every section is optional — the schema mandates no top-level field — but always set name, which supplies the project's display name.
matlab.toml must be placed at the project root folder — the same folder that would contain a .git/ folder or be the top-level working folder for the project.
For MATLAB R2026b and later, prefer matlab.toml for new projects. Existing .prj
projects remain supported and can be converted in either direction with:
matlab.project.convertDefinitionFiles(pwd, "Toml")
Opening a project with openProject, buildtool, or runtests activates its
configuration. The project's [folders].path entries then control the MATLAB path,
so do not spread addpath calls through source and test files.
matlab-use-package-manager for MATLAB packages.matlab-package-toolbox to author and build .mltbx MATLAB packages.[compiler] deployment targetsmatlab.toml, or "project" in a MATLAB context (creating, editing, or inspecting a MATLAB project's configuration).matlab.toml for schema violations before they cause silent failures.matlab.project.createProject, proj.addPath, etc.) rather than author or edit the file — that is a legitimate but different task; this skill's workflows assume the file is the artifact being produced..prj-format project definition. Do not carry .prj keys or concepts over into matlab.toml — the schemas are not equivalent. A reference project may still target a .prj project.[compiler.*] deployment target internals in depth — read @references/deployment-reference.md directly rather than following the Creation/Editing workflows below, which are file-level, not per-target.| Function | Purpose |
|---|---|
openProject | Loads a matlab.toml (or .prj) as the current project. Does not validate the schema — unrecognized keys, missing files, and wrong types all load silently. Use it to confirm the file parses, never as a correctness check. |
currentProject | Returns the currently open Project object; use its Name, PathFolders, TestFolders, StartupFiles, etc. properties to verify a round-trip after writing the file. |
matlab.project.createProject | Creates a new project through the imperative API instead of authoring the file. Avoid this as the mechanism for producing matlab.toml — write the TOML directly (see Creation Workflow, step 3). |
When a user wants to create a new matlab.toml (no existing file), follow this scan-first approach:
Ask for the project name. This is the only required field.
Scan the current folder for existing structure:
.m, .mlx, .slx, or .mlapp files. Propose these as [folders].path entries.tests/, test/, unitTests/). Propose these as [folders].test entries.*startup* or *setup* patterns — propose as startup-files.*shutdown* or *cleanup* or *teardown* patterns — propose as shutdown-files..git, .svn, etc.) and common output folders (derived/, results/, build/).Generate a draft starting minimal — name, folders, and any discovered lifecycle scripts. Present it to the user.
Ask about optional sections as needed, not as a checklist:
[[package]]) if the project ships as an .mltbx[compiler.*]) if the project builds a standalone app, library, or language package.slx files are present)After generating the TOML file, ask the user if they want the folders listed in [folders] to be created on disk (for nonexistent folders in new projects).
Start minimal and let the user add sections incrementally. One focused question at a time is better than a long questionnaire.
When a matlab.toml already exists and the user wants to modify it:
Read the existing matlab.toml to understand the current configuration.
Map the user's request to schema sections. Identify which section(s) need changes — refer to @references/format-reference.md for valid fields and formats.
Make targeted edits. Modify only the sections the user asked about. Do not restructure, reformat, or reorder untouched sections. Preserve any user comments (# lines) in the file.
Validate against the schema yourself. openProject does not report schema violations — unknown keys, missing files, and wrong value types all load silently and are simply ignored. A successful openProject is not evidence the file is correct, so check every key against @references/format-reference.md rather than relying on MATLAB errors and warnings:
[[project.profile]], [[package]], [[matlab.test.test-suite]], [[compiler.*]]) syntax must be correct.[user] is closed. Do not invent keys or carry over keys from .prj files.startup-folder, dependency path) can be outside the project root. Output paths (cache folders, build output) do not need to exist. The reference annotates each key. Confirming a path means listing the folder and seeing the entry — a truncated, filtered, or head-limited listing that fails to show it is not a confirmation, and neither is a ls of a guessed name that returns nothing.id and package-root in [[package]], name in [[compiler.standalone]], path in project-path dependencies and shortcuts, version in version-with-ID dependencies, and both category and label in every label filter.Present the change — show the user what will be modified before writing the file.
matlab.toml by driving matlab.project.createProject and reading back what MATLAB wrote — write the file yourself, with the sections in the order given above.[user] rejects unrecognized keys. Never invent a key or carry one over from a .prj file; check every key against @references/format-reference.md.openProject is not a validator. A file that opens cleanly may still contain silently-ignored schema violations — the only way to be sure a key is correct is to look it up.head-limited listing that fails to show it is not, and neither is an ls of a guessed name that returns nothing.[dependencies] entries. [dependencies] accepts any key, so a product name loads silently and wrongly. Record product requirements elsewhere (e.g. [project].summary, [[package]].product-dependencies, or a comment).| Section | Purpose | Key Fields |
|---|---|---|
name | Project name (always set it) | string |
[user] | Free-form custom data | any keys/nested tables |
[folders] | MATLAB path and test folders | path, test (arrays) |
[dependencies] | Declare MATLAB packages (not MathWorks products) or reference projects | packages: version string or {version, id}; references: {path, absolute} |
[project] | Lifecycle and metadata | summary, startup-folder, startup-files, shutdown-files, custom-tasks |
[project.dependency-analyzer] | Dependency analysis cache | cache-file |
[project.shortcuts] | Named script shortcuts | {path, icon} per shortcut; can be grouped |
[project.labels.Category] | File categorization | LabelName = ["file.m", "dir/"] |
[[project.profile]] | Export/filter profiles | name, included-files, excluded-files, excluded-labels |
[project.dashboards] | Dashboard label groupings | component, unit (label references) |
[project.digital-thread] | Traceability settings | tool-output-tracking, ignore |
[[package]] | Build a MATLAB package | id (required), package-root (required), name, version, summary, description, folders, apps, provider |
[compiler.*] | Deployment build targets | 10 targets: standalone (name required), web-app, excel-add-in, dot-net-assembly, c-shared-library, cpp-shared-library, production-server-archive, com-component, java-package, python-package — see @references/deployment-reference.md |
[matlab.test] | Test runner configuration | coverage-setting, test-suite |
[simulink] | Simulink settings | start-simulink, cache-folder, codegen-folder, refresh-customizations |
[simulink.process-advisor] | Process Advisor settings | incremental-build, enable-model-caching, 9 more string properties |
[[package]] can include MATLAB code, Simulink models, apps, documentation, and other
project content in the resulting MATLAB package. Use matlab-package-toolbox for the
authoring and build workflow, or matlab-use-package-manager to install a completed
package.
Each key under [dependencies] names either a MATLAB package or a reference project.
MathWorks products are not packages and must not be listed here.
Package dependency: version string — for a MATLAB package:
mytoolbox = "3.*"
Package dependency: version with ID — when the package ID is available:
motor = {version = "*", id = "9b9e5bc2-a583-4d79-98c5-d2b9af135697"}
Reference project — for a project at a filesystem path (absolute is optional and
defaults to relative):
shared-utils = {path = "../shared_utils_lib"}
The referenced project can use either a legacy .prj definition or a matlab.toml
definition. The key is a display label chosen by the user and is unrelated to the folder
on disk. Confirm path by listing the candidate parent folder — never derive it from the
dependency name or from the other project's name.
name = "My Project"
name = "Signal Analyzer"
[folders]
path = [
"src",
"utilities",
]
test = [
"tests",
]
[dependencies]
signal-processing = "2.*"
[project]
startup-files = [
"setup/initialize.m",
]
[project.shortcuts]
"Run Analysis" = {path = "scripts/analyze.m"}
Copyright 2026 The MathWorks, Inc.