@jenga-ai/agent 1.1.0 → 1.1.1
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/README.md +7 -3
- package/agents/developer.md +82 -2
- package/agents/scrum-master.md +140 -21
- package/agents/tester.md +90 -8
- package/hooks/on_session_end.sh +171 -20
- package/package.json +1 -1
- package/scripts/check-permission-level.sh +107 -0
- package/scripts/check-publicignore-match.sh +122 -0
- package/scripts/check-worktree-liveness.sh +193 -0
- package/scripts/generate-rapport-manifest.sh +43 -0
- package/scripts/idea_manager.sh +47 -0
- package/scripts/install-worktree-commit-guard.sh +134 -0
- package/scripts/jenga-permission-level-switch.sh +109 -0
- package/scripts/smoke-harness.sh +139 -0
- package/scripts/validate-board.sh +62 -0
- package/scripts/with-lock.sh +158 -0
- package/scripts/worktree-remove-guard.sh +204 -0
- package/skills/clearify/SKILL.md +52 -0
- package/skills/commit/SKILL.md +13 -4
- package/skills/distribute/CONFIG_SCHEMA.md +60 -2
- package/skills/do/SKILL.md +48 -11
- package/skills/doc-sync/SKILL.md +16 -0
- package/skills/doc-sync/assets/doc_targets.md +11 -0
- package/skills/idea/SKILL.md +56 -0
- package/skills/idea/assets/idea_handoff_template.md +26 -0
- package/skills/idea/assets/idea_template.md +3 -0
- package/skills/init/SKILL.md +100 -7
- package/skills/init/assets/directory_structure.txt +1 -0
- package/skills/init/assets/workflow_template.json +1 -1
- package/skills/init/scripts/apply-project-visibility.sh +176 -0
- package/skills/init/scripts/detect-existing-codebase.sh +166 -0
- package/skills/init/scripts/init.sh +30 -1
- package/skills/jenga/SKILL.md +160 -17
- package/skills/jenga/scripts/board-scan.sh +238 -0
- package/skills/jenga/scripts/cascade-resolve.sh +297 -0
- package/skills/jenga/scripts/render-confirmation.sh +679 -0
- package/skills/jenga/scripts/render-picker.sh +439 -0
- package/skills/jenga/scripts/resolve-id.sh +367 -0
- package/skills/jenga-permission-level/SKILL.md +81 -0
- package/skills/proceed/SKILL.md +1 -1
- package/skills/publish/SKILL.md +8 -5
- package/skills/publish/assets/ci-contract.md +2 -2
- package/skills/publish/assets/ownership-matrix.md +1 -1
- package/skills/publish/scripts/finalize_changelog.sh +115 -0
- package/skills/publish/scripts/generate_release_notes.sh +475 -28
- package/skills/publish/scripts/npm_ci_pipeline.sh +44 -6
- package/skills/publish/scripts/publish_deploy.sh +38 -8
- package/skills/publish/scripts/run_gates.sh +2 -2
- package/skills/reconcile/SKILL.md +117 -5
- package/skills/reconcile/scripts/detect-unlinked-code.sh +741 -0
- package/skills/skillify/assets/init-new/assets/directory_structure.txt +5 -1
- package/skills/spinoff/SKILL.md +12 -7
- package/skills/todo/SKILL.md +2 -0
- package/skills/uncharted/SKILL.md +711 -0
- package/skills/uncharted/assets/SEGMENT_PROPOSAL_TEMPLATE.md +129 -0
- package/skills/uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md +160 -0
- package/skills/uncharted/scripts/apply-subsystem-cap.sh +573 -0
- package/skills/uncharted/scripts/detect-dependencies.sh +732 -0
- package/skills/uncharted/scripts/detect-tests.sh +553 -0
- package/skills/uncharted/scripts/discover-subsystems.sh +1029 -0
- package/skills/uncharted/scripts/enumerate-target.sh +470 -0
- package/skills/uncharted/scripts/import-source.sh +517 -0
- package/skills/uncharted/scripts/inspect-provenance.sh +573 -0
- package/skills/uncharted/scripts/resolve-segment-target.sh +640 -0
- package/skills/uncharted/scripts/run-engine.sh +655 -0
- package/skills/uncharted/scripts/validate-proposed-items.sh +125 -0
- package/skills/uncharted/scripts/write-backfilled-epics.sh +498 -0
- package/skills/wtf/SKILL.md +20 -0
- package/templates/CHANGELOG_TEMPLATE.md +13 -0
- package/templates/PROBLEM_RAPPORT_TEMPLATE.md +4 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +157 -10
- package/templates/permission-levels/README.md +73 -0
- package/templates/permission-levels/level-1-locked.json +71 -0
- package/templates/permission-levels/level-2-guarded.json +64 -0
- package/templates/permission-levels/level-3-standard.json +62 -0
- package/templates/permission-levels/level-4-elevated.json +60 -0
- package/templates/permission-levels/level-5-unrestricted.json +58 -0
- package/skills/convert/SKILL.md +0 -124
- package/skills/convert/convert_cli.py +0 -235
- package/skills/convert/tests/sample.csv +0 -4
- package/skills/convert/tests/sample.json +0 -5
- package/skills/convert/tests/sample.jsonl +0 -3
- package/skills/convert/tests/sample.yaml +0 -18
- package/skills/convert/tests/sample_obj.csv +0 -2
- package/skills/convert/tests/sample_obj.json +0 -9
- package/skills/mirror-public/SKILL.md +0 -237
- package/skills/mirror-public/assets/config.json +0 -5
- package/skills/mirror-public/scripts/mirror.sh +0 -374
- package/skills/self-sync/SKILL.md +0 -73
- package/skills/self-sync/scripts/run.js +0 -136
- package/skills/strategy/SKILL.md +0 -312
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: self-sync
|
|
3
|
-
description: Mirror this repo's root-level framework directories into its own `.claude/` and `.agents/` sub-trees so edits to `/skills/*`, `/agents/*`, `/hooks/*`, `/scripts/*`, `/templates/*`, and `settings.json` take effect in the current Claude Code (and non-Claude) agent session — the in-repo replacement for the retired `/distribute` self-sync loop.
|
|
4
|
-
keywords:
|
|
5
|
-
- "self sync"
|
|
6
|
-
- "mirror skills"
|
|
7
|
-
- "sync .claude"
|
|
8
|
-
- "sync .agents"
|
|
9
|
-
- "in-repo distribute"
|
|
10
|
-
examples:
|
|
11
|
-
- "self-sync the mirrors"
|
|
12
|
-
- "/self-sync --dry-run"
|
|
13
|
-
- "refresh .claude/skills from root"
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# Self-Sync
|
|
17
|
-
|
|
18
|
-
Copies the framework's root-level entries into this repo's own `.claude/` and `.agents/` mirrors so agent tooling (Claude Code, Copilot, custom) picks up local edits without reinstalling or running `/distribute`.
|
|
19
|
-
|
|
20
|
-
Delegates the actual filesystem work to `lib/mirror.js`, the same helper used by `scripts/postinstall.js` on consumer installs. Two-directory mirror + delete reconciliation are the only differences from that consumer path.
|
|
21
|
-
|
|
22
|
-
## Instructions
|
|
23
|
-
|
|
24
|
-
1. If the user passed `--dry-run` (or asked for a preview), invoke:
|
|
25
|
-
```
|
|
26
|
-
node skills/self-sync/scripts/run.js --dry-run
|
|
27
|
-
```
|
|
28
|
-
Report the printed plan (added / overwritten / deleted) verbatim.
|
|
29
|
-
|
|
30
|
-
2. Otherwise, invoke:
|
|
31
|
-
```
|
|
32
|
-
node skills/self-sync/scripts/run.js
|
|
33
|
-
```
|
|
34
|
-
Report the printed summary. Do not run any inline `cp`, `rsync`, or `fs` commands — all mirroring goes through the script.
|
|
35
|
-
|
|
36
|
-
3. If the summary shows `+0 ~0 -0` on a second consecutive real run, the mirrors are already in sync — surface that as confirmation of idempotency.
|
|
37
|
-
|
|
38
|
-
## Copy Set
|
|
39
|
-
|
|
40
|
-
The script mirrors exactly these root-level entries:
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
bin/ lib/ scripts/ agents/ hooks/ mcp/ skills/ templates/ settings.json
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
This is an **explicit constant** in `scripts/run.js`, deliberately not derived at runtime from `package.json` `files`. Two reasons:
|
|
47
|
-
|
|
48
|
-
- `package.json` `files` includes `README.md` and `LICENSE`, which should not appear in the agent mirrors.
|
|
49
|
-
- `settings.json` is required in the mirrors but is intentionally not shipped in the npm tarball, so it does not appear in `files`.
|
|
50
|
-
|
|
51
|
-
The list is kept aligned with `package.json` `files` by convention. If a new top-level framework directory is added, update both.
|
|
52
|
-
|
|
53
|
-
## Invocation Model
|
|
54
|
-
|
|
55
|
-
**Manual invocation only.** The user runs `/self-sync` (or `node skills/self-sync/scripts/run.js`) after making framework edits and before expecting them to be visible to the current agent session.
|
|
56
|
-
|
|
57
|
-
Rationale: an on-`/commit` or file-watch trigger would fire on every edit — including drafts that shouldn't leak into the mirrors — and would obscure the write footprint (delete reconciliation prunes orphans, so accidental deletes on the source side propagate). Making the sync explicit keeps the human in the loop for a destructive-by-default operation, which matches the framework's boundary-checked, dry-runnable posture.
|
|
58
|
-
|
|
59
|
-
## Dry-Run Behavior
|
|
60
|
-
|
|
61
|
-
`--dry-run` computes the full plan (added / overwritten / deleted / unchanged) via `lib/mirror.js` without touching the filesystem. Use it before every real run when the mirror state is uncertain, or when running in a repo where uncommitted mirror edits might exist.
|
|
62
|
-
|
|
63
|
-
## Safety Guarantees
|
|
64
|
-
|
|
65
|
-
- **Never writes outside the repo root.** `lib/mirror.js` boundary-checks every destination path with `assertInside(destRoot, target)`; the helper throws if a resolved child escapes its destination root.
|
|
66
|
-
- **Additive helper + explicit reconciliation.** The mirror helper is additive by default; delete reconciliation is enabled only because this skill passes `reconcileDeletes: true`.
|
|
67
|
-
- **No shell out.** Pure Node built-ins (`node:fs`, `node:path`) — no `cp`, `rsync`, or subprocess calls.
|
|
68
|
-
- **Idempotent.** A second consecutive run reports `+0 ~0 -0` because the byte-comparison in `filesEqual` classifies unchanged files as `skipped`.
|
|
69
|
-
|
|
70
|
-
## Guard Rails
|
|
71
|
-
|
|
72
|
-
- Do not inline mirroring logic in this skill body — all filesystem work goes through `scripts/run.js` → `lib/mirror.js`.
|
|
73
|
-
- Do not run this skill from a directory other than a checkout of the framework repo itself. `scripts/postinstall.js` handles consumer installs; this skill handles the framework's own repo.
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* skills/self-sync/scripts/run.js — In-repo mirror runner
|
|
4
|
-
*
|
|
5
|
-
* Mirrors this repo's root-level framework directories into its own
|
|
6
|
-
* `.claude/` and `.agents/` sub-trees so edits to `/skills/*`, `/agents/*`,
|
|
7
|
-
* `/hooks/*`, etc. take effect in the current Claude Code / non-Claude agent
|
|
8
|
-
* session without a `/distribute` cycle.
|
|
9
|
-
*
|
|
10
|
-
* Wraps lib/mirror.js — same helper used by scripts/postinstall.js — but
|
|
11
|
-
* with `reconcileDeletes: true` so orphans in the mirrors are pruned.
|
|
12
|
-
*
|
|
13
|
-
* Flags:
|
|
14
|
-
* --dry-run Print the plan without writing.
|
|
15
|
-
*/
|
|
16
|
-
import fs from 'node:fs';
|
|
17
|
-
import path from 'node:path';
|
|
18
|
-
import { fileURLToPath } from 'node:url';
|
|
19
|
-
|
|
20
|
-
import { mirror } from '../../../lib/mirror.js';
|
|
21
|
-
|
|
22
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
-
const __dirname = path.dirname(__filename);
|
|
24
|
-
|
|
25
|
-
// Repo root is four levels up: run.js → scripts → self-sync → skills → repo
|
|
26
|
-
const REPO_ROOT = path.resolve(__dirname, '..', '..', '..');
|
|
27
|
-
|
|
28
|
-
// Explicit copy set — documented in SKILL.md.
|
|
29
|
-
// Aligned with package.json `files`, plus `settings.json` (not shipped in
|
|
30
|
-
// the npm tarball but required in-repo so Claude Code picks it up locally).
|
|
31
|
-
const COPY_SET = [
|
|
32
|
-
'bin',
|
|
33
|
-
'lib',
|
|
34
|
-
'scripts',
|
|
35
|
-
'agents',
|
|
36
|
-
'hooks',
|
|
37
|
-
'mcp',
|
|
38
|
-
'skills',
|
|
39
|
-
'templates',
|
|
40
|
-
'settings.json',
|
|
41
|
-
];
|
|
42
|
-
|
|
43
|
-
const DEST_ROOTS = ['.claude', '.agents'];
|
|
44
|
-
|
|
45
|
-
// Basenames to skip anywhere in the walk. These are recursive mirror
|
|
46
|
-
// artifacts, dev caches, or scm dirs that must never propagate into the
|
|
47
|
-
// agent-visible mirror. `.agents` and `.claude` in particular can appear
|
|
48
|
-
// nested inside `agents/` and `skills/` from legacy distribute runs.
|
|
49
|
-
const EXCLUDE = [
|
|
50
|
-
'.agents',
|
|
51
|
-
'.claude',
|
|
52
|
-
'.git',
|
|
53
|
-
'.tmp',
|
|
54
|
-
'.training',
|
|
55
|
-
'node_modules',
|
|
56
|
-
'.DS_Store',
|
|
57
|
-
];
|
|
58
|
-
|
|
59
|
-
function parseArgs(argv) {
|
|
60
|
-
const dryRun = argv.includes('--dry-run');
|
|
61
|
-
return { dryRun };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function short(p) {
|
|
65
|
-
return path.relative(REPO_ROOT, p) || '.';
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function printSection(label, items) {
|
|
69
|
-
if (items.length === 0) return;
|
|
70
|
-
console.log(` ${label} (${items.length}):`);
|
|
71
|
-
for (const item of items) {
|
|
72
|
-
console.log(` - ${short(item)}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function main() {
|
|
77
|
-
const { dryRun } = parseArgs(process.argv.slice(2));
|
|
78
|
-
|
|
79
|
-
console.log('');
|
|
80
|
-
console.log('╔══════════════════════════════════════════════════════╗');
|
|
81
|
-
console.log(`║ /self-sync — mirror root → .claude/ + .agents/ ║`);
|
|
82
|
-
console.log('╚══════════════════════════════════════════════════════╝');
|
|
83
|
-
console.log(` Repo root : ${REPO_ROOT}`);
|
|
84
|
-
console.log(` Copy set : ${COPY_SET.join(', ')}`);
|
|
85
|
-
console.log(` Dry-run : ${dryRun ? 'YES (no writes)' : 'no'}`);
|
|
86
|
-
console.log('');
|
|
87
|
-
|
|
88
|
-
const missing = COPY_SET.filter(
|
|
89
|
-
(entry) => !fs.existsSync(path.join(REPO_ROOT, entry))
|
|
90
|
-
);
|
|
91
|
-
if (missing.length > 0) {
|
|
92
|
-
console.log(` ⚠ Missing from repo root — skipped: ${missing.join(', ')}`);
|
|
93
|
-
console.log('');
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const totals = { added: 0, overwritten: 0, deleted: 0, skipped: 0 };
|
|
97
|
-
|
|
98
|
-
for (const targetRoot of DEST_ROOTS) {
|
|
99
|
-
const destRoot = path.join(REPO_ROOT, targetRoot);
|
|
100
|
-
console.log(`→ ${targetRoot}/`);
|
|
101
|
-
|
|
102
|
-
const result = mirror({
|
|
103
|
-
sourceRoot: REPO_ROOT,
|
|
104
|
-
destRoot,
|
|
105
|
-
copySet: COPY_SET,
|
|
106
|
-
dryRun,
|
|
107
|
-
reconcileDeletes: true,
|
|
108
|
-
exclude: EXCLUDE,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
printSection('added', result.added);
|
|
112
|
-
printSection('overwritten', result.overwritten);
|
|
113
|
-
printSection('deleted', result.deleted);
|
|
114
|
-
console.log(
|
|
115
|
-
` summary: +${result.added.length} ~${result.overwritten.length} -${result.deleted.length} =${result.skipped.length}`
|
|
116
|
-
);
|
|
117
|
-
console.log('');
|
|
118
|
-
|
|
119
|
-
totals.added += result.added.length;
|
|
120
|
-
totals.overwritten += result.overwritten.length;
|
|
121
|
-
totals.deleted += result.deleted.length;
|
|
122
|
-
totals.skipped += result.skipped.length;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
console.log('──────────────────────────────────────────────────────');
|
|
126
|
-
console.log(
|
|
127
|
-
` Total: +${totals.added} added ~${totals.overwritten} overwritten -${totals.deleted} deleted =${totals.skipped} unchanged`
|
|
128
|
-
);
|
|
129
|
-
if (dryRun) {
|
|
130
|
-
console.log(' (dry-run — nothing was written)');
|
|
131
|
-
}
|
|
132
|
-
console.log('──────────────────────────────────────────────────────');
|
|
133
|
-
console.log('');
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
main();
|
package/skills/strategy/SKILL.md
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: strategy
|
|
3
|
-
description: Walk through a guided conversation to capture or update docs/STRATEGY.md — covering Vision, Value Proposition, Scope, and Target Audience — one section at a time.
|
|
4
|
-
metadata:
|
|
5
|
-
prefered_agent: developer
|
|
6
|
-
keywords:
|
|
7
|
-
- strategy
|
|
8
|
-
- strategic brief
|
|
9
|
-
- vision
|
|
10
|
-
- value proposition
|
|
11
|
-
- target audience
|
|
12
|
-
examples:
|
|
13
|
-
- "/strategy"
|
|
14
|
-
- "let's capture the strategy"
|
|
15
|
-
- "update the strategy brief"
|
|
16
|
-
- "write the strategy doc"
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
# Strategy — Guided Capture of docs/STRATEGY.md
|
|
20
|
-
|
|
21
|
-
## Entry Point
|
|
22
|
-
|
|
23
|
-
Check whether `docs/STRATEGY.md` exists before proceeding.
|
|
24
|
-
|
|
25
|
-
- If the file does **not** exist → run **Phase A — New Capture Flow** below.
|
|
26
|
-
- If the file **does** exist → run **Phase B — Update Existing File** below.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Phase A — New Capture Flow
|
|
31
|
-
|
|
32
|
-
Walk the user through four sections in order. Ask **one focused question per section**. Do not present a list of questions up front. Wait for the user's answer before moving to the next section.
|
|
33
|
-
|
|
34
|
-
### Step 1 — Vision
|
|
35
|
-
|
|
36
|
-
Ask the user exactly:
|
|
37
|
-
|
|
38
|
-
> "What is the long-term direction or ambition for this project? Describe where you want it to be in 3–5 years, or what success ultimately looks like."
|
|
39
|
-
|
|
40
|
-
Wait for the answer. Record it as the **Vision** content.
|
|
41
|
-
|
|
42
|
-
### Step 2 — Value Proposition
|
|
43
|
-
|
|
44
|
-
Ask the user exactly:
|
|
45
|
-
|
|
46
|
-
> "What makes this project uniquely valuable? What would users or teams miss most if it didn't exist?"
|
|
47
|
-
|
|
48
|
-
Wait for the answer. Record it as the **Value Proposition** content.
|
|
49
|
-
|
|
50
|
-
### Step 3 — Scope: In Scope
|
|
51
|
-
|
|
52
|
-
Ask the user exactly:
|
|
53
|
-
|
|
54
|
-
> "What does this project explicitly cover? List the main capabilities or areas of responsibility."
|
|
55
|
-
|
|
56
|
-
Wait for the answer. Record it as the **In Scope** content.
|
|
57
|
-
|
|
58
|
-
### Step 4 — Scope: Out of Scope
|
|
59
|
-
|
|
60
|
-
Ask the user exactly:
|
|
61
|
-
|
|
62
|
-
> "What does this project explicitly NOT cover? (Do not include revenue models, pricing, or competitive analysis — those are always out of scope.)"
|
|
63
|
-
|
|
64
|
-
Wait for the answer. Record it as the **Out of Scope** content. The model must also always append to the Out of Scope section (regardless of whether the user mentions them):
|
|
65
|
-
|
|
66
|
-
- Revenue model, pricing strategy, or monetisation plans
|
|
67
|
-
- Competitive analysis or feature comparison with other tools
|
|
68
|
-
|
|
69
|
-
Do not ask the user for these — include them silently.
|
|
70
|
-
|
|
71
|
-
### Step 5 — Target Audience
|
|
72
|
-
|
|
73
|
-
Ask the user exactly:
|
|
74
|
-
|
|
75
|
-
> "Who is this built for? Describe the primary user personas or teams."
|
|
76
|
-
|
|
77
|
-
Wait for the answer. Record it as the **Target Audience** content.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## Pre-Write Summary and Confirmation
|
|
82
|
-
|
|
83
|
-
After collecting all five pieces of content (Vision, Value Proposition, In Scope, Out of Scope, Target Audience), surface a formatted summary. Use exactly this shape:
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
Here is what will be written to docs/STRATEGY.md:
|
|
87
|
-
|
|
88
|
-
## Vision
|
|
89
|
-
<vision content>
|
|
90
|
-
|
|
91
|
-
## Value Proposition
|
|
92
|
-
<value proposition content>
|
|
93
|
-
|
|
94
|
-
## Scope
|
|
95
|
-
|
|
96
|
-
### In Scope
|
|
97
|
-
<in-scope content>
|
|
98
|
-
|
|
99
|
-
### Out of Scope
|
|
100
|
-
<out-of-scope content (user answer + always-excluded items)>
|
|
101
|
-
|
|
102
|
-
## Target Audience
|
|
103
|
-
<target audience content>
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
Does this look right? Type **yes** to write `docs/STRATEGY.md`, or tell me what to change.
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
- If the user says **yes** (or any clear affirmative) → proceed to the Write step.
|
|
111
|
-
- If the user requests a change → re-ask the relevant question(s) using the same prompts from Phase A, collect the updated answer(s), then loop back to this summary step. Do not write the file until the user explicitly confirms.
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Write the File
|
|
116
|
-
|
|
117
|
-
Generate `docs/STRATEGY.md` using **only the content collected in the conversation**. Do not invent facts, add filler text, or leave any placeholder text in the output.
|
|
118
|
-
|
|
119
|
-
The file must follow this exact structure:
|
|
120
|
-
|
|
121
|
-
```markdown
|
|
122
|
-
# Strategy Brief
|
|
123
|
-
|
|
124
|
-
> **Audience:** Investors and strategic partners. This document does not include revenue models, pricing, or competitive analysis.
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Vision
|
|
129
|
-
|
|
130
|
-
<vision content>
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Value Proposition
|
|
135
|
-
|
|
136
|
-
<value proposition content>
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## Scope
|
|
141
|
-
|
|
142
|
-
### In Scope
|
|
143
|
-
|
|
144
|
-
<in-scope content>
|
|
145
|
-
|
|
146
|
-
### Out of Scope
|
|
147
|
-
|
|
148
|
-
<out-of-scope content>
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Target Audience
|
|
153
|
-
|
|
154
|
-
<target audience content>
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
Write the file to `docs/STRATEGY.md`. After writing, print exactly:
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
Written to `docs/STRATEGY.md` — captured Vision, Value Proposition, Scope, and Target Audience.
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Phase B — Update Existing File
|
|
166
|
-
|
|
167
|
-
`docs/STRATEGY.md` already exists. Do **not** run the new-capture flow. Instead, walk the user through each section so they can decide what to keep and what to replace.
|
|
168
|
-
|
|
169
|
-
### Step 1 — Read the Existing File
|
|
170
|
-
|
|
171
|
-
Read `docs/STRATEGY.md` in full. Parse out the content under each of the four sections:
|
|
172
|
-
|
|
173
|
-
- **Vision** — content under `## Vision`
|
|
174
|
-
- **Value Proposition** — content under `## Value Proposition`
|
|
175
|
-
- **In Scope** — content under `### In Scope`
|
|
176
|
-
- **Out of Scope** — content under `### Out of Scope`
|
|
177
|
-
- **Target Audience** — content under `## Target Audience`
|
|
178
|
-
|
|
179
|
-
Store these as the current values for each section. They will be used as defaults unless the user explicitly chooses to update them.
|
|
180
|
-
|
|
181
|
-
### Step 2 — Surface Each Section One at a Time
|
|
182
|
-
|
|
183
|
-
Work through the sections in this order: Vision, Value Proposition, Scope (In + Out together), Target Audience.
|
|
184
|
-
|
|
185
|
-
For **Vision**, present exactly:
|
|
186
|
-
|
|
187
|
-
> "Here is the current Vision:
|
|
188
|
-
>
|
|
189
|
-
> ---
|
|
190
|
-
> <existing vision content>
|
|
191
|
-
> ---
|
|
192
|
-
>
|
|
193
|
-
> Do you want to keep this or update it? (keep / update)"
|
|
194
|
-
|
|
195
|
-
- If "keep" → store the existing Vision content unchanged and move on.
|
|
196
|
-
- If "update" → ask exactly:
|
|
197
|
-
> "What is the long-term direction or ambition for this project? Describe where you want it to be in 3–5 years, or what success ultimately looks like."
|
|
198
|
-
Wait for the answer. Store it as the new Vision content.
|
|
199
|
-
|
|
200
|
-
For **Value Proposition**, present exactly:
|
|
201
|
-
|
|
202
|
-
> "Here is the current Value Proposition:
|
|
203
|
-
>
|
|
204
|
-
> ---
|
|
205
|
-
> <existing value proposition content>
|
|
206
|
-
> ---
|
|
207
|
-
>
|
|
208
|
-
> Do you want to keep this or update it? (keep / update)"
|
|
209
|
-
|
|
210
|
-
- If "keep" → store the existing Value Proposition content unchanged and move on.
|
|
211
|
-
- If "update" → ask exactly:
|
|
212
|
-
> "What makes this project uniquely valuable? What would users or teams miss most if it didn't exist?"
|
|
213
|
-
Wait for the answer. Store it as the new Value Proposition content.
|
|
214
|
-
|
|
215
|
-
For **Scope**, present the In Scope and Out of Scope content together:
|
|
216
|
-
|
|
217
|
-
> "Here is the current Scope:
|
|
218
|
-
>
|
|
219
|
-
> **In Scope**
|
|
220
|
-
> ---
|
|
221
|
-
> <existing in-scope content>
|
|
222
|
-
> ---
|
|
223
|
-
>
|
|
224
|
-
> **Out of Scope**
|
|
225
|
-
> ---
|
|
226
|
-
> <existing out-of-scope content>
|
|
227
|
-
> ---
|
|
228
|
-
>
|
|
229
|
-
> Do you want to keep this or update it? (keep / update)"
|
|
230
|
-
|
|
231
|
-
- If "keep" → store the existing In Scope and Out of Scope content unchanged and move on.
|
|
232
|
-
- If "update" → ask the two focused scope questions from Phase A in sequence:
|
|
233
|
-
1. > "What does this project explicitly cover? List the main capabilities or areas of responsibility."
|
|
234
|
-
Wait for the answer. Store as the new In Scope content.
|
|
235
|
-
2. > "What does this project explicitly NOT cover? (Do not include revenue models, pricing, or competitive analysis — those are always out of scope.)"
|
|
236
|
-
Wait for the answer. Store as the new Out of Scope content. Silently append the always-excluded items (revenue model, pricing strategy, competitive analysis) as in Phase A — do not ask the user for these.
|
|
237
|
-
|
|
238
|
-
For **Target Audience**, present exactly:
|
|
239
|
-
|
|
240
|
-
> "Here is the current Target Audience:
|
|
241
|
-
>
|
|
242
|
-
> ---
|
|
243
|
-
> <existing target audience content>
|
|
244
|
-
> ---
|
|
245
|
-
>
|
|
246
|
-
> Do you want to keep this or update it? (keep / update)"
|
|
247
|
-
|
|
248
|
-
- If "keep" → store the existing Target Audience content unchanged and move on.
|
|
249
|
-
- If "update" → ask exactly:
|
|
250
|
-
> "Who is this built for? Describe the primary user personas or teams."
|
|
251
|
-
Wait for the answer. Store it as the new Target Audience content.
|
|
252
|
-
|
|
253
|
-
### Step 3 — Pre-Write Summary and Confirmation
|
|
254
|
-
|
|
255
|
-
After all four sections have been decided (either kept or updated), surface a full formatted preview of the final document. Use exactly this shape:
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
Here is what will be written to docs/STRATEGY.md:
|
|
259
|
-
|
|
260
|
-
## Vision
|
|
261
|
-
<vision content>
|
|
262
|
-
|
|
263
|
-
## Value Proposition
|
|
264
|
-
<value proposition content>
|
|
265
|
-
|
|
266
|
-
## Scope
|
|
267
|
-
|
|
268
|
-
### In Scope
|
|
269
|
-
<in-scope content>
|
|
270
|
-
|
|
271
|
-
### Out of Scope
|
|
272
|
-
<out-of-scope content>
|
|
273
|
-
|
|
274
|
-
## Target Audience
|
|
275
|
-
<target audience content>
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
|
-
Does this look right? Type **yes** to overwrite `docs/STRATEGY.md`, or tell me what to change.
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
- If the user says **yes** (or any clear affirmative) → proceed to the Write step.
|
|
283
|
-
- If the user requests a change → re-surface only the relevant section(s) using the same keep/update flow above, collect the updated answer(s), then loop back to this preview step. Do not write the file until the user explicitly confirms.
|
|
284
|
-
|
|
285
|
-
### Step 4 — Write the File
|
|
286
|
-
|
|
287
|
-
Overwrite `docs/STRATEGY.md` using exactly the same format as Phase A output — only real content from the conversation, no placeholder text. Apply all hard constraints from the Hard Constraints block below.
|
|
288
|
-
|
|
289
|
-
After writing, print exactly:
|
|
290
|
-
|
|
291
|
-
```
|
|
292
|
-
Written to `docs/STRATEGY.md` — updated Vision, Value Proposition, Scope, and Target Audience.
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
If some sections were kept unchanged and others were updated, list only the updated sections:
|
|
296
|
-
|
|
297
|
-
```
|
|
298
|
-
Written to `docs/STRATEGY.md` — updated <list of updated sections>.
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
## Hard Constraints
|
|
304
|
-
|
|
305
|
-
Enforce these rules throughout the entire skill session — at every step, in every question, and in the written output:
|
|
306
|
-
|
|
307
|
-
1. **Never ask about** revenue model, pricing, monetisation, competitive analysis, market positioning, financial projections, or any topic outside Vision, Value Proposition, Scope, and Target Audience.
|
|
308
|
-
2. **Never write the file** without receiving explicit user confirmation ("yes" or a clear affirmative) at the pre-write summary step.
|
|
309
|
-
3. **Never include placeholder text** in the written output. Every section must contain real content from the conversation.
|
|
310
|
-
4. **Never add sections** beyond the four defined ones (Vision, Value Proposition, Scope, Target Audience) and their required sub-sections.
|
|
311
|
-
5. **Always include** the audience callout block at the top of the written file, verbatim.
|
|
312
|
-
6. **Always include** the always-excluded Out of Scope items (revenue model, pricing, competitive analysis) even if the user omits them.
|