matlab/matlab-read-doc
Guides the agent to reference official MathWorks Documentation and Help. Determine correct function syntax and workflows from user guides when deeper context is needed. Minimize iterations and repetitive trial and error. Use this skill to: Identify correct syntax and configuration details. Retrieve relevant, version-specific (or release-specific) information from official documentation. Consult user guides when conceptual or workflow context is needed. Apply best practices.
npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-read-doc
Systematic methodology for reading live MathWorks documentation. Provides a repeatable four-pass strategy (local catalog → help → user guide pages → reference pages) that turns documentation lookup into a predictable, efficient operation. Uses MATLAB's webread via MCP to fetch pages, with helper scripts that handle URL discovery, HTML parsing, and content extraction.
help command is sufficient — prefer help function_name for API syntax; it's faster and always correct for the installed versionhelp or a successfully fetched pageNot every task needs the full four-pass strategy. Match the task to the shortest path:
| Task | Fast Path | Skip |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------- |
| Release notes / what's new | Fetch https://www.mathworks.com/help/{product}/release-notes.md directly via webread, then extract the ## R20XXx section | Steps 0-2 — no script needed |
| Known standalone function, need ref page | Use a URL from a prior extract_page_slugs call, or construct baseUrl + "ref/{name}.html" for simple standalone functions | Steps 0-2 — but URL must come from a verified source, not guessed |
| Know the product, need function list | get_local_function_list(product) | Steps 1-4 — no web needed |
| Unfamiliar API, no idea what exists | Full four-pass strategy | Nothing — use all steps |
Release notes are available as clean markdown at https://www.mathworks.com/help/{product}/release-notes.md. Fetch this URL with webread, then extract the section between ## R20XXx and the next ## R header. No HTML parsing needed. Common product slugs: matlab, simulink, ecoder, rtw, stateflow, fixedpoint, hdlcoder.
ug/ or product-specific path) — Conceptual or task-based content explaining how to use a feature.ref/ or slref/) — Function, block, object, or property reference. Multiple subtypes: function ref, object ref, property list, block ref, app ref.gs/) — Introductory tutorials for new users of a product.MathWorks doc has two content layers that serve different purposes:
ug/) — Show *which* functions to call and in *what order*. Workflow-oriented. Best for learning a new API or deciding an approach. Note: not all products use ug/ — some (Simulink, Statistics and Machine Learning) use different subdirectory structures. Always discover via the section index.ref/ pages (function/object reference) — Show *exactly how* to call each function: full syntax, argument types, name-value pairs, valid enum values, return types, per-argument examples. Best when you know the function but need its exact signature. Some products use product-specific variants (e.g., Simulink uses slref/).You typically need both. The ug/ page tells you the recipe; the ref/ page tells you the ingredient specifications. Skipping ref/ means guessing at property names and argument values — which frequently fails because MathWorks APIs use domain-specific names that aren't intuitive (e.g., "ArxmlFilePackaging" not "FilePackaging", "StopTime" not "SimulationDuration").
| Signal | Likely high value | Likely low value |
|---|---|---|
| Slug contains programmatically, program-, or command-line | Yes — always programmatic | — |
| Slug contains property-map-functions | Yes — API workflow | — |
| Slug contains explorer, interactively, using-...editor | — | Yes — GUI-only |
| Page type is ref/ with object or function name | Yes — exact signatures | — |
| Page is very large (>30K) with product that has GUI+programmatic paths | — | Suspect GUI — measure before reading |
| Page under ~1500 chars between Main Content and footer | — | Likely a navigation stub or redirect |
| Slug starts with example- | Mixed — check if it opens with GUI wizard or live-script code |
| ref/ page listing "-properties" in slug | Yes — property name/value lookup table |
Entry rule: If you have a function name from the user's request or from a get_local_function_list call in this session, start at Step 2. Do not skip Step 1 based on training-data knowledge alone — function names change between releases and guessed names waste calls.
get_local_function_list('product', 'keyword') to find which functions exist. Only use this when you don't have a function name yet.help: Run help functionName or help namespace. If help answers your question, stop here — don't fetch the web page.ug/): If you need *workflow context* — which functions to call before/after, how they compose, or which of several approaches to take — fetch the ug/ page with programmatically in the slug. This gives you the call sequence and overall pattern.ref/): If help was insufficient for a specific function (truncated output, missing name-value arguments from recent releases, need the full property enumeration, or need valid categories for a find call), fetch its ref/ page.help is enough (most of the time)help simulink/Gain)help Simulink.SimulationInput)help matlab.io) or methods on an object (methods(obj))help is NOT enough (fetch the web page)ref/ page: name-value arguments added in recent releases; the full property name enumeration for a settings/properties object; valid enum values for an argument; which category strings are valid for a find call; help output is truncated or incomplete.ug/ page: workflow context (what to call before/after); understanding how multiple functions compose together; the task has GUI and programmatic paths and you need to find the programmatic one; decision guides for choosing between approaches.MathWorks documentation URLs follow these patterns. Do not guess — use the index to discover slugs.
All documentation URLs are versioned under /help/releases/R20XXx/ and default to the installed MATLAB release. URL construction is handled internally by fetch_product_index — you do not need to build URLs manually. Get page URLs from one of these verified sources:
hrefs output of fetch_product_index — full URLs returned directly, ready to usefullUrls output of extract_page_slugs — full URLs from a section indexbaseUrl already includes the product path (e.g., https://www.mathworks.com/help/releases/R2026a/autosar/). Append only the sub-path: baseUrl + "ref/name.html" or baseUrl + "ug/topic.html". Never re-add the product name.
| Page type | Pattern | Example |
| --------------- | ------------------------------------------- | ------------------------------------------------------------------------------ |
| Product index | {base}/{product}/index.html | https://www.mathworks.com/help/releases/R2025b/simulink/index.html |
| Section index | {base}/{product}/{section-slug}.html | https://www.mathworks.com/help/releases/R2025b/simulink/block-libraries.html |
| User guide page | {base}/{product}/ug/{page-slug}.html | https://www.mathworks.com/help/releases/R2025b/simulink/ug/some-topic.html |
| Reference page | {base}/{product}/ref/{function-name}.html | https://www.mathworks.com/help/releases/R2025b/matlab/ref/plot.html |
URL structure varies by product. Always crawl the section index to discover actual slugs — do not guess subdirectory names.
| Product | Guide pages | Reference pages |
| ---------------- | ------------------------------------------------------------------ | ------------------------------------------------------------ |
| matlab | matlab_prog/slug.html, matlab_oop/slug.html — multiple subdirs | ref/name.html |
| simulink | ug/slug.html | slref/name.html (also gui/ for configuration parameters) |
| systemcomposer | ug/slug.html | ref/name.html |
| autosar | ug/slug.html | ref/name.html |
| stateflow | ug/slug.html | ref/name.html |
For MATLAB, flat slugs with no subdirectory (e.g. debug-code.html) are usually section navigation pages. When crawling a section index, hrefs appear as relative paths — prepend the base URL to construct the full URL.
Common product slugs: matlab, simulink, systemcomposer, stateflow, autosar, ecoder, fixedpoint, stats, control, signal, dsp, deeplearning, images, optim, robust, mpc, sltest, parallel-computing
MATLAB scripts automate the repetitive fetch-and-parse steps. These are function files — they require input arguments and must be called via evaluate_matlab_code, NOT run_matlab_file.
Use evaluate_matlab_code with project_path set to this skill's scripts/ directory (the "Base directory for this skill" shown at the top of this prompt, plus /scripts).
Do NOT use run_matlab_file — these are functions that require input arguments.
Tool: evaluate_matlab_code
code: "[t, hrefs] = fetch_product_index('simulink', 'Modeling')"
project_path: "<base-directory-for-this-skill>/scripts"
| Script | Signature | Purpose |
| --------------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| get_local_function_list.m | results = get_local_function_list(product, searchTerm) | Read complete categorized function list from local MATLAB install (fastest, works offline) |
| fetch_product_index.m | [t, hrefs, baseUrl] = fetch_product_index(product, search, rel) | Auto-detect release, fetch product index, return section links AND base URL for reuse |
| extract_page_slugs.m | [slugs, fullUrls] = extract_page_slugs(sectionUrl) | Extract page slugs and full URLs from a section index |
| fetch_doc_page.m | content = fetch_doc_page(url, maxChars, startChar) | Fetch a doc page and extract readable text (default 50K char limit). Pass startChar to paginate. |
| find_replacement.m | find_replacement(url) | Search a page for deprecation/replacement language |
| DocUtilities.m | Static class (not called directly) | Shared utilities: HTML stripping, link extraction, URL resolution. Used internally by other scripts |
Use the Fast Paths table above to determine which steps to skip. The full workflow below is for unfamiliar APIs where you don't know what exists.
help first (when you have a function name)If you have a function name from any source, start here:
help set_param % function reference
help Simulink.SimulationInput % class reference
If help answers your question, stop here. This is the most common entry point.
If you don't know what function to call, discover what exists:
results = get_local_function_list('ecoder');
results = get_local_function_list('simulink', 'code generation');
Returns a table with Name, Purpose, and Category. If you don't know the product slug, call get_local_function_list('unknown') to list available slugs. Then proceed to Step 1 with the discovered function names.
fetch_product_index auto-detects the release, constructs the base URL, and returns section links:
[t, hrefs, baseUrl] = fetch_product_index('simulink', 'Modeling');
The third output baseUrl is the resolved version-aware URL — reuse it for all subsequent fetches in this session.
Use a URL from hrefs (returned by fetch_product_index) directly — do not construct URLs manually:
[slugs, fullUrls] = extract_page_slugs(hrefs{2,1});
content = fetch_doc_page(fullUrls{3}); % from discovered URLs
For very large pages, limit output:
content = fetch_doc_page(pageUrl, 10000); % limit to 10K chars
When help shows "not recommended", find the recommended replacement on the web page:
find_replacement(baseUrl + "ref/hist.html");
HTML stripping is handled internally by the fetch scripts (fetch_doc_page, fetch_product_index, find_replacement). Do not reimplement HTML parsing — call the appropriate fetch script instead.
plot, set_param) can also be constructed directly: baseUrl + "ref/{name}.html" — since baseUrl already includes the product path.Simulink.SimulationInput, autosar.api.create): use extract_page_slugs on the relevant section index to discover the correct URL.fetch_product_index function returns full URLs in hrefs — use them directly.Avoid names that shadow MATLAB built-ins: dir, input, length, size, path. If already shadowed in the workspace, use clear <name> before calling the built-in.
matlab_prog/, matlab_oop/, ref/). Flat slugs with no subdirectory are almost always section navigation pages.ug/ for guide pages, slref/ for block/function reference, and gui/ for configuration parameters.ug/ for guide pages, ref/ for reference. Straightforward hierarchy.programmatically or program- in the slug as a reliable signal./help/releases/R20XXx/). fetch_product_index defaults to the installed MATLAB release. Pass a release argument (e.g., "R2024b") to target a different version.help output first — it's guaranteed to match the installed version.help, the user may be on an older release. Note this discrepancy rather than assuming the API exists.Copyright 2026 The MathWorks, Inc.
Take matlab/matlab-read-doc 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.