lazycodex-ai 5.0.0-beta.63 → 5.0.0-beta.65

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 (109) hide show
  1. package/dist/cli/index.js +28 -23
  2. package/dist/cli-node/index.js +28 -23
  3. package/package.json +1 -1
  4. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  5. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8 -3
  6. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  7. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  8. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  9. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  10. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  11. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  12. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  15. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  16. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  18. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  20. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  22. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
  24. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  27. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +7 -5
  30. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +7 -2
  31. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +2 -0
  32. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +364 -135
  33. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +6 -0
  34. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +20 -12
  35. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +3 -0
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  40. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  41. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +8 -0
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +1 -0
  43. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +6 -0
  44. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +4 -1
  45. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +6 -3
  46. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  47. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  48. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +8 -4
  49. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +17 -8
  50. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +335 -0
  51. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +109 -10
  52. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +3 -0
  53. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  54. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  55. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  56. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  57. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +6 -6
  58. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  59. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  60. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  61. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  62. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +15 -3
  63. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +2 -0
  64. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -14
  65. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +3 -0
  66. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  67. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  68. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +7 -0
  69. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +7 -0
  70. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +9 -3
  71. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  72. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +8 -4
  73. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +17 -7
  74. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +124 -10
  75. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +3 -0
  76. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  77. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  78. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +7 -6
  79. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  80. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +37 -1
  81. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +33 -4
  82. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  83. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  104. package/packages/omo-codex/plugin/package-lock.json +12 -12
  105. package/packages/omo-codex/plugin/package.json +1 -1
  106. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  107. package/packages/omo-codex/scripts/install-dist/install-local.mjs +10 -5
  108. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -0
  109. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
