@laitszkin/apollo-toolkit 2.0.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.
Files changed (204) hide show
  1. package/AGENTS.md +62 -0
  2. package/CHANGELOG.md +100 -0
  3. package/LICENSE +21 -0
  4. package/README.md +144 -0
  5. package/align-project-documents/SKILL.md +94 -0
  6. package/align-project-documents/agents/openai.yaml +4 -0
  7. package/analyse-app-logs/LICENSE +21 -0
  8. package/analyse-app-logs/README.md +126 -0
  9. package/analyse-app-logs/SKILL.md +121 -0
  10. package/analyse-app-logs/agents/openai.yaml +4 -0
  11. package/analyse-app-logs/references/investigation-checklist.md +58 -0
  12. package/analyse-app-logs/references/log-signal-patterns.md +52 -0
  13. package/answering-questions-with-research/SKILL.md +46 -0
  14. package/answering-questions-with-research/agents/openai.yaml +4 -0
  15. package/bin/apollo-toolkit.js +7 -0
  16. package/commit-and-push/LICENSE +21 -0
  17. package/commit-and-push/README.md +26 -0
  18. package/commit-and-push/SKILL.md +70 -0
  19. package/commit-and-push/agents/openai.yaml +4 -0
  20. package/commit-and-push/references/branch-naming.md +15 -0
  21. package/commit-and-push/references/commit-messages.md +19 -0
  22. package/deep-research-topics/LICENSE +21 -0
  23. package/deep-research-topics/README.md +43 -0
  24. package/deep-research-topics/SKILL.md +84 -0
  25. package/deep-research-topics/agents/openai.yaml +4 -0
  26. package/develop-new-features/LICENSE +21 -0
  27. package/develop-new-features/README.md +52 -0
  28. package/develop-new-features/SKILL.md +105 -0
  29. package/develop-new-features/agents/openai.yaml +4 -0
  30. package/develop-new-features/references/testing-e2e.md +35 -0
  31. package/develop-new-features/references/testing-integration.md +42 -0
  32. package/develop-new-features/references/testing-property-based.md +44 -0
  33. package/develop-new-features/references/testing-unit.md +37 -0
  34. package/discover-edge-cases/CHANGELOG.md +19 -0
  35. package/discover-edge-cases/LICENSE +21 -0
  36. package/discover-edge-cases/README.md +87 -0
  37. package/discover-edge-cases/SKILL.md +124 -0
  38. package/discover-edge-cases/agents/openai.yaml +4 -0
  39. package/discover-edge-cases/references/architecture-edge-cases.md +41 -0
  40. package/discover-edge-cases/references/code-edge-cases.md +46 -0
  41. package/docs-to-voice/.env.example +106 -0
  42. package/docs-to-voice/CHANGELOG.md +71 -0
  43. package/docs-to-voice/LICENSE +21 -0
  44. package/docs-to-voice/README.md +118 -0
  45. package/docs-to-voice/SKILL.md +107 -0
  46. package/docs-to-voice/agents/openai.yaml +4 -0
  47. package/docs-to-voice/scripts/docs_to_voice.py +1385 -0
  48. package/docs-to-voice/scripts/docs_to_voice.sh +11 -0
  49. package/docs-to-voice/tests/test_docs_to_voice_api_max_chars.py +210 -0
  50. package/docs-to-voice/tests/test_docs_to_voice_sentence_timeline.py +115 -0
  51. package/docs-to-voice/tests/test_docs_to_voice_settings.py +43 -0
  52. package/docs-to-voice/tests/test_docs_to_voice_speech_rate.py +57 -0
  53. package/enhance-existing-features/CHANGELOG.md +35 -0
  54. package/enhance-existing-features/LICENSE +21 -0
  55. package/enhance-existing-features/README.md +54 -0
  56. package/enhance-existing-features/SKILL.md +120 -0
  57. package/enhance-existing-features/agents/openai.yaml +4 -0
  58. package/enhance-existing-features/references/e2e-tests.md +25 -0
  59. package/enhance-existing-features/references/integration-tests.md +30 -0
  60. package/enhance-existing-features/references/property-based-tests.md +33 -0
  61. package/enhance-existing-features/references/unit-tests.md +29 -0
  62. package/feature-propose/LICENSE +21 -0
  63. package/feature-propose/README.md +23 -0
  64. package/feature-propose/SKILL.md +107 -0
  65. package/feature-propose/agents/openai.yaml +4 -0
  66. package/feature-propose/references/enhancement-features.md +25 -0
  67. package/feature-propose/references/important-features.md +25 -0
  68. package/feature-propose/references/mvp-features.md +25 -0
  69. package/feature-propose/references/performance-features.md +25 -0
  70. package/financial-research/SKILL.md +208 -0
  71. package/financial-research/agents/openai.yaml +4 -0
  72. package/financial-research/assets/weekly_market_report_template.md +45 -0
  73. package/fix-github-issues/SKILL.md +98 -0
  74. package/fix-github-issues/agents/openai.yaml +4 -0
  75. package/fix-github-issues/scripts/list_issues.py +148 -0
  76. package/fix-github-issues/tests/test_list_issues.py +127 -0
  77. package/generate-spec/LICENSE +21 -0
  78. package/generate-spec/README.md +61 -0
  79. package/generate-spec/SKILL.md +96 -0
  80. package/generate-spec/agents/openai.yaml +4 -0
  81. package/generate-spec/references/templates/checklist.md +78 -0
  82. package/generate-spec/references/templates/spec.md +55 -0
  83. package/generate-spec/references/templates/tasks.md +35 -0
  84. package/generate-spec/scripts/create-specs +123 -0
  85. package/harden-app-security/CHANGELOG.md +27 -0
  86. package/harden-app-security/LICENSE +21 -0
  87. package/harden-app-security/README.md +46 -0
  88. package/harden-app-security/SKILL.md +127 -0
  89. package/harden-app-security/agents/openai.yaml +4 -0
  90. package/harden-app-security/references/agent-attack-catalog.md +117 -0
  91. package/harden-app-security/references/common-software-attack-catalog.md +168 -0
  92. package/harden-app-security/references/red-team-extreme-scenarios.md +81 -0
  93. package/harden-app-security/references/risk-checklist.md +78 -0
  94. package/harden-app-security/references/security-test-patterns-agent.md +101 -0
  95. package/harden-app-security/references/security-test-patterns-finance.md +88 -0
  96. package/harden-app-security/references/test-snippets.md +73 -0
  97. package/improve-observability/SKILL.md +114 -0
  98. package/improve-observability/agents/openai.yaml +4 -0
  99. package/learn-skill-from-conversations/CHANGELOG.md +15 -0
  100. package/learn-skill-from-conversations/LICENSE +22 -0
  101. package/learn-skill-from-conversations/README.md +47 -0
  102. package/learn-skill-from-conversations/SKILL.md +85 -0
  103. package/learn-skill-from-conversations/agents/openai.yaml +4 -0
  104. package/learn-skill-from-conversations/scripts/extract_recent_conversations.py +369 -0
  105. package/learn-skill-from-conversations/tests/test_extract_recent_conversations.py +176 -0
  106. package/learning-error-book/SKILL.md +112 -0
  107. package/learning-error-book/agents/openai.yaml +4 -0
  108. package/learning-error-book/assets/error_book_template.md +66 -0
  109. package/learning-error-book/scripts/render_markdown_to_pdf.py +367 -0
  110. package/lib/cli.js +338 -0
  111. package/lib/installer.js +225 -0
  112. package/maintain-project-constraints/SKILL.md +109 -0
  113. package/maintain-project-constraints/agents/openai.yaml +4 -0
  114. package/maintain-skill-catalog/README.md +18 -0
  115. package/maintain-skill-catalog/SKILL.md +66 -0
  116. package/maintain-skill-catalog/agents/openai.yaml +4 -0
  117. package/novel-to-short-video/CHANGELOG.md +53 -0
  118. package/novel-to-short-video/LICENSE +21 -0
  119. package/novel-to-short-video/README.md +63 -0
  120. package/novel-to-short-video/SKILL.md +233 -0
  121. package/novel-to-short-video/agents/openai.yaml +4 -0
  122. package/novel-to-short-video/references/plan-template.md +71 -0
  123. package/novel-to-short-video/references/roles-json.md +41 -0
  124. package/open-github-issue/LICENSE +21 -0
  125. package/open-github-issue/README.md +97 -0
  126. package/open-github-issue/SKILL.md +119 -0
  127. package/open-github-issue/agents/openai.yaml +4 -0
  128. package/open-github-issue/scripts/open_github_issue.py +380 -0
  129. package/open-github-issue/tests/test_open_github_issue.py +159 -0
  130. package/open-source-pr-workflow/CHANGELOG.md +32 -0
  131. package/open-source-pr-workflow/LICENSE +21 -0
  132. package/open-source-pr-workflow/README.md +23 -0
  133. package/open-source-pr-workflow/SKILL.md +123 -0
  134. package/open-source-pr-workflow/agents/openai.yaml +4 -0
  135. package/openai-text-to-image-storyboard/.env.example +10 -0
  136. package/openai-text-to-image-storyboard/CHANGELOG.md +49 -0
  137. package/openai-text-to-image-storyboard/LICENSE +21 -0
  138. package/openai-text-to-image-storyboard/README.md +99 -0
  139. package/openai-text-to-image-storyboard/SKILL.md +107 -0
  140. package/openai-text-to-image-storyboard/agents/openai.yaml +4 -0
  141. package/openai-text-to-image-storyboard/scripts/generate_storyboard_images.py +763 -0
  142. package/package.json +36 -0
  143. package/record-spending/SKILL.md +113 -0
  144. package/record-spending/agents/openai.yaml +4 -0
  145. package/record-spending/references/account-format.md +33 -0
  146. package/record-spending/references/workbook-layout.md +84 -0
  147. package/resolve-review-comments/SKILL.md +122 -0
  148. package/resolve-review-comments/agents/openai.yaml +4 -0
  149. package/resolve-review-comments/references/adoption-criteria.md +23 -0
  150. package/resolve-review-comments/scripts/review_threads.py +425 -0
  151. package/resolve-review-comments/tests/test_review_threads.py +74 -0
  152. package/review-change-set/LICENSE +21 -0
  153. package/review-change-set/README.md +55 -0
  154. package/review-change-set/SKILL.md +103 -0
  155. package/review-change-set/agents/openai.yaml +4 -0
  156. package/review-codebases/LICENSE +21 -0
  157. package/review-codebases/README.md +67 -0
  158. package/review-codebases/SKILL.md +109 -0
  159. package/review-codebases/agents/openai.yaml +4 -0
  160. package/scripts/install_skills.ps1 +283 -0
  161. package/scripts/install_skills.sh +262 -0
  162. package/scripts/validate_openai_agent_config.py +194 -0
  163. package/scripts/validate_skill_frontmatter.py +110 -0
  164. package/specs-to-project-docs/LICENSE +21 -0
  165. package/specs-to-project-docs/README.md +57 -0
  166. package/specs-to-project-docs/SKILL.md +111 -0
  167. package/specs-to-project-docs/agents/openai.yaml +4 -0
  168. package/specs-to-project-docs/references/templates/architecture.md +29 -0
  169. package/specs-to-project-docs/references/templates/configuration.md +29 -0
  170. package/specs-to-project-docs/references/templates/developer-guide.md +33 -0
  171. package/specs-to-project-docs/references/templates/docs-index.md +39 -0
  172. package/specs-to-project-docs/references/templates/features.md +25 -0
  173. package/specs-to-project-docs/references/templates/getting-started.md +38 -0
  174. package/specs-to-project-docs/references/templates/readme.md +49 -0
  175. package/systematic-debug/LICENSE +21 -0
  176. package/systematic-debug/README.md +81 -0
  177. package/systematic-debug/SKILL.md +59 -0
  178. package/systematic-debug/agents/openai.yaml +4 -0
  179. package/text-to-short-video/.env.example +36 -0
  180. package/text-to-short-video/LICENSE +21 -0
  181. package/text-to-short-video/README.md +82 -0
  182. package/text-to-short-video/SKILL.md +221 -0
  183. package/text-to-short-video/agents/openai.yaml +4 -0
  184. package/text-to-short-video/scripts/enforce_video_aspect_ratio.py +350 -0
  185. package/version-release/CHANGELOG.md +53 -0
  186. package/version-release/LICENSE +21 -0
  187. package/version-release/README.md +28 -0
  188. package/version-release/SKILL.md +94 -0
  189. package/version-release/agents/openai.yaml +4 -0
  190. package/version-release/references/branch-naming.md +15 -0
  191. package/version-release/references/changelog-writing.md +8 -0
  192. package/version-release/references/commit-messages.md +19 -0
  193. package/version-release/references/readme-writing.md +12 -0
  194. package/version-release/references/semantic-versioning.md +12 -0
  195. package/video-production/CHANGELOG.md +104 -0
  196. package/video-production/LICENSE +18 -0
  197. package/video-production/README.md +68 -0
  198. package/video-production/SKILL.md +213 -0
  199. package/video-production/agents/openai.yaml +4 -0
  200. package/video-production/references/plan-template.md +54 -0
  201. package/video-production/references/roles-json.md +41 -0
  202. package/weekly-financial-event-report/SKILL.md +195 -0
  203. package/weekly-financial-event-report/agents/openai.yaml +4 -0
  204. package/weekly-financial-event-report/assets/financial_event_report_template.md +53 -0
