cordis-plugin-development

Create, debug, and package Cordis plugins for Host and Client platforms in dsh.

3|1|Updated Feb 26, 2026
One-click install
npx skills add https://github.com/wopal-cn/wopal-space-ontology --skill cordis-plugin-development-wopal-cn
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: cordis-plugin-development
Source: https://github.com/wopal-cn/wopal-space-ontology/tree/main/dsh/agents-presets/wopal/skills/cordis-plugin-development
Command: npx skills add https://github.com/wopal-cn/wopal-space-ontology --skill cordis-plugin-development-wopal-cn

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Developing Cordis plugins requires knowing the exact runtime interfaces—Services, Events, Slots, theme tokens, and Tools—before writing any code, and guessing APIs leads to runtime failures. This Skill provides a disciplined inspect-then-define workflow for building dynamic plugins and durable distributable dsh bundles without inferring APIs from names or examples. ## Core Features & Use Cases - Inspect-driven development: Query live Providers with cordis_inspect_list and cordis_inspect_query before writing plain-JavaScript Host or Client plugin code. - Full plugin lifecycle: Define, run, approve, update, roll back, stop, and undefine plugins using cordis_define, cordis_run, and cordis_inspect_self with correct version semantics. - Distributable bundles: Ship persistent capabilities as packages with a dsh.bundle.patch self-patch, choosing a resolvable package scope for official dsh or ellamaka deployments. - Use Case: You want to add a custom settings panel to the dsh Client. Query Slots.listSubTree to find the right settings Slot, write a React.createElement-based Client plugin, define and run it, then package it as a distributable bundle for other sessions. ## Quick Start Ask the agent to create a Cordis plugin that registers a small UI panel, and it will inspect the available Slots and Services before defining and running the plugin.

Frequently Asked Questions about cordis-plugin-development

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a Cordis plugin for dsh?

First call cordis_inspect_list to discover registered Providers, then query the exact Services, Events, or Slots you need. Write plain JavaScript in code.host or code.client, call cordis_define, then activate it with cordis_run using the returned pluginId and packageId.

How do I register UI in a Cordis Client Slot?

Query Slots.listSubTree to choose a target Slot and confirm its protocol, props, and occupants. Then use ctx.get('slots') with slots.inject and slots.register, rendering UI with React.createElement since JSX is not supported.

Why does my Cordis plugin fail with 'service is not declared'?

This error occurs when code accesses ctx.x without declaring inject: ['x'] on the plugin object. Either declare the hard dependency in inject, or switch to ctx.get('x') with an undefined check for optional capabilities.

Can Cordis plugins use JSX, TypeScript, or import statements?

No. Both code.host and code.client are plain JavaScript function bodies with no compilation step. JSX, TypeScript types, import, require, and unconfirmed globals like window or process are rejected; Client React code must use React.createElement.

How do I ship a Cordis plugin that persists across restarts?

Dynamic plugins from cordis_define are process-local. To persist, author a package with a dsh.bundle.patch self-patch file, use a scope you control rather than @deepseek-ai/*, and install it with the official dsh CLI or ellamaka CLI depending on the target home.

What is the difference between cordis_run run and update modes?

Use run for first activation, restart, or rollback to the current Package, and update to switch to a different Package version. After a failed update, retry with update on nextPackageId or roll back with run on currentPackageId.