oh-my-agent 20.23.0 → 20.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +17 -112
  2. package/bin/cli-main.js +1003 -973
  3. package/package.json +2 -1
package/README.md CHANGED
@@ -1,14 +1,24 @@
1
- # oh-my-agent: A Specialist Team for the Coding Agent You Already Use
1
+ # oh-my-agent
2
+
3
+ **Ship 400+ commits a day.**
2
4
 
3
5
  [![npm version](https://img.shields.io/npm/v/oh-my-agent?color=cb3837&logo=npm)](https://www.npmjs.com/package/oh-my-agent) [![npm downloads](https://img.shields.io/npm/dm/oh-my-agent?color=cb3837&logo=npm)](https://www.npmjs.com/package/oh-my-agent) [![GitHub stars](https://img.shields.io/github/stars/first-fluke/oh-my-agent?style=flat&logo=github)](https://github.com/first-fluke/oh-my-agent) [![License](https://img.shields.io/github/license/first-fluke/oh-my-agent)](https://github.com/first-fluke/oh-my-agent/blob/main/LICENSE) [![Last Updated](https://img.shields.io/github/last-commit/first-fluke/oh-my-agent?label=updated&logo=git)](https://github.com/first-fluke/oh-my-agent/commits/main)
4
6
 
5
7
  [한국어](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ko.md) | [中文](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.zh.md) | [Português](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.pt.md) | [日本語](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ja.md) | [Français](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.fr.md) | [Español](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.es.md) | [Nederlands](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.nl.md) | [Polski](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.pl.md) | [Русский](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ru.md) | [Deutsch](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.de.md) | [Tiếng Việt](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.vi.md) | [ภาษาไทย](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.th.md)
6
8
 
7
- **oh-my-agent (`oma`) is a vendor-agnostic harness that adds a team of specialists to the coding agent you already use: Claude Code, Codex CLI, Cursor, and 11 more.** A planner breaks the work down, engineers build in parallel, a reviewer checks the result, and a debugger fixes root causes. It also does cited research, slide decks, videos and images. Most steps leave a file you can open, and in the long-running workflows a gate can send the agent back to work until your own `test`, `lint` or `typecheck` script passes.
9
+ oh-my-agent (`oma`) turns Claude Code, Codex CLI, Cursor and 11 other coding agents into a team. A planner splits the work, engineers build in parallel, a reviewer checks the result, and a debugger fixes the root cause.
10
+
11
+ Run this from your project root.
12
+
13
+ ```bash
14
+ curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
15
+ ```
16
+
17
+ Then open your agent and type `/orchestrate build a TODO app with login`.
8
18
 
9
19
  ## Start with your task
10
20
 
11
- Load one skill in your existing coding agent, or install the runtime for project hooks and team workflows.
21
+ Pick a task. Load one skill into the agent you already use, or install the whole team.
12
22
 
13
23
  | Your task | Start here | First request |
14
24
  |---|---|---|
@@ -16,21 +26,13 @@ Load one skill in your existing coding agent, or install the runtime for project
16
26
  | [Design an admin screen](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/tasks/design-admin-ui.md) | `bunx skills use first-fluke/oh-my-agent@oma-design` | "Review the hierarchy and table density of our admin page." |
17
27
  | [Fix a failing test](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/tasks/debug-failing-tests.md) | `bunx skills use first-fluke/oh-my-agent@oma-debug` | "Reproduce this test failure, fix its cause, and run the affected checks." |
18
28
  | Review system boundaries | `bunx skills use first-fluke/oh-my-agent@oma-architecture` | "Review the boundary between our API and worker." |
19
- | Use project hooks, specialist agents, and workflows | [Install the runtime](#install) | "Use oma-scm to inspect this repository's branch and working tree without edits or remote access." |
29
+ | Run the whole team | [Install oma](#install) | `/orchestrate add login to this app` |
20
30
 
21
- Run a `skills use` command through your agent's terminal; it returns the selected instructions and their support directory. These commands load instructions. CLI operations, other skills, project rules, and external services declared by a skill remain separate dependencies. See [Choose a setup](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/getting-started/choose-setup.md) for the available install paths.
22
-
23
- [See a real repair: plugin hooks calling missing files](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/examples/plugin-hook-repair.md). The example links the changed code, the failure cases, and the regression checks.
31
+ Run the `skills use` command in your agent's terminal. It loads that one skill. For the full team with workflows, [install oma](#install). Other options are in [Choose a setup](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/getting-started/choose-setup.md).
24
32
 
25
33
  [![Oh-My-Agent: A 6+1-Layer Harness Architecture](https://github.com/first-fluke/oh-my-agent/raw/main/docs/assets/architecture/oh-my-agent-architecture.png)](https://github.com/first-fluke/oh-my-agent/blob/main/docs/assets/architecture/oh-my-agent-architecture.svg)
26
34
 
27
- For runtime installation, run this from your project root:
28
-
29
- ```bash
30
- curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
31
- ```
32
-
33
- For that runtime installation, run `oma doctor`. [Your first 5 minutes](#your-first-5-minutes) starts with a read-only task before team workflows.
35
+ After installing, run `oma doctor`. [Your first 5 minutes](#your-first-5-minutes) starts with a read-only task before team workflows.
34
36
 
35
37
  ## What you get
36
38
 
@@ -42,11 +44,10 @@ For that runtime installation, run `oma doctor`. [Your first 5 minutes](#your-fi
42
44
  | **21 workflows** | Slash commands from `/brainstorm` and `/plan` to `/review`, `/debug` and `/scm`. Most also start from a plain request (keyword banks in up to 11 languages) | "review this PR" |
43
45
  | **33 skills** | Domain know-how that loads only when a task needs it: UI, APIs, schemas, Terraform, CI, security, git, observability | loads by itself, e.g. "add a Terraform S3 bucket" |
44
46
  | **Files you can open** | Plans, design docs, API contracts, ADRs, bug notes, per-agent results, security evidence, HTML explainers, recaps | `ls .agents/results` |
45
- | **Workflow checks** | In a long-running workflow, your own `test`, `lint` or `typecheck` script must pass before the agent may stop; `oma ralph verify` checks that a `/ralph` run left its plan, QA and refactor files | `/ultrawork …`, then `oma goal set --gate test` |
46
47
  | **Research and content** | Cited search, market research, papers, slide decks, MP4 videos, images, local voice, PDF/HWP to Markdown | `/video`, `/convert` |
47
48
  | **One folder, 14 runtimes** | One portable `.agents/` directory, written into each runtime's own config files | `oma link cursor` |
48
49
 
49
- **[Install](#install)** · **[First 5 minutes](#your-first-5-minutes)** · **[The team](#meet-the-team)** · **[Which workflow?](#how-the-team-works-together)** · **[Everything in the box](#everything-in-the-box)** · **[Works with](#works-with)** · **[Verification](#verification-not-narration)** · **[FAQ](#faq)** · **[Docs](https://firstfluke.com/oh-my-agent/)**
50
+ **[Install](#install)** · **[First 5 minutes](#your-first-5-minutes)** · **[The team](#meet-the-team)** · **[Which workflow?](#how-the-team-works-together)** · **[Everything in the box](#everything-in-the-box)** · **[Works with](#works-with)** · **[FAQ](#faq)** · **[Docs](https://firstfluke.com/oh-my-agent/)**
50
51
 
51
52
  ## Install
52
53
 
@@ -226,35 +227,6 @@ You don't need slash commands. On runtimes with a prompt hook, plain requests (k
226
227
 
227
228
  </details>
228
229
 
229
- ## See it work
230
-
231
- An illustrative `/ultrawork` session. The `[OMA PERSISTENT MODE: ULTRAWORK]` block is the exact format the Stop hook prints; the other lines are paraphrased:
232
-
233
- ```text
234
- you /ultrawork add rate limiting to POST /login
235
- agent runs `oma goal set --gate test`
236
- agent PLAN writes .agents/results/plan-<run-id>.json
237
- agent IMPL -> VERIFY -> REFINE -> SHIP (each review runs in a fresh reviewer session)
238
- agent "Rate limiting added. All tests pass."
239
- oma [OMA PERSISTENT MODE: ULTRAWORK]
240
- Stop gate 'test' FAILED (reinforcement 1/5).
241
- Fix the failures below, then finish the workflow — the stop is allowed only when the gate passes.
242
- --- gate output (tail) ---
243
- FAIL src/auth/login.test.ts > returns 429 after 5 attempts
244
- To abandon instead: delete .agents/state/ultrawork-state-<host-session>.json or say "workflow done".
245
- agent fixes the limiter and stops again
246
- oma `test` exits 0: stop allowed, gate.passed appended to the session log
247
- ```
248
-
249
- Afterwards, `oma state list` finds the session and `oma state get <oma-sid>` (the ID `state list` prints) shows every gate event. Under `/ralph`, `oma ralph verify --json` also checks that the phases left their files behind (output trimmed):
250
-
251
- ```json
252
- { "ok": false,
253
- "missing": [{ "id": "A3", "description": "a distinct QA agent ran (VERIFY phase)",
254
- "pattern": ".agents/state/memories/result-qa*.md or .agents/results/result-qa*.md",
255
- "status": "missing" }] }
256
- ```
257
-
258
230
  ## Everything in the box
259
231
 
260
232
  <details>
@@ -570,73 +542,6 @@ agents:
570
542
 
571
543
  </details>
572
544
 
573
- <a id="verification-not-narration"></a>
574
- ## Verification
575
-
576
- OMA checks the artifacts produced by its workflows. [See it work](#see-it-work) shows the Stop gate in action.
577
-
578
- OMA also records tool-call metadata and payload digests for tracked Claude Code and Codex harness runs, distinguishes reported token usage from estimates, and evaluates skill regressions. These +1 functions span the layers; trace coverage varies by runtime and run.
579
-
580
- Most checks are mechanical. Commands exit with status 0 or another status, and artifacts are either on disk or absent. The prompted judge is the exception. The mechanical checks do not ask an LLM whether the work "looks correct."
581
-
582
- | Mechanism | What it checks | Source |
583
- |-----------|----------------|--------|
584
- | **Stop-hook gate** | During a persistent workflow, `oma goal set --gate test` (or `lint`, `typecheck`) allows the stop when that package.json script exits 0 within 25 s and the code fingerprint stays the same during the check. | [`persistent-mode.ts`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/hooks/core/persistent-mode.ts) |
585
- | **Artifact gate** | `oma ralph verify --json` checks for the phase records, the plan JSON, and result files from a **distinct QA agent** and a **distinct refactor agent**, each bound to recorded agent runs. | [`ralph.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/workflows/ralph.md) |
586
- | **Prompted judge** | Not mechanical: the `/ralph` prompt tells the orchestrator to spawn a fresh-context judge that re-checks **every** criterion each iteration. Nothing checks that the spawn happened. | [`judge-protocol.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/workflows/ralph/resources/judge-protocol.md) |
587
- | **Event log** | In an OMA session, gate passes, gate failures, and decisions append one JSON line each to the session's `events.jsonl`. | [`state-core.ts`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/hooks/core/state-core.ts) · [`event-spec.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/skills/_shared/runtime/event-spec.md) |
588
- | **Per-agent checks** | `oma verify agent <type>` runs Scope Check, Charter Preflight, Hardcoded Secrets, TODO/FIXME Comments, Declared outputs, and TDD Evidence, plus per-type checks such as TypeScript, Any Types, SQL Injection, and tests. | `oma verify agent --help` |
589
-
590
- > **Session event logging.** The Stop hook records gate events under the OMA session opened when the persistent workflow started. Event writes are best-effort. If that session could not be created (stderr shows `[oma] L1 session activation failed`), a failing gate still blocks the stop, but no `gate.failed` line is written. Before you rely on the trail, or demo it, check that `oma state list` shows an active session; `oma state get <sid>` then shows its events.
591
-
592
- Gate events include the checked commit (`head`), whether the tree had changes (`dirty`), and a fingerprint (`treeHash`) of the tracked diff and untracked file names. A change during the check records `gate.failed` with `code changed during gate` and uses one reinforcement. Run `oma goal status --check-fresh` to compare the session's last pass with the current code: it prints `fresh`, `stale (head moved)`, or `stale (tree changed)`, and exits nonzero unless fresh. Use `--session-id <sid>` to select a session explicitly.
593
-
594
- <details>
595
- <summary>Limits, details, and how the Stop hook decides</summary>
596
-
597
- **Limits:**
598
-
599
- - The Stop gate applies only to the persistent workflows (`/orchestrate`, `/work`, `/ultrawork`, `/ralph`). Without `oma goal set --gate`, it only re-prompts the agent to continue. `/ultrawork` tells the agent to set a gate when the project has a cheap check, but nothing enforces it. Run `oma goal set --gate test` yourself if you want to be sure; the other persistent workflows never set one.
600
- - Only the `typecheck`, `test`, and `lint` keywords are accepted, and they run the package.json script of that name. No package.json, or no script with that name, means the gate is not run. Non-JS projects need a package.json wrapper script.
601
- - The fingerprint includes untracked file names, but does not read their contents. Outside Git, or when a snapshot is unavailable, gates still run with null identifiers; freshness checks report unverified. Older events without fingerprints also report unverified.
602
- - The gate releases and logs a failure after 5 reinforcements, 2 hours, or when `--budget-minutes` runs out.
603
- - Budgets: `session.quota_cap` caps tokens, spawn count, and per-vendor tokens; the orchestrator refuses the next spawn when a dimension is exceeded.
604
-
605
- **Artifact gate.** A missing artifact means the phase did not run. The refactor check also passes as `skip-recorded` when the session log records a REFINE skip reason.
606
-
607
- **Prompted judge.** The `/ralph` workflow prompt tells the orchestrator to spawn the judge as a separate agent with fresh context, briefed on the criteria only (never on what the implementer claims it fixed), and to re-verify **every** criterion each iteration, including earlier PASSes, because fixing one criterion can cause another to regress. Nothing checks that the spawn happened: `oma ralph verify` gates the EXEC artifacts, not the judge, and a runtime that cannot spawn subagents is told to judge inline and record `ralph.judge-inline-fallback`. `/ralph` stops after 5 iterations with a partial report.
608
-
609
- **Event log.** Find the session with `oma state list` and read it with `oma state get <sid>`. Each event is stamped with vendor and runtime session id. The file's location depends on `OMA_HOME`, `OMA_STATE_HOME`, `OMA_PROFILE`, and older project-local session folders, so don't hard-code it.
610
-
611
- **Per-agent checks.** Types: `backend`, `frontend`, `mobile`, `qa`, `debug`, `pm`. The command exits 1 when any check fails; TODO/FIXME Comments and Inline Styles only warn.
612
-
613
- <!-- Stack manifests in this list are optional outputs of /stack-set, not shipped files. -->
614
- <!-- oma-docs:ignore-start -->
615
- - `backend`: `<Language> Syntax`, `SQL Injection` (raw SQL patterns), and `<Language> Tests`, from the commands in `stack/stack.yaml`. Without that file (generate it with `/stack-set`) they are skipped.
616
- - `frontend`: the `stack/stack.yaml` syntax and test commands (under `oma-frontend`, or `angular-developer` when that skill is installed), or TypeScript (`tsc --noEmit`) and Frontend Tests (Vitest). Inline Styles and Any Types always run.
617
- - `mobile`: the `stack/stack.yaml` syntax and test commands, or Flutter/Dart Analysis and Flutter Tests.
618
- - `debug`: Python Tests (pytest through uv) or Frontend Tests (Vitest).
619
- - `pm`: PM Plan (the plan file is valid JSON).
620
- - `qa`: no mechanical checks.
621
- <!-- oma-docs:ignore-end -->
622
-
623
- ```mermaid
624
- flowchart TD
625
- S[Agent tries to stop] --> P{Persistent workflow active?}
626
- P -- no --> A[Stop allowed]
627
- P -- yes --> D{User or agent said workflow done?}
628
- D -- yes --> A
629
- D -- no --> R{Budget spent, state older than 2 h, or 5 blocks reached?}
630
- R -- yes --> F[Stop allowed, logged as gate.failed]
631
- R -- no --> G{Gate set and package.json script exists?}
632
- G -- no --> B1[Blocked: workflow still active]
633
- G -- yes --> X{Script exits 0 within 25 s?}
634
- X -- yes --> OK[Stop allowed, logged as gate.passed]
635
- X -- no --> B2[Blocked with output tail, logged as gate.failed]
636
- ```
637
-
638
- </details>
639
-
640
545
  ## FAQ
641
546
 
642
547
  <details>