oh-my-codex-cli 0.1.0
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.
- package/.agent/skills/agent-kb/HOW_TO_USE.md +428 -0
- package/.agent/skills/agent-kb/README.md +46 -0
- package/.agent/skills/agent-kb/SKILL.md +128 -0
- package/.agent/skills/agent-kb/references/intelligent-analysis-explained.md +333 -0
- package/.agent/skills/agent-kb/references/query-optimization.md +225 -0
- package/.agent/skills/aireview/SKILL.md +704 -0
- package/.agent/skills/analyze/SKILL.md +81 -0
- package/.agent/skills/architect-planner/HOW_TO_USE.md +238 -0
- package/.agent/skills/architect-planner/README.md +41 -0
- package/.agent/skills/architect-planner/SKILL.md +539 -0
- package/.agent/skills/auto-mbti/SKILL.md +291 -0
- package/.agent/skills/autopilot/SKILL.md +222 -0
- package/.agent/skills/backend-patterns/SKILL.md +602 -0
- package/.agent/skills/bdd-generator/README.md +78 -0
- package/.agent/skills/bdd-generator/SKILL.md +436 -0
- package/.agent/skills/brainstorming/HOW_TO_USE.md +289 -0
- package/.agent/skills/brainstorming/README.md +41 -0
- package/.agent/skills/brainstorming/SKILL.md +165 -0
- package/.agent/skills/build-fix/SKILL.md +190 -0
- package/.agent/skills/cancel/SKILL.md +658 -0
- package/.agent/skills/checkpoint/SKILL.md +94 -0
- package/.agent/skills/code-review/SKILL.md +273 -0
- package/.agent/skills/coding-standards/SKILL.md +535 -0
- package/.agent/skills/conductor/SKILL.md +128 -0
- package/.agent/skills/conductor/commands/conductor/implement.toml +358 -0
- package/.agent/skills/conductor/commands/conductor/newTrack.toml +142 -0
- package/.agent/skills/conductor/commands/conductor/revert.toml +123 -0
- package/.agent/skills/conductor/commands/conductor/setup.toml +429 -0
- package/.agent/skills/conductor/commands/conductor/status.toml +57 -0
- package/.agent/skills/conductor/scripts/install.sh +89 -0
- package/.agent/skills/conductor/templates/code_styleguides/csharp.md +115 -0
- package/.agent/skills/conductor/templates/code_styleguides/dart.md +238 -0
- package/.agent/skills/conductor/templates/code_styleguides/general.md +23 -0
- package/.agent/skills/conductor/templates/code_styleguides/go.md +48 -0
- package/.agent/skills/conductor/templates/code_styleguides/html-css.md +49 -0
- package/.agent/skills/conductor/templates/code_styleguides/javascript.md +51 -0
- package/.agent/skills/conductor/templates/code_styleguides/python.md +37 -0
- package/.agent/skills/conductor/templates/code_styleguides/typescript.md +43 -0
- package/.agent/skills/conductor/templates/rules/README.md +23 -0
- package/.agent/skills/conductor/templates/rules/agents.md +49 -0
- package/.agent/skills/conductor/templates/rules/coding-style.md +70 -0
- package/.agent/skills/conductor/templates/rules/dev.md +20 -0
- package/.agent/skills/conductor/templates/rules/git-workflow.md +45 -0
- package/.agent/skills/conductor/templates/rules/hooks.md +6 -0
- package/.agent/skills/conductor/templates/rules/patterns.md +55 -0
- package/.agent/skills/conductor/templates/rules/performance.md +47 -0
- package/.agent/skills/conductor/templates/rules/research.md +26 -0
- package/.agent/skills/conductor/templates/rules/review.md +22 -0
- package/.agent/skills/conductor/templates/rules/security.md +36 -0
- package/.agent/skills/conductor/templates/rules/testing.md +30 -0
- package/.agent/skills/conductor/templates/workflow.md +333 -0
- package/.agent/skills/consensus/HOW_TO_USE.md +191 -0
- package/.agent/skills/consensus/README.md +41 -0
- package/.agent/skills/consensus/SKILL.md +317 -0
- package/.agent/skills/content-research-writer/SKILL.md +537 -0
- package/.agent/skills/debug-analysis/SKILL.md +331 -0
- package/.agent/skills/deepinit/SKILL.md +347 -0
- package/.agent/skills/deepsearch/SKILL.md +56 -0
- package/.agent/skills/doctor/SKILL.md +158 -0
- package/.agent/skills/drawio/EXAMPLES.md +382 -0
- package/.agent/skills/drawio/QUICK_START.md +237 -0
- package/.agent/skills/drawio/README.md +315 -0
- package/.agent/skills/drawio/SETUP_GUIDE.md +254 -0
- package/.agent/skills/drawio/SKILL.md +1176 -0
- package/.agent/skills/e2e/SKILL.md +396 -0
- package/.agent/skills/ecomode/SKILL.md +160 -0
- package/.agent/skills/electron-driver/SKILL.md +144 -0
- package/.agent/skills/electron-driver/scripts/driver-template.js +71 -0
- package/.agent/skills/eval/SKILL.md +140 -0
- package/.agent/skills/eval-harness/SKILL.md +242 -0
- package/.agent/skills/evolve/SKILL.md +213 -0
- package/.agent/skills/frontend-design/SKILL.md +42 -0
- package/.agent/skills/frontend-patterns/SKILL.md +646 -0
- package/.agent/skills/frontend-ui-ux/SKILL.md +70 -0
- package/.agent/skills/git-master/SKILL.md +75 -0
- package/.agent/skills/help/SKILL.md +89 -0
- package/.agent/skills/iterative-retrieval/SKILL.md +217 -0
- package/.agent/skills/local-skills-setup/SKILL.md +483 -0
- package/.agent/skills/log-analyzer/SKILL.md +187 -0
- package/.agent/skills/mcp-setup/SKILL.md +226 -0
- package/.agent/skills/multi-model-research/HOW_TO_USE.md +614 -0
- package/.agent/skills/multi-model-research/README.md +233 -0
- package/.agent/skills/multi-model-research/SKILL.md +541 -0
- package/.agent/skills/multi-model-research/references/troubleshooting.md +415 -0
- package/.agent/skills/note/SKILL.md +80 -0
- package/.agent/skills/omc-setup/SKILL.md +219 -0
- package/.agent/skills/orchestrate/SKILL.md +620 -0
- package/.agent/skills/patent-workflow/IMPLEMENTATION_SUMMARY.md +500 -0
- package/.agent/skills/patent-workflow/README.md +455 -0
- package/.agent/skills/patent-workflow/SKILL.md +1036 -0
- package/.agent/skills/patent-workflow/tools/irr_checker.py +260 -0
- package/.agent/skills/patent-workflow/tools/sample_terminology.json +49 -0
- package/.agent/skills/patent-workflow/tools/term_checker.py +355 -0
- package/.agent/skills/pattern-recognition/SKILL.md +792 -0
- package/.agent/skills/pipeline/SKILL.md +448 -0
- package/.agent/skills/plan/SKILL.md +309 -0
- package/.agent/skills/planning-methodology/SKILL.md +370 -0
- package/.agent/skills/planning-with-files/SKILL.md +210 -0
- package/.agent/skills/planning-with-files/examples.md +202 -0
- package/.agent/skills/planning-with-files/reference.md +218 -0
- package/.agent/skills/planning-with-files/scripts/check-complete.ps1 +42 -0
- package/.agent/skills/planning-with-files/scripts/check-complete.sh +44 -0
- package/.agent/skills/planning-with-files/scripts/init-session.ps1 +120 -0
- package/.agent/skills/planning-with-files/scripts/init-session.sh +120 -0
- package/.agent/skills/planning-with-files/scripts/session-catchup.py +208 -0
- package/.agent/skills/planning-with-files/templates/findings.md +95 -0
- package/.agent/skills/planning-with-files/templates/progress.md +114 -0
- package/.agent/skills/planning-with-files/templates/task_plan.md +132 -0
- package/.agent/skills/project-analyze/CLAUDE.md +18 -0
- package/.agent/skills/project-analyze/HOW_TO_USE.md +145 -0
- package/.agent/skills/project-analyze/README.md +42 -0
- package/.agent/skills/project-analyze/SKILL.md +289 -0
- package/.agent/skills/project-analyze/SKILL.md.backup +287 -0
- package/.agent/skills/project-analyze/SKILL.md.backup_20260105_093646 +287 -0
- package/.agent/skills/project-analyze/assets/analysis-report-template.md +433 -0
- package/.agent/skills/project-analyze/references/analysis-patterns.md +422 -0
- package/.agent/skills/project-analyze/references/projectmind-explained.md +535 -0
- package/.agent/skills/project-session-manager/SKILL.md +428 -0
- package/.agent/skills/project-session-manager/lib/config.sh +86 -0
- package/.agent/skills/project-session-manager/lib/parse.sh +121 -0
- package/.agent/skills/project-session-manager/lib/session.sh +132 -0
- package/.agent/skills/project-session-manager/lib/tmux.sh +103 -0
- package/.agent/skills/project-session-manager/lib/worktree.sh +171 -0
- package/.agent/skills/project-session-manager/psm.sh +629 -0
- package/.agent/skills/project-session-manager/templates/feature.md +56 -0
- package/.agent/skills/project-session-manager/templates/issue-fix.md +57 -0
- package/.agent/skills/project-session-manager/templates/pr-review.md +65 -0
- package/.agent/skills/project-session-manager/templates/projects.json +19 -0
- package/.agent/skills/quality-check/HOW_TO_USE.md +171 -0
- package/.agent/skills/quality-check/README.md +50 -0
- package/.agent/skills/quality-check/SKILL.md +240 -0
- package/.agent/skills/quality-check/SKILL.md.backup +238 -0
- package/.agent/skills/quality-check/SKILL.md.backup_20260105_093646 +238 -0
- package/.agent/skills/quality-check/assets/quality-report-template.md +437 -0
- package/.agent/skills/quality-check/references/refactoring-patterns.md +550 -0
- package/.agent/skills/quality-check/references/scoring-criteria.md +454 -0
- package/.agent/skills/quality-validation/SKILL.md +519 -0
- package/.agent/skills/quality-validation/SKILL.md.backup +573 -0
- package/.agent/skills/quality-validation/SKILL.md.backup_20260105_093646 +573 -0
- package/.agent/skills/ralph/SKILL.md +236 -0
- package/.agent/skills/ralph-init/SKILL.md +78 -0
- package/.agent/skills/ralplan/SKILL.md +58 -0
- package/.agent/skills/refactor-clean/SKILL.md +49 -0
- package/.agent/skills/release/SKILL.md +84 -0
- package/.agent/skills/research/SKILL.md +526 -0
- package/.agent/skills/research-methodology/SKILL.md +268 -0
- package/.agent/skills/review/SKILL.md +53 -0
- package/.agent/skills/security-review/SKILL.md +509 -0
- package/.agent/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/.agent/skills/setup-pm/SKILL.md +102 -0
- package/.agent/skills/skill/SKILL.md +424 -0
- package/.agent/skills/skill-create/SKILL.md +209 -0
- package/.agent/skills/skill-debugger/HOW_TO_USE.md +244 -0
- package/.agent/skills/skill-debugger/README.md +44 -0
- package/.agent/skills/skill-debugger/SKILL.md +326 -0
- package/.agent/skills/skill-debugger/diagnostic_checklist.md +115 -0
- package/.agent/skills/skill-development/SKILL.md +661 -0
- package/.agent/skills/skill-development/references/skill-creator-original.md +209 -0
- package/.agent/skills/skill-doc-generator/README.md +37 -0
- package/.agent/skills/skill-doc-generator/SKILL.md +331 -0
- package/.agent/skills/skill-quality-analyzer/HOW_TO_USE.md +243 -0
- package/.agent/skills/skill-quality-analyzer/README.md +61 -0
- package/.agent/skills/skill-quality-analyzer/SKILL.md +247 -0
- package/.agent/skills/skill-quality-analyzer/analyzer.py +209 -0
- package/.agent/skills/skill-quality-analyzer/expected_output.json +81 -0
- package/.agent/skills/skill-quality-analyzer/sample_input.json +9 -0
- package/.agent/skills/skill-tester/README.md +46 -0
- package/.agent/skills/skill-tester/SKILL.md +345 -0
- package/.agent/skills/start-dev/SKILL.md +701 -0
- package/.agent/skills/swarm/SKILL.md +691 -0
- package/.agent/skills/task-kb-lookup/SKILL.md +211 -0
- package/.agent/skills/task-kb-record/SKILL.md +417 -0
- package/.agent/skills/tdd/SKILL.md +446 -0
- package/.agent/skills/tdd-generator/DEMO.md +516 -0
- package/.agent/skills/tdd-generator/README.md +89 -0
- package/.agent/skills/tdd-generator/SKILL.md +278 -0
- package/.agent/skills/tdd-workflow/SKILL.md +424 -0
- package/.agent/skills/test-coverage/SKILL.md +48 -0
- package/.agent/skills/thinkdeep/HOW_TO_USE.md +183 -0
- package/.agent/skills/thinkdeep/README.md +41 -0
- package/.agent/skills/thinkdeep/SKILL.md +343 -0
- package/.agent/skills/ui-ux-pro-max/SKILL.md +228 -0
- package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/skills/ui-ux-pro-max/scripts/core.py +236 -0
- package/.agent/skills/ui-ux-pro-max/scripts/search.py +61 -0
- package/.agent/skills/ultrapilot/SKILL.md +647 -0
- package/.agent/skills/ultraqa/SKILL.md +152 -0
- package/.agent/skills/ultrawork/SKILL.md +123 -0
- package/.agent/skills/update-codemaps/SKILL.md +38 -0
- package/.agent/skills/update-docs/SKILL.md +52 -0
- package/.agent/skills/verification-loop/SKILL.md +140 -0
- package/.agent/skills/verify/SKILL.md +80 -0
- package/.agent/skills/writer-memory/SKILL.md +459 -0
- package/.agent/skills/writer-memory/lib/character-tracker.ts +338 -0
- package/.agent/skills/writer-memory/lib/memory-manager.ts +804 -0
- package/.agent/skills/writer-memory/lib/relationship-graph.ts +400 -0
- package/.agent/skills/writer-memory/lib/scene-organizer.ts +544 -0
- package/.agent/skills/writer-memory/lib/synopsis-builder.ts +339 -0
- package/.agent/skills/writer-memory/templates/synopsis-template.md +46 -0
- package/.governance/skill-lint.allowlist +4 -0
- package/.governance/skill-llm.allowlist +4 -0
- package/AGENTS.md +59 -0
- package/LICENSE +21 -0
- package/README.md +169 -0
- package/README.zh.md +145 -0
- package/bin/omcodex.js +8 -0
- package/commands/conductor/implement.toml +358 -0
- package/commands/conductor/newTrack.toml +142 -0
- package/commands/conductor/revert.toml +123 -0
- package/commands/conductor/setup.toml +429 -0
- package/commands/conductor/status.toml +57 -0
- package/docs/ALIGNMENT.md +40 -0
- package/docs/CODEX.md +133 -0
- package/docs/NOTIFY.md +81 -0
- package/docs/SKILL_GOVERNANCE.md +72 -0
- package/docs/SKILL_GOVERNANCE_FRAMEWORK.md +182 -0
- package/docs/SKILL_GOVERNANCE_FRAMEWORK.zh.md +170 -0
- package/package.json +50 -0
- package/prompts/architect.md +105 -0
- package/prompts/executor.md +134 -0
- package/prompts/planner.md +113 -0
- package/scripts/check-skill-governance.sh +84 -0
- package/scripts/check-skill-llm-governance.js +302 -0
- package/scripts/eval-skills.js +217 -0
- package/scripts/generate-catalog-docs.js +95 -0
- package/scripts/generate-codex-mcp-config.sh +22 -0
- package/scripts/install-codex-force.sh +5 -0
- package/scripts/install-codex-incremental.sh +5 -0
- package/scripts/install-codex.sh +79 -0
- package/scripts/notify-dispatch.js +15 -0
- package/scripts/setup-package-manager.js +137 -0
- package/src/catalog/generated/public-catalog.json +547 -0
- package/src/catalog/manifest.json +542 -0
- package/src/catalog/reader.js +43 -0
- package/src/catalog/schema.js +79 -0
- package/src/cli/doctor.js +62 -0
- package/src/cli/index.js +85 -0
- package/src/cli/notify.js +127 -0
- package/src/cli/route.js +43 -0
- package/src/cli/setup.js +155 -0
- package/src/cli/team.js +125 -0
- package/src/config/generator.js +119 -0
- package/src/mcp/memory-server.js +241 -0
- package/src/mcp/state-server.js +112 -0
- package/src/mcp/trace-server.js +168 -0
- package/src/notify/dispatch.js +74 -0
- package/src/notify/extensibility/dispatcher.js +113 -0
- package/src/notify/extensibility/events.js +15 -0
- package/src/notify/extensibility/loader.js +54 -0
- package/src/router/skill-router.js +90 -0
- package/src/team/auto-advance.js +72 -0
- package/src/team/orchestrator.js +82 -0
- package/src/team/state-store.js +33 -0
- package/src/utils/paths.js +33 -0
- package/templates/AGENTS.md +15 -0
- package/templates/catalog-manifest.json +542 -0
- package/templates/code_styleguides/csharp.md +115 -0
- package/templates/code_styleguides/dart.md +238 -0
- package/templates/code_styleguides/general.md +23 -0
- package/templates/code_styleguides/go.md +48 -0
- package/templates/code_styleguides/html-css.md +49 -0
- package/templates/code_styleguides/javascript.md +51 -0
- package/templates/code_styleguides/python.md +37 -0
- package/templates/code_styleguides/typescript.md +43 -0
- package/templates/rules/README.md +23 -0
- package/templates/rules/agents.md +49 -0
- package/templates/rules/coding-style.md +70 -0
- package/templates/rules/dev.md +20 -0
- package/templates/rules/git-workflow.md +45 -0
- package/templates/rules/notify.md +6 -0
- package/templates/rules/patterns.md +55 -0
- package/templates/rules/performance.md +47 -0
- package/templates/rules/research.md +26 -0
- package/templates/rules/review.md +22 -0
- package/templates/rules/security.md +36 -0
- package/templates/rules/testing.md +30 -0
- package/templates/workflow.md +333 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synopsis Builder - 정서 중심 시놉시스 생성기
|
|
3
|
+
*
|
|
4
|
+
* Korean writers think: emotion → relationship → event → plot
|
|
5
|
+
* NOT plot-first!
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { loadMemory, saveMemory, now } from './memory-manager';
|
|
9
|
+
import type { WriterMemory, Character, Relationship, Scene, SynopsisState } from './memory-manager';
|
|
10
|
+
|
|
11
|
+
// === Synopsis Generation ===
|
|
12
|
+
|
|
13
|
+
export function generateSynopsis(options?: {
|
|
14
|
+
protagonist?: string;
|
|
15
|
+
format?: 'full' | 'brief' | 'pitch';
|
|
16
|
+
}): string | null {
|
|
17
|
+
const memory = loadMemory();
|
|
18
|
+
if (!memory) return null;
|
|
19
|
+
|
|
20
|
+
const format = options?.format || 'full';
|
|
21
|
+
const protagonist = options?.protagonist;
|
|
22
|
+
|
|
23
|
+
const attitude = extractProtagonistAttitude(memory, protagonist);
|
|
24
|
+
const relationships = extractCoreRelationships(memory, protagonist);
|
|
25
|
+
const theme = extractEmotionalTheme(memory);
|
|
26
|
+
const genreContrast = extractGenreVsEmotion(memory);
|
|
27
|
+
const aftertaste = extractEndingAftertaste(memory);
|
|
28
|
+
|
|
29
|
+
switch (format) {
|
|
30
|
+
case 'brief':
|
|
31
|
+
return formatBriefSynopsis(attitude, relationships, theme, memory);
|
|
32
|
+
case 'pitch':
|
|
33
|
+
return formatPitchSynopsis(attitude, relationships, theme, genreContrast, memory);
|
|
34
|
+
default:
|
|
35
|
+
return formatFullSynopsis(attitude, relationships, theme, genreContrast, aftertaste, memory);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// === 5 Essential Element Extractors ===
|
|
40
|
+
|
|
41
|
+
function findProtagonist(memory: WriterMemory, name?: string): Character | null {
|
|
42
|
+
const chars = Object.values(memory.characters);
|
|
43
|
+
if (name) {
|
|
44
|
+
return chars.find(c => c.name === name || c.aliases?.includes(name)) || null;
|
|
45
|
+
}
|
|
46
|
+
return chars[0] || null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function extractProtagonistAttitude(memory: WriterMemory, protagonistName?: string): string {
|
|
50
|
+
const protagonist = findProtagonist(memory, protagonistName);
|
|
51
|
+
|
|
52
|
+
if (!protagonist) {
|
|
53
|
+
return '⚠️ 주인공 정보 없음. 캐릭터를 먼저 등록하세요.';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const parts: string[] = [];
|
|
57
|
+
if (protagonist.arc) parts.push(protagonist.arc);
|
|
58
|
+
if (protagonist.attitude) parts.push(protagonist.attitude);
|
|
59
|
+
|
|
60
|
+
if (parts.length === 0) {
|
|
61
|
+
return `⚠️ ${protagonist.name}의 태도 정보 미입력. arc와 attitude 필드를 채우세요.`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return parts.join('. ');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function extractCoreRelationships(memory: WriterMemory, protagonistName?: string): string {
|
|
68
|
+
const protagonist = findProtagonist(memory, protagonistName);
|
|
69
|
+
|
|
70
|
+
if (!protagonist) {
|
|
71
|
+
return '⚠️ 주인공 정보 없음.';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const rels = memory.relationships.filter(
|
|
75
|
+
r => r.from === protagonist.name || r.to === protagonist.name
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
if (rels.length === 0) {
|
|
79
|
+
return `⚠️ ${protagonist.name} 중심의 관계 정보 없음. 관계를 등록하세요.`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return rels.map(r => {
|
|
83
|
+
const other = r.from === protagonist.name ? r.to : r.from;
|
|
84
|
+
return `${protagonist.name}-${other}: ${r.dynamic || r.type}`;
|
|
85
|
+
}).join('\n');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function extractEmotionalTheme(memory: WriterMemory): string {
|
|
89
|
+
if (memory.themes.length === 0) {
|
|
90
|
+
return '⚠️ 테마 정보 없음. 작품의 정서적 주제를 입력하세요.';
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return memory.themes.map(t => t.description || t.name).join('. ');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function extractGenreVsEmotion(memory: WriterMemory): string {
|
|
97
|
+
const synopsis = memory.synopsis;
|
|
98
|
+
if (synopsis?.genreVsRealEmotion) {
|
|
99
|
+
return synopsis.genreVsRealEmotion;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const genre = memory.project.genre || '미지정';
|
|
103
|
+
return `장르: ${genre}. 실제 정서: 미정의. genreVsRealEmotion 필드를 입력하세요.`;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function extractEndingAftertaste(memory: WriterMemory): string {
|
|
107
|
+
const synopsis = memory.synopsis;
|
|
108
|
+
if (synopsis?.endingAftertaste) {
|
|
109
|
+
return synopsis.endingAftertaste;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return '❌ 엔딩 정서 잔상 미입력. synopsis update endingAftertaste "..." 로 추가하세요.';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// === Synopsis State Management ===
|
|
116
|
+
|
|
117
|
+
export function saveSynopsisState(state: SynopsisState): boolean {
|
|
118
|
+
const memory = loadMemory();
|
|
119
|
+
if (!memory) return false;
|
|
120
|
+
|
|
121
|
+
memory.synopsis = { ...state, lastGenerated: now() };
|
|
122
|
+
return saveMemory(memory);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function loadSynopsisState(): SynopsisState | null {
|
|
126
|
+
const memory = loadMemory();
|
|
127
|
+
return memory?.synopsis || null;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function updateSynopsisElement(element: keyof SynopsisState, value: string): boolean {
|
|
131
|
+
const memory = loadMemory();
|
|
132
|
+
if (!memory) return false;
|
|
133
|
+
|
|
134
|
+
memory.synopsis = memory.synopsis || {
|
|
135
|
+
protagonistAttitude: '',
|
|
136
|
+
coreRelationships: '',
|
|
137
|
+
emotionalTheme: '',
|
|
138
|
+
genreVsRealEmotion: '',
|
|
139
|
+
endingAftertaste: ''
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
(memory.synopsis as any)[element] = value;
|
|
143
|
+
memory.synopsis.lastGenerated = now();
|
|
144
|
+
return saveMemory(memory);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// === Format Functions ===
|
|
148
|
+
|
|
149
|
+
export function formatFullSynopsis(
|
|
150
|
+
attitude: string,
|
|
151
|
+
relationships: string,
|
|
152
|
+
theme: string,
|
|
153
|
+
genreContrast: string,
|
|
154
|
+
aftertaste: string,
|
|
155
|
+
memory: WriterMemory
|
|
156
|
+
): string {
|
|
157
|
+
const projectName = memory.project.name || '제목 미정';
|
|
158
|
+
const chars = Object.values(memory.characters);
|
|
159
|
+
const charList = chars.map(c => `- **${c.name}**: ${c.attitude || c.arc || '설명 없음'}`).join('\n');
|
|
160
|
+
const emotionFlow = memory.scenes
|
|
161
|
+
.filter(s => s.emotionTags?.length > 0)
|
|
162
|
+
.map(s => s.emotionTags[0])
|
|
163
|
+
.join(' → ') || '아직 정의되지 않음';
|
|
164
|
+
|
|
165
|
+
return `═══════════════════════════════
|
|
166
|
+
시놉시스: ${projectName}
|
|
167
|
+
═══════════════════════════════
|
|
168
|
+
|
|
169
|
+
## 1. 주인공의 태도
|
|
170
|
+
${attitude}
|
|
171
|
+
|
|
172
|
+
## 2. 관계의 핵심 구도
|
|
173
|
+
${relationships}
|
|
174
|
+
|
|
175
|
+
## 3. 정서적 테마
|
|
176
|
+
${theme}
|
|
177
|
+
|
|
178
|
+
## 4. 장르와 실제 감정의 거리
|
|
179
|
+
${genreContrast}
|
|
180
|
+
|
|
181
|
+
## 5. 엔딩이 남기는 잔상
|
|
182
|
+
${aftertaste}
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
**등장인물**:
|
|
186
|
+
${charList || '(등장인물 없음)'}
|
|
187
|
+
|
|
188
|
+
**장면 수**: ${memory.scenes.length}개
|
|
189
|
+
|
|
190
|
+
**감정 흐름**: ${emotionFlow}
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export function formatBriefSynopsis(
|
|
195
|
+
attitude: string,
|
|
196
|
+
relationships: string,
|
|
197
|
+
theme: string,
|
|
198
|
+
memory: WriterMemory
|
|
199
|
+
): string {
|
|
200
|
+
const chars = Object.values(memory.characters);
|
|
201
|
+
const protagonist = chars[0];
|
|
202
|
+
const name = protagonist?.name || '주인공';
|
|
203
|
+
|
|
204
|
+
return `${name}은 ${attitude.split('.')[0]}. ${theme.split('.')[0]}을 통해 ${relationships.split('\n')[0] || '관계를 형성하며'} 변화한다.`;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function formatPitchSynopsis(
|
|
208
|
+
attitude: string,
|
|
209
|
+
relationships: string,
|
|
210
|
+
theme: string,
|
|
211
|
+
genreContrast: string,
|
|
212
|
+
memory: WriterMemory
|
|
213
|
+
): string {
|
|
214
|
+
const projectName = memory.project.name || '이 이야기';
|
|
215
|
+
const chars = Object.values(memory.characters);
|
|
216
|
+
const protagonist = chars[0];
|
|
217
|
+
const name = protagonist?.name || '주인공';
|
|
218
|
+
|
|
219
|
+
return `${projectName}는 ${attitude.split('.')[0]} ${name}이 ${theme.split('.')[0]}을 깨닫는 이야기. ${genreContrast.split('.')[0]}.`;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// === Checklist ===
|
|
223
|
+
|
|
224
|
+
export interface ChecklistItem {
|
|
225
|
+
element: string;
|
|
226
|
+
elementKr: string;
|
|
227
|
+
status: 'complete' | 'partial' | 'missing';
|
|
228
|
+
source: string;
|
|
229
|
+
suggestion: string;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export function getSynopsisChecklist(memory: WriterMemory): ChecklistItem[] {
|
|
233
|
+
const chars = Object.values(memory.characters);
|
|
234
|
+
const protagonist = chars[0];
|
|
235
|
+
|
|
236
|
+
const checklist: ChecklistItem[] = [];
|
|
237
|
+
|
|
238
|
+
// 1. Protagonist Attitude
|
|
239
|
+
const hasArc = protagonist?.arc ? true : false;
|
|
240
|
+
const hasAttitude = protagonist?.attitude ? true : false;
|
|
241
|
+
checklist.push({
|
|
242
|
+
element: 'protagonistAttitude',
|
|
243
|
+
elementKr: '주인공 태도 요약',
|
|
244
|
+
status: hasArc && hasAttitude ? 'complete' : hasArc || hasAttitude ? 'partial' : 'missing',
|
|
245
|
+
source: protagonist ? `캐릭터 '${protagonist.name}'에서 추출` : '주인공 없음',
|
|
246
|
+
suggestion: hasArc && hasAttitude ? '' : 'char update <name> arc "..." attitude "..."'
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// 2. Core Relationships
|
|
250
|
+
const relCount = protagonist ? memory.relationships.filter(
|
|
251
|
+
r => r.from === protagonist.name || r.to === protagonist.name
|
|
252
|
+
).length : 0;
|
|
253
|
+
checklist.push({
|
|
254
|
+
element: 'coreRelationships',
|
|
255
|
+
elementKr: '관계 핵심 구도',
|
|
256
|
+
status: relCount >= 2 ? 'complete' : relCount === 1 ? 'partial' : 'missing',
|
|
257
|
+
source: `관계 ${relCount}개 등록됨`,
|
|
258
|
+
suggestion: relCount >= 2 ? '' : 'rel add <from> <to> <type>'
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// 3. Emotional Theme
|
|
262
|
+
checklist.push({
|
|
263
|
+
element: 'emotionalTheme',
|
|
264
|
+
elementKr: '정서적 테마',
|
|
265
|
+
status: memory.themes.length > 0 ? 'complete' : 'missing',
|
|
266
|
+
source: `테마 ${memory.themes.length}개 등록됨`,
|
|
267
|
+
suggestion: memory.themes.length > 0 ? '' : 'theme add <name>'
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// 4. Genre vs Emotion
|
|
271
|
+
const hasGenreContrast = memory.synopsis?.genreVsRealEmotion ? true : false;
|
|
272
|
+
checklist.push({
|
|
273
|
+
element: 'genreVsEmotion',
|
|
274
|
+
elementKr: '장르와 실제 감정의 거리',
|
|
275
|
+
status: hasGenreContrast ? 'complete' : 'missing',
|
|
276
|
+
source: hasGenreContrast ? '명시적으로 입력됨' : '미입력',
|
|
277
|
+
suggestion: hasGenreContrast ? '' : 'synopsis update genreVsRealEmotion "..."'
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// 5. Ending Aftertaste
|
|
281
|
+
const hasAftertaste = memory.synopsis?.endingAftertaste ? true : false;
|
|
282
|
+
checklist.push({
|
|
283
|
+
element: 'endingAftertaste',
|
|
284
|
+
elementKr: '엔딩 정서 잔상',
|
|
285
|
+
status: hasAftertaste ? 'complete' : 'missing',
|
|
286
|
+
source: hasAftertaste ? '명시적으로 입력됨' : '미입력',
|
|
287
|
+
suggestion: hasAftertaste ? '' : 'synopsis update endingAftertaste "..."'
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
return checklist;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// === Export ===
|
|
294
|
+
|
|
295
|
+
export function exportSynopsisAsMarkdown(): string {
|
|
296
|
+
const memory = loadMemory();
|
|
297
|
+
if (!memory) return '# Error: No memory found';
|
|
298
|
+
|
|
299
|
+
const synopsis = generateSynopsis({ format: 'full' });
|
|
300
|
+
if (!synopsis) return '# Error: Could not generate synopsis';
|
|
301
|
+
|
|
302
|
+
const meta = `---
|
|
303
|
+
project: ${memory.project.name || 'Untitled'}
|
|
304
|
+
genre: ${memory.project.genre || 'Unspecified'}
|
|
305
|
+
generated: ${new Date().toISOString()}
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
`;
|
|
309
|
+
|
|
310
|
+
return meta + synopsis;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export function exportSynopsisAsJSON(): object {
|
|
314
|
+
const memory = loadMemory();
|
|
315
|
+
if (!memory) return { error: 'No memory found' };
|
|
316
|
+
|
|
317
|
+
const checklist = getSynopsisChecklist(memory);
|
|
318
|
+
|
|
319
|
+
return {
|
|
320
|
+
metadata: {
|
|
321
|
+
project: memory.project.name,
|
|
322
|
+
genre: memory.project.genre,
|
|
323
|
+
generated: new Date().toISOString()
|
|
324
|
+
},
|
|
325
|
+
elements: {
|
|
326
|
+
protagonistAttitude: extractProtagonistAttitude(memory),
|
|
327
|
+
coreRelationships: extractCoreRelationships(memory),
|
|
328
|
+
emotionalTheme: extractEmotionalTheme(memory),
|
|
329
|
+
genreVsEmotion: extractGenreVsEmotion(memory),
|
|
330
|
+
endingAftertaste: extractEndingAftertaste(memory)
|
|
331
|
+
},
|
|
332
|
+
checklist,
|
|
333
|
+
formats: {
|
|
334
|
+
full: generateSynopsis({ format: 'full' }),
|
|
335
|
+
brief: generateSynopsis({ format: 'brief' }),
|
|
336
|
+
pitch: generateSynopsis({ format: 'pitch' })
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 시놉시스: {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
> 장르: {{GENRE}} | 최종 업데이트: {{DATE}}
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 주인공의 태도 (Protagonist Attitude)
|
|
8
|
+
|
|
9
|
+
{{PROTAGONIST_ATTITUDE}}
|
|
10
|
+
|
|
11
|
+
## 2. 관계의 핵심 구도 (Core Relationships)
|
|
12
|
+
|
|
13
|
+
{{CORE_RELATIONSHIPS}}
|
|
14
|
+
|
|
15
|
+
## 3. 정서적 테마 (Emotional Theme)
|
|
16
|
+
|
|
17
|
+
{{EMOTIONAL_THEME}}
|
|
18
|
+
|
|
19
|
+
## 4. 장르와 실제 감정의 거리 (Genre vs Real Emotion)
|
|
20
|
+
|
|
21
|
+
{{GENRE_VS_EMOTION}}
|
|
22
|
+
|
|
23
|
+
## 5. 엔딩이 남기는 잔상 (Ending Aftertaste)
|
|
24
|
+
|
|
25
|
+
{{ENDING_AFTERTASTE}}
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 부록
|
|
30
|
+
|
|
31
|
+
### 등장인물
|
|
32
|
+
|
|
33
|
+
{{CHARACTER_LIST}}
|
|
34
|
+
|
|
35
|
+
### 장면 흐름
|
|
36
|
+
|
|
37
|
+
{{SCENE_FLOW}}
|
|
38
|
+
|
|
39
|
+
### 감정 궤도
|
|
40
|
+
|
|
41
|
+
{{EMOTION_ARC}}
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
*이 시놉시스는 writer-memory 시스템에 의해 자동 생성되었습니다.*
|
|
46
|
+
*플롯이 아닌 감정 설계도 기반의 시놉시스입니다.*
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!-- Generated: 2026-01-31 | Updated: 2026-01-31 -->
|
|
2
|
+
|
|
3
|
+
# oh-my-codex
|
|
4
|
+
|
|
5
|
+
Skill pack and workflow orchestration for **OpenAI Codex CLI**.
|
|
6
|
+
|
|
7
|
+
**Version:** 0.1.0
|
|
8
|
+
**Purpose:** Make Codex behave like a multi-agent conductor using structured skills
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
oh-my-codex enhances Codex with:
|
|
13
|
+
- **Execution modes** (autopilot, ultrawork, ralph, ultrapilot, swarm, pipeline, ecomode)
|
|
14
|
+
- **Quality workflows** (plan, review, ultraqa, security-review, tdd)
|
|
15
|
+
- **Reusable skills** for research, diagnosis, and development flows
|
|
16
|
+
|
|
17
|
+
## Key Files
|
|
18
|
+
|
|
19
|
+
| File | Description |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| `README.md` | Entry point documentation |
|
|
22
|
+
| `docs/CODEX.md` | Codex-specific install and usage guide |
|
|
23
|
+
| `.agent/skills/` | All Codex skill definitions |
|
|
24
|
+
| `scripts/install-codex.sh` | Global skill installer |
|
|
25
|
+
|
|
26
|
+
## For AI Agents
|
|
27
|
+
|
|
28
|
+
### Skill Invocation
|
|
29
|
+
|
|
30
|
+
Codex auto-loads skills from:
|
|
31
|
+
- `~/.codex/skills/<skill>/SKILL.md`
|
|
32
|
+
- `<repo>/.codex/skills/<skill>/SKILL.md`
|
|
33
|
+
|
|
34
|
+
When the user mentions a skill name or uses `$skill`, you should follow that skill.
|
|
35
|
+
|
|
36
|
+
### Source-of-Truth Workflow (Mandatory)
|
|
37
|
+
|
|
38
|
+
For this repository, **`oh-my-codex` is the single source of truth** for skills and docs.
|
|
39
|
+
|
|
40
|
+
Required order:
|
|
41
|
+
1. Edit and validate files in this repo first (for example `.agent/skills/**/SKILL.md`).
|
|
42
|
+
2. Commit/push repository changes.
|
|
43
|
+
3. Install/sync to runtime using installer scripts (for example `scripts/install-codex.sh` / `scripts/install-codex-force.sh`).
|
|
44
|
+
|
|
45
|
+
Do **not** use `~/.codex/skills` as the primary editing location.
|
|
46
|
+
Direct edits under `~/.codex/skills` are temporary at most, and must be immediately backported to repo before considering work complete.
|
|
47
|
+
|
|
48
|
+
### Compatibility Notes
|
|
49
|
+
|
|
50
|
+
Codex does **not** support Claude Code plugins, interception lifecycle APIs, or HUD. Any mention of:
|
|
51
|
+
- Claude Code plugin commands
|
|
52
|
+
- `.claude/` plugin cache paths
|
|
53
|
+
- Claude Code-specific CLI commands
|
|
54
|
+
|
|
55
|
+
…should be treated as **legacy** references from the original oh-my-claudecode.
|
|
56
|
+
|
|
57
|
+
### Testing
|
|
58
|
+
|
|
59
|
+
No mandatory tests. If you change scripts, run a quick shell check.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Yeachan Heo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
English | [简体中文](README.zh.md)
|
|
2
|
+
|
|
3
|
+
# oh-my-codex
|
|
4
|
+
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
**Codex skill pack with runtime setup tooling.**
|
|
8
|
+
|
|
9
|
+
*Less prompt‑tuning, more shipping.*
|
|
10
|
+
|
|
11
|
+
Inspired by **oh‑my‑claudecode**, rebuilt for **Codex architecture**, and informed by:
|
|
12
|
+
**oh‑my‑opencode**, **everything‑claude‑code**.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
**From npm (global)**
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g oh-my-codex-cli
|
|
21
|
+
omcodex setup
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**From npm (one-off)**
|
|
25
|
+
```bash
|
|
26
|
+
npx oh-my-codex-cli setup
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Recommended (runtime setup)**
|
|
30
|
+
```bash
|
|
31
|
+
npm run setup:omcodex
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Compatibility scripts**
|
|
35
|
+
```bash
|
|
36
|
+
./scripts/install-codex.sh --all
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Force overwrite:
|
|
40
|
+
```bash
|
|
41
|
+
./scripts/install-codex-force.sh --all
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Incremental (skip existing files):
|
|
45
|
+
```bash
|
|
46
|
+
./scripts/install-codex-incremental.sh --all
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Installs:
|
|
50
|
+
- **Skills** → `~/.codex/skills/`
|
|
51
|
+
- **Role prompts** → `~/.codex/prompts/`
|
|
52
|
+
- **Rules** → `~/.codex/rules/`
|
|
53
|
+
- **MCP config + Plan mode** → `~/.codex/config.toml`
|
|
54
|
+
|
|
55
|
+
**Project‑local**
|
|
56
|
+
```bash
|
|
57
|
+
./scripts/install-codex.sh --all --project
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## What You Get
|
|
63
|
+
|
|
64
|
+
- **Execution modes**: `autopilot`, `ralph`, `ultrawork`, `ultraqa`, `ultrapilot`, `swarm`, `pipeline`, `ecomode`
|
|
65
|
+
- **Planning & QA**: `plan`, `review`, `analyze`, `tdd`, `code-review`, `security-review`, `build-fix`, `verify`, `eval`
|
|
66
|
+
- **Role prompt catalog**: `architect`, `planner`, `executor` (installed under `.codex/prompts/`)
|
|
67
|
+
- **Learning & context**: `continuous-learning`, `strategic-compact`, `iterative-retrieval`, `verification-loop`
|
|
68
|
+
- **Native subagent orchestration**: `spawn_agent` + `send_input` + `wait` + `close_agent` patterns across core skills
|
|
69
|
+
- **Setup runtime**: `omcodex setup` scope-aware installer and `omcodex doctor` health checks
|
|
70
|
+
- **Team state runtime**: `omcodex team start/status/advance/cancel` for staged execution state
|
|
71
|
+
- **Auto skill routing**: `omcodex route "<task>"` recommends the best-fit skills with confidence
|
|
72
|
+
- **Event-driven team auto-advance**: `omcodex team start "<task>" --auto` advances phases from notify events
|
|
73
|
+
- **Local MCP runtime surfaces**: `omcodex_state`, `omcodex_memory`, `omcodex_trace` servers wired by setup
|
|
74
|
+
- **Rules & guardrails**: coding, security, testing, performance, git workflow
|
|
75
|
+
- **Plan mode enabled** (Codex 0.9+)
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Notify Positioning
|
|
80
|
+
|
|
81
|
+
Codex does not provide Claude Code style interception lifecycle support (for example pre/post tool interception).
|
|
82
|
+
|
|
83
|
+
In this project, extensions are event-driven and built on top of Codex notifications (`notify`), not execution interception.
|
|
84
|
+
|
|
85
|
+
Use the notify extension workflow:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
omcodex notify init
|
|
89
|
+
omcodex notify status
|
|
90
|
+
omcodex notify validate
|
|
91
|
+
OMX_NOTIFY_PLUGINS=1 omcodex notify test
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Codex vs Claude Code (High‑Level)
|
|
97
|
+
|
|
98
|
+
| Capability | Claude Code (oh‑my‑claudecode) | Codex (oh‑my‑codex) |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| Skills‑based workflows | ✅ | ✅ (primary) |
|
|
101
|
+
| Native subagent execution | ✅ | ✅ |
|
|
102
|
+
| Plan Mode | ⚠️ plugin‑driven | ✅ native (0.9+ with config) |
|
|
103
|
+
| MCP support | ✅ | ✅ (config.toml / CLI) |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Typical Use Cases
|
|
108
|
+
|
|
109
|
+
- **Ship a feature fast** → `autopilot: add OAuth login + tests`
|
|
110
|
+
- **Relentless completion** → `ralph: refactor auth until tests pass`
|
|
111
|
+
- **High‑throughput thinking** → `ultrawork: fix all lint + type errors`
|
|
112
|
+
- **Quality loop** → `ultraqa: run tests and fix until green`
|
|
113
|
+
- **Planning only** → `plan: design a scalable API for X`
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Rules (Templates)
|
|
118
|
+
|
|
119
|
+
Rules are optional guardrails you can copy to `.codex/rules/`:
|
|
120
|
+
- `agents.md`, `coding-style.md`, `git-workflow.md`, `notify.md`
|
|
121
|
+
- `patterns.md`, `performance.md`, `security.md`, `testing.md`
|
|
122
|
+
- `dev.md`, `research.md`, `review.md`
|
|
123
|
+
|
|
124
|
+
Install rules automatically:
|
|
125
|
+
```bash
|
|
126
|
+
./scripts/install-codex.sh --rules
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Skill Governance
|
|
132
|
+
|
|
133
|
+
Run the governance gate before shipping skill changes:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm run governance:skills
|
|
137
|
+
npm run governance:skills:llm
|
|
138
|
+
npm run eval:skills
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
This command enforces the skill documentation baseline by blocking:
|
|
142
|
+
- Legacy slash command patterns (for example `Run: /verify`)
|
|
143
|
+
- Plugin-only runtime instructions (for example `cc --plugin-dir`)
|
|
144
|
+
- Legacy task API syntax (`Task(...)`-style examples)
|
|
145
|
+
|
|
146
|
+
See `docs/SKILL_GOVERNANCE.md` for policy, blockers, and debt tracking.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
## Quick Start
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
autopilot: build a REST API for managing tasks
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Docs
|
|
160
|
+
|
|
161
|
+
- `docs/CODEX.md`
|
|
162
|
+
- `docs/ALIGNMENT.md`
|
|
163
|
+
- `docs/NOTIFY.md`
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## License
|
|
168
|
+
|
|
169
|
+
MIT
|