godpowers 1.6.11 → 1.6.13

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.
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Godpowers Dashboard
3
+ *
4
+ * Shared executable status engine for /god-status, /god-next, /god-sync,
5
+ * /god-scan, and /god-mode closeouts. Disk state is authoritative.
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const cp = require('child_process');
11
+
12
+ const state = require('./state');
13
+ const router = require('./router');
14
+ const automationProviders = require('./automation-providers');
15
+
16
+ const GOD_DIR = '.godpowers';
17
+ const PRD_PATH = '.godpowers/prd/PRD.md';
18
+ const ROADMAP_PATH = '.godpowers/roadmap/ROADMAP.md';
19
+ const CHECKPOINT_PATH = '.godpowers/CHECKPOINT.md';
20
+ const SYNC_LOG_PATH = '.godpowers/SYNC-LOG.md';
21
+ const REVIEW_PATH = '.godpowers/REVIEW-REQUIRED.md';
22
+
23
+ function exists(projectRoot, relPath) {
24
+ return fs.existsSync(path.join(projectRoot, relPath));
25
+ }
26
+
27
+ function readText(projectRoot, relPath) {
28
+ const file = path.join(projectRoot, relPath);
29
+ if (!fs.existsSync(file)) return '';
30
+ return fs.readFileSync(file, 'utf8');
31
+ }
32
+
33
+ function mtimeMs(projectRoot, relPath) {
34
+ const file = path.join(projectRoot, relPath);
35
+ if (!fs.existsSync(file)) return null;
36
+ return fs.statSync(file).mtimeMs;
37
+ }
38
+
39
+ function artifactStatus(projectRoot, relPath) {
40
+ return exists(projectRoot, relPath) ? 'done' : 'missing';
41
+ }
42
+
43
+ function currentPhase(progress) {
44
+ const current = progress && progress.current;
45
+ if (!current) {
46
+ return {
47
+ phase: 'Complete',
48
+ tierKey: null,
49
+ tierNumber: null,
50
+ tierTotal: 0,
51
+ tierOrdinal: 0,
52
+ tierCount: 0,
53
+ tierLabel: 'Complete',
54
+ stepLabel: 'Complete',
55
+ stepNumber: 0,
56
+ totalSteps: progress ? progress.total : 0
57
+ };
58
+ }
59
+
60
+ const tierNumbers = (progress.tiers || [])
61
+ .map(tier => tier.tierNumber)
62
+ .filter(n => Number.isFinite(n))
63
+ .sort((a, b) => a - b);
64
+ const tierTotal = tierNumbers.length > 0 ? Math.max(...tierNumbers) : current.tierNumber;
65
+ const tierOrdinal = tierNumbers.indexOf(current.tierNumber) + 1;
66
+ const tierCount = tierNumbers.length || (Number.isFinite(current.tierNumber) ? current.tierNumber + 1 : 0);
67
+
68
+ return {
69
+ phase: current.tierLabel,
70
+ tierKey: current.tierKey,
71
+ tierNumber: current.tierNumber,
72
+ tierTotal,
73
+ tierOrdinal: tierOrdinal > 0 ? tierOrdinal : 1,
74
+ tierCount,
75
+ tierLabel: current.tierLabel,
76
+ stepLabel: current.subStepLabel,
77
+ stepNumber: current.ordinal,
78
+ totalSteps: progress.total
79
+ };
80
+ }
81
+
82
+ function worktree(projectRoot) {
83
+ try {
84
+ const out = cp.execFileSync('git', ['status', '--porcelain'], {
85
+ cwd: projectRoot,
86
+ encoding: 'utf8',
87
+ stdio: ['ignore', 'pipe', 'ignore']
88
+ });
89
+ return parseGitStatus(out);
90
+ } catch (e) {
91
+ return { worktree: 'unknown', index: 'unknown', entries: [] };
92
+ }
93
+ }
94
+
95
+ function parseGitStatus(out) {
96
+ if (!out || !out.trim()) {
97
+ return { worktree: 'clean', index: 'untouched', entries: [] };
98
+ }
99
+ const entries = out.split(/\r?\n/).filter(Boolean);
100
+ const staged = entries.filter(line => line[0] !== ' ' && line[0] !== '?');
101
+ const unstaged = entries.filter(line => line[1] !== ' ' || line.startsWith('??'));
102
+ let worktreeState = 'modified files unstaged';
103
+ if (staged.length > 0 && unstaged.length > 0) worktreeState = 'mixed';
104
+ else if (staged.length > 0) worktreeState = 'staged changes';
105
+ return {
106
+ worktree: worktreeState,
107
+ index: staged.length > 0 ? staged.map(statusPath).join(', ') : 'untouched',
108
+ entries
109
+ };
110
+ }
111
+
112
+ function statusPath(line) {
113
+ if (line.startsWith('?? ')) return line.slice(3);
114
+ return line.length > 3 ? line.slice(3) : line.trim();
115
+ }
116
+
117
+ function reviewCount(projectRoot) {
118
+ const text = readText(projectRoot, REVIEW_PATH);
119
+ if (!text.trim()) return 0;
120
+ const unchecked = (text.match(/\[\s\]\s*(?:TODO|PENDING|OPEN|REVIEW|BLOCKER|[Pp][0-3])/g) || []).length;
121
+ if (unchecked > 0) return unchecked;
122
+ const headings = (text.match(/^###\s+/gm) || []).length;
123
+ return headings;
124
+ }
125
+
126
+ function hasRecentPath(projectRoot, relPath, maxAgeMs) {
127
+ const modified = mtimeMs(projectRoot, relPath);
128
+ if (!modified) return false;
129
+ return Date.now() - modified <= maxAgeMs;
130
+ }
131
+
132
+ function proactiveChecks(projectRoot, changedFiles = []) {
133
+ const oneDay = 24 * 60 * 60 * 1000;
134
+ const thirtyDays = 30 * oneDay;
135
+ const reviews = reviewCount(projectRoot);
136
+
137
+ const checkpoint = exists(projectRoot, CHECKPOINT_PATH)
138
+ ? (hasRecentPath(projectRoot, CHECKPOINT_PATH, oneDay) ? 'fresh' : 'stale')
139
+ : 'missing';
140
+
141
+ const sync = exists(projectRoot, SYNC_LOG_PATH)
142
+ ? (hasRecentPath(projectRoot, SYNC_LOG_PATH, oneDay) ? 'fresh' : 'stale, suggest /god-sync')
143
+ : 'missing, suggest /god-sync';
144
+
145
+ const hygieneFresh = exists(projectRoot, CHECKPOINT_PATH)
146
+ && hasRecentPath(projectRoot, CHECKPOINT_PATH, thirtyDays);
147
+
148
+ const pkgChanged = changedFiles.some(file => [
149
+ 'package.json',
150
+ 'package-lock.json',
151
+ 'pnpm-lock.yaml',
152
+ 'yarn.lock'
153
+ ].includes(file));
154
+ const sensitiveChanged = changedFiles.some(file => matchesAnyPrefix(file, [
155
+ '.env.example',
156
+ 'SECURITY.md',
157
+ '.github/workflows',
158
+ 'auth',
159
+ 'security'
160
+ ]));
161
+
162
+ return {
163
+ checkpoint,
164
+ reviews: reviews > 0 ? `${reviews} pending, suggest /god-review-changes` : 'none',
165
+ sync,
166
+ docs: 'fresh',
167
+ runtime: 'not-applicable',
168
+ automation: automationSummary(projectRoot),
169
+ security: sensitiveChanged ? 'sensitive files changed, suggest /god-harden' : 'clear',
170
+ dependencies: pkgChanged ? 'dependency files changed, suggest /god-update-deps' : 'clear',
171
+ hygiene: hygieneFresh ? 'fresh' : 'stale, suggest /god-hygiene'
172
+ };
173
+ }
174
+
175
+ function automationSummary(projectRoot) {
176
+ const report = automationProviders.detect(projectRoot);
177
+ if (report.active.length > 0) {
178
+ return `${report.active.length} active`;
179
+ }
180
+ if (report.recommendedProvider) {
181
+ return `available via ${report.recommendedProvider.id}, suggest /god-automation-setup`;
182
+ }
183
+ return 'not configured';
184
+ }
185
+
186
+ function matchesAnyPrefix(file, prefixes) {
187
+ return prefixes.some(prefix => file === prefix || file.startsWith(`${prefix}/`));
188
+ }
189
+
190
+ function planningVisibility(projectRoot, progress) {
191
+ const prd = artifactStatus(projectRoot, PRD_PATH);
192
+ const roadmap = artifactStatus(projectRoot, ROADMAP_PATH);
193
+ const phase = currentPhase(progress);
194
+ return {
195
+ prd: { status: prd, path: prd === 'done' ? PRD_PATH : null },
196
+ roadmap: { status: roadmap, path: roadmap === 'done' ? ROADMAP_PATH : null },
197
+ currentMilestone: phase.stepLabel ? `${phase.phase} / ${phase.stepLabel}` : phase.phase,
198
+ completion: `${progress.percent}% based on state.json tracked steps`
199
+ };
200
+ }
201
+
202
+ function compute(projectRoot, opts = {}) {
203
+ const s = state.read(projectRoot);
204
+ const git = opts.git === false ? { worktree: 'not-checked', index: 'not-checked', entries: [] } : worktree(projectRoot);
205
+
206
+ if (!s) {
207
+ const next = { command: '/god-init', reason: 'No Godpowers project initialized' };
208
+ return {
209
+ state: 'not initialized',
210
+ mode: null,
211
+ lifecycle: 'pre-init',
212
+ progress: { percent: 0, completed: 0, total: 0, currentStep: 0, current: null, tiers: [] },
213
+ current: currentPhase(null),
214
+ worktree: git.worktree,
215
+ index: git.index,
216
+ planning: {
217
+ prd: { status: 'missing', path: null },
218
+ roadmap: { status: 'missing', path: null },
219
+ currentMilestone: 'Project initialization',
220
+ completion: '0% based on missing state.json'
221
+ },
222
+ proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
223
+ next,
224
+ openItems: ['No .godpowers/state.json found']
225
+ };
226
+ }
227
+
228
+ const progress = state.progressSummary(s);
229
+ const current = currentPhase(progress);
230
+ const next = router.suggestNext(projectRoot);
231
+ const openItems = [];
232
+ const drift = state.detectDrift(projectRoot);
233
+
234
+ if (drift.length > 0) openItems.push(`${drift.length} artifact drift item(s), suggest /god-repair`);
235
+ if (next && next.blocker) openItems.push(`${next.blocker} blocks next route`);
236
+ if (reviewCount(projectRoot) > 0) openItems.push('pending review items');
237
+ if (openItems.length === 0) openItems.push('none');
238
+
239
+ return {
240
+ state: progress.remaining === 0 ? 'complete' : 'in progress',
241
+ mode: s.mode || s['mode-announced-as'] || null,
242
+ lifecycle: s['lifecycle-phase'] || 'in-arc',
243
+ progress,
244
+ current,
245
+ worktree: git.worktree,
246
+ index: git.index,
247
+ planning: planningVisibility(projectRoot, progress),
248
+ proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
249
+ next,
250
+ openItems
251
+ };
252
+ }
253
+
254
+ function render(dashboard) {
255
+ const current = dashboard.current || {};
256
+ const planning = dashboard.planning || {};
257
+ const proactive = dashboard.proactive || {};
258
+ const next = dashboard.next || {};
259
+ const progress = dashboard.progress || {};
260
+ const prd = planning.prd || {};
261
+ const roadmap = planning.roadmap || {};
262
+ const openItems = dashboard.openItems && dashboard.openItems.length > 0
263
+ ? dashboard.openItems
264
+ : ['none'];
265
+
266
+ return [
267
+ 'Godpowers Dashboard',
268
+ '',
269
+ 'Current status:',
270
+ ` State: ${dashboard.state}`,
271
+ ` Phase: ${current.phase || 'unknown'}${current.tierNumber !== null && current.tierNumber !== undefined ? ` (tier ${current.tierOrdinal} of ${current.tierCount}, internal ${current.tierKey || `tier-${current.tierNumber}`})` : ''}`,
272
+ ` Step: ${current.stepLabel || 'unknown'}${current.stepNumber ? ` (step ${current.stepNumber} of ${current.totalSteps})` : ''}`,
273
+ ` Progress: ${progress.percent || 0}% (${progress.completed || 0} of ${progress.total || 0} steps complete)`,
274
+ ` Worktree: ${dashboard.worktree}`,
275
+ ` Index: ${dashboard.index}`,
276
+ '',
277
+ 'Planning visibility:',
278
+ ` PRD: ${prd.status || 'missing'}${prd.path ? ` ${prd.path}` : ''}`,
279
+ ` Roadmap: ${roadmap.status || 'missing'}${roadmap.path ? ` ${roadmap.path}` : ''}`,
280
+ ` Current milestone: ${planning.currentMilestone || 'unknown'}`,
281
+ ` Completion: ${planning.completion || 'unknown'}`,
282
+ '',
283
+ 'Proactive checks:',
284
+ ` Checkpoint: ${proactive.checkpoint || 'unknown'}`,
285
+ ` Reviews: ${proactive.reviews || 'unknown'}`,
286
+ ` Sync: ${proactive.sync || 'unknown'}`,
287
+ ` Docs: ${proactive.docs || 'unknown'}`,
288
+ ` Runtime: ${proactive.runtime || 'unknown'}`,
289
+ ` Automation: ${proactive.automation || 'unknown'}`,
290
+ ` Security: ${proactive.security || 'unknown'}`,
291
+ ` Dependencies: ${proactive.dependencies || 'unknown'}`,
292
+ ` Hygiene: ${proactive.hygiene || 'unknown'}`,
293
+ '',
294
+ 'Open items:',
295
+ ...openItems.map((item, index) => ` ${index + 1}. ${item}`),
296
+ '',
297
+ 'Next:',
298
+ ` Recommended: ${next.command || 'describe the next intent'}`,
299
+ ` Why: ${next.reason || 'No route was computed.'}`
300
+ ].join('\n');
301
+ }
302
+
303
+ module.exports = {
304
+ compute,
305
+ render,
306
+ worktree,
307
+ parseGitStatus,
308
+ proactiveChecks,
309
+ automationSummary,
310
+ planningVisibility
311
+ };
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "godpowers",
3
- "version": "1.6.11",
4
- "description": "AI-powered development system: 106 slash commands and 39 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.",
3
+ "version": "1.6.13",
4
+ "description": "AI-powered development system: 108 slash commands and 39 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"
7
7
  },
8
8
  "scripts": {
9
- "test": "node scripts/validate-skills.js && node scripts/test-doc-surface-counts.js && bash scripts/smoke.sh && node scripts/test-runtime.js && node scripts/test-router.js && node scripts/test-recipes.js && node scripts/test-context-writer.js && node scripts/test-pillars.js && node scripts/test-artifact-linter.js && node scripts/test-artifact-diff.js && node scripts/test-design-foundation.js && node scripts/test-linkage.js && node scripts/test-impact.js && node scripts/test-reverse-sync.js && node scripts/test-integration.js && node scripts/test-cross-artifact.js && node scripts/test-awesome-design.js && node scripts/test-skillui-bridge.js && node scripts/test-runtime-verification.js && node scripts/test-agent-browser.js && node scripts/test-mode-d.js && node scripts/test-runtime-heuristics.js && node scripts/test-agent-validator.js && node scripts/test-story-validator.js && node scripts/test-state.js && node scripts/test-intent.js && node scripts/test-events.js && node scripts/test-golden-artifacts.js && node scripts/test-install-smoke.js && node scripts/test-checkpoint.js && node scripts/test-extensions.js && node scripts/test-event-reader.js && node scripts/test-state-lock.js && node scripts/test-cost-saver.js && node scripts/test-budget-onoff.js && node scripts/test-workflow-runner.js && npm run test:e2e && node scripts/test-otel-exporter.js && node scripts/test-extensions-publish.js",
9
+ "test": "node scripts/validate-skills.js && node scripts/test-doc-surface-counts.js && bash scripts/smoke.sh && node scripts/test-runtime.js && node scripts/test-router.js && node scripts/test-recipes.js && node scripts/test-context-writer.js && node scripts/test-pillars.js && node scripts/test-artifact-linter.js && node scripts/test-artifact-diff.js && node scripts/test-design-foundation.js && node scripts/test-linkage.js && node scripts/test-impact.js && node scripts/test-reverse-sync.js && node scripts/test-integration.js && node scripts/test-cross-artifact.js && node scripts/test-awesome-design.js && node scripts/test-skillui-bridge.js && node scripts/test-runtime-verification.js && node scripts/test-agent-browser.js && node scripts/test-mode-d.js && node scripts/test-runtime-heuristics.js && node scripts/test-agent-validator.js && node scripts/test-story-validator.js && node scripts/test-state.js && node scripts/test-dashboard.js && node scripts/test-automation-providers.js && node scripts/test-intent.js && node scripts/test-events.js && node scripts/test-golden-artifacts.js && node scripts/test-install-smoke.js && node scripts/test-checkpoint.js && node scripts/test-extensions.js && node scripts/test-event-reader.js && node scripts/test-state-lock.js && node scripts/test-cost-saver.js && node scripts/test-budget-onoff.js && node scripts/test-workflow-runner.js && npm run test:e2e && node scripts/test-otel-exporter.js && node scripts/test-extensions-publish.js",
10
10
  "prepublishOnly": "npm test",
11
11
  "validate-skills": "node scripts/validate-skills.js",
12
12
  "test:surface": "node scripts/test-doc-surface-counts.js",
@@ -0,0 +1,25 @@
1
+ apiVersion: godpowers/v1
2
+ kind: CommandRouting
3
+ metadata:
4
+ command: /god-automation-setup
5
+ description: Prepare opt-in host automation setup
6
+ tier: 0
7
+
8
+ prerequisites:
9
+ required: []
10
+
11
+ execution:
12
+ spawns: [built-in]
13
+ context: fresh
14
+ writes:
15
+ - .godpowers/automations.json
16
+
17
+ success-path:
18
+ next-recommended: /god-automation-status
19
+
20
+ failure-path:
21
+ on-error: /god-doctor
22
+
23
+ endoff:
24
+ state-update: tier-0 updated for /god-automation-setup
25
+ events: [agent.start, artifact.created, agent.end]
@@ -0,0 +1,24 @@
1
+ apiVersion: godpowers/v1
2
+ kind: CommandRouting
3
+ metadata:
4
+ command: /god-automation-status
5
+ description: Show host automation provider support
6
+ tier: 0
7
+
8
+ prerequisites:
9
+ required: []
10
+
11
+ execution:
12
+ spawns: [built-in]
13
+ context: fresh
14
+ writes: []
15
+
16
+ success-path:
17
+ next-recommended: /god-automation-setup
18
+
19
+ failure-path:
20
+ on-error: /god-doctor
21
+
22
+ endoff:
23
+ state-update: tier-0 updated for /god-automation-status
24
+ events: [agent.start, agent.end]
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: god-automation-setup
3
+ description: |
4
+ Prepare an explicit opt-in setup plan for host-native Godpowers automation.
5
+ Never creates schedules, routines, background agents, API triggers, or CI
6
+ workflows without user approval.
7
+
8
+ Triggers on: "god automation setup", "set up background automation", "make godpowers proactive"
9
+ ---
10
+
11
+ # /god-automation-setup
12
+
13
+ Prepare a safe, host-native automation setup plan.
14
+
15
+ ## Process
16
+
17
+ 1. Resolve the runtime root and load `<runtimeRoot>/lib/automation-providers.js`.
18
+ 2. Call `automation.setupPlan(projectRoot)`.
19
+ 3. Print `automation.renderSetupPlan(plan)`.
20
+ 4. Ask the user to choose:
21
+ - provider
22
+ - templates
23
+ - cadence
24
+ - connector or repository scope
25
+ - whether write actions are allowed
26
+ 5. Create provider-native automation only if the current host exposes a safe
27
+ automation tool and the user explicitly approved the exact provider,
28
+ template, cadence, and scope.
29
+ 6. After creation, write or update `.godpowers/automations.json` with:
30
+ - automation id
31
+ - provider id
32
+ - status
33
+ - cadence
34
+ - prompt summary
35
+ - created timestamp
36
+ - host surface used
37
+ 7. Run `/god-automation-status` after setup and show the result.
38
+
39
+ ## Hard Stops
40
+
41
+ Do not create automations during install.
42
+
43
+ Do not create any automation that can do these unless the user explicitly asks
44
+ for that exact write-capable automation:
45
+
46
+ - stage, commit, push, merge, package, publish, or release
47
+ - deploy to staging or production
48
+ - access provider dashboards, DNS, credentials, secrets, or billing
49
+ - clear `.godpowers/REVIEW-REQUIRED.md`
50
+ - accept Critical security findings
51
+ - run broad dependency upgrades
52
+ - delete files, reset branches, or clean worktrees
53
+
54
+ ## Safe Starting Templates
55
+
56
+ - `daily-status`: run `godpowers status --project .` and summarize current phase, progress, open items, and next action
57
+ - `stale-checkpoint`: inspect checkpoint freshness and suggest `/god-sync` or `/god-resume-work`
58
+ - `review-queue`: report unresolved review items without clearing them
59
+ - `weekly-hygiene`: report docs, dependencies, checkpoint, reviews, and hygiene signals
60
+ - `release-readiness`: report release readiness without publishing
61
+
62
+ ## Provider Guidance
63
+
64
+ - Codex App: use native Codex automations when the host exposes them.
65
+ - Claude Code: use `/schedule` for scheduled routines. Use Claude web for API or GitHub triggers.
66
+ - Cline: use `cline schedule` or the Cline SDK scheduler.
67
+ - Kilo: use KiloClaw Scheduled Triggers.
68
+ - Qwen Code: use `/loop` only for session-scoped checks and report that it is not durable.
69
+ - Cursor: use Background Agents or the Background Agent API for branch-scoped async work.
70
+ - GitHub Copilot: use issues, pull requests, or Copilot cloud agent entry points.
71
+ - Windsurf: install workflows or skills, but report that workflows are manual-only.
72
+ - Gemini CLI, OpenCode, CodeBuddy, and Pi: use headless or SDK execution only with an approved scheduler.
73
+ - Trae and Antigravity: report scheduled automation as unknown unless the host proves otherwise.
74
+
75
+ ## Output Shape
76
+
77
+ ```text
78
+ Godpowers Automation Setup Plan
79
+
80
+ Recommended provider: <provider>
81
+
82
+ Setup steps:
83
+ 1. <host-native setup step>
84
+
85
+ Recommended safe templates:
86
+ - <template id>: <prompt>
87
+
88
+ Approval required:
89
+ - Choose a provider
90
+ - Choose one or more templates
91
+ - Confirm any host-native schedule, routine, background agent, API trigger, or connector scope
92
+ ```
93
+
94
+ ## Proposition Closeout
95
+
96
+ End with:
97
+
98
+ ```text
99
+ Proposition:
100
+ 1. Implement partial: create one read-only automation after approval
101
+ 2. Implement complete: create all safe read-only automations after approval
102
+ 3. Discuss more: tune provider, cadence, or safety rules
103
+ 4. Inspect status: /god-automation-status
104
+ Recommended: <one option tied to provider capability and user risk>
105
+ ```
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: god-automation-status
3
+ description: |
4
+ Show host-native automation provider support for the current project.
5
+ Reports Codex App, Claude Routines, Cline schedules, Qwen loops, Cursor
6
+ background agents, Copilot cloud agent, and scriptable CLI providers.
7
+
8
+ Triggers on: "god automation status", "automation support", "background automation status"
9
+ ---
10
+
11
+ # /god-automation-status
12
+
13
+ Show which automation providers Godpowers can safely use in this project.
14
+
15
+ ## Process
16
+
17
+ 1. Resolve the runtime root and load `<runtimeRoot>/lib/automation-providers.js`.
18
+ 2. Call `automation.detect(projectRoot)`.
19
+ 3. Print `automation.render(result)`.
20
+ 4. Read `.godpowers/automations.json` if present and report active automations.
21
+ 5. Do not create, update, trigger, pause, resume, or delete schedules.
22
+ 6. Do not stage, commit, push, publish, deploy, clear review queues, or access
23
+ provider dashboards.
24
+
25
+ If the executable runtime module is unavailable, manually report these provider
26
+ classes:
27
+
28
+ - native-scheduler: Codex App automations, Claude Code routines, Cline schedules, Kilo scheduled triggers
29
+ - session-scheduler: Qwen Code `/loop`
30
+ - background-agent: Cursor Background Agents, GitHub Copilot cloud agent
31
+ - scriptable-headless: Gemini CLI, OpenCode, CodeBuddy SDK, Pi SDK
32
+ - manual-workflow: Windsurf workflows, Augment subagents
33
+ - unknown: Trae, Antigravity scheduled automation
34
+
35
+ ## Output Shape
36
+
37
+ ```text
38
+ Godpowers Automation Providers
39
+
40
+ Config: .godpowers/automations.json
41
+ Recommended provider: <provider or none available>
42
+
43
+ Active automations:
44
+ - <id via provider: status or none recorded>
45
+
46
+ Provider status:
47
+ - <provider>: <status> (<class>)
48
+
49
+ Safe templates:
50
+ - daily-status: Daily Godpowers status, Daily at 9am local time, read-only
51
+ - stale-checkpoint: Stale checkpoint watcher, Weekdays at 9am local time, read-only
52
+ - review-queue: Review queue watcher, Daily at 10am local time, read-only
53
+ - weekly-hygiene: Weekly hygiene report, Monday at 9am local time, read-only
54
+ - release-readiness: Release readiness report, Manual or before release, read-only
55
+
56
+ Safety rules:
57
+ - Do not create automations during install.
58
+ - Create schedules, routines, background agents, or API triggers only after explicit user approval.
59
+ - Default templates are read-only.
60
+ ```
61
+
62
+ ## Proposition Closeout
63
+
64
+ End with:
65
+
66
+ ```text
67
+ Proposition:
68
+ 1. Implement partial: /god-automation-setup for one safe read-only template
69
+ 2. Implement complete: /god-automation-setup for all safe templates supported by the current host
70
+ 3. Discuss more: /god-discuss automation policy and provider choice
71
+ 4. Inspect status: /god-status to see project progress and automation status together
72
+ Recommended: <one option tied to the detected provider>
73
+ ```
74
+
75
+ If no provider is available, recommend manual `/god-next` or
76
+ `godpowers next --project .`.
@@ -46,7 +46,7 @@ Plain-text report grouped by severity:
46
46
  GODPOWERS DOCTOR
47
47
 
48
48
  Install: claude (~/.claude/)
49
- [OK] 106 skills installed
49
+ [OK] 108 skills installed
50
50
  [OK] 39 agents installed
51
51
  [OK] VERSION matches (1.6.6)
52
52
  [WARN] routing/god-doctor.yaml exists but skill file did not until now
@@ -178,8 +178,9 @@ Show:
178
178
  - short progress updates for phases, commands, validations, and file edits
179
179
  - concise validation summaries instead of full command noise when possible
180
180
  - final changed paths, validation results, and completion or pause status
181
- - final current status, open items, worktree/index state, and recommended next
182
- action
181
+ - final Godpowers Dashboard from disk, including phase, tier, step, progress,
182
+ planning visibility, proactive checks, open items, worktree/index state, and
183
+ recommended next action
183
184
 
184
185
  Hide:
185
186
  - raw spawn input
@@ -202,11 +203,11 @@ missing them, synthesize them from disk state before continuing.
202
203
 
203
204
  Before work starts:
204
205
 
205
- ```
206
+ ```text
206
207
  Next step
207
- Progress: <pct>% (<done> of <total> steps complete; current step <n> of <total>)
208
- Tier: <tier-number> <tier-label>
208
+ Phase: <plain-language phase> (tier <human ordinal> of <human total>)
209
209
  Step: <sub-step-label>
210
+ Progress: <pct>% (<done> of <total> steps complete; step <n> of <total>)
210
211
  Why this now: <one sentence>
211
212
  What will happen:
212
213
  1. <observable action>
@@ -216,11 +217,11 @@ Expected output: <artifact path or verification result>
216
217
 
217
218
  After work completes or pauses:
218
219
 
219
- ```
220
+ ```text
220
221
  Step result
221
- Progress: <pct>% (<done> of <total> steps complete; current step <n> of <total>)
222
- Tier: <tier-number> <tier-label>
222
+ Phase: <plain-language phase> (tier <human ordinal> of <human total>)
223
223
  Step: <sub-step-label>
224
+ Progress: <pct>% (<done> of <total> steps complete; step <n> of <total>)
224
225
  Result: <done | blocked | failed | skipped | imported>
225
226
  What happened:
226
227
  1. <observable action completed>