Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 32 additions & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

122 changes: 122 additions & 0 deletions schemas/roomodes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://github.com/RooCodeInc/Roo-Code/blob/main/schemas/roomodes.json",
"title": "Roo Code Custom Modes",
"description": "Schema for .roomodes configuration files used by Roo Code to define custom modes.",
"type": "object",
"required": ["customModes"],
"additionalProperties": false,
"properties": {
"customModes": {
"type": "array",
"description": "List of custom mode definitions.",
"items": {
"$ref": "#/definitions/CustomMode"
}
}
},
"definitions": {
"ToolGroup": {
"type": "string",
"enum": ["read", "edit", "browser", "command", "mcp", "modes"],
"description": "A tool group name that grants the mode access to a set of tools. Note: 'browser' is deprecated but still accepted for backward compatibility."
},
"GroupOptions": {
"type": "object",
"description": "Options that restrict a tool group's file access.",
"properties": {
"fileRegex": {
"type": "string",
"description": "A regular expression pattern to restrict which files the tool group can access."
},
"description": {
"type": "string",
"description": "A human-readable description of the file restriction."
}
},
"additionalProperties": false
},
"GroupEntryTuple": {
"type": "array",
"description": "A tuple of [toolGroupName, options] for tool groups with file restrictions.",
"items": [{ "$ref": "#/definitions/ToolGroup" }, { "$ref": "#/definitions/GroupOptions" }],
"additionalItems": false,
"minItems": 2,
"maxItems": 2
},
"GroupEntry": {
"description": "A tool group permission entry. Either a simple tool group name string, or a [toolGroupName, options] tuple for groups with file restrictions.",
"oneOf": [{ "$ref": "#/definitions/ToolGroup" }, { "$ref": "#/definitions/GroupEntryTuple" }]
},
"RuleFile": {
"type": "object",
"description": "A rules file associated with a mode, used during import/export.",
"required": ["relativePath", "content"],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roomote Is content supposed to be required?

Copy link
Copy Markdown
Contributor Author

@roomote-v0 roomote-v0 Bot Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixaroo Clock   See task

Made content optional in the RuleFile schema definition -- only relativePath remains required. All 25 tests pass.

View commit | Revert commit

"additionalProperties": false,
"properties": {
"relativePath": {
"type": "string",
"description": "The relative file path for the rules file."
},
"content": {
"type": "string",
"description": "The text content of the rules file."
}
}
},
"CustomMode": {
"type": "object",
"description": "A custom mode definition.",
"required": ["slug", "name", "roleDefinition", "groups"],
"additionalProperties": false,
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-zA-Z0-9-]+$",
"description": "A unique identifier for the mode, containing only letters, numbers, and dashes."
},
"name": {
"type": "string",
"minLength": 1,
"description": "The display name of the mode."
},
"roleDefinition": {
"type": "string",
"minLength": 1,
"description": "The system prompt that defines the mode's role and behavior."
},
"whenToUse": {
"type": "string",
"description": "A description of when this mode should be used, shown in the mode selection UI."
},
"description": {
"type": "string",
"description": "A short description of the mode."
},
"customInstructions": {
"type": "string",
"description": "Additional instructions appended to the system prompt."
},
"groups": {
"type": "array",
"description": "The tool groups this mode has access to.",
"items": {
"$ref": "#/definitions/GroupEntry"
}
},
"source": {
"type": "string",
"enum": ["global", "project"],
"description": "Where this mode was defined. Automatically set by Roo Code."
},
"rulesFiles": {
"type": "array",
"description": "Rules files associated with this mode, used during import/export.",
"items": {
"$ref": "#/definitions/RuleFile"
}
}
}
}
}
}
1 change: 1 addition & 0 deletions src/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,7 @@
"@vscode/test-electron": "^2.5.2",
"@vscode/vsce": "3.3.2",
"ai": "^6.0.75",
"ajv": "^8.18.0",
"esbuild-wasm": "^0.25.0",
"execa": "^9.5.2",
"glob": "^11.1.0",
Expand Down
Loading
Loading