Personal oh-my-pi extensions, published as one installable plugin.
The repo root is itself the plugin manifest: root package.json omp.features declares
every extension as a selectable feature (all default: true), so a bare omp plugin install enables the whole suite while a bracketed spec enables just the features you name.
Each extension lives in its own Bun workspace member under extensions/* for isolated
development and testing.
All specs install the same single omp-plugins package (both extension directories come
with it); the bracket only selects which features load:
omp plugin install github:rblaine95/omp-plugins # enable whole suite
omp plugin install 'github:rblaine95/omp-plugins[rules-guard]' # enable just rules-guard
omp plugin install 'github:rblaine95/omp-plugins[usage-status]' # enable just usage-status
omp plugin install 'github:rblaine95/omp-plugins[*]' # all features, explicitQuote any bracketed spec — shells like zsh treat [...] as a glob. Extensions load on the
next omp start. omp plugin list shows the one omp-plugins package as enabled regardless
of selection. Change which features load later, without reinstalling, via
omp plugin features @rblaine95/omp-plugins.
Marketplace installs (
name@marketplace) cannot activate these — omp loadsomp.extensions/omp.featuresonly for git/npm/linkinstalls, never from a marketplace cache. Use theomp plugin install github:…commands above.
Git plugins have no separate update command. Re-run install and Bun re-resolves the ref to its latest commit:
omp plugin install github:rblaine95/omp-plugins # latest on default branch
omp plugin install 'github:rblaine95/omp-plugins#vX.Y.Z' # pin a released tag (see Releases)Versioning is automated with release-please.
The root package.json version is the single version of the whole suite — it is the
value omp plugin list shows and omp-plugins.lock.json records. Workspace members under
extensions/* are pinned to 0.0.0 and never versioned independently.
Merges to master written as Conventional Commits
(fix: → patch, feat: → minor, feat!:/fix!: → major) accrue into a release PR. Merging
that PR bumps the root version, updates CHANGELOG.md, and tags vX.Y.Z with a matching
GitHub Release — which is what the #vX.Y.Z pin above resolves to. Commits without a
conventional prefix are ignored, so no release PR opens until at least one lands.
omp plugin uninstall @rblaine95/omp-plugins| Extension | What it does |
|---|---|
rules-guard |
Enforces the Claude permissions allow/deny policy across every omp tool (read/write/edit/find/search/bash/eval/browser), not just bash. |
usage-status |
Color-coded row above the editor showing remaining usage with reset countdowns for every subscription /usage reports (Claude, Codex, Gemini, Grok, OpenCode, Cursor, …), so you don't have to run /usage. |
bun install # link workspace members, install dev-only types
bun test # run all member testsDevelop against your live omp without publishing by symlinking the local checkout:
omp plugin link /path/to/omp-plugins@oh-my-pi/pi-coding-agent is a dev-only dependency (types for ExtensionAPI). The
extensions import it with import type only, so it is erased at build time and a git
install pulls in zero runtime dependencies.
mkdir extensions/<name>with its ownpackage.json(name,"version": "0.0.0",omp.extensions: ["./index.ts"]) — members are not versioned independently.- Add a feature entry to the root
package.jsonomp.featuresmap —{ "description": "…", "default": true, "extensions": ["./extensions/<name>/index.ts"] }. This is what a git install reads;default: truekeeps it in the bare whole-suite install, and its key becomes the[<name>]selector. bun installto register the new workspace member.