Repository navigation
Skills
ChatHub skills are globally installed SKILL.md instruction bundles. Open
Settings -> Skills to install, edit, or remove them. On desktop, select a skill
from the left panel to see its description and source. On mobile, open Skills
from the Settings menu and tap an installed skill to open its details. Internal
content hashes are not shown in either layout.
Skills are enabled by default. Operators can hide the Skills settings and ChatInput picker with:
FEATURE_FLAGS="-skills"Disabling the interface does not remove installed skills. Re-enable the flag to restore those controls. Hiding the Skills UI is unrelated to background conversation generation: activated skills still load on the server worker. See Background Conversation Generation.
Select Install skill, then choose one of these sources:
-
Local file uploads a
.skillpackage from your laptop. Packages exported by Claude are supported when they contain eitherSKILL.mdat the archive root or<skill-name>/SKILL.md. The archive can be up to 30 MiB and contain up to 1024 files;SKILL.mditself is limited to 128 KiB. -
URL accepts an HTTPS URL to a raw Markdown file, a GitHub
repository/blob/tree URL, or a configured registry result. GitHub repository
and directory links are resolved to
SKILL.mdautomatically. The server does not follow redirects, rejects URLs with credentials, performs SSRF-safe fetching, and limits the document to 128 KiB.
Local packages currently import only the instructions in SKILL.md. Bundled
scripts, references, assets, and other files are skipped, and ChatHub shows a
warning with the number of skipped files after installation. Skills that depend
on those files may not work as intended; use an instruction-only package or
move the required information into SKILL.md.
The document needs YAML frontmatter with a valid lowercase identifier, a description, and a non-empty Markdown body:
---
name: concise-skill-name
description: One sentence describing when to use it.
---
Instructions for the model...The installed record keeps an internal SHA-256 content hash. Reinstalling the same identifier replaces its metadata and body. Uninstall removes the user's copy and any pending composer selection for it.
If SKILLS_INDEX_URL is set on the server, entering at least two search
characters also searches that JSON registry. A registry can be an array or an
object with skills, items, or results, and each result must provide an
identifier, description, and HTTPS source (or GitHub repository/path/ref).
Registry results are metadata-only until installed. Installation is rejected if
the downloaded document's frontmatter name does not match the registry
identifier.
Installing byte-identical content under a second identifier is rejected with a clear conflict message. Source documents that are malformed, unavailable, or larger than 128 KiB are also reported as actionable install errors.
Select an installed skill and use the pencil button. The identifier is fixed, while the description and Markdown instructions can be edited. Saving validates the same format and size limits used during installation, preserves the original source information, and refreshes the installed list.
An installed skill is not automatically active. Use the Sparkles button in the topic composer and check the globally installed skills that conversation should use. The same picker is available in desktop, mobile, single-assistant, and group chats.
Selections stay with that session, topic, and thread across messages and in-app navigation until manually unchecked. They reset after a browser reload or account change. Uninstalling a skill also removes it from saved in-memory selections.
Skill names are not slash commands. Input such as /reviewer is sent as normal
message text and does not activate the skill. Other editor slash actions remain
available.
ChatHub resolves at most the first 16 distinct, checked skill activations in a turn. Additional selections are ignored in their existing order instead of failing the whole message.
Only checked skills load their full body. Unchecked skills are not disclosed to the model and cannot be activated by a hidden loader. Older conversations may still display compact historical loader rows, but those rows cannot activate a skill.
- A skill missing from the picker is either not installed, still loading, or hidden because the Skills feature flag is disabled.
- A
.skillupload error can indicate an invalid ZIP package, an unsafe archive path, a missing or duplicateSKILL.md, a folder/frontmatter name mismatch, invalid UTF-8, or an archive or instruction file over its limit. - A URL install error can indicate a non-HTTPS source, a redirect, a private network target, oversized content, invalid frontmatter, or a registry/name mismatch.
- Registry search is disabled when
SKILLS_INDEX_URLis unset. The registry endpoint must return JSON over HTTPS.
- Home
- Quick Start
- Docker Deployment and Upgrades
- Authentication
- Model Providers
- Knowledge Base and RAG
- MarkItDown Sidecar
- Sandbox (OpenSandbox)
- OpenAI Compatible Cache Matrix
- Model Extension Options
- Memory & Context Compaction
- Background Conversation Generation
- Pasted Text
- Context Export
- Data Backup and Restore
- Image Generation
- Artifacts
- Inline SVG Diagrams
- Tools Hub
- MCP OAuth
- MCP Management
- Agent Skills
- Database
- Development
- Debug and Diagnostics
- Architecture Overview
- Docker Release
- Release Workflow