@@ -0,0 +1,219 @@
1
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+
6
+ import { readUlwLoopPlan } from "../src/plan-io.js";
7
+ import { createAgentToolkit, ULW_LOOP_MANIFEST, type ULW_LOOP_OPERATIONS } from "../src/sdk.js";
8
+
9
+ const workDirs: string[] = [];
10
+ afterEach(async () => {
11
+ for (const dir of workDirs.splice(0)) await rm(dir, { recursive: true, force: true });
12
+ });
13
+
14
+ async function fixture(sessionId: string, surface: "omo-senpi" | "lazycodex" = "omo-senpi") {
15
+ const cwd = await mkdtemp(join(tmpdir(), "ulw-dx-"));
16
+ workDirs.push(cwd);
17
+ const toolkit = createAgentToolkit({ cwd, sessionId, surface });
18
+ const created = await toolkit.createGoals({ brief: "- alpha goal\n- beta goal" });
19
+ if (!created.ok) throw new Error("fixture could not create goals");
20
+ return { cwd, toolkit };
21
+ }
22
+
23
+ describe("help() is self-describing", () => {
24
+ it("#given the manifest #when read #then every operation carries its camelCase method, a description, and an args map", () => {
25
+ const methods: Record<(typeof ULW_LOOP_OPERATIONS)[number], string> = {
26
+ help: "help",
27
+ "create-goals": "createGoals",
28
+ status: "status",
29
+ "complete-goals": "completeGoals",
30
+ checkpoint: "checkpoint",
31
+ steer: "steer",
32
+ "add-goal": "addGoal",
33
+ criteria: "criteria",
34
+ "record-evidence": "recordEvidence",
35
+ "record-review-blockers": "recordReviewBlockers",
36
+ };
37
+ for (const operation of ULW_LOOP_MANIFEST.operations) {
38
+ expect(operation.method).toBe(methods[operation.name]);
39
+ expect(operation.description.length).toBeGreaterThan(20);
40
+ expect(typeof operation.args).toBe("object");
41
+ }
42
+ const record = ULW_LOOP_MANIFEST.operations.find((operation) => operation.name === "record-evidence");
43
+ expect(record?.args).toMatchObject({ goalId: "string", criterionId: "string", evidence: "string" });
44
+ expect(Object.keys(record?.args ?? {})).toEqual(expect.arrayContaining(["status", "notes", "artifacts"]));
45
+ const add = ULW_LOOP_MANIFEST.operations.find((operation) => operation.name === "add-goal");
46
+ expect(Object.keys(add?.args ?? {})).toEqual(expect.arrayContaining(["title", "objective", "successCriteria"]));
47
+ const steer = ULW_LOOP_MANIFEST.operations.find((operation) => operation.name === "steer");
48
+ expect(Object.keys(steer?.args ?? {})).toEqual(
49
+ expect.arrayContaining([
50
+ "kind",
51
+ "source",
52
+ "evidence",
53
+ "rationale",
54
+ "goalId",
55
+ "criterionId",
56
+ "scenario",
57
+ "expectedEvidence",
58
+ ]),
59
+ );
60
+ });
61
+
62
+ it("#given a toolkit #when help() runs #then the result is the manifest", async () => {
63
+ const { toolkit } = await fixture("dx-help");
64
+ const help = await toolkit.help();
65
+ expect(help.ok).toBe(true);
66
+ if (help.ok) expect(help.result.operations.map((operation) => operation.method)).toContain("recordEvidence");
67
+ });
68
+ });
69
+
70
+ describe("addGoal accepts success criteria", () => {
71
+ it("#given explicit successCriteria #when the goal is added #then exactly those criteria persist with sequential ids", async () => {
72
+ const { cwd, toolkit } = await fixture("dx-add-criteria");
73
+ const added = await toolkit.addGoal({
74
+ title: "lane",
75
+ objective: "ship the lane",
76
+ successCriteria: [
77
+ { scenario: "curl -i /health returns 200", expectedEvidence: "status line captured in health.log" },
78
+ {
79
+ scenario: "malformed body returns 400",
80
+ expectedEvidence: "curl transcript",
81
+ userModel: "edge",
82
+ essential: false,
83
+ },
84
+ ],
85
+ });
86
+ expect(added.ok).toBe(true);
87
+ if (!added.ok) return;
88
+ expect(added.result.goal.successCriteria).toEqual([
89
+ expect.objectContaining({
90
+ id: "C001",
91
+ scenario: "curl -i /health returns 200",
92
+ expectedEvidence: "status line captured in health.log",
93
+ userModel: "happy",
94
+ essential: true,
95
+ status: "pending",
96
+ }),
97
+ expect.objectContaining({
98
+ id: "C002",
99
+ scenario: "malformed body returns 400",
100
+ userModel: "edge",
101
+ essential: false,
102
+ status: "pending",
103
+ }),
104
+ ]);
105
+ const plan = await readUlwLoopPlan(cwd, { sessionId: "dx-add-criteria" });
106
+ expect(plan.goals.at(-1)?.successCriteria).toHaveLength(2);
107
+ });
108
+
109
+ it("#given invalid successCriteria #when the goal is added #then the call fails closed with ULW_LOOP_ARGUMENT_INVALID and nothing persists", async () => {
110
+ const { cwd, toolkit } = await fixture("dx-add-invalid");
111
+ const attempts = [
112
+ { successCriteria: [] },
113
+ { successCriteria: [{ scenario: " ", expectedEvidence: "x" }] },
114
+ { successCriteria: [{ scenario: "s", expectedEvidence: "" }] },
115
+ { successCriteria: [{ scenario: "s", expectedEvidence: "e", userModel: "vibes" }] },
116
+ ];
117
+ for (const attempt of attempts) {
118
+ const added = await toolkit.addGoal({
119
+ title: "lane",
120
+ objective: "ship the lane",
121
+ ...(attempt as { successCriteria: never }),
122
+ });
123
+ expect(added.ok).toBe(false);
124
+ if (!added.ok) expect(added.error.code).toBe("ULW_LOOP_ARGUMENT_INVALID");
125
+ }
126
+ const plan = await readUlwLoopPlan(cwd, { sessionId: "dx-add-invalid" });
127
+ expect(plan.goals).toHaveLength(2);
128
+ });
129
+
130
+ it("#given no successCriteria #when the goal is added #then the placeholders name the exact surface call", async () => {
131
+ const senpi = await fixture("dx-add-placeholder", "omo-senpi");
132
+ const added = await senpi.toolkit.addGoal({ title: "lane", objective: "ship the lane" });
133
+ expect(added.ok).toBe(true);
134
+ if (!added.ok) return;
135
+ const placeholder = added.result.goal.successCriteria[0]?.expectedEvidence ?? "";
136
+ expect(placeholder).toContain('agentToolkit.steer({ kind: "revise_criterion"');
137
+ expect(placeholder).toContain(`goalId: "${added.result.goal.id}"`);
138
+ expect(placeholder).toContain('criterionId: "C001"');
139
+ expect(placeholder).toContain("successCriteria");
140
+ expect(placeholder).not.toContain("Replace via revise_criterion with");
141
+
142
+ const codex = await fixture("dx-add-placeholder-cli", "lazycodex");
143
+ const cliAdded = await codex.toolkit.addGoal({ title: "lane", objective: "ship the lane" });
144
+ expect(cliAdded.ok).toBe(true);
145
+ if (cliAdded.ok) {
146
+ expect(cliAdded.result.goal.successCriteria[0]?.expectedEvidence).toContain(
147
+ `omo-agent-toolkit ulw-loop steer --kind revise_criterion --goal-id ${cliAdded.result.goal.id} --criterion-id C001`,
148
+ );
149
+ }
150
+ });
151
+ });
152
+
153
+ describe("recordEvidence binds artifacts", () => {
154
+ it("#given existing artifact paths #when evidence is recorded #then repo-relative paths persist on the criterion and the ledger", async () => {
155
+ const { cwd, toolkit } = await fixture("dx-artifacts");
156
+ await mkdir(join(cwd, "evidence"), { recursive: true });
157
+ await writeFile(join(cwd, "evidence", "gate.log"), "exit 0\n");
158
+ const outside = join(await mkdtemp(join(tmpdir(), "ulw-dx-outside-")), "shot.png");
159
+ workDirs.push(join(outside, ".."));
160
+ await writeFile(outside, "png");
161
+ const started = await toolkit.completeGoals({});
162
+ if (!started.ok || started.operation !== "complete-goals" || "done" in started.result) throw new Error("fixture");
163
+ const goalId = started.result.goal.id;
164
+ const recorded = await toolkit.recordEvidence({
165
+ goalId,
166
+ criterionId: "C001",
167
+ status: "pass",
168
+ evidence: "gate green",
169
+ artifacts: ["evidence/gate.log", join(cwd, "evidence", "gate.log"), outside],
170
+ });
171
+ expect(recorded.ok).toBe(true);
172
+ if (!recorded.ok) return;
173
+ expect(recorded.result.criterion.artifacts).toEqual(["evidence/gate.log", outside]);
174
+ expect(recorded.result.ledgerEntry.artifacts).toEqual(["evidence/gate.log", outside]);
175
+ const ledger = (await readFile(join(cwd, ".omo", "ulw-loop", "dx-artifacts", "ledger.jsonl"), "utf8"))
176
+ .trim()
177
+ .split("\n");
178
+ expect(ledger.at(-1)).toContain('"artifacts":["evidence/gate.log"');
179
+ });
180
+
181
+ it("#given a missing artifact #when evidence is recorded #then it fails with ULW_LOOP_EVIDENCE_ARTIFACT_MISSING naming the path and records nothing", async () => {
182
+ const { cwd, toolkit } = await fixture("dx-artifact-missing");
183
+ const started = await toolkit.completeGoals({});
184
+ if (!started.ok || started.operation !== "complete-goals" || "done" in started.result) throw new Error("fixture");
185
+ const goalId = started.result.goal.id;
186
+ const recorded = await toolkit.recordEvidence({
187
+ goalId,
188
+ criterionId: "C001",
189
+ status: "pass",
190
+ evidence: "gate green",
191
+ artifacts: ["evidence/does-not-exist.log"],
192
+ });
193
+ expect(recorded.ok).toBe(false);
194
+ if (!recorded.ok) {
195
+ expect(recorded.error.code).toBe("ULW_LOOP_EVIDENCE_ARTIFACT_MISSING");
196
+ expect(recorded.error.message).toContain("evidence/does-not-exist.log");
197
+ }
198
+ const plan = await readUlwLoopPlan(cwd, { sessionId: "dx-artifact-missing" });
199
+ expect(plan.goals[0]?.successCriteria[0]?.status).toBe("pending");
200
+ });
201
+ });
202
+
203
+ describe("status() exposes a stable evidence root", () => {
204
+ it("#given a session-scoped plan #when status runs #then evidenceRoot is the plan-level directory beside the moving attempt dir", async () => {
205
+ const { toolkit } = await fixture("dx-evidence-root");
206
+ const before = await toolkit.status();
207
+ expect(before.ok).toBe(true);
208
+ if (before.ok) expect(before.result.evidenceRoot).toBe(".omo/evidence/ulw/dx-evidence-root");
209
+ await toolkit.completeGoals({});
210
+ const after = await toolkit.status();
211
+ expect(after.ok).toBe(true);
212
+ if (after.ok) {
213
+ expect(after.result.evidenceRoot).toBe(".omo/evidence/ulw/dx-evidence-root");
214
+ expect(after.result.currentAttemptDir).toMatch(
215
+ /^\.omo\/evidence\/ulw\/dx-evidence-root\/G001-alpha-goal\/a\d+$/,
216
+ );
217
+ }
218
+ });
219
+ });
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Resetting Git Bash MCP Reminder",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Resetting Git Bash MCP Reminder",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Resetting LSP Diagnostics Cache",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Resetting LSP Diagnostics Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-compact",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Resetting Project Rule Cache",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Resetting Project Rule Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/comment-checker/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 30,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Comments",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Comments",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\comment-checker\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 60,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking LSP Diagnostics",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking LSP Diagnostics",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/teammode/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Thread Title Hygiene",
11
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Thread Title Hygiene",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\teammode\\dist\\cli.js\" hook post-tool-use"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Matching Project Rules",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Matching Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook post-tool-use-spawn",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.63) Recording Spawn Admission",
11
+ "statusMessage": "(OmO 5.0.0-beta.65) Recording Spawn Admission",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook post-tool-use-spawn"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Enforcing Unlimited Goal Budget",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Enforcing Unlimited Goal Budget",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use-spawn",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.63) Guarding Ulw-Loop Spawns",
11
+ "statusMessage": "(OmO 5.0.0-beta.65) Guarding Ulw-Loop Spawns",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use-spawn"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Recommending Git Bash MCP",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Recommending Git Bash MCP",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/scripts/auto-update.mjs\" hook session-start",
9
9
  "timeout": 15,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Auto Update",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Auto Update",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\scripts\\auto-update.mjs\" hook session-start"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Loading Project Rules",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Loading Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/telemetry/dist/cli.js\" hook session-start",
