· via dev.to (home feed)
oh-my-agent ships five major CLI versions in a week, oma-security replaces deepsec
oh-my-agent jumped from CLI 15.10.0 to 20.0.0 in seven days of deliberate breaking changes. oma-security now replaces oma-deepsec with no compatibility aliases, so scripts using /deepsec need updating.

Five major releases in seven days
The oh-my-agent CLI moved from version 15.10.0 to 20.0.0 within a single week, shipping five major releases in seven days. According to the announcement on dev.to, the large version jumps are deliberate: superseded paths were removed outright instead of being kept behind compatibility shims. The week accounted for 81 commits touching 840 files, roughly 70,280 lines added and 32,120 removed, and the memory rework alone was validated with 1,095 tests.
oma-security replaces deepsec
The headline breaking change is that the oma-security skill takes over from oma-deepsec, and the /security command replaces /deepsec, with no compatibility aliases left behind. Per the dev.to post, the new skill routes source, skill, MCP and scoped web runtime work to engines specific to each target, retains the evidence those engines produce, and requires independent validation before a finding can be confirmed or a CI gate applied. Deepsec itself remains the default engine for scanning source code. The skill ships with 11 resource files, including a findings contract spanning 408 lines.
One global data home and memory isolation
OMA_HOME now designates a single global data home, ~/.oma by default, holding definitions, state, schedules and backups. Migration copies data first and checks for conflicts and active runtimes, and the old locations are no longer consulted as runtime fallbacks.
AgentMemory was also reworked for isolation: writes, recalls, retries and imports are scoped to the project and profile they originated from, and responses served from a shared server are filtered by ownership. Install and update routines now prepare the default AgentMemory provider unless a project opts out or supplies another one. Agent decisions are additionally captured and verified as state events, so a run's choices can be examined after the fact.
Elsewhere, the managed commit-msg hook now runs every executable file in .githooks/commit-msg.d/ in name order before its own logic, and a non-zero exit rejects the commit. oma never writes into that directory, which means an existing commitlint setup survives oma updates. oma-dev-workflow gained tooling profiles for Python, JavaScript/TypeScript, Dart/Flutter, Dockerfiles and local commitlint.
Fixes, cleanup and regenerated docs
The week also brought a batch of fixes. oma retro -- now emits a single valid JSON document, including for empty windows, instead of printing the banner and spinner first. schedule sync no longer crashes on manifest rows missing required fields, a failure mode that previously left every healthy job stale; malformed rows are now dropped and reported by schedule list. Orphan pruning is limited to the agent schedule namespace and no longer touches internal services such as AgentMemory and Serena maintenance. Concurrent hook deduplication now rechecks the clock after reading, so a competing publisher's fresh claim is not wrongly expired. Standalone skill installs bundle the shared guides they reference, pinned local Serena bridge entries are repaired, and "API design" no longer triggers the design workflow, which now requires a visual target.
On the cleanup side, plugin packages shed 471 duplicated files by sharing a single package-level resource tree. Because root plugin skills now depend on that tree, the project recommends OMA preset installation over npx skills or APM. Internal commands are hidden from oma describe and help but remain runnable, 25 previously undescribed command groups gained descriptions, and oma skills matrix became oma skill matrix, with the plural spelling rejected.
Documentation is now generated from source: the CLI registry renders from oma describe and the skill catalog from SKILL.md frontmatter, both with a --check mode that reports stale blocks. The docs site added mermaid diagrams for routing, ultrawork, ralph and config resolution, plus decision tables and a glossary, with 11 locales and 12 README translations synced. Two claims were also corrected: the ralph judge is now described as prompted rather than independent, because nothing verifies the spawn, and event log lookup points to oma state list instead of a hard-coded path.
What users need to do
Three upgrade actions are called out. Run oma state migrate --runtime to move project-local state, since runtime readers no longer load it. Replace /deepsec with /security in any scripts or habits. Replace oma skills matrix with oma skill matrix. Installation scripts for macOS, Linux and Windows are available through the project's GitHub repository, where the team notes the next priority is tightening the ralph judge so the spawn is verified rather than merely prompted.
Why it matters
A week of five majors with no compatibility aliases is a statement about how this project manages its surface: it trades painless upgrades for a cleaner codebase, and anyone with automation built on the old commands will feel that immediately. The oma-security change is the one that deserves the most attention, because it alters what a security finding means here — evidence is kept and independent validation is required before anything gates a CI run, which raises the bar for how seriously its results can be treated. The candid correction on the ralph judge, admitting that the spawn is prompted rather than independently checked, is the kind of honesty that helps teams calibrate how much they trust an agent framework.
- #cli
- #developer-tools
- #breaking-changes
- #open-source
- #release-notes