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
@@ -1,6 +1,8 @@
---
name: ultragoal
description: Durable repo-native multi-goal plans with embedded success criteria and evidence audit.
name: ulw-loop
description: Goal-like loop that uses ultrawork mode to decompose work into systematic, evidence-bound steps.
metadata:
short-description: Goal-like ultrawork loop for systematic decomposition
---
## Role
@@ -34,6 +36,45 @@ Auxiliary surfaces (pure CLI stdout / DB state diff / parsed config dump) satisf
Do all three steps before execution. No edits, goal tools, or checkpointing before bootstrap completes.
### 1. Create goals from the brief
Resolve the CLI before the first command. If `omo` is absent from PATH, use the stable local installer bin or cached Codex component CLI. This is the same ultragoal CLI, so PATH absence is not a blocker. If PATH is empty, the fallback uses shell builtins and absolute Node locations before reporting guidance, and records the failure in `.omo/ultragoal/bootstrap-notepad.md`.
```sh
if command -v omo >/dev/null 2>&1; then
ULTRAGOAL_CLI=omo
else
CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
ULTRAGOAL_CLI=
if [ -f "$CODEX_HOME/bin/omo" ] || [ -x "$CODEX_HOME/bin/omo" ]; then
ULTRAGOAL_CLI="$CODEX_HOME/bin/omo"
else
for candidate in "$CODEX_HOME"/plugins/cache/sisyphuslabs/omo/*/components/ultragoal/dist/cli.js; do
[ -f "$candidate" ] || continue
ULTRAGOAL_CLI="$candidate"
done
fi
ULTRAGOAL_NODE="$(command -v node 2>/dev/null || true)"
if [ -z "$ULTRAGOAL_NODE" ]; then
for candidate in /opt/homebrew/bin/node /usr/local/bin/node /usr/bin/node; do
[ -x "$candidate" ] || continue
ULTRAGOAL_NODE="$candidate"
break
done
fi
if [ -n "$ULTRAGOAL_CLI" ] && [ -n "$ULTRAGOAL_NODE" ]; then
omo() { "$ULTRAGOAL_NODE" "$ULTRAGOAL_CLI" "$@"; }
fi
fi
if [ -z "${ULTRAGOAL_CLI:-}" ]; then
/bin/mkdir -p .omo/ultragoal 2>/dev/null || mkdir -p .omo/ultragoal 2>/dev/null || true
NOTE="${NOTE:-.omo/ultragoal/bootstrap-notepad.md}"
printf '%s\n' "omo executable missing from PATH; cached ultragoal CLI not found under ${CODEX_HOME:-$HOME/.codex}." >> "$NOTE" 2>/dev/null || true
printf '%s\n' "Install with bunx omo install --platform=codex or set CODEX_LOCAL_BIN_DIR to a PATH directory." >&2
fi
```
If `ULTRAGOAL_CLI` is empty, open the durable notepad first, record the missing CLI evidence, then surface the installer issue.
Run one form:
```sh
omo ultragoal create-goals --brief "<brief>" --json
@@ -0,0 +1,6 @@
interface:
display_name: "ulw loop"
short_description: "Goal-like ultrawork loop for systematic decomposition"
search_terms:
- "ultragoal"
default_prompt: "Use $ulw-loop to break this work into a systematic ultrawork loop with evidence-backed checkpoints."
@@ -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");