RenX agents are extensible through four systems that work together: Skills, Plugins, Hooks, and Commands. This guide explains what each one does and how to use them.
Who this is for: Advanced users who want to customize agent behavior beyond the default desktop experience.
| System | What it does | How you use it |
|---|---|---|
| Skills | Reusable workflows and instructions | Invoke via /skill-name or let the agent use them automatically |
| Plugins | Packages that bundle skills, commands, hooks, and MCP servers | Drop into a directory or install from marketplace |
| Hooks | Intercept agent actions at execution time | Configure rules that allow, deny, or modify agent behaviour |
| Commands | Slash shortcuts that expand into prompts | Type /command in the chat input |
All four systems share a scope hierarchy — each can be configured at the system, user, agent, or workspace level. Higher scopes override lower ones when names collide.
If you are new to RenX, start with Skills first. The other systems are progressively more advanced.
Skills are reusable step-by-step instructions stored as SKILL.md files. They teach your agent how to perform common tasks like committing code, reviewing pull requests, or debugging issues.
Type a slash command in the chat input:
/commit -m "Add authentication"
Or let the agent invoke skills automatically when they match the task at hand.
Create a SKILL.md file with YAML frontmatter:
---
name: commit
description: Create a well-organized git commit
allowed-tools: git, bash
---
# Commit Instructions
1. Review all staged and unstaged changes with `git diff`.
2. Group related changes logically.
3. Write a clear, concise commit message that explains why the change was made.
4. Stage the relevant files and create the commit.
Skills are discovered automatically from these locations (in priority order):
| Scope | Location | When to use |
|---|---|---|
| System | Bundled with server | Built-in skills |
| User | ~/.renx/users/{userId}/skills/ | Personal skills across all agents |
| Agent | ~/.renx/users/{userId}/agents/{slug}/skills/ | Skills specific to one agent |
| Workspace | {project}/.renx/skills/ | Project-specific skills |
/commit -m "focus on auth"), the agent refines the skill instructions based on your codebase context.In the agent editor’s Advanced tab, you can disable specific skills for an agent. This is useful when you want different agents to have different capabilities.
Plugins are packages that bundle multiple extensions together — skills, commands, hooks, MCP servers, and subagent definitions — in a single directory.
my-plugin/
├── .renx-plugin/plugin.json # Plugin metadata
├── .mcp.json # MCP server configurations
├── commands/ # Slash commands
│ └── deploy.md
├── skills/ # Skills
│ └── review/
│ └── SKILL.md
├── hooks/
│ └── hooks.json # Hook configurations
└── agents/ # Subagent definitions
└── reviewer.md
{
"name": "my-plugin",
"description": "A plugin that adds deployment and review capabilities",
"version": "1.0.0"
}
From the marketplace:
Go to the plugin marketplace within the app and click Install.
From a Git repository:
The server can clone and install plugins from Git URLs.
Manually:
Drop the plugin directory into one of the discovery locations:
| Scope | Location |
|---|---|
| User | ~/.renx/users/{userId}/plugins/ |
| Agent | ~/.renx/users/{userId}/agents/{slug}/plugins/ |
| Workspace | {project}/.renx/plugins/ |
Plugins are auto-discovered — no install step needed if the directory is in the right place.
If the same skill, command, or hook name exists in multiple plugins or scopes, the higher scope wins:
Workspace > Agent > User > System
In the agent editor’s Advanced tab, you can disable specific plugins for an agent.
Hooks intercept your agent’s execution at specific events, allowing you to enforce rules, modify behaviour, or require approval before an action proceeds.
| Event | When it fires | Common use |
|---|---|---|
PreToolUse | Before a tool executes | Block dangerous commands, require approval |
PostToolUse | After a tool succeeds | Log actions, trigger follow-ups |
PostToolUseFailure | After a tool fails | Custom error handling |
Stop | When the agent tries to stop | Prevent premature stopping |
SubagentStop | When a subagent stops | Control subagent lifecycle |
UserPromptSubmit | Before processing user input | Filter or modify user messages |
SessionStart | At session initialisation | Inject context, set up environment |
PermissionRequest | Custom permission gate | Fine-grained permission control |
Hooks are defined in a hooks.json file:
{
"PreToolUse": [
{
"matcher": "bash",
"hooks": [
{
"type": "command",
"command": "/path/to/validate.sh",
"timeout": 30
}
]
}
]
}
This example runs validate.sh before every Bash tool execution. The script can:
Hook scripts output JSON with a decision:
{
"hookSpecificOutput": {
"permissionDecision": "allow"
},
"continue": true
}
Possible decisions:
"allow" — Proceed with the action."deny" — Block the action."ask" — Prompt the user for approval.The matcher field supports glob patterns to target specific tools:
"*" — Match all tools."bash" — Match the Bash tool only."file_*" — Match tools starting with file_.Hooks can be configured per-scope via the API or by placing hooks.json files in the appropriate directory:
In the agent editor’s Advanced tab, you can disable specific hooks for an agent.
Commands are slash shortcuts that expand into full prompts when you type them in the chat input. They’re the simplest extension type — just a name and a template.
Type a slash followed by the command name:
/commit
/review
/compact
Some commands accept arguments:
/commit -m "Fix authentication bug"
RenX includes several built-in commands:
| Command | Description |
|---|---|
/compact | Compress conversation context to free up space |
/init | Initialise a new project |
/review | Review a pull request |
Create a markdown file in a plugin’s commands/ directory:
---
description: Deploy the application to staging
argument-hint: --env <environment>
---
Deploy the application to the specified environment.
1. Run the test suite first.
2. Build the production bundle.
3. Deploy to the target environment.
4. Verify the deployment is healthy.
The argument-hint field tells users what arguments the command accepts.
When you type /deploy --env staging:
/deploy prefix.deploy command from built-in commands and active plugins.--env staging passed as arguments.Commands are discovered from the same scope hierarchy as other extensions — system, user, agent, and workspace plugins.
All four extension types follow the same priority order:
Workspace (highest priority)
↑
Agent
↑
User
↑
System (lowest priority)
~/.renx/users/{userId}/.~/.renx/users/{userId}/agents/{slug}/.{project}/.renx/.If the same name exists at multiple scopes, the highest scope wins. This lets you override system defaults with your own versions.
In the agent editor’s Advanced tab, you can:
This gives you fine-grained control over what each agent can do.