- Shell 88.4%
- Python 6.8%
- Just 4.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| omp/agent | ||
| scripts | ||
| .gitignore | ||
| AGENTS.md | ||
| install.sh | ||
| justfile | ||
| plugins.json | ||
| README.md | ||
| skills-install.json | ||
omp global setup
This repo is the source of truth for my global omp (oh-my-pi) coding agent setup. It is modeled on my pi_setup repo but targets omp only; pi packages, pi settings, and pi-subagents agents are intentionally not carried over.
What this manages
- syncs repo-managed global omp config from
omp/agent/into~/.omp/agentby default - deep-merges repo-managed
config.ymlinto the targetconfig.ymlinstead of replacing it - optionally installs or updates omp using the official
https://omp.sh/installinstaller when requested - optionally runs
omp updatewhen requested - adds marketplaces and installs/removes omp plugins declared in
plugins.json - installs missing enabled external skills declared in
skills-install.jsonvia theskillsCLI, and removes explicitly disabled ones - optionally runs a global skills update before syncing configured external skills
It never creates, replaces, or removes machine-local state in the target dir: agent.db (auth, credentials, runtime state), models.yml/models.yaml, or sessions/. Use omp login / /login for provider auth and edit ~/.omp/agent/models.yml for custom providers.
Repo layout
.
├── install.sh
├── justfile
├── plugins.json
├── skills-install.json
├── scripts/
│ ├── install-skills.sh
│ └── merge-yaml.py
└── omp/
└── agent/
├── AGENTS.md
├── commands/
│ ├── clone-prompt.md
│ ├── gitship.md
│ ├── init-just.md
│ ├── jjship.md
│ └── plan-progress.md
└── config.yml
Other native omp files can be added under omp/agent/, for example RULES.md, SYSTEM.md, keybindings.yml, mcp.json, rules/, hooks/, tools/, extensions/, skills/<name>/SKILL.md, or agents/*.md. See https://omp.sh/docs.
Managed files:
AGENTS.md→~/.omp/agent/AGENTS.md, user-level context loaded into every session. It shadows other user-level context files such as~/.claude/CLAUDE.mdand~/.codex/AGENTS.md.commands/*.md→~/.omp/agent/commands/, user slash commands:/clone-promptstudies the current repo and generates reusable prompts for building a similar project/gitshipstages relevant work, creates a meaningful commit, and pushes, asking for confirmation only when real concerns are detected/init-justcreates a practical projectjustfilewith documented tasks and a default task list/jjshipdescribes the working-copy change, updates bookmarks, and pushes via jj, asking for confirmation only when real concerns are detected/plan-progressreviews a plan file against current repository progress with evidence-backed status reporting
config.yml→ deep-merged into~/.omp/agent/config.yml. Currently: UI preferences (theme.dark,statusLine,composer) anddisabledProviders(amazon-bedrock,bedrock-mantle, andollama). Machine-specific settings such asmodelRolesstay local.
Each top-level item in omp/agent/ is copied (or symlinked with --symlink) into the target dir, replacing the target entry wholesale. This means ~/.omp/agent/commands/ is repo-owned: add personal commands to this repo, or to a project .omp/commands/.
config.yml is special-cased:
- mappings merge recursively; scalars and lists in the repo file replace the target value; keys the repo does not mention are left alone
- the merge uses
ruamel.yamlround-trip mode (YAML 1.2), so comments and values such asoff/"yes"in the local file survive - it is never symlinked, and
--cleannever removes it - it needs
python3withruamel.yaml, oruv(the installer then runsuv run --with ruamel.yaml)
Usage
From inside this repo:
./install.sh
Or use the justfile:
just # show available recipes
just install # sync config, plugins, and skills
just install --symlink # flags pass through to install.sh (see Options below)
just config # sync only repo-managed files under omp/agent
just plugins # sync only omp plugins from plugins.json
just skills # install only external skills from skills-install.json
just update # install omp if missing (else `omp update`), sync, then update plugins and skills
just clean # remove and reinstall repo-managed config targets and configured plugins
just check # validate scripts and config files
Options:
./install.sh --symlink # symlink instead of copy
./install.sh --install-omp # install omp via https://omp.sh/install, or `omp update` if already installed
./install.sh --update # run `omp update` after syncing
./install.sh --config-only # sync only repo-managed config files
./install.sh --plugins-only # sync only omp plugins from plugins.json
./install.sh --clean # remove repo-managed targets (except config.yml) and reinstall configured plugins
./install.sh --update-plugins # `omp update --plugins` and reinstall unpinned npm plugins
./install.sh --update-skills # run `npx skills update -g` before syncing configured skills
./install.sh --omp-dir ~/.omp/profiles/work/agent
The target dir is always ~/.omp/agent unless you pass --omp-dir. The installer deliberately ignores PI_CODING_AGENT_DIR: pi also reads that variable, so honoring it could sync omp config into pi's agent dir on a machine with both installed. For a named omp profile, pass --omp-dir ~/.omp/profiles/<name>/agent. Plugins are installed through the omp CLI into the default plugin root, not into --omp-dir.
--install-omp runs the official installer only when omp is not on PATH. If omp is already installed it is not reinstalled; omp update runs instead, at the same point as --update. The official installer overwrites the binary in place, which fails with curl: (23) (Text file busy) while omp sessions are running; omp update does not have this problem.
After changes, restart omp or run /reload-plugins for plugins.
Keeping machines in sync
On every machine:
git pull
./install.sh
That gives you:
- the latest repo-managed config
- any missing enabled plugins from
plugins.json, and removal of plugins explicitly disabled there - any missing enabled external skills from
skills-install.json, and removal of skills explicitly disabled there
omp plugins
plugins.json has three sections:
{
"marketplaces": {
"claude-plugins-official": {
"source": "anthropics/claude-plugins-official",
"plugins": {
"code-review": true,
"old-review": false
}
}
},
"npm": {
"@scope/omp-plugin": true,
"github:singh-gur/omp-langfuse": true,
"git+https://github.com/example/example-plugin.git": true,
"pinned-plugin@1.2.3": true,
"old-plugin": false
}
}
marketplacesmaps a marketplace name (as reported byomp plugin marketplace list) to its declaration.sourceis passed toomp plugin marketplace add <source>; missing marketplaces are added, existing ones are left alone and never removed. The optionalpluginsmap declares that marketplace's plugins by name — the sync derives thename@marketplaceid omp uses.trueinstalls if missing;falseuninstalls if installed.npmmaps plugin specs to booleans.trueinstalls if missing;falseuninstalls if installed.- an npm spec pinned to an exact version (
pkg@1.2.3) is reinstalled when the installed version differs. Unpinned npm plugins are reinstalled only with--update-plugins. - Git sources such as
github:singh-gur/omp-langfuseorgit+https://github.com/example/example-plugin.git#maingo innpm: omp reports installed plugins by package name. The sync matches by repository basename (ignoring.gitand#ref), so that basename must match the package name; do not declare the same plugin under both forms. - npm plugin install/uninstall needs
bunonPATH. Without it, npm entries are skipped with a warning; marketplace entries still sync. - a failed plugin command logs a warning and the sync continues.
The file currently declares the ponytail marketplace (DietrichGebert/ponytail) with the ponytail plugin, and the github:singh-gur/omp-langfuse npm plugin. Most of the old pi packages cover things omp has built in: subagents (task), web access (web_search, browser), ask, MCP, omp worktree, omp usage, and the --advisor runtime.
External skills
Declare external skills in skills-install.json as an object mapping repository URLs to skill-name booleans. true installs if missing; false removes if installed.
{
"https://github.com/singh-gur/agent_skills": {
"arch-design": true,
"old-skill": false
}
}
Current external skills config:
{
"https://github.com/singh-gur/agent_skills": {
"arch-design": true,
"draw-diagram": true,
"skill-writer": true,
"alignment-interview": true,
"setup-ci": true,
"arcane-compose": true
},
"https://github.com/vercel-labs/agent-browser": {
"agent-browser": true
}
}
Each skill is installed with:
npx skills add <repo> --skill <skill> -g -y -a universal
npx skills remove <skill> -g -y -a universal
-a universal installs into ~/.agents/skills/, which omp discovers through its agents skill provider. pi also reads that directory, so removing a skill here removes it for pi too. Skills not listed in the file are left alone. If jq or npx is missing, external skill sync is skipped with a warning.
Prerequisites
bash,jq,curl(for--install-omp)python3withruamel.yaml, oruv(for theconfig.ymlmerge)npx(for external skills)bun(only for npm plugins)just(optional)