feat(omo-codex): rework skill set around ulw-loop and planner agents

Rename ultragoal skill to ulw-loop with a CLI bootstrap fallback and
openai.yaml hint metadata, while keeping ultragoal as a discoverable
alias. Drop the metis and momus skills in favor of bundled ultrawork
planner agents and rewrite the planing-prometheustic skill. Update
aggregate and sync-skills tests to match.
This commit is contained in:
YeonGyu-Kim
2026-05-29 11:19:00 +09:00
parent a49acecc3a
commit 5030a116f3
12 changed files with 442 additions and 915 deletions
@@ -77,6 +77,30 @@ describe("skills/ultragoal/SKILL.md", () => {
expect(info.isFile()).toBe(true);
});
it("#given Codex skill hinting #when ultragoal skill metadata is inspected #then ulw-loop is the primary mention name", async () => {
const text = await readText("skills/ultragoal/SKILL.md");
expect(text).toMatch(/^---\nname: ulw-loop\n/m);
expect(text).toContain("Goal-like loop that uses ultrawork mode to decompose work into systematic, evidence-bound steps.");
expect(text).toContain("short-description: Goal-like ultrawork loop for systematic decomposition");
});
it("#given Codex dollar hinting #when querying ulw-loop #then ulw-loop surfaces the ultragoal alias", async () => {
const text = await readText("skills/ultragoal/agents/openai.yaml");
expect(text).toContain('display_name: "ulw loop"');
expect(text).not.toContain("ulw-loop / ultragoal");
expect(text).toContain('short_description: "Goal-like ultrawork loop for systematic decomposition"');
expect(text).toContain("Use $ulw-loop");
});
it("#given Codex dollar hinting #when querying ultragoal #then ultragoal remains discoverable as an alias", async () => {
const text = await readText("skills/ultragoal/agents/openai.yaml");
expect(text).toContain("search_terms:");
expect(text).toContain('- "ultragoal"');
});
it("contains no omx references", async () => {
const text = await readText("skills/ultragoal/SKILL.md");
expect(text.toLowerCase()).not.toContain("omx");
@@ -88,6 +112,23 @@ describe("skills/ultragoal/SKILL.md", () => {
expect(text.toLowerCase()).toContain("record-evidence");
});
it("#given omo is absent from PATH #when bootstrap instructions are read #then local cached CLI fallback is documented", async () => {
const text = await readText("skills/ultragoal/SKILL.md");
expect(text).toContain("If `omo` is absent from PATH");
expect(text).toContain("ULTRAGOAL_CLI");
expect(text).toContain("components/ultragoal/dist/cli.js");
});
it("#given empty PATH #when bootstrap instructions are read #then handles empty PATH without losing notepad bootstrap", async () => {
const text = await readText("skills/ultragoal/SKILL.md");
expect(text).toContain("If PATH is empty");
expect(text).toContain("ULTRAGOAL_NODE");
expect(text).toContain(".omo/ultragoal/bootstrap-notepad.md");
expect(text).not.toContain("ls -1");
});
it("uses the .omo workspace path", async () => {
const text = await readText("skills/ultragoal/SKILL.md");
expect(text).toContain(".omo/ultragoal");