godpowers 0.15.3 → 0.15.5
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/CHANGELOG.md +28 -0
- package/README.md +1 -1
- package/agents/god-context-writer.md +2 -1
- package/bin/install.js +37 -8
- package/package.json +1 -1
- package/skills/god-init.md +16 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,34 @@ All notable changes to Godpowers will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.15.5] - 2026-05-11
|
|
9
|
+
|
|
10
|
+
Godpowers init UX release. Makes explicit command invocation behave like
|
|
11
|
+
project setup instead of asking an obvious follow-up.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- `god init` and `/god-init` now automatically write the Godpowers AI-tool
|
|
15
|
+
context fence after initialization.
|
|
16
|
+
- Generic init triggers such as "start a project" and "initialize" still ask
|
|
17
|
+
once before writing AI-tool instruction files.
|
|
18
|
+
|
|
19
|
+
## [0.15.4] - 2026-05-11
|
|
20
|
+
|
|
21
|
+
Codex command discovery release. Installs Godpowers commands in the directory
|
|
22
|
+
shape Codex loads as individual skills.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Codex installs now write each command as `~/.codex/skills/<command>/SKILL.md`,
|
|
26
|
+
so commands like `/god-next`, `/god-status`, and `/god-init` show up as
|
|
27
|
+
separate Codex skills instead of only exposing the umbrella `godpowers`
|
|
28
|
+
skill.
|
|
29
|
+
- Codex uninstall now removes those command directories while preserving
|
|
30
|
+
unrelated user skills.
|
|
31
|
+
|
|
32
|
+
### Tests
|
|
33
|
+
- Added installer smoke coverage for Codex skill-directory installs and
|
|
34
|
+
uninstalls.
|
|
35
|
+
|
|
8
36
|
## [0.15.3] - 2026-05-11
|
|
9
37
|
|
|
10
38
|
Documentation refresh release. Aligns the public docs, architecture map,
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/aihxp/godpowers/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](https://www.npmjs.com/package/godpowers)
|
|
7
7
|
|
|
8
8
|
**Ship fast. Ship right. Ship everything. Ship accountably.**
|
|
@@ -104,7 +104,8 @@ is the source of truth.
|
|
|
104
104
|
## Never do these
|
|
105
105
|
|
|
106
106
|
- Never overwrite content outside the fence.
|
|
107
|
-
- Never silently create AGENTS.md
|
|
107
|
+
- Never silently create AGENTS.md for generic init triggers. Explicit
|
|
108
|
+
`god init` and `/god-init` are consent to write the Godpowers context fence.
|
|
108
109
|
- Never write to a tool's file if the tool's signal directory/file is missing.
|
|
109
110
|
- Never fork the canonical section across multiple files; everything
|
|
110
111
|
non-pointer goes only to AGENTS.md.
|
package/bin/install.js
CHANGED
|
@@ -171,6 +171,36 @@ function copyRuntimeBundle(srcDir, destDir) {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
function installSkillFile(srcFile, skillsDest, runtimeKey, targetName = null) {
|
|
175
|
+
const baseName = targetName || path.basename(srcFile, '.md');
|
|
176
|
+
if (runtimeKey === 'codex') {
|
|
177
|
+
const skillDir = path.join(skillsDest, baseName);
|
|
178
|
+
ensureDir(skillDir);
|
|
179
|
+
fs.copyFileSync(srcFile, path.join(skillDir, 'SKILL.md'));
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
fs.copyFileSync(srcFile, path.join(skillsDest, `${baseName}.md`));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function removeSkillEntry(skillsDir, entry) {
|
|
186
|
+
const entryPath = path.join(skillsDir, entry.name);
|
|
187
|
+
if (entry.isDirectory()) {
|
|
188
|
+
const skillFile = path.join(entryPath, 'SKILL.md');
|
|
189
|
+
if (entry.name.startsWith('god-') || entry.name === 'god' || entry.name === 'godpowers') {
|
|
190
|
+
if (fs.existsSync(skillFile)) {
|
|
191
|
+
fs.rmSync(entryPath, { recursive: true, force: true });
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
if (entry.name.startsWith('god-') || entry.name === 'god.md' || entry.name === 'godpowers.md') {
|
|
198
|
+
fs.unlinkSync(entryPath);
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
|
|
174
204
|
// ---------------------------------------------------------------------------
|
|
175
205
|
// Parse args
|
|
176
206
|
// ---------------------------------------------------------------------------
|
|
@@ -242,11 +272,12 @@ function installForRuntime(runtimeKey, srcDir) {
|
|
|
242
272
|
let count = 0;
|
|
243
273
|
for (const file of fs.readdirSync(skillsSrc)) {
|
|
244
274
|
if (file.endsWith('.md')) {
|
|
245
|
-
|
|
275
|
+
installSkillFile(path.join(skillsSrc, file), skillsDest, runtimeKey);
|
|
246
276
|
count++;
|
|
247
277
|
}
|
|
248
278
|
}
|
|
249
|
-
|
|
279
|
+
const shape = runtimeKey === 'codex' ? 'Codex skill directories' : 'skills/';
|
|
280
|
+
success(`Installed ${count} slash commands to ${shape}`);
|
|
250
281
|
}
|
|
251
282
|
|
|
252
283
|
// 2. Install specialist agents to agents/
|
|
@@ -268,9 +299,8 @@ function installForRuntime(runtimeKey, srcDir) {
|
|
|
268
299
|
// 3. Install the master SKILL.md (always-on context)
|
|
269
300
|
const masterSkill = path.join(srcDir, 'SKILL.md');
|
|
270
301
|
if (fs.existsSync(masterSkill)) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
success('Installed master SKILL.md as godpowers.md');
|
|
302
|
+
installSkillFile(masterSkill, skillsDest, runtimeKey, 'godpowers');
|
|
303
|
+
success('Installed master SKILL.md as godpowers');
|
|
274
304
|
}
|
|
275
305
|
|
|
276
306
|
// 4. Install templates
|
|
@@ -368,9 +398,8 @@ function uninstallForRuntime(runtimeKey) {
|
|
|
368
398
|
|
|
369
399
|
// Remove all god-* skills
|
|
370
400
|
if (fs.existsSync(skillsDir)) {
|
|
371
|
-
for (const
|
|
372
|
-
if (
|
|
373
|
-
fs.unlinkSync(path.join(skillsDir, file));
|
|
401
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
402
|
+
if (removeSkillEntry(skillsDir, entry)) {
|
|
374
403
|
removed++;
|
|
375
404
|
}
|
|
376
405
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.5",
|
|
4
4
|
"description": "AI-powered development system: 104 slash commands and 38 specialist agents that take a project from raw idea to hardened production. Runs inside Claude Code, Codex, Cursor, Windsurf, Gemini, and 10+ other AI coding tools.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"godpowers": "./bin/install.js"
|
package/skills/god-init.md
CHANGED
|
@@ -99,9 +99,17 @@ needs to specify a mode.
|
|
|
99
99
|
|
|
100
100
|
`.godpowers/PROGRESS.md` created with initial state.
|
|
101
101
|
|
|
102
|
-
## AI-tool context (
|
|
102
|
+
## AI-tool context (automatic for explicit init)
|
|
103
103
|
|
|
104
|
-
After PROGRESS.md is written,
|
|
104
|
+
After PROGRESS.md is written, decide from the trigger phrase:
|
|
105
|
+
|
|
106
|
+
- If the user explicitly invoked `god init` or `/god-init`, write AI-tool
|
|
107
|
+
context automatically. The command itself is explicit consent to initialize
|
|
108
|
+
Godpowers project context for the active AI coding tool.
|
|
109
|
+
- If the user used a generic trigger such as "start a project", "new project",
|
|
110
|
+
or "initialize", ask once before writing AI-tool instruction files.
|
|
111
|
+
|
|
112
|
+
Prompt for generic triggers only:
|
|
105
113
|
|
|
106
114
|
```
|
|
107
115
|
Tell your AI coding tools (Claude Code, Codex, Gemini, Cursor, Windsurf,
|
|
@@ -114,10 +122,12 @@ files detected in this project.
|
|
|
114
122
|
never-ask - never ask again on this project
|
|
115
123
|
```
|
|
116
124
|
|
|
117
|
-
Persist the answer to `state.json` under
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
Persist the resolved answer to `state.json` under
|
|
126
|
+
`project.context-prompt-answered`. For explicit `god init` and `/god-init`,
|
|
127
|
+
store `yes` and spawn `god-context-writer` in `write` mode. For generic
|
|
128
|
+
triggers, on `yes`, spawn `god-context-writer` in `write` mode. On
|
|
129
|
+
`never-ask`, store that flag so future runs of /god-init and /god-sync skip
|
|
130
|
+
the prompt and the auto-refresh.
|
|
121
131
|
|
|
122
132
|
If the user later wants to enable it manually, they run `/god-context on`.
|
|
123
133
|
|