How to write, test, and publish custom FrameworX AI skills — markdown playbooks that teach the AI assistant your company's specific conventions, workflows, and automation patterns. |
Start | Platform | Modules | Tutorials | How-to | Reference | Connectors | Skills | Cases | Resources
The AI assistant already knows FrameworX tables, protocols, and properties from the built-in documentation. A custom skill adds your knowledge on top:
Without a skill, the AI makes reasonable generic choices. With a skill, it makes your choices.
A skill is a single markdown file (.md) with two parts: YAML frontmatter for metadata, and a markdown body with implementation instructions.
skill-<kebab-case-name>.md |
Examples: skill-alarm-pipeline.md, skill-company-naming.md, skill-modbus-setup.md
The filename becomes the skill's slug — a unique identifier used for deduplication across tiers.
Every skill starts with a YAML block between --- markers:
--- title: "Your Skill Title — Descriptive Subtitle" tags: [keyword1, keyword2, keyword3, module-name] description: "One-line summary of what this skill teaches the AI to do" version: "1.0" author: "Your Company Name" --- |
Field | Required | Description |
|---|---|---|
| Yes | Human-readable name shown in search results |
| Yes | Comma-separated keywords for discovery — include module names, technologies, concepts |
| Yes | One-line summary — the AI reads this when deciding whether to load the full skill |
| No | Track changes to your skill over time |
| No | Minimum FrameworX version required (e.g., "11.0") |
| No | "Tatsoft" for official skills, your company name for custom |
Tags matter for discovery. When the AI calls |
The body follows a recommended structure. Not every section is required — use what's relevant.
# Skill Title ## What This Skill Does ? one-paragraph summary for the AI ## When to Use This Skill ? trigger conditions (use/don't use) ## Prerequisites ? what must exist before applying ## MCP Tools and Tables Involved ? quick reference table ## Implementation Steps ? the core: step-by-step with JSON ### Step 1: ... ### Step 2: ... ## Code Examples ? C# scripts if relevant ## Verification ? concrete checks ## Common Pitfalls ? mistakes to avoid (table format) ## Variations ? alternative approaches ## Related Skills ? links to other skills |
The Implementation Steps section is the heart of a skill. Each step should be self-contained — the AI executes it, verifies, then moves on.
Good step pattern:
### Step 1: Create Alarm Groups
Groups define severity levels and shared behavior. Create at least Critical, Warning, and Info.
```
get_table_schema('AlarmsGroups')
```
```json
{
"table_type": "AlarmsGroups",
"data": [
{ "Name": "Critical", "Description": "Immediate action required" },
{ "Name": "Warning", "Description": "Attention needed" }
]
}
```
**Key decisions:**
- Group names reflect severity, not equipment
- Keep groups to 3-5 maximum
|
What makes this effective:
get_table_schema so the AI confirms field names before writingLocation | Scope | Best For |
|---|---|---|
| Machine-wide (Tier 1) | Company standards that apply to ALL solutions on this machine |
Confluence (docs.tatsoft.com) | Online (Tier 3) | Skills shared across the entire organization |
Machine-wide (Tier 1) is the simplest option — just save the .md file and the AI discovers it within 30 seconds.
The exact path for ProductPaths.Skills depends on your installation. It's typically inside the FrameworX library folder. The folder is auto-created on first scan if it doesn't exist.
After saving your skill file, verify it works using the AI assistant. No restart required — local skills have a 30-second cache.
Test 1 — Can the AI find it?
Ask the AI:
Search for skills about ‹your topic›
Behind the scenes, the AI calls search_docs('your topic', labels='skill') and your skill should appear in the results.
Test 2 — Can the AI read it?
Ask the AI:
Show me what the ‹your skill name› skill does
The AI calls fetch_doc_page('local://skill/skill-your-name') and reads the full content.
Test 3 — Does it produce the right output?
Create a test solution and ask the AI to apply your skill:
Create a new solution and apply ‹your task description›
Verify the AI follows your skill's steps and produces the expected objects with your conventions.
If you want your skill discoverable by anyone in your organization (Tier 3), publish it as a Confluence page:
skill label to the page — this is mandatoryalarm, mqtt, script) for additional filteringexcerpt macro for search result previewsWithout the |
If a Tatsoft skill doesn't match your needs, you can override it:
skill-alarm-pipeline.md)ProductPaths.Skills/Because Tier 1 (user) has higher priority than Tier 2 (cached) and Tier 3 (online), your version wins. The AI will use your customized alarm pipeline instead of Tatsoft's default.
Start by copying. Don't write from scratch — copy the official skill and modify only what's different. This preserves the verification steps and pitfalls that Tatsoft has tested. |
Before you ship a skill, verify:
get_table_schema or list_protocols — never assume field namesget_objects, get_designer_state)skill label is added to the pageSee these published skills as references for different styles and complexity levels:
Skill | Complexity | Good Example Of |
|---|---|---|
Beginner | Simple 4-step flow, good for template | |
Beginner | User-created conventions skill, no code | |
Intermediate | Multi-table writes, limit vs digital types | |
Advanced | Scripts, expressions, multi-module integration | |
Advanced | Interactive steps, decision guides, draft notes |