Plugin management, installation, and lifecycle control
46
48%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Medium
Suggest reviewing before use
Fix and improve this skill with Tessl
tessl review fix ./src/skills/bundled/plugins/SKILL.mdInstall, manage, and configure plugins to extend Clodds functionality.
/plugins List installed plugins
/plugins available Browse available plugins
/plugins search <query> Search plugin registry/plugins install <name> Install from registry
/plugins install <url> Install from URL
/plugins uninstall <id> Remove plugin
/plugins update <id> Update plugin
/plugins update-all Update all plugins/plugins enable <id> Enable plugin
/plugins disable <id> Disable plugin
/plugins restart <id> Restart plugin/plugins config <id> View plugin settings
/plugins set <id> <key> <value> Update setting
/plugins reset <id> Reset to defaultsimport { createPluginManager } from 'clodds/plugins';
const plugins = createPluginManager({
// Plugin directory
pluginDir: './plugins',
// Registry URL
registry: 'https://plugins.clodds.ai',
// Auto-update
autoUpdate: true,
updateCheckIntervalMs: 86400000, // Daily
});// Get installed plugins
const installed = plugins.list();
for (const plugin of installed) {
console.log(`${plugin.id}: ${plugin.name} v${plugin.version}`);
console.log(` Status: ${plugin.status}`); // 'enabled' | 'disabled' | 'error'
console.log(` Description: ${plugin.description}`);
}// Install from registry
await plugins.install('advanced-charts');
// Install from URL
await plugins.install('https://github.com/user/plugin/releases/latest/plugin.zip');
// Install from local path
await plugins.install('/path/to/plugin');// Enable plugin
await plugins.enable('advanced-charts');
// Disable plugin
await plugins.disable('advanced-charts');
// Check status
const status = plugins.getStatus('advanced-charts');
console.log(`Enabled: ${status.enabled}`);// Get plugin settings
const settings = plugins.getSettings('advanced-charts');
console.log(settings);
// Update settings
await plugins.setSettings('advanced-charts', {
theme: 'dark',
refreshInterval: 5000,
});
// Reset to defaults
await plugins.resetSettings('advanced-charts');await plugins.uninstall('advanced-charts');// plugins/my-plugin/index.ts
import { Plugin, PluginContext } from 'clodds/plugins';
export default class MyPlugin implements Plugin {
id = 'my-plugin';
name = 'My Custom Plugin';
version = '1.0.0';
description = 'Adds custom functionality';
// Default settings
defaultSettings = {
enabled: true,
threshold: 0.5,
};
async onLoad(ctx: PluginContext) {
console.log('Plugin loaded!');
// Register commands
ctx.registerCommand({
name: 'my-command',
description: 'Does something cool',
handler: async (args) => {
return `Result: ${args.join(' ')}`;
},
});
// Register tools
ctx.registerTool({
name: 'my-tool',
description: 'A custom tool',
execute: async (params) => {
return { result: 'success' };
},
});
// Subscribe to events
ctx.on('message', async (msg) => {
if (msg.content.includes('hello')) {
await ctx.reply('Hello back!');
}
});
}
async onUnload(ctx: PluginContext) {
console.log('Plugin unloaded!');
}
async onSettingsChange(settings: any, ctx: PluginContext) {
console.log('Settings updated:', settings);
}
}// Events
plugins.on('installed', (plugin) => {
console.log(`Installed: ${plugin.name}`);
});
plugins.on('enabled', (plugin) => {
console.log(`Enabled: ${plugin.name}`);
});
plugins.on('disabled', (plugin) => {
console.log(`Disabled: ${plugin.name}`);
});
plugins.on('error', (plugin, error) => {
console.error(`Plugin error: ${plugin.name}`, error);
});my-plugin/
├── index.ts # Main plugin file
├── package.json # Plugin metadata
├── settings.json # Default settings
├── commands/ # Command handlers
├── tools/ # Tool definitions
└── assets/ # Static assets{
"name": "my-plugin",
"version": "1.0.0",
"description": "My custom plugin",
"main": "index.ts",
"clodds": {
"minVersion": "0.1.0",
"permissions": ["network", "storage"],
"commands": ["my-command"],
"tools": ["my-tool"]
}
}| Permission | Access |
|---|---|
network | HTTP/WebSocket requests |
storage | Local file storage |
exec | Shell command execution |
trading | Trading APIs |
memory | User memory access |
e71a5f6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.