Extending RaiSE
RaiSE is designed to be extended. There are four extension points, each serving a different purpose.
Extending the HUD?
To add a custom panel to the live terminal dashboard, see the HUD Extension Guide.
Adapters¶
Adapters connect RaiSE to external services — project management tools, documentation platforms, and knowledge graph backends. They follow Python Protocol contracts with entry point discovery.
RaiSE ships with adapters for Jira and Confluence. You can add your own for any service.
Entry point groups:
- rai.adapters.pm — project management (issues, sprints, backlog)
- rai.docs.targets — documentation publishing (pages, search)
- rai.governance.schemas — governance artifact type definitions
- rai.governance.parsers — governance artifact parsers
- rai.graph.backends — knowledge graph storage
[Create a custom adapter](create-adapter.md/
Skills¶
Skills are structured instructions that guide your AI assistant through repeatable workflows. They are SKILL.md files with YAML frontmatter and step-by-step sections.
RaiSE ships with lifecycle skills (session, epic, story) and utility skills (debug, research). You can create project-specific skills for your team's workflows.
[Create a custom skill](create-skill.md/
MCP Servers¶
MCP (Model Context Protocol) servers give your AI assistant access to external tools — documentation lookups, security scanners, repository operations. RaiSE manages MCP server registration and health checking.
[Register an MCP server](register-mcp.md/
Lifecycle Hooks¶
Hooks are shell commands that run on Claude Code events — before tool use, after tool use, or before context compaction. They enable side effects like journal logging without blocking the main workflow.
[Wire a lifecycle hook](create-hook.md/
CLI Extensions¶
External packages can register new top-level commands with the rai CLI. Extensions are discovered at startup via Python entry points.
Entry Point Group¶
Register your command under the rai.cli.commands entry point group in your package's pyproject.toml:
The entry point name becomes the command name. With the example above, rai knowledge validate ./nodes/ works when your package is installed alongside raise-cli.
Convention¶
Each extension must expose a typer.Typer app. If the loaded object is not a Typer instance, it is skipped with a warning.
# my_package/cli.py
import typer
app = typer.Typer(help="Knowledge graph utilities.")
@app.command()
def validate(path: str) -> None:
"""Validate knowledge graph nodes."""
...
Protection¶
The extension loader includes two safety checks:
- Built-in collision detection — Extensions cannot shadow built-in commands (
session,pattern,graph, etc.). If a collision is detected, the extension is skipped with a warning. - Duplicate extension detection — If two packages register the same command name, the first one loaded wins and the second is skipped with a warning.
Both cases are logged so you can diagnose registration issues.
Verification¶
Once your package is installed, the extension appears in rai --help. You can also check extension loading status via debug logging:
Validation¶
After extending RaiSE, verify your setup: