How to Build a Skill for the ProductiveBot Skill Store
Think about the last time you got your ProductiveBot to do something really useful. Maybe you automated your invoicing. Or set up a workflow that turns voice memos into organized meeting notes. Or built a system that tracks inventory across three suppliers.
That thing you figured out? Other people need it too. And they'd pay for it.
The ProductiveBot Skill Store lets you package what you know into a skill that other customers can install with one click. You set the price. You get paid when people buy it.
There are two kinds of skills: behavioral skills and plugin skills. Most creators start with behavioral skills. Plugin skills are for more advanced use cases that need to run code inside the gateway. This guide covers both.
Behavioral Skills: Instructions That Teach Your Bot
A behavioral skill is a folder with one required file: SKILL.md. Your bot reads this file and follows the instructions inside it. Think of it like writing a really detailed how-to guide for someone who's smart but has never done this specific task before. That someone just happens to be an AI.
Here's what a basic skill folder looks like:
my-skill/
├── SKILL.md (required — the instructions)
├── scripts/ (optional — any code that needs to run)
├── references/ (optional — extra docs or data)
└── assets/ (optional — templates, images, files)
Most behavioral skills don't need scripts or assets. The instructions in SKILL.md do the heavy lifting.
Writing Your SKILL.md
Every SKILL.md has two parts: a short header and the instructions.
The Header
The header tells ProductiveBot what your skill is and when to use it:
---
name: invoice-automator
description: Automate invoice creation and tracking for small businesses.
Use when the customer asks about invoices, billing, payment tracking,
or accounts receivable.
---
Two things matter here:
- Name: Keep it short and descriptive. Lowercase, hyphens instead of spaces.
- Description: This is how your bot decides whether to use the skill. Be specific about what it does and what kinds of requests should trigger it.
The Instructions
After the header, write the actual instructions in plain Markdown. Tell the bot what to do when the skill is triggered, what steps to follow, what to watch out for, and what to say to the customer at each step.
Here's a simple example:
# Invoice Automator
Create and track invoices for the customer's business.
## When to Use
Activate when the customer mentions invoices, billing,
creating quotes, or tracking payments.
## Creating a New Invoice
1. Ask the customer for: client name, items/services,
amounts, and due date
2. Create the invoice as a clean PDF
3. Save it to ~/Documents/Invoices/
4. Tell the customer where you saved it
Notice how specific that is. You're not writing vague goals. You're writing step-by-step instructions that leave no room for guessing.
Tips for Writing Great Behavioral Skills
Be specific, not vague. "Handle invoices" is too vague. "Create a PDF invoice using the template in assets/, fill in the client name, line items, and total, and save it to ~/Documents/Invoices/" is what actually works.
Write it like you're training a new employee. Imagine someone on their first day. They're competent and eager, but they don't know your systems yet. What would you tell them? Write that.
Include what to say to the customer. Your skill can include suggested messages. This keeps the experience consistent and professional.
Add troubleshooting. Think about what might go wrong and tell the bot how to handle it. This makes your skill more reliable.
Keep the file lean. Your SKILL.md shares space with everything else your bot is thinking about. If you need to include detailed reference material, put it in a references/ folder and tell the bot to read it when needed.
Plugin Skills: Code That Runs Inside the Gateway
Some skills need to do more than give instructions. They need to intercept what's happening inside your ProductiveBot as it processes each message or tool call. That's what plugin skills are for.
A plugin skill bundles one or more code plugins with a SKILL.md wrapper. The plugins hook into the ProductiveBot gateway and run automatically, without the customer having to ask.
Common uses for plugin skills:
- Routing messages to different AI models based on complexity (saves cost automatically)
- Blocking or logging dangerous commands before they run
- Adding custom behavior before or after every tool call
- Tracking usage or cost data in the background
The Plugin Manifest
Every plugin needs an openclaw.plugin.json manifest file alongside its code:
{
"id": "my-plugin",
"name": "My Plugin",
"version": "1.0.0",
"description": "What this plugin does",
"entry": "index.js"
}
The entry file is your plugin's main code. It uses OpenClaw's plugin SDK to register hooks.
Available Hooks
Hooks let your plugin react to events inside the gateway:
| Hook | When it fires | What you can do |
|---|---|---|
| `before_model_resolve` | Before every AI call | Override which model gets used |
| `before_tool_call` | Before every tool runs | Block the tool, log it, or let it pass |
More hooks may be available. Check the OpenClaw documentation for the current list.
Writing a Plugin
Here's a minimal plugin that logs every exec command:
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import * as fs from "fs";
export default definePluginEntry({
id: "command-logger",
name: "Command Logger",
description: "Logs every exec command for audit purposes",
register(api) {
api.on("before_tool_call", async (event, ctx) => {
try {
const toolName = event?.toolName ?? "";
if (toolName !== "exec") return {};
const command = event?.params?.command;
if (!command) return {};
fs.appendFileSync(
"~/.openclaw/command-log.json",
JSON.stringify({ ts: new Date().toISOString(), command }) + "\n"
);
return {}; // let the command run
} catch (err) {
return {}; // always fail open
}
});
}
});
The most important rule: always fail open. If your plugin throws an error, it should return {} and let ProductiveBot continue normally. A plugin that crashes and blocks the gateway is worse than no plugin at all.
To block a tool call, return { block: true, blockReason: "reason" }. Use this carefully.
The Plugin Skill Directory Structure
A plugin skill has more files than a behavioral skill:
my-plugin-skill/
├── SKILL.md (required — teaches the agent about this plugin)
├── plugins/
│ └── my-plugin/
│ ├── index.js (plugin code)
│ ├── package.json (npm metadata)
│ └── openclaw.plugin.json (manifest)
├── scripts/
│ ├── install.sh (required — sets up the plugin)
│ └── uninstall.sh (required — clean removal)
└── README.md (Skill Store listing)
Install and Uninstall Scripts
Plugin skills require install and uninstall scripts. Customers run install.sh after downloading the skill, and uninstall.sh if they decide they don't want it anymore.
Your install script must:
- Copy the plugin code to
~/.openclaw/extensions/your-plugin-id/ - Add your plugin ID to
plugins.allowin the gateway config:
# Read the current plugins.allow array, add your ID, write it back
openclaw config set plugins.allow '[...existing, "your-plugin-id"]'
- Restart the gateway:
openclaw gateway restart - Verify the plugin loaded:
openclaw plugins list - Print a confirmation message
Your uninstall script must:
- Remove your plugin ID from
plugins.allow - Delete the plugin from
~/.openclaw/extensions/ - Restart the gateway
- Confirm clean removal
Both scripts must be idempotent. Running install twice should not add duplicate entries. Running uninstall when the plugin isn't installed should not error.
Rollback on failure. If your install fails partway through, clean up what you added. A half-installed plugin that the gateway can't load will cause errors until someone manually fixes it.
What the SKILL.md Teaches the Agent
For a plugin skill, the SKILL.md doesn't just describe the skill. It teaches the agent what the plugin is doing and how to communicate that to the customer.
If your plugin blocks a command, the SKILL.md should tell the agent: explain what happened and offer alternatives. If your plugin logs routing decisions, the SKILL.md should tell the agent: how to read those logs and summarize them for the customer when asked.
The plugin runs silently in the background. The agent is the customer's window into what it's doing.
Security Considerations for Plugin Skills
Plugin skills have more power than behavioral skills, so the review bar is higher.
-
Only intercept tools you need to intercept. If you're building a command logger, check that the tool is
execbefore reading the command. Don't inspect every tool call if you only care about one. - Never read or write sensitive files unless the skill explicitly needs to and the customer understands this.
- Never hardcode credentials or user identifiers. Don't put a Slack user ID or API key in your plugin code. Read these from a config file that the customer controls.
- Document everything your plugin reads and writes. Customers and our review team need to know exactly what your plugin touches.
Every plugin skill submitted to the ProductiveBot Skill Store goes through a security review. We check what hooks are used, what files are read or written, and whether the install/uninstall scripts are clean. This protects customers and keeps the Skill Store trustworthy.
Skill Ideas Based on Real Industries
Think about your own expertise. Here are some ideas based on what ProductiveBot customers actually do:
For tradespeople: Quote generators for plumbing, HVAC, or electrical jobs. Job scheduling and follow-up reminder systems. Materials calculators that estimate costs from a job description.
For e-commerce sellers: Product listing creators that format for multiple platforms. Inventory trackers that alert when stock is low. Return and refund workflows that handle customer communications.
For healthcare professionals: Patient intake form processors. Appointment reminder systems. Compliance checklists for documentation.
For freelancers and consultants: Project proposal generators. Time tracking and invoice workflows. Client onboarding checklists that gather everything upfront.
For real estate: Property listing description writers. Open house follow-up email sequences. Comparable market analysis formatters.
For technical customers: Custom routing plugins that send complex requests to powerful models and simple requests to faster ones. Logging plugins that track what commands your bot runs. Monitoring plugins that alert you when something unusual happens.
You don't need to build something that serves millions. A skill that saves 10 plumbers two hours a week is worth real money.
How to Submit Your Skill
Once your skill is working on your own ProductiveBot, here's how to get it into the store:
- Test it thoroughly on your own bot. Install it, use it for real tasks, and make sure everything works correctly. For plugin skills, test both install and uninstall on a clean setup.
- Write a short description of what your skill does, who it's for, and what problem it solves.
- Email it to us at support@productivebot.ai with your skill folder attached. Include your name, the price you want to charge, and your description.
- We review it. Every skill in the store is vetted by the ProductiveBot team. We check that it works, it's safe, and the instructions are clear. Plugin skills also go through a security review of the plugin code and install scripts.
- It goes live. Once approved, your skill appears in the Skill Store. Customers install it with one click. You get paid for every sale.
Start With What You Know
You don't need a computer science degree to build a behavioral skill. You need expertise in something (which you already have) and the ability to write clear instructions.
If you want to build a plugin skill, some JavaScript knowledge helps. But the concepts are straightforward, and the examples in this guide give you a starting point.
Your ProductiveBot can help you write the skill, too. Just tell it: "Help me create a skill that does [what you want]." It knows the format and can draft the SKILL.md for you. For plugin skills, you can ask it to help you write the plugin code, install script, and manifest.
Ready to build your first skill? Open up your ProductiveBot and say: "Let's create a skill."
The ProductiveBot Skill Store is where customers share and sell the workflows that make their businesses run. Visit support.productivebot.ai/skills to browse available skills, or build your own and start earning. Need help? Talk to Scout at support.productivebot.ai or email support@productivebot.ai.
Leave a comment
This site is protected by hCaptcha and the hCaptcha Privacy Policy and Terms of Service apply.