9
9
  "timeout": 15,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Recording Session Telemetry",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Recording Session Telemetry",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\telemetry\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Ulw-Execute Continuation",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Ulw-Execute Continuation",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-execute-continuation\\dist\\cli.js\" hook stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Ulw-Loop Resume",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Ulw-Loop Resume",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Verifying LazyCodex Executor Evidence",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Verifying LazyCodex Executor Evidence",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lazycodex-executor-verify\\dist\\cli.js\" hook subagent-stop"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ultrawork/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Ultrawork Trigger",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Ultrawork Trigger",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ultrawork\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Checking Ulw-Loop Steering",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Checking Ulw-Loop Steering",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.63) Loading Project Rules",
10
+ "statusMessage": "(OmO 5.0.0-beta.65) Loading Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "5.0.0-beta.63",
3
+ "version": "5.0.0-beta.65",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sisyphuslabs/omo-codex-plugin",
9
- "version": "5.0.0-beta.63",
9
+ "version": "5.0.0-beta.65",
10
10
  "workspaces": [
11
11
  "components/comment-checker",
12
12
  "components/git-bash",
@@ -90,7 +90,7 @@
90
90
  },
91
91
  "components/comment-checker": {
92
92
  "name": "@code-yeongyu/codex-comment-checker",
93
- "version": "5.0.0-beta.63",
93
+ "version": "5.0.0-beta.65",
94
94
  "license": "MIT",
95
95
  "bin": {
96
96
  "omo-comment-checker": "dist/cli.js"
@@ -111,7 +111,7 @@
111
111
  },
112
112
  "components/git-bash": {
113
113
  "name": "@sisyphuslabs/codex-git-bash-hook",
114
- "version": "5.0.0-beta.63",
114
+ "version": "5.0.0-beta.65",
115
115
  "bin": {
116
116
  "omo-git-bash-hook": "dist/cli.js"
117
117
  },
@@ -125,7 +125,7 @@
125
125
  },
126
126
  "components/lazycodex-executor-verify": {
127
127
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
128
- "version": "5.0.0-beta.63",
128
+ "version": "5.0.0-beta.65",
129
129
  "license": "MIT",
130
130
  "bin": {
131
131
  "lazycodex-executor-verify": "dist/cli.js"
@@ -142,7 +142,7 @@
142
142
  },
143
143
  "components/lsp": {
144
144
  "name": "@code-yeongyu/codex-lsp",
145
- "version": "5.0.0-beta.63",
145
+ "version": "5.0.0-beta.65",
146
146
  "license": "MIT",
147
147
  "dependencies": {
148
148
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon",
@@ -163,7 +163,7 @@
163
163
  },
164
164
  "components/rules": {
165
165
  "name": "@code-yeongyu/codex-rules",
166
- "version": "5.0.0-beta.63",
166
+ "version": "5.0.0-beta.65",
167
167
  "license": "MIT",
168
168
  "dependencies": {
169
169
  "picomatch": "^4.0.7"
@@ -185,7 +185,7 @@
185
185
  },
186
186
  "components/teammode": {
187
187
  "name": "@sisyphuslabs/codex-teammode",
188
- "version": "5.0.0-beta.63",
188
+ "version": "5.0.0-beta.65",
189
189
  "devDependencies": {
190
190
  "@types/node": "^26.2.0",
191
191
  "bun-types": "^1.4.2",
@@ -198,7 +198,7 @@
198
198
  },
199
199
  "components/telemetry": {
200
200
  "name": "@code-yeongyu/codex-telemetry",
201
- "version": "5.0.0-beta.63",
201
+ "version": "5.0.0-beta.65",
202
202
  "license": "MIT",
203
203
  "bin": {
204
204
  "omo-telemetry": "dist/cli.js"
@@ -216,7 +216,7 @@
216
216
  },
217
217
  "components/ultrawork": {
218
218
  "name": "@code-yeongyu/codex-ultrawork",
219
- "version": "5.0.0-beta.63",
219
+ "version": "5.0.0-beta.65",
220
220
  "license": "MIT",
221
221
  "bin": {
222
222
  "omo-ultrawork": "dist/cli.js"
@@ -234,7 +234,7 @@
234
234
  },
235
235
  "components/ulw-execute-continuation": {
236
236
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
237
- "version": "5.0.0-beta.63",
237
+ "version": "5.0.0-beta.65",
238
238
  "license": "MIT",
239
239
  "bin": {
240
240
  "omo-ulw-execute-continuation": "dist/cli.js"
@@ -251,7 +251,7 @@
251
251
  },
252
252
  "components/ulw-loop": {
253
253
  "name": "@code-yeongyu/codex-ulw-loop",
254
- "version": "5.0.0-beta.63",
254
+ "version": "5.0.0-beta.65",
255
255
  "license": "MIT",
256
256
  "bin": {
257
257
  "omo-ulw-loop": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "5.0.0-beta.63",
3
+ "version": "5.0.0-beta.65",
4
4
  "description": "Aggregate Codex plugin root for OMO components.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -238,6 +238,7 @@ export function buildPlanSkeleton(slug, intent) {
238
238
  **What it will NOT do:** <fill last - 1-3 plain lines mirroring Must NOT have>
239
239
 
240
240
  **Effort:** <Quick | Short | Medium | Large | XL>
241
+ <!-- Effort is exactly ONE band, never hours/days. Quick = single edit, minutes of agent work; Short = one focused change, a few files; Medium = multi-file feature in one session; Large = several waves, one long session; XL = multi-session or architectural work. A written duration is rewritten to a band. -->
241
242
  **Risk:** <Low | Medium | High> - <one-line driver>
242
243
  ${decisionsLine}
243
244
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // omo-codex-install:6df5dbbbb7ca9b9dce86fae98a525a9caa7de96caed85a4b77d4e8b4ab4d1501:9b64e23f577a752e30550d1f643f52fe0f27897bd70bc633db60eb57deab9827
2
+ // omo-codex-install:6df5dbbbb7ca9b9dce86fae98a525a9caa7de96caed85a4b77d4e8b4ab4d1501:f20f519596b4dbe2c151c8b742fc2c8a9320f5a64c07aa347cb162bdb452f229
3
3
  var __esm = (fn, res, err) => () => {
4
4
  if (fn)
5
5
  try {
@@ -7706,7 +7706,7 @@ var package_default;
7706
7706
  var init_package = __esm(() => {
7707
7707
  package_default = {
7708
7708
  name: "@oh-my-opencode/omo-codex",
7709
- version: "5.0.0-beta.63",
7709
+ version: "5.0.0-beta.65",
7710
7710
  type: "module",
7711
7711
  private: true,
7712
7712
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -13004,8 +13004,8 @@ var OmoGitMasterSettingsShape = {
13004
13004
  };
13005
13005
  var OmoGitMasterSettingsLayerSchema = object(OmoGitMasterSettingsShape).partial().strict();
13006
13006
  var OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
13007
- commit_footer: union([boolean2(), string2()]).default(true),
13008
- include_co_authored_by: boolean2().default(true)
13007
+ commit_footer: union([boolean2(), string2()]).default(false),
13008
+ include_co_authored_by: boolean2().default(false)
13009
13009
  }).strict();
13010
13010
 
13011
13011
  // packages/omo-config-core/src/schema/harness.ts
@@ -13408,6 +13408,7 @@ var OmoFormatOnMutationSchema = OmoFormatOnMutationLayerSchema.extend({
13408
13408
 
13409
13409
  // packages/omo-config-core/src/schema/config.ts
13410
13410
  var OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
13411
+ var OmoDisabledSkillsSchema = array(string2());
13411
13412
  var OmoTypedHarnessConfigSchema = object({
13412
13413
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
13413
13414
  categories: OmoCategoriesConfigSchema.optional(),
@@ -13419,7 +13420,8 @@ var OmoTypedHarnessConfigSchema = object({
13419
13420
  model_profiles: OmoModelProfilesLayerSchema.optional(),
13420
13421
  model_profile: string2().optional(),
13421
13422
  memory: OmoMemorySettingsLayerSchema.optional(),
13422
- telemetry: OmoTelemetrySettingsLayerSchema.optional()
13423
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
13424
+ disabled_skills: OmoDisabledSkillsSchema.optional()
13423
13425
  }).strict();
13424
13426
  var OmoConfigProfileSchema = object({
13425
13427
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -13433,6 +13435,7 @@ var OmoConfigProfileSchema = object({
13433
13435
  model_profile: string2().optional(),
13434
13436
  memory: OmoMemorySettingsLayerSchema.optional(),
13435
13437
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
13438
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
13436
13439
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
13437
13440
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
13438
13441
  "[codex]": OmoTypedHarnessConfigSchema.optional()
@@ -13450,6 +13453,7 @@ var OmoConfigSchema = object({
13450
13453
  model_profile: string2().optional(),
13451
13454
  memory: OmoMemorySettingsSchema.optional(),
13452
13455
  telemetry: OmoTelemetrySettingsSchema.optional(),
13456
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
13453
13457
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
13454
13458
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
13455
13459
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -13470,6 +13474,7 @@ var OmoConfigLayerSchema = object({
13470
13474
  model_profile: string2().optional(),
13471
13475
  memory: OmoMemorySettingsLayerSchema.optional(),
13472
13476
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
13477
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
13473
13478
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
13474
13479
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
13475
13480
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -146,6 +146,7 @@ No Metis, no plan file, no execution until the user approves. The UNCLEAR path a
146
146
  # <slug> - Work Plan
147
147
  ## TL;DR (For humans)
148
148
  (What you'll get / Why this approach / What it will NOT do / Effort / Risk / Decisions)
149
+ > Effort is exactly one band - Quick (single edit, minutes of agent work), Short (one focused change, a few files), Medium (multi-file feature in one session), Large (several waves, one long session), XL (multi-session or architectural work). NEVER write hours or days: the counted todo rows are the size signal, and a written duration is rewritten to a band before the user sees the plan.
149
150
  ## Scope
150
151
  ## Verification strategy
151
152
  ## Execution strategy