@@ -0,0 +1,225 @@
1
+ const fs = require('node:fs');
2
+ const fsp = require('node:fs/promises');
3
+ const os = require('node:os');
4
+ const path = require('node:path');
5
+
6
+ const VALID_MODES = ['codex', 'openclaw', 'trae'];
7
+ const COPY_FILES = new Set(['AGENTS.md', 'CHANGELOG.md', 'LICENSE', 'README.md', 'package.json']);
8
+ const COPY_DIRS = new Set(['scripts']);
9
+
10
+ function resolveHomeDirectory(env = process.env) {
11
+ return env.HOME || env.USERPROFILE || os.homedir();
12
+ }
13
+
14
+ function resolveToolkitHome(env = process.env) {
15
+ if (env.APOLLO_TOOLKIT_HOME) {
16
+ return path.resolve(env.APOLLO_TOOLKIT_HOME);
17
+ }
18
+
19
+ return path.join(resolveHomeDirectory(env), '.apollo-toolkit');
20
+ }
21
+
22
+ function normalizeModes(inputModes) {
23
+ const modes = [];
24
+
25
+ for (const rawMode of inputModes) {
26
+ const mode = String(rawMode).toLowerCase();
27
+ if (mode === 'all') {
28
+ for (const candidate of VALID_MODES) {
29
+ if (!modes.includes(candidate)) {
30
+ modes.push(candidate);
31
+ }
32
+ }
33
+ continue;
34
+ }
35
+
36
+ if (!VALID_MODES.includes(mode)) {
37
+ throw new Error(`Invalid mode: ${rawMode}`);
38
+ }
39
+
40
+ if (!modes.includes(mode)) {
41
+ modes.push(mode);
42
+ }
43
+ }
44
+
45
+ return modes;
46
+ }
47
+
48
+ async function listSkillNames(rootDir) {
49
+ const entries = await fsp.readdir(rootDir, { withFileTypes: true });
50
+ const skillNames = [];
51
+
52
+ for (const entry of entries) {
53
+ if (!entry.isDirectory()) {
54
+ continue;
55
+ }
56
+
57
+ if (fs.existsSync(path.join(rootDir, entry.name, 'SKILL.md'))) {
58
+ skillNames.push(entry.name);
59
+ }
60
+ }
61
+
62
+ return skillNames.sort();
63
+ }
64
+
65
+ function shouldCopyEntry(sourceRoot, entry) {
66
+ if (entry.isFile()) {
67
+ return COPY_FILES.has(entry.name);
68
+ }
69
+
70
+ if (!entry.isDirectory()) {
71
+ return false;
72
+ }
73
+
74
+ if (COPY_DIRS.has(entry.name)) {
75
+ return true;
76
+ }
77
+
78
+ return fs.existsSync(path.join(sourceRoot, entry.name, 'SKILL.md'));
79
+ }
80
+
81
+ async function stageToolkitContents({ sourceRoot, destinationRoot, version }) {
82
+ const entries = await fsp.readdir(sourceRoot, { withFileTypes: true });
83
+ const copiedEntries = [];
84
+
85
+ await fsp.mkdir(destinationRoot, { recursive: true });
86
+
87
+ for (const entry of entries) {
88
+ if (!shouldCopyEntry(sourceRoot, entry)) {
89
+ continue;
90
+ }
91
+
92
+ const sourcePath = path.join(sourceRoot, entry.name);
93
+ const destinationPath = path.join(destinationRoot, entry.name);
94
+ await fsp.cp(sourcePath, destinationPath, { recursive: true, force: true });
95
+ copiedEntries.push(entry.name);
96
+ }
97
+
98
+ const metadata = {
99
+ version,
100
+ installedAt: new Date().toISOString(),
101
+ source: 'npm-package',
102
+ };
103
+ await fsp.writeFile(
104
+ path.join(destinationRoot, '.apollo-toolkit-install.json'),
105
+ `${JSON.stringify(metadata, null, 2)}\n`,
106
+ 'utf8',
107
+ );
108
+
109
+ return copiedEntries.sort();
110
+ }
111
+
112
+ async function syncToolkitHome({ sourceRoot, toolkitHome, version }) {
113
+ const parentDir = path.dirname(toolkitHome);
114
+ const tempDir = path.join(parentDir, `.apollo-toolkit.tmp-${process.pid}-${Date.now()}`);
115
+
116
+ await fsp.rm(tempDir, { recursive: true, force: true });
117
+ await stageToolkitContents({ sourceRoot, destinationRoot: tempDir, version });
118
+
119
+ const stat = await fsp.lstat(toolkitHome).catch(() => null);
120
+ if (stat && !stat.isDirectory()) {
121
+ throw new Error(`Apollo Toolkit home exists but is not a directory: ${toolkitHome}`);
122
+ }
123
+
124
+ await fsp.rm(toolkitHome, { recursive: true, force: true });
125
+ await fsp.mkdir(parentDir, { recursive: true });
126
+ await fsp.rename(tempDir, toolkitHome);
127
+
128
+ return {
129
+ toolkitHome,
130
+ skillNames: await listSkillNames(toolkitHome),
131
+ };
132
+ }
133
+
134
+ async function getTargetRoots(modes, env = process.env) {
135
+ const homeDir = resolveHomeDirectory(env);
136
+ const targets = [];
137
+
138
+ for (const mode of normalizeModes(modes)) {
139
+ if (mode === 'codex') {
140
+ targets.push({
141
+ mode,
142
+ label: 'Codex',
143
+ root: env.CODEX_SKILLS_DIR || path.join(homeDir, '.codex', 'skills'),
144
+ });
145
+ continue;
146
+ }
147
+
148
+ if (mode === 'trae') {
149
+ targets.push({
150
+ mode,
151
+ label: 'Trae',
152
+ root: env.TRAE_SKILLS_DIR || path.join(homeDir, '.trae', 'skills'),
153
+ });
154
+ continue;
155
+ }
156
+
157
+ if (mode === 'openclaw') {
158
+ const openclawHome = env.OPENCLAW_HOME || path.join(homeDir, '.openclaw');
159
+ const entries = await fsp.readdir(openclawHome, { withFileTypes: true }).catch(() => []);
160
+ const workspaceNames = entries
161
+ .filter((entry) => entry.isDirectory() && entry.name.startsWith('workspace'))
162
+ .map((entry) => entry.name)
163
+ .sort();
164
+
165
+ if (workspaceNames.length === 0) {
166
+ throw new Error(`No workspace directories found under: ${openclawHome}`);
167
+ }
168
+
169
+ for (const workspaceName of workspaceNames) {
170
+ targets.push({
171
+ mode,
172
+ label: `OpenClaw (${workspaceName})`,
173
+ root: path.join(openclawHome, workspaceName, 'skills'),
174
+ });
175
+ }
176
+ }
177
+ }
178
+
179
+ return targets;
180
+ }
181
+
182
+ async function ensureDirectory(dirPath) {
183
+ await fsp.mkdir(dirPath, { recursive: true });
184
+ }
185
+
186
+ async function replaceWithSymlink(sourcePath, targetPath) {
187
+ await fsp.rm(targetPath, { recursive: true, force: true });
188
+ await ensureDirectory(path.dirname(targetPath));
189
+
190
+ const type = process.platform === 'win32' ? 'junction' : 'dir';
191
+ await fsp.symlink(sourcePath, targetPath, type);
192
+ }
193
+
194
+ async function installLinks({ toolkitHome, modes, env = process.env }) {
195
+ const skillNames = await listSkillNames(toolkitHome);
196
+ const targets = await getTargetRoots(modes, env);
197
+ const linkedPaths = [];
198
+
199
+ for (const target of targets) {
200
+ await ensureDirectory(target.root);
201
+ for (const skillName of skillNames) {
202
+ const sourcePath = path.join(toolkitHome, skillName);
203
+ const targetPath = path.join(target.root, skillName);
204
+ await replaceWithSymlink(sourcePath, targetPath);
205
+ linkedPaths.push({ target: target.label, path: targetPath, skillName });
206
+ }
207
+ }
208
+
209
+ return {
210
+ skillNames,
211
+ targets,
212
+ linkedPaths,
213
+ };
214
+ }
215
+
216
+ module.exports = {
217
+ VALID_MODES,
218
+ getTargetRoots,
219
+ installLinks,
220
+ listSkillNames,
221
+ normalizeModes,
222
+ resolveHomeDirectory,
223
+ resolveToolkitHome,
224
+ syncToolkitHome,
225
+ };
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: maintain-project-constraints
3
+ description: Automatically create and maintain AGENTS.md so it stays aligned with the current repository architecture, core business flow, project purpose, and coding conventions. Use when AGENTS.md is missing or may be outdated after code changes.
4
+ ---
5
+
6
+ # Maintain Project Constraints
7
+
8
+ ## Dependencies
9
+
10
+ - Required: none.
11
+ - Conditional: none.
12
+ - Optional: none.
13
+ - Fallback: not applicable.
14
+
15
+ ## Standards
16
+
17
+ - Evidence: Infer repository architecture, business flow, and conventions from current code and docs rather than assumptions.
18
+ - Execution: Create or align `AGENTS.md` only after building a concrete inventory of implemented capabilities.
19
+ - Quality: Keep every statement traceable, remove stale guidance, and ensure `Core business flow` stays exhaustive and concrete.
20
+ - Output: Maintain a concise root-level `AGENTS.md` with the required sections and repository-specific wording.
21
+
22
+ ## Goal
23
+
24
+ Keep `AGENTS.md` accurate, actionable, and synchronized with the latest state of the repository.
25
+
26
+ ## Trigger Conditions
27
+
28
+ Invoke this skill when either condition is true:
29
+
30
+ 1. `AGENTS.md` does not exist and the user needs this repository to expose agent-facing guidance.
31
+ 2. `AGENTS.md` exists but may have drifted after code changes, refactors, or workflow updates.
32
+
33
+ After completing any code modification task, proactively run this skill to verify `AGENTS.md` is still aligned, and update it if needed.
34
+
35
+ ## Required Outputs
36
+
37
+ `AGENTS.md` must include these sections (use concise, repository-specific content):
38
+
39
+ - Project architecture
40
+ - Core business flow
41
+ - Core project purpose
42
+ - Code style and coding conventions
43
+
44
+ For the `Core business flow` section, always use this format:
45
+
46
+ 1. One short sentence that summarizes what the repository currently enables.
47
+ 2. An exhaustive unordered list of the repository's current existing functions/capabilities.
48
+ 3. Each bullet must be a short capability statement, preferably in the style of `- Users can ...` or the repository-equivalent actor phrasing.
49
+
50
+ Example:
51
+
52
+ ```markdown
53
+
54
+ ## Core Business Flow
55
+
56
+ This project enables users to manage and run reusable automation workflows.
57
+
58
+ - Users can create a workflow from a local template.
59
+ - Users can update an existing workflow configuration.
60
+ - Users can validate workflow inputs before execution.
61
+ - Users can run the workflow and inspect the result.
62
+ ```
63
+
64
+ ## Workflow
65
+
66
+ ### 1) Build factual understanding first
67
+
68
+ - Confirm whether `AGENTS.md` exists.
69
+ - Read the repository before writing:
70
+ - root docs (`README`, contribution docs, design docs)
71
+ - key source directories and entry points
72
+ - user-facing features such as commands, routes, workflows, tasks, or installable modules
73
+ - representative modules that show coding patterns
74
+ - test directories and tooling/config files
75
+ - Infer architecture and conventions from real code, not assumptions.
76
+ - Build a concrete inventory of all currently implemented capabilities before drafting `Core business flow`.
77
+
78
+ ### 2) Create AGENTS.md when missing
79
+
80
+ When `AGENTS.md` is absent:
81
+
82
+ - Create a new root-level `AGENTS.md`.
83
+ - Document architecture, business flow, purpose, and coding conventions from observed facts.
84
+ - Write `Core business flow` as one summary sentence followed by unordered bullets that cover every current capability found in the repository.
85
+ - Keep language specific to this repository; avoid generic boilerplate.
86
+
87
+ ### 3) Align AGENTS.md when drift is detected
88
+
89
+ When `AGENTS.md` exists but is outdated:
90
+
91
+ - Re-read changed or high-impact modules.
92
+ - Update only sections that no longer match reality.
93
+ - Expand or trim the `Core business flow` bullet list so it still covers all currently implemented capabilities.
94
+ - Preserve correct existing content and structure where possible.
95
+
96
+ ### 4) Quality checks before finishing
97
+
98
+ - Ensure every statement in `AGENTS.md` is traceable to current repository files.
99
+ - Remove stale paths, renamed components, and obsolete workflows.
100
+ - Verify the `Core business flow` section includes a one-sentence summary plus unordered bullets for all currently existing capabilities; do not leave major functions unlisted.
101
+ - Keep instructions concise, concrete, and operational for future agents.
102
+
103
+ ## Writing Rules
104
+
105
+ - Use clear headings and short bullet points.
106
+ - Prefer repository terms already used in code/docs.
107
+ - Do not include speculative architecture claims.
108
+ - In `Core business flow`, prefer many short bullets over a few vague bullets; when the product grows, add more bullets so the list remains exhaustive.
109
+ - Keep the document focused on how agents should understand and operate in this project.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Maintain Project Constraints"
3
+ short_description: "Automatically create and maintain AGENTS.md so it stays aligned with the current repository architecture, core business flow, project purpose, and coding conventions. Use when AGENTS.md is missing or may be outdated after code changes."
4
+ default_prompt: "Use $maintain-project-constraints to automatically create and maintain AGENTS.md so it stays aligned with the current repository architecture, core business flow, project purpose, and coding conventions. Use when AGENTS.md is missing or may be outdated after code changes."
@@ -0,0 +1,18 @@
1
+ # maintain-skill-catalog
2
+
3
+ Maintain a repository of installable skills by auditing skill definitions, dependency declarations, shared conventions, and catalog validation.
4
+
5
+ ## Core capabilities
6
+
7
+ - Scans top-level skills before adding or splitting new ones to avoid duplicate scope.
8
+ - Audits standardized `## Dependencies` sections and separates vendored, local-only, external, and alias dependencies.
9
+ - Syncs catalog docs such as `README.md` and `AGENTS.md` with actual skill capabilities.
10
+ - Catches catalog-wide validation issues like missing `agents/openai.yaml` files or stale prompt references.
11
+ - Encodes user corrections into durable catalog rules so the same classification mistakes do not repeat.
12
+
13
+ ## Typical triggers
14
+
15
+ - Standardize all skills to one dependency format.
16
+ - Check which skills rely on external skills and document how to install them.
17
+ - Split repeated workflow steps into a new shared skill.
18
+ - Fix skill-catalog CI failures caused by missing metadata or agent config files.
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: maintain-skill-catalog
3
+ description: Audit and maintain a repository of installable skills so the catalog stays internally consistent. Use when users ask to standardize `SKILL.md` structure across many skills, classify internal vs external skill dependencies, sync skill lists and external dependency docs, extract shared workflows into new skills, or fix catalog-wide validation/agent-config issues.
4
+ ---
5
+
6
+ # Maintain Skill Catalog
7
+
8
+ ## Dependencies
9
+
10
+ - Required: none.
11
+ - Conditional: `find-skills` when a dependency is external and the installation source is unknown.
12
+ - Optional: `skill-creator` when splitting a repeated workflow into a new shared skill or significantly reshaping an existing skill.
13
+ - Fallback: If an external dependency cannot be verified, leave it undocumented rather than guessing the package name or install command.
14
+
15
+ ## Standards
16
+
17
+ - Evidence: Read the actual skill folders, validation scripts, repository docs, and local installed skill names before changing dependency classifications or catalog docs.
18
+ - Execution: Audit first, classify findings, make focused catalog updates, then run the repo validators before finishing.
19
+ - Quality: Avoid duplicate skills, avoid rewording behavior without checking the implementation, and distinguish aliases or local unpublished skills from true external dependencies.
20
+ - Output: Leave the catalog with synchronized skill metadata, dependency documentation, and validation status.
21
+
22
+ ## Goal
23
+
24
+ Keep a skill repository coherent when many top-level skills evolve together.
25
+
26
+ ## Workflow
27
+
28
+ ### 1) Inventory the catalog before editing
29
+
30
+ - List the tracked top-level skill directories and read the relevant `SKILL.md` files before deciding that a new skill is needed.
31
+ - Check whether the requested workflow already exists under another name or can be handled by a focused update.
32
+ - Read current `README.md`, `AGENTS.md`, validator scripts, and any existing dependency notes that may need synchronization.
33
+ - When the task involves external dependencies, inspect local installed skills under `~/.codex/skills` first to confirm the exact skill names.
34
+
35
+ ### 2) Audit dependency declarations and shared conventions
36
+
37
+ - Use the standardized `## Dependencies` section as the source of truth for skill-to-skill relationships.
38
+ - Classify each dependency as:
39
+ - vendored in this repository
40
+ - local/private skill that should not be documented as external
41
+ - external skill that needs install guidance
42
+ - alias/compatibility name that should be explained but not treated as a separate dependency
43
+ - Verify exact external skill names before editing docs; do not invent pluralizations or package names.
44
+ - If multiple skills repeat the same workflow, prefer extracting that shared portion into a dedicated skill instead of duplicating instructions.
45
+
46
+ ### 3) Update catalog docs and skill metadata carefully
47
+
48
+ - Keep edits minimal and repo-wide only where necessary.
49
+ - Update `README.md` skill lists and external dependency sections when the catalog actually changes.
50
+ - Update `AGENTS.md` when the repository gains or loses a user-visible capability or a standing convention changes.
51
+ - When creating a new shared skill, align naming, frontmatter, `agents/openai.yaml`, and any lightweight README with neighboring skills.
52
+ - Do not treat unpublished local skills as external dependencies just because they are not yet installed elsewhere.
53
+
54
+ ### 4) Validate the catalog after changes
55
+
56
+ - Run:
57
+ - `python3 scripts/validate_skill_frontmatter.py`
58
+ - `python3 scripts/validate_openai_agent_config.py`
59
+ - If the change touched installer or repo-discovery behavior, verify the relevant install scripts or discovery logic as well.
60
+ - Resolve validation failures before finishing; missing `agents/openai.yaml`, stale prompt references, and mismatched skill names are catalog bugs, not follow-up work.
61
+
62
+ ### 5) Record conclusions explicitly
63
+
64
+ - Summarize which skills were audited, which conventions were updated, and which dependencies were confirmed as external.
65
+ - Call out any unresolved unknowns, such as an external dependency whose install source could not be verified.
66
+ - When a user correction changes the catalog rules, encode that rule in the skill or repository docs so the same mistake does not recur.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "maintain-skill-catalog"
3
+ short_description: "Audit and keep a skill repository consistent"
4
+ default_prompt: "Use $maintain-skill-catalog to audit top-level skills, classify internal versus external dependencies, sync catalog docs, extract repeated workflows into shared skills when justified, and run repository validators before finishing."
@@ -0,0 +1,53 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [0.3.1] - 2026-02-18
6
+
7
+ ### Changed
8
+ - Require narration pacing target of 3-4 CJK chars/second in the short-video workflow and planning documents.
9
+ - Add post-generation pacing validation loop for voice assets using timeline duration and character count.
10
+ - Update README and default agent prompt so voice generation explicitly enforces short-video speech rhythm.
11
+
12
+ ## [0.3.0] - 2026-02-17
13
+
14
+ ### Changed
15
+ - Move shared role registry path to `<project_dir>/roles/roles.json` and align workflow docs/prompt references.
16
+ - Require pre-production plans to include beat-level audience-focus special-effect cues and intensity guardrails.
17
+ - Expand Remotion composition workflow to load animation/light-leak guidance and apply controlled effects across hook, escalation, climax, and loop-closure beats.
18
+ - Update README, output contract, and default agent prompt to explicitly include attention-retention special effects in final video production.
19
+ - Update plan template with per-beat `focus effect` fields and an `Audience Focus Effects` section.
20
+
21
+ ## [0.2.2] - 2026-02-17
22
+
23
+ ### Changed
24
+ - Add required workflow step to create `<project_dir>/pictures/<content_name>/roles.json` before image generation.
25
+ - Require `roles.json` to store recurring character prompt skeletons with the `openai-text-to-image-storyboard` schema.
26
+ - Require role prompt reuse: read existing `roles.json` first and reuse matched roles.
27
+ - Only append new role prompts when required roles are missing, instead of recreating all role entries.
28
+ - Update README, output contract, quality checklist, and default agent prompt to include roles file handling.
29
+
30
+ ## [0.2.1] - 2026-02-16
31
+
32
+ ### Changed
33
+ - Strengthen selection criteria to require a standalone mini-story arc plus lingering-question potential.
34
+ - Update plan template with standalone-story basis, lingering question, and story satisfaction checks.
35
+ - Update README and default agent prompt to explicitly enforce "complete yet still curiosity-inducing" narrative outcomes.
36
+
37
+ ## [0.2.0] - 2026-02-16
38
+
39
+ ### Changed
40
+ - Replace 3-scene extraction with single highlight-segment extraction for stronger short-video focus.
41
+ - Update planning template to a single-segment structure with beat-level timing and asset planning.
42
+ - Align skill workflow, quality gate checklist, README, and agent default prompt with the 50-60 second single-segment pipeline.
43
+
44
+ ## [0.1.0] - 2026-02-16
45
+
46
+ ### Added
47
+ - Require a pre-production plan markdown before generation, including scenes, per-scene scripts, and image lists.
48
+ - Add `references/plan-template.md` as the canonical plan template with bracketed placeholders.
49
+ - Add workflow gate requiring explicit user approval of the plan before image, voice, and render steps.
50
+
51
+ ### Changed
52
+ - Update skill workflow numbering and quality checks to enforce plan-first execution.
53
+ - Update README and default agent prompt to match the new plan approval flow.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yamiyorunoshura
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.
@@ -0,0 +1,63 @@
1
+ # novel-to-short-video
2
+
3
+ A Codex skill that converts novel content into a 50-60 second loopable short video.
4
+
5
+ This skill will:
6
+
7
+ - Select exactly one highest-impact, high-tension core segment from the novel
8
+ - Ensure the selected segment forms a complete mini-story that works standalone
9
+ - Keep one meaningful unresolved hook at the end to sustain curiosity
10
+ - Create a pre-production plan first using `references/plan-template.md` (`docs/plans/<date>-<chapter>.md`)
11
+ - Start image/voice/render steps only after explicit user approval of the plan
12
+ - Generate a loop-closure narration script (opening and ending call back to each other)
13
+ - Ensure `<project_dir>/roles/roles.json` exists before prompt generation; reuse existing roles and append only missing roles (schema in `references/roles-json.md`)
14
+ - Generate scene images via text-to-image
15
+ - Generate narration audio and subtitles
16
+ - Enforce narration pacing to 3-4 CJK chars per second
17
+ - Assemble and render with Remotion, apply beat-level focus effects, and keep the Remotion project for further edits
18
+
19
+ ## Dependency skills
20
+
21
+ - `openai-text-to-image-storyboard`
22
+ - `docs-to-voice`
23
+ - `remotion-best-practices`
24
+
25
+ ## Repository layout
26
+
27
+ ```text
28
+ novel-to-short-video/
29
+ ├── SKILL.md
30
+ ├── agents/
31
+ │ └── openai.yaml
32
+ ├── references/
33
+ │ ├── plan-template.md
34
+ │ └── roles-json.md
35
+ ├── README.md
36
+ └── LICENSE
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ 1. Place this folder under your Codex skills directory.
42
+ 2. Trigger it in chat with `$novel-to-short-video`.
43
+ 3. Provide `project_dir`, `content_name`, and novel content.
44
+ 4. The skill first generates a plan markdown under `docs/plans/` and waits for your approval.
45
+ 5. After approval, it generates images, narration, subtitles, and the final short video.
46
+
47
+ ## Output guarantees
48
+
49
+ - Each short video stays within **50-60 seconds**
50
+ - Narration pacing remains **3-4 chars/sec** (validated by char count ÷ audio duration)
51
+ - Exactly **one** highest-impact core segment is selected
52
+ - One segment maps to one full video (segment-to-video 1:1)
53
+ - Story is standalone (clear setup/conflict/turn/outcome) with one unresolved ending question
54
+ - Plan file is created first: `<project_dir>/docs/plans/<YYYY-MM-DD>-<chapter_slug>.md`
55
+ - Plan uses `references/plan-template.md`, and all placeholders are removed after filling
56
+ - Role registry file: `<project_dir>/roles/roles.json` (shared between short-form and long-form workflows, reuses existing roles, appends only missing roles; schema in `references/roles-json.md`)
57
+ - Ending line and final visuals tie back to the opening for loop closure
58
+ - Beat-level effects are applied (`hook / escalation / climax / loop-closure`) with controlled intensity to avoid harming subtitle readability
59
+ - Remotion project is preserved by default for manual refinement
60
+
61
+ ## License
62
+
63
+ This project is licensed under the [MIT License](./LICENSE).