odd-studio 3.3.0 → 3.3.2

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "odd-studio",
3
3
  "description": "Outcome-Driven Development — a planning and build harness for domain experts building serious software with AI. Installs the /odd skill, safety hooks, and project scaffolding into Claude Code.",
4
- "version": "3.3.0",
4
+ "version": "3.3.2",
5
5
  "author": {
6
6
  "name": "ODD Studio"
7
7
  },
package/README.md CHANGED
@@ -45,6 +45,9 @@ npx odd-studio init my-project --agent codex
45
45
  cd my-project
46
46
  ```
47
47
 
48
+ In Codex, ODD Studio is installed as a project-local plugin with visible plugin commands. After restarting Codex, type `/odd`.
49
+ Once inside `/odd`, the same starred flow works there too, including commands like `*plan`, `*build`, and `*status`. You can also invoke the direct Codex commands such as `/odd-build`.
50
+
48
51
  ### For Claude Code and OpenCode on the same machine
49
52
 
50
53
  ```bash
@@ -154,6 +157,7 @@ ODD Studio installs safety gates that run automatically throughout your build. T
154
157
  **Claude Code:** Implemented as shell hooks registered in `.claude/settings.local.json` (project-local).
155
158
  **OpenCode:** Implemented as a JS plugin (`odd-studio-plugin.js`) in `.opencode/plugins/` (project-local).
156
159
  **Codex:** Implemented as a project-local plugin in `plugins/odd-studio/` with `hooks.json` and plugin-local skills.
160
+ It also installs Codex plugin commands so `/odd` is directly discoverable in the composer.
157
161
 
158
162
  ---
159
163
 
@@ -238,6 +242,7 @@ my-project/
238
242
  ├── .agents/plugins/marketplace.json ← Codex local marketplace registration
239
243
  ├── plugins/odd-studio/ ← Codex project-local plugin
240
244
  │ ├── .codex-plugin/plugin.json ← Codex plugin manifest
245
+ │ ├── commands/odd.md ← Codex /odd command entrypoint
241
246
  │ ├── skills/ ← ODD Studio skills for Codex
242
247
  │ ├── hooks/odd-studio.sh ← Safety gate hook script
243
248
  │ ├── hooks.json ← Codex hook registration
package/bin/odd-studio.js CHANGED
@@ -15,7 +15,7 @@ import { registerUninstall } from './commands/uninstall.js';
15
15
  const __filename = fileURLToPath(import.meta.url);
16
16
  const __dirname = path.dirname(__filename);
17
17
  const require = createRequire(import.meta.url);
18
- const pkg = require('../package.json'); // v3.3.0
18
+ const pkg = require('../package.json'); // v3.3.2
19
19
 
20
20
  const PACKAGE_ROOT = path.resolve(__dirname, '..');
21
21
  const deps = { PACKAGE_ROOT, print };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odd-studio",
3
- "version": "3.3.0",
3
+ "version": "3.3.2",
4
4
  "description": "Outcome-Driven Development planning and build harness for domain experts building serious software with AI.",
5
5
  "author": {
6
6
  "name": "ODD Studio"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odd-studio",
3
- "version": "3.3.0",
3
+ "version": "3.3.2",
4
4
  "description": "Outcome-Driven Development for AI coding agents — a planning and build harness for domain experts building serious software with AI. Works with Claude Code, OpenCode, and Codex.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { COMMANDS } from './command-definitions.js';
5
+ import { CODEX_PLUGIN_NAME } from './assets.js';
6
+
7
+ const CODEX_ODD_ROOT = `plugins/${CODEX_PLUGIN_NAME}/skills/odd/`;
8
+
9
+ export default async function installCodexCommands(pluginDest) {
10
+ const commandsDest = path.join(pluginDest, 'commands');
11
+ await fs.ensureDir(commandsDest);
12
+
13
+ for (const cmd of COMMANDS) {
14
+ const content = cmd.source
15
+ ? buildMainCommand(cmd)
16
+ : buildSubcommand(cmd);
17
+ await fs.writeFile(path.join(commandsDest, `${cmd.name}.md`), content);
18
+ }
19
+
20
+ return { destination: commandsDest, commandCount: COMMANDS.length };
21
+ }
22
+
23
+ function buildMainCommand(cmd) {
24
+ return [
25
+ '---',
26
+ `description: "${cmd.description}"`,
27
+ '---',
28
+ '',
29
+ '# /odd',
30
+ '',
31
+ 'You are now operating as the ODD Studio coach.',
32
+ '',
33
+ 'Read this file now:',
34
+ `- \`${CODEX_ODD_ROOT}SKILL.md\` — the full ODD Studio coach`,
35
+ '',
36
+ 'Then execute the startup state check exactly as documented.',
37
+ '',
38
+ ].join('\n');
39
+ }
40
+
41
+ function buildSubcommand(cmd) {
42
+ return [
43
+ '---',
44
+ `description: "${cmd.description}"`,
45
+ '---',
46
+ '',
47
+ `# /${cmd.name}`,
48
+ '',
49
+ rewriteBody(cmd.body),
50
+ '',
51
+ ].join('\n');
52
+ }
53
+
54
+ function rewriteBody(body) {
55
+ return body.replace(/`\.opencode\/odd\//g, `\`${CODEX_ODD_ROOT}`);
56
+ }
@@ -6,6 +6,7 @@ import {
6
6
  CODEX_PLUGIN_NAME,
7
7
  ODD_HOOK_FILE,
8
8
  } from './assets.js';
9
+ import installCodexCommands from './install-codex-commands.js';
9
10
 
10
11
  const PLUGIN_RELATIVE_PATH = `./plugins/${CODEX_PLUGIN_NAME}`;
11
12
  const MARKETPLACE_ENTRY = {
@@ -33,6 +34,7 @@ export default async function setupCodexPlugin(packageRoot, targetDir) {
33
34
 
34
35
  await fs.copy(pluginSource, pluginDest, { overwrite: true });
35
36
  await installCodexSkills(skillSource, pluginDest);
37
+ await installCodexCommands(pluginDest);
36
38
  await installCodexHook(hookSource, pluginDest);
37
39
  const marketplaceUpdated = await updateMarketplace(targetDir);
38
40
 
package/skill/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "odd"
3
- version: "3.3.0"
3
+ version: "3.3.2"
4
4
  description: "Outcome-Driven Development planning and build coach. Use /odd to start or resume an ODD project — building personas, writing outcomes, mapping contracts, creating a Master Implementation Plan, and directing a odd-flow-powered build. Designed for domain experts who are not developers. Works with Claude Code, OpenCode, and Codex."
5
5
  ---
6
6
 
@@ -35,7 +35,7 @@ Display this when no existing state is found:
35
35
 
36
36
  ---
37
37
 
38
- Welcome to ODD Studio v3.3.0.
38
+ Welcome to ODD Studio v3.3.2.
39
39
 
40
40
  You are about to plan and build something real — using a methodology called Outcome-Driven Development. Before we write a single line of code, we are going to get precise about three things:
41
41
 
@@ -59,7 +59,7 @@ Display this when existing state is found. Replace the bracketed values with act
59
59
 
60
60
  ---
61
61
 
62
- Welcome back to ODD Studio v3.3.0.
62
+ Welcome back to ODD Studio v3.3.2.
63
63
 
64
64
  **Project:** [project.name]
65
65
  **Current Phase:** [state.currentPhase]