What Are the Built-In Skills in OpenMAIC? A Complete Guide to Agent Capabilities
OpenMAIC provides 23 built-in agent-runtime skills housed in skills/agent-runtime/ that automatically register on startup and expose functionality through the / slash-menu interface.
OpenMAIC (THU-MAIC/OpenMAIC) ships with a comprehensive set of pre-configured agent capabilities available out of the box. Each skill is defined in a standalone SKILL.md file within the skills/agent-runtime/ directory, enabling automatic discovery and registration when the application initializes.
Complete Inventory of OpenMAIC Built-In Skills
The runtime discovers capabilities by scanning the skills/agent-runtime/ directory structure. Each subdirectory represents a unique skill identified by its folder name (handle). Below are all 23 built-in skills organized by functional domain:
Content Creation and Document Design
slide-craft– Automated slide generation and visual layout optimizationslide-dsl– Domain-specific language for programmatic slide creationpptx-import– Native PowerPoint file parsing and transformation into editable formatspage-clone– Replication and adaptation of existing page layouts and structurespro-editing– Advanced content refinement, style correction, and grammatical optimization
Pedagogical Styles and Teaching Methods
lecture-style– Traditional lecture format content structuring and pacingworkshop-style– Interactive workshop and hands-on session design frameworksteacher-style-clone– Analysis and mimicry of specific instructor presentation patternsstyle-clone– General stylistic adaptation and tone matching across content typesfeynman-learning– Implementation of the Feynman technique for simplified concept explanationlearning-to-learn– Metacognitive strategy embedding and study skill integration
Curriculum and Instructional Architecture
curriculum-planner– Long-term educational pathway mapping and scope sequencingspiral-curriculum– Bruner's spiral curriculum model for recurring topic deepeningunderstanding-by-design– UbD (Understanding by Design) framework template generationk12-core-literacy-planning– Standards-aligned literacy objective and assessment planningvocational– Career and technical education content structuring and pathway design
Research and Information Verification
deep-research– Multi-source academic and web research synthesis with source attributiondeep-interactive– Interactive deep-dive exploration modes for complex topic investigationfact-check– Automated claim verification against authoritative sources
Stage Management and Interaction Design
stage-design– Physical or virtual classroom layout optimization and spatial planningstage-dsl– Programmatic stage configuration and scene transition managementsocial-emotional-learning– SEL competency integration and emotional intelligence scaffolding
Meta and Utility Skills
build-personal-skill– Framework for creating user-defined custom capabilities and workflows
Technical Architecture and Registration
Skills are not statically hardcoded but dynamically discovered. The system identifies built-in capabilities by the source: 'builtin' flag in the registry metadata.
Discovery and Loading Mechanism
When the application initializes, the runtime:
- Scans all
skills/agent-runtime/**/SKILL.mdfiles - Parses front matter metadata (name, title, description, execution steps)
- Registers each skill with the
builtinsource identifier - Exposes the registry via the
/api/agent/skillsendpoint
Core Registry Interface
The lib/workbench/agent-skills.ts module provides the primary API for skill interaction:
useAgentSkills() – React hook that fetches the skill registry from /api/agent/skills and returns an object containing:
skills: Array of skill objects with metadataloading: Boolean indicating fetch stateerror: Error message if registry fetch failsreload: Function to refresh the skill list
skillTitle() – Resolves locale-specific display names using the translation key pattern workbench.skill.title.<handle>, falling back to the raw handle name if localization is missing.
skillDisplayLabel() – Generates human-readable labels formatted as "Display Name /handle" (e.g., "课堂设计 /stage-design").
skillLabelForId() – Utility function that searches the skills array and returns the appropriate label for a given handle.
Working with Built-In Skills Programmatically
Listing Skills in React Components
Filter the registry to display only built-in capabilities:
import { useAgentSkills } from '@/lib/workbench/agent-skills';
export function BuiltinSkillList() {
const { skills, loading, error } = useAgentSkills();
if (loading) return <p>Loading skills…</p>;
if (error) return <p>Error: {error}</p>;
return (
<ul>
{skills
.filter((s) => s.source === 'builtin')
.map((skill) => (
<li key={skill.id}>
{skill.title ? `${skill.title} ` : ''}/{skill.name}
</li>
))}
</ul>
);
}
Resolving Skill Labels
Convert technical handles into human-readable text:
import { skillLabelForId, useAgentSkills } from '@/lib/workbench/agent-skills';
function getSkillLabel(handle: string) {
const { skills } = useAgentSkills();
return skillLabelForId(handle, skills);
}
// Example output: "深度调研 /deep-research"
console.log(getSkillLabel('deep-research'));
Invoking Skills via API
Trigger skill execution programmatically from client code:
// Load and execute a specific built-in skill
await fetch('/api/agent/skill/load', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ handle: 'deep-research' })
});
The Slash Menu Interface
The primary UX for accessing built-in skills is the / command menu. When users type / in the composer:
- The UI queries registered skills via
useAgentSkills() - Renders entries using
skillDisplayLabel()for localization support - Inserts the selected handle (e.g.,
/curriculum-planner) into the input field - The runtime executes the corresponding
SKILL.mdlogic upon message submission
This integration is validated in tests/workbench/composer-skills.test.ts, which covers slash-query parsing and menu rendering.
Key Implementation Files
| Path | Purpose |
|---|---|
lib/workbench/agent-skills.ts |
Core registry logic, React hooks (useAgentSkills), and display helpers (skillTitle, skillDisplayLabel, skillLabelForId) |
skills/agent-runtime/**/SKILL.md |
Markdown definitions containing skill metadata and execution instructions |
tests/workbench/agent-skills.test.ts |
Unit tests verifying skill registry behavior and label resolution |
tests/workbench/composer-skills.test.ts |
Integration tests for slash-menu functionality and query parsing |
Summary
- 23 built-in skills ship with OpenMAIC, spanning content creation, pedagogical design, research, and curriculum planning
- Skills reside in
skills/agent-runtime/with self-documentingSKILL.mdfiles that define execution logic - The
useAgentSkills()hook inlib/workbench/agent-skills.tsprovides reactive access to the skill registry - Built-in skills are identified by
source: 'builtin'and register automatically at application startup - Users interact with skills via the
/slash menu, which renders localized titles usingskillDisplayLabel()
Frequently Asked Questions
How does OpenMAIC distinguish built-in skills from custom user skills?
The system inspects the source property in the skill registry object. Built-in skills carry source: 'builtin', while user-created skills typically have source: 'personal'. This differentiation controls editing permissions and determines whether the skill definition is read-only in the UI.
What is the structure of a SKILL.md file?
Each SKILL.md contains YAML front matter specifying name, title, and description, followed by markdown documentation outlining execution steps and parameters. The runtime parses these files at startup to construct the skill registry without requiring TypeScript recompilation.
Can I override or disable a built-in skill?
While built-in skills are read-only by default, you can create a personal skill with an identical handle in the user skills directory. The resolution logic in lib/workbench/agent-skills.ts prioritizes user skills over built-ins when handles collide, effectively allowing overrides.
How are skill titles internationalized?
The skillTitle() function attempts to resolve translation keys using the pattern workbench.skill.title.<handle> from the current locale files. If the translation key exists, it returns the localized string; otherwise, it falls back to the title defined in the skill's SKILL.md or the raw handle name.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →