Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ One line. No global install, no `npm i -g`. Always use `bunx`:
bunx lazycodex-ai install
```

This is shorthand for `bunx --package oh-my-openagent omo install --platform=codex`. For a fully autonomous, no-TUI setup:
This is shorthand for `bunx --package @code-yeongyu/lazycodex lazycodex install`, which avoids the broken unscoped `lazycodex` registry entry and the unrelated unscoped `omo` package. For a fully autonomous, no-TUI setup:

```bash
bunx lazycodex-ai install --no-tui --codex-autonomous
Expand Down
4 changes: 2 additions & 2 deletions bin/lazycodex-ai.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ const dryRun = args[0] === "--dry-run"
const forwardedArgs = dryRun ? args.slice(1) : args
const commandArgs =
forwardedArgs[0] === "install"
? ["--package", "oh-my-openagent", "omo", "install", "--platform=codex", ...forwardedArgs.slice(1)]
: ["--package", "oh-my-openagent", "omo", ...forwardedArgs]
? ["--package", "@code-yeongyu/lazycodex", "lazycodex", "install", ...forwardedArgs.slice(1)]
: ["--package", "@code-yeongyu/lazycodex", "lazycodex", ...forwardedArgs]

if (dryRun) {
console.log(["bunx", ...commandArgs].join(" "))
Expand Down
2 changes: 1 addition & 1 deletion packages/web/content/docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ One command gets you running. LazyCodex is currently available on OpenCode; the
bunx lazycodex-ai install
```

This is exactly equivalent to `bunx --package oh-my-openagent omo install --platform=codex`.
This is exactly equivalent to `bunx --package @code-yeongyu/lazycodex lazycodex install`, which avoids the broken unscoped `lazycodex` registry entry and the unrelated unscoped `omo` package.

### Autonomous one-liner

Expand Down
2 changes: 1 addition & 1 deletion packages/web/e2e/docs.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ test.describe("docs page — structure", () => {
).toBeVisible()
await expect(
page
.getByText("bunx --package oh-my-openagent omo install --platform=codex", { exact: false })
.getByText("bunx --package @code-yeongyu/lazycodex lazycodex install", { exact: false })
.first(),
).toBeVisible()
})
Expand Down
2 changes: 1 addition & 1 deletion packages/web/lib/docs-content.generated.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// AUTO-GENERATED — do not edit. Run: node ./scripts/generate-docs-content.mjs
export const DOC_SOURCES: Record<string, string> = {
"overview.md": "<p>LazyCodex is the lazy way to get <a href=\"https://github.com/code-yeongyu/oh-my-openagent\">oh-my-openagent</a> (OmO) up and running inside Codex. Think <a href=\"https://github.com/LazyVim/LazyVim\">LazyVim</a> for <a href=\"https://github.com/folke/lazy.nvim\">lazy.nvim</a>, but for Codex.</p>\n<h3>What you get</h3>\n<p>OmO is a full AI dev team in a harness. It gives you discipline agents (Sisyphus orchestrates Hephaestus, Oracle, and Librarian), parallel execution, multi-model routing, a skills system, hooks and lifecycle, and zero-config defaults. LazyCodex wraps the entire setup so you don&#39;t have to think about it.</p>\n<h3>The one-word workflow</h3>\n<p>You don&#39;t need to ultrathink. Just prompt with <code>{your prompt} ultrawork</code>. One word, and every agent activates.</p>\n<h3>How it fits together</h3>\n<p>LazyCodex is a thin distribution layer. The core engine is <a href=\"https://github.com/code-yeongyu/oh-my-openagent\">OmO</a>. LazyCodex is maintained by <a href=\"https://sisyphuslabs.ai\">Sisyphus Labs</a>.</p>\n<ul>\n<li><a href=\"https://github.com/code-yeongyu/lazycodex\">LazyCodex on GitHub</a></li>\n<li><a href=\"https://github.com/code-yeongyu/oh-my-openagent\">OmO on GitHub</a></li>\n</ul>\n",
"installation.md": "<p>One command gets you running. LazyCodex is currently available on OpenCode; the Codex edition is coming June 2026.</p>\n<h3>Install</h3>\n<pre><code class=\"language-bash\">bunx lazycodex-ai install\n</code></pre>\n<p>This is exactly equivalent to <code>bunx --package oh-my-openagent omo install --platform=codex</code>.</p>\n<h3>Autonomous one-liner</h3>\n<pre><code class=\"language-bash\">bunx lazycodex-ai install --no-tui --codex-autonomous\n</code></pre>\n<h3>Prerequisites</h3>\n<ul>\n<li><a href=\"https://bun.sh\">Bun</a></li>\n<li>The <a href=\"https://github.com/openai/codex\">OpenAI Codex CLI</a></li>\n</ul>\n<blockquote>\n<p>Do NOT use <code>npm install -g</code> or <code>bun add -g</code>. Always invoke via <code>bunx</code>.</p>\n</blockquote>\n<h3>Let an agent do it</h3>\n<p>It is strongly recommended to let an LLM agent run the install and walk the setup for you. The agent handles subscription detection, model selection, and provider auth automatically.</p>\n",
"installation.md": "<p>One command gets you running. LazyCodex is currently available on OpenCode; the Codex edition is coming June 2026.</p>\n<h3>Install</h3>\n<pre><code class=\"language-bash\">bunx lazycodex-ai install\n</code></pre>\n<p>This is exactly equivalent to <code>bunx --package @code-yeongyu/lazycodex lazycodex install</code>, which avoids the broken unscoped <code>lazycodex</code> registry entry and the unrelated unscoped <code>omo</code> package.</p>\n<h3>Autonomous one-liner</h3>\n<pre><code class=\"language-bash\">bunx lazycodex-ai install --no-tui --codex-autonomous\n</code></pre>\n<h3>Prerequisites</h3>\n<ul>\n<li><a href=\"https://bun.sh\">Bun</a></li>\n<li>The <a href=\"https://github.com/openai/codex\">OpenAI Codex CLI</a></li>\n</ul>\n<blockquote>\n<p>Do NOT use <code>npm install -g</code> or <code>bun add -g</code>. Always invoke via <code>bunx</code>.</p>\n</blockquote>\n<h3>Let an agent do it</h3>\n<p>It is strongly recommended to let an LLM agent run the install and walk the setup for you. The agent handles subscription detection, model selection, and provider auth automatically.</p>\n",
"ultrawork.md": "<p>ultrawork is the headline mode. Typing <code>ultrawork</code> (or the short alias <code>ulw</code>) anywhere in your prompt activates maximum-precision, outcome-first, evidence-driven orchestration.</p>\n<blockquote>\n<p>&quot;One word. Every agent activates. Doesn&#39;t stop until done.&quot;</p>\n</blockquote>\n<h3>Usage</h3>\n<pre><code class=\"language-bash\">ulw add authentication\n</code></pre>\n<h3>What it enforces</h3>\n<ul>\n<li>Strict TDD: RED → GREEN → SURFACE → CLEAN</li>\n<li>At least 3 realistic QA scenarios</li>\n<li>Real manual-QA channels (HTTP call, tmux, browser)</li>\n<li>A binding verification gate that loops until the work is genuinely done</li>\n</ul>\n",
"ulw-loop.md": "<p><code>$ulw-loop</code> is a self-referential development loop that runs until verified completion.</p>\n<h3>How it works</h3>\n<p>The agent works continuously and emits <code>&lt;promise&gt;DONE&lt;/promise&gt;</code> when it believes the task is complete, but that does NOT end the loop. An Oracle must verify the result first. The loop ends only after the system confirms Oracle verified it. If verification fails, it continues with the message: &quot;Oracle verification failed. Continuing ULTRAWORK loop.&quot;</p>\n<h3>Syntax</h3>\n<pre><code class=\"language-bash\">/ulw-loop &quot;task description&quot; [--completion-promise=TEXT] [--strategy=reset|continue]\n</code></pre>\n<h3>Limits</h3>\n<p>The iteration cap is 500 in ultrawork mode (100 in normal mode).</p>\n",
"ulw-plan.md": "<p><code>$ulw-plan</code> is the strategic planning consultant (Prometheus). It turns an idea into a decision-complete work plan. It is a planner, NOT an implementer. When you say &quot;do X&quot; it produces a plan for X and never writes product code.</p>\n<h3>The flow</h3>\n<ol>\n<li>Socratic interview</li>\n<li>Parallel codebase exploration</li>\n<li>Metis gap analysis</li>\n<li>Writes the plan to <code>plans/&lt;slug&gt;.md</code></li>\n<li>Optional Momus high-accuracy review</li>\n</ol>\n<h3>Output</h3>\n<p>Questions, research, and a work plan you can hand to <a href=\"#start-work\"><code>$start-work</code></a>.</p>\n",
Expand Down
2 changes: 1 addition & 1 deletion packages/web/lib/site-config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export const SITE_CONFIG = {
installCommand: "bunx lazycodex-ai install",
installCommandAutonomous: "bunx lazycodex-ai install --no-tui --codex-autonomous",
installEquivalent: "bunx --package oh-my-openagent omo install --platform=codex",
installEquivalent: "bunx --package @code-yeongyu/lazycodex lazycodex install",
githubUrl: "https://github.com/code-yeongyu/lazycodex",
githubStarsUrl: "https://github.com/code-yeongyu/lazycodex/stargazers",
omoUrl: "https://github.com/code-yeongyu/oh-my-openagent",
Expand Down
2 changes: 1 addition & 1 deletion plugins/omo/components/comment-checker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ node dist/cli.js hook post-tool-use < test/fixtures/post-tool-use.json
## Local Codex Installation

```bash
bunx lazycodex install
bunx lazycodex-ai install
```

The installer builds and copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, installs runtime dependencies there, and enables:
Expand Down
2 changes: 1 addition & 1 deletion plugins/omo/components/lsp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/cli.j
## Local Codex Installation

```bash
bunx lazycodex install
bunx lazycodex-ai install
```

The installer builds and copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, and enables:
Expand Down
2 changes: 1 addition & 1 deletion plugins/omo/components/rules/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ Prefer strict TypeScript and keep runtime imports ESM-compatible.
## Install Locally

```bash
bunx lazycodex install
bunx lazycodex-ai install
```

The local installer builds the plugin and copies a clean cache entry to:
Expand Down
2 changes: 1 addition & 1 deletion plugins/omo/components/ultragoal/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ npm pack --dry-run
## Local Codex Installation

```bash
bunx lazycodex install
bunx lazycodex-ai install
```

The installer builds and copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, installs runtime dependencies there, and enables:
Expand Down
4 changes: 2 additions & 2 deletions plugins/omo/components/ultrawork/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The directive is currently 11,005 chars / 232 lines and follows the GPT-5.5 prom
## Install (via this marketplace)

```bash
bunx lazycodex install
bunx lazycodex-ai install
```

The installer copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, enables `omo@sisyphuslabs` in `~/.codex/config.toml`, registers the `UserPromptSubmit` hook, and installs the bundled agent TOMLs into `~/.codex/agents/` (symlinks on Unix, copies on Windows). A manifest at `<plugin-cache>/.installed-agents.json` records the installed paths for clean uninstall.
Expand Down Expand Up @@ -48,7 +48,7 @@ Expect `<ultrawork-mode>` ... directive body.

## Agent role smoke test

Run `bunx omo install --platform=codex`, then inspect `~/.codex/agents/`. On Linux / macOS you should see symlinks; on Windows you should see file copies. Each TOML should declare a non-empty `name`, `description`, and `developer_instructions`.
Run `bunx lazycodex-ai install`, then inspect `~/.codex/agents/`. On Linux / macOS you should see symlinks; on Windows you should see file copies. Each TOML should declare a non-empty `name`, `description`, and `developer_instructions`.

## License

Expand Down
37 changes: 33 additions & 4 deletions test/lazycodex-ai-bin.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ import { describe, it } from "node:test"
const root = new URL("..", import.meta.url).pathname
const packageJsonPath = join(root, "package.json")
const binPath = join(root, "bin", "lazycodex-ai.js")
const installDocPaths = [
"README.md",
"packages/web/content/docs/installation.md",
"plugins/omo/components/comment-checker/README.md",
"plugins/omo/components/lsp/README.md",
"plugins/omo/components/rules/README.md",
"plugins/omo/components/ultragoal/README.md",
"plugins/omo/components/ultrawork/README.md",
]

describe("lazycodex-ai npm package", () => {
it("maps the package name and bin to lazycodex-ai", () => {
Expand All @@ -23,7 +32,7 @@ describe("lazycodex-ai npm package", () => {
assert.equal(manifest.private, undefined)
})

it("dry-runs install through oh-my-openagent with the Codex platform default", () => {
it("dry-runs install through the scoped LazyCodex package", () => {
// given
assert.equal(existsSync(binPath), true, "lazycodex-ai bin must exist")

Expand All @@ -38,11 +47,11 @@ describe("lazycodex-ai npm package", () => {
assert.equal(result.status, 0, result.stderr)
assert.equal(
result.stdout.trim(),
"bunx --package oh-my-openagent omo install --platform=codex --no-tui --codex-autonomous",
"bunx --package @code-yeongyu/lazycodex lazycodex install --no-tui --codex-autonomous",
)
})

it("dry-runs non-install commands through oh-my-openagent", () => {
it("dry-runs non-install commands through the scoped LazyCodex package", () => {
// given
assert.equal(existsSync(binPath), true, "lazycodex-ai bin must exist")

Expand All @@ -54,6 +63,26 @@ describe("lazycodex-ai npm package", () => {

// then
assert.equal(result.status, 0, result.stderr)
assert.equal(result.stdout.trim(), "bunx --package oh-my-openagent omo doctor")
assert.equal(result.stdout.trim(), "bunx --package @code-yeongyu/lazycodex lazycodex doctor")
})

it("documents the scoped package-backed install path", () => {
for (const docPath of installDocPaths) {
const text = readFileSync(join(root, docPath), "utf8")

assert.equal(text.includes("bunx lazycodex install"), false, `${docPath} must not use broken unscoped lazycodex`)
assert.equal(text.includes("bunx omo install"), false, `${docPath} must not use unrelated unscoped omo`)
assert.equal(
text.includes("bunx --package oh-my-openagent omo"),
false,
`${docPath} must not route through the unsafe unscoped omo bin`,
)
}

const readme = readFileSync(join(root, "README.md"), "utf8")
const installationDoc = readFileSync(join(root, "packages/web/content/docs/installation.md"), "utf8")

assert.equal(readme.includes("bunx --package @code-yeongyu/lazycodex lazycodex install"), true)
assert.equal(installationDoc.includes("bunx --package @code-yeongyu/lazycodex lazycodex install"), true)
})
})