cadence-skill-installer 0.2.19 → 0.2.20
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/package.json +1 -1
- package/skill/SKILL.md +6 -5
- package/skill/agents/openai.yaml +1 -1
- package/skill/scripts/run-prerequisite-gate.py +18 -1
- package/skill/skills/prerequisite-gate/SKILL.md +9 -10
- package/skill/skills/prerequisite-gate/agents/openai.yaml +1 -1
- package/skill/skills/scaffold/SKILL.md +15 -18
- package/skill/skills/scaffold/agents/openai.yaml +1 -1
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -19,11 +19,12 @@ description: Structured project operating system for end-to-end greenfield or br
|
|
|
19
19
|
|
|
20
20
|
## Repo Status Gate
|
|
21
21
|
1. At Cadence entry (first assistant response in the conversation), resolve `PROJECT_ROOT` with `python3 scripts/resolve-project-root.py --project-root "$PWD"` (resolve script paths from this skill directory but keep command cwd at the active project).
|
|
22
|
-
2.
|
|
23
|
-
3.
|
|
24
|
-
4.
|
|
25
|
-
5.
|
|
26
|
-
6.
|
|
22
|
+
2. If `"$PROJECT_ROOT/.cadence"` exists, run `python3 scripts/check-project-repo-status.py --project-root "$PROJECT_ROOT"`.
|
|
23
|
+
3. If `"$PROJECT_ROOT/.cadence"` does not exist, skip this gate at root entry and let `skills/scaffold/SKILL.md` establish repo mode after scaffold initialization.
|
|
24
|
+
4. Read `repo_enabled` from script output and treat it as the authoritative push mode for the active subskill conversation.
|
|
25
|
+
5. If `repo_enabled` is false, continue with local commits only until a GitHub remote is configured.
|
|
26
|
+
6. Do not rerun this gate between normal user replies inside the same active subskill conversation.
|
|
27
|
+
7. Rerun this gate only when:
|
|
27
28
|
- starting a new Cadence conversation
|
|
28
29
|
- transitioning to a different subskill after a completed checkpoint
|
|
29
30
|
- handling explicit resume/status/reroute requests
|
package/skill/agents/openai.yaml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Cadence"
|
|
3
3
|
short_description: "Lifecycle + delivery system for structured project execution"
|
|
4
|
-
default_prompt: "Use Cadence to guide this project from lifecycle setup through phased execution, traceability, audit, and milestone completion. Always read and apply the active SOUL persona from .cadence/SOUL.json (fallback: SOUL.json). Keep user-facing responses concise and outcome-focused, and never expose internal skill-routing or command-execution traces unless the user explicitly asks. Do not announce successful internal checks; only surface them when a check fails and blocks progress. At Cadence entry (first assistant response in a conversation),
|
|
4
|
+
default_prompt: "Use Cadence to guide this project from lifecycle setup through phased execution, traceability, audit, and milestone completion. Always read and apply the active SOUL persona from .cadence/SOUL.json (fallback: SOUL.json). Keep user-facing responses concise and outcome-focused, and never expose internal skill-routing or command-execution traces unless the user explicitly asks. Do not announce successful internal checks; only surface them when a check fails and blocks progress. At Cadence entry (first assistant response in a conversation), resolve PROJECT_ROOT with scripts/resolve-project-root.py --project-root \"$PWD\". If \"$PROJECT_ROOT/.cadence\" exists, run scripts/check-project-repo-status.py --project-root \"$PROJECT_ROOT\" and treat repo_enabled as the authoritative push mode (if false, keep commits local-only). If \"$PROJECT_ROOT/.cadence\" is missing, run scaffold first and let scaffold establish repo mode. After scaffold handling, run scripts/read-workflow-state.py --project-root \"$PROJECT_ROOT\" and treat route.skill_name as authoritative for the next state-changing skill. During normal multi-turn subskill conversation flow, do not rerun repo/route gates between each user reply; rerun them only when checkpointing into a new subskill, handling explicit resume/status/reroute requests, or recovering from assertion/gate failures. Invoke skills/prerequisite-gate/SKILL.md only when route.skill_name is prerequisite-gate. If scaffold and prerequisite complete in-thread and route advances to ideator, force subskill handoff with: Start a new chat and either say \"help me define my project\" or share your project brief. In later chats, if route.skill_name is ideator, do not rerun prerequisite; invoke skills/ideator/SKILL.md in the same chat, and if the user has not provided ideation input yet, ask one kickoff ideation question in-thread instead of handing off again. Do not force a new-chat handoff when route advances from ideator to researcher; on the next cadence invocation, route directly from workflow state. If route.skill_name is researcher, invoke skills/researcher/SKILL.md and enforce one pass per conversation; when more passes remain, end with: Start a new chat and say \"continue research\". If user intent indicates resuming/continuing work or asking progress, invoke skills/project-progress/SKILL.md first, report current phase, then route to the next step. If the user manually requests a Cadence subskill, resolve PROJECT_ROOT with scripts/resolve-project-root.py --project-root \"$PWD\" and then run scripts/assert-workflow-route.py --skill-name <subskill> --project-root \"$PROJECT_ROOT\" before any state-changing actions. Ensure direct subskill execution follows the same Git Checkpoints policy from this main skill: run scripts/finalize-skill-checkpoint.py with each subskill's configured --scope/--checkpoint and --paths ., allow status=no_changes without failure, and treat checkpoint or push failures as blocking errors surfaced verbatim."
|
|
@@ -29,6 +29,11 @@ def parse_args() -> argparse.Namespace:
|
|
|
29
29
|
default="",
|
|
30
30
|
help="Explicit project root path override.",
|
|
31
31
|
)
|
|
32
|
+
parser.add_argument(
|
|
33
|
+
"--scripts-dir",
|
|
34
|
+
default="",
|
|
35
|
+
help="Optional pre-resolved cadence scripts directory. Skips scripts-dir resolution when provided.",
|
|
36
|
+
)
|
|
32
37
|
return parser.parse_args()
|
|
33
38
|
|
|
34
39
|
|
|
@@ -108,6 +113,7 @@ def write_prerequisite_state(scripts_dir, pass_state, project_root: Path):
|
|
|
108
113
|
def main():
|
|
109
114
|
args = parse_args()
|
|
110
115
|
explicit_project_root = args.project_root.strip() or None
|
|
116
|
+
explicit_scripts_dir = args.scripts_dir.strip()
|
|
111
117
|
try:
|
|
112
118
|
project_root, _ = resolve_project_root(
|
|
113
119
|
script_dir=SCRIPT_DIR,
|
|
@@ -121,7 +127,18 @@ def main():
|
|
|
121
127
|
|
|
122
128
|
write_project_root_hint(SCRIPT_DIR, project_root)
|
|
123
129
|
assert_expected_route(project_root)
|
|
124
|
-
|
|
130
|
+
if explicit_scripts_dir:
|
|
131
|
+
scripts_path = Path(explicit_scripts_dir).expanduser()
|
|
132
|
+
if not scripts_path.is_absolute():
|
|
133
|
+
scripts_path = (project_root / scripts_path).resolve()
|
|
134
|
+
else:
|
|
135
|
+
scripts_path = scripts_path.resolve()
|
|
136
|
+
if not scripts_path.is_dir():
|
|
137
|
+
print("INVALID_CADENCE_SCRIPTS_DIR", file=sys.stderr)
|
|
138
|
+
raise SystemExit(1)
|
|
139
|
+
scripts_dir = str(scripts_path)
|
|
140
|
+
else:
|
|
141
|
+
scripts_dir = resolve_scripts_dir(project_root)
|
|
125
142
|
state = read_prerequisite_state(scripts_dir, project_root)
|
|
126
143
|
|
|
127
144
|
if state == "true":
|
|
@@ -9,13 +9,12 @@ description: Run and persist Cadence prerequisite checks for Python availability
|
|
|
9
9
|
2. Resolve project root by running `python3 ../../scripts/resolve-project-root.py --require-cadence` and store stdout in `PROJECT_ROOT`.
|
|
10
10
|
3. Resolve helper scripts dir by running `python3 ../../scripts/resolve-project-scripts-dir.py --project-root "$PROJECT_ROOT"` and store stdout in `CADENCE_SCRIPTS_DIR`.
|
|
11
11
|
4. Run `python3 "$CADENCE_SCRIPTS_DIR/check-project-repo-status.py" --project-root "$PROJECT_ROOT"` and parse the JSON output. Treat `repo_enabled` as the authoritative push mode (`false` means local-only commits).
|
|
12
|
-
5. Run `python3 "$CADENCE_SCRIPTS_DIR/
|
|
13
|
-
6.
|
|
14
|
-
7.
|
|
15
|
-
8.
|
|
16
|
-
9.
|
|
17
|
-
10.
|
|
18
|
-
11. If `finalize-skill-checkpoint.py`
|
|
19
|
-
12.
|
|
20
|
-
13.
|
|
21
|
-
14. In normal user-facing updates, share the prerequisite outcome without raw command traces or internal routing details unless explicitly requested.
|
|
12
|
+
5. Run `python3 "$CADENCE_SCRIPTS_DIR/run-prerequisite-gate.py" --project-root "$PROJECT_ROOT" --scripts-dir "$CADENCE_SCRIPTS_DIR"`.
|
|
13
|
+
6. `run-prerequisite-gate.py` performs workflow route assertion internally; if assertion fails, stop and surface the exact error.
|
|
14
|
+
7. If the script reports `MISSING_PYTHON3`, stop and ask the user for confirmation to install prerequisites.
|
|
15
|
+
8. Do not continue Cadence lifecycle or delivery execution while prerequisites are missing.
|
|
16
|
+
9. At end of this successful skill conversation, run `cd "$PROJECT_ROOT" && python3 "$CADENCE_SCRIPTS_DIR/finalize-skill-checkpoint.py" --scope prerequisite-gate --checkpoint prerequisites-passed --paths .`.
|
|
17
|
+
10. If `finalize-skill-checkpoint.py` returns `status=no_changes`, continue without failure.
|
|
18
|
+
11. If `finalize-skill-checkpoint.py` reports an error, stop and surface it verbatim.
|
|
19
|
+
12. Surface script failures verbatim instead of adding custom fallback logic.
|
|
20
|
+
13. In normal user-facing updates, share the prerequisite outcome without raw command traces or internal routing details unless explicitly requested.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Prerequisite Gate"
|
|
3
3
|
short_description: "Run and persist Cadence prerequisite checks for Python availability"
|
|
4
|
-
default_prompt: "Run Cadence prerequisite checks, verify Python availability, and persist pass state before lifecycle or delivery execution. Resolve PROJECT_ROOT first with scripts/resolve-project-root.py --require-cadence, then resolve CADENCE_SCRIPTS_DIR with scripts/resolve-project-scripts-dir.py --project-root \"$PROJECT_ROOT\". Run scripts/check-project-repo-status.py --project-root \"$PROJECT_ROOT\" and treat repo_enabled as the authoritative push mode (false means local-only commits).
|
|
4
|
+
default_prompt: "Run Cadence prerequisite checks, verify Python availability, and persist pass state before lifecycle or delivery execution. Resolve PROJECT_ROOT first with scripts/resolve-project-root.py --require-cadence, then resolve CADENCE_SCRIPTS_DIR with scripts/resolve-project-scripts-dir.py --project-root \"$PROJECT_ROOT\". Run scripts/check-project-repo-status.py --project-root \"$PROJECT_ROOT\" and treat repo_enabled as the authoritative push mode (false means local-only commits). Run scripts/run-prerequisite-gate.py --project-root \"$PROJECT_ROOT\" --scripts-dir \"$CADENCE_SCRIPTS_DIR\" (this command performs route assertion internally) and stop on mismatch. Execute checkpoint commit commands from PROJECT_ROOT so git operations target the active project. At end of a successful prerequisite conversation, run scripts/finalize-skill-checkpoint.py from PROJECT_ROOT with --scope prerequisite-gate --checkpoint prerequisites-passed --paths .; allow status=no_changes and treat checkpoint or push failures as blocking errors surfaced verbatim. Keep user-facing messages focused on prerequisite outcomes and avoid internal command/routing traces unless explicitly requested."
|
|
@@ -6,30 +6,27 @@ description: Initialize Cadence project scaffolding for first-time setup. Use wh
|
|
|
6
6
|
# Scaffold
|
|
7
7
|
|
|
8
8
|
1. Resolve project root by running `python3 ../../scripts/resolve-project-root.py` and store stdout in `PROJECT_ROOT`.
|
|
9
|
-
2. Run `python3 ../../scripts/
|
|
10
|
-
3.
|
|
11
|
-
4.
|
|
12
|
-
5.
|
|
13
|
-
6.
|
|
14
|
-
7.
|
|
15
|
-
8. If `repo_enabled` is false, ask the user: `No GitHub remote is configured yet. Do you want to initialize a GitHub repo now? (yes/no)`.
|
|
16
|
-
9. If the user answers yes:
|
|
9
|
+
2. Run `python3 ../../scripts/run-scaffold-gate.py --project-root "$PROJECT_ROOT"` (resolve this relative path from this sub-skill directory) and parse the JSON response.
|
|
10
|
+
3. `run-scaffold-gate.py` performs workflow route assertion internally; if it errors, stop and surface the exact error to the user.
|
|
11
|
+
4. Resolve helper scripts dir by running `python3 ../../scripts/resolve-project-scripts-dir.py --project-root "$PROJECT_ROOT"` and store stdout in `CADENCE_SCRIPTS_DIR`.
|
|
12
|
+
5. Run `python3 "$CADENCE_SCRIPTS_DIR/check-project-repo-status.py" --project-root "$PROJECT_ROOT"` and parse the JSON output. Treat `repo_enabled` as the authoritative push mode (`false` means local-only commits).
|
|
13
|
+
6. If `repo_enabled` is false, ask the user: `No GitHub remote is configured yet. Do you want to initialize a GitHub repo now? (yes/no)`.
|
|
14
|
+
7. If the user answers yes:
|
|
17
15
|
- If `git_initialized` is false, run `cd "$PROJECT_ROOT" && git init`.
|
|
18
16
|
- Ask for repo name and visibility, then run `cd "$PROJECT_ROOT" && gh repo create <name> --source . --remote origin --<public|private>`.
|
|
19
17
|
- Rerun `python3 "$CADENCE_SCRIPTS_DIR/check-project-repo-status.py" --project-root "$PROJECT_ROOT"` and verify `repo_enabled` is true.
|
|
20
18
|
- If repo setup still fails, stop and surface the exact failure to the user.
|
|
21
|
-
|
|
19
|
+
8. If the user answers no:
|
|
22
20
|
- If `git_initialized` is false, run `cd "$PROJECT_ROOT" && git init` so local commits can be stored.
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
12. If the user answers yes:
|
|
21
|
+
- Keep local-only mode (`state.repo-enabled=false`) and continue until the user configures a GitHub repo later.
|
|
22
|
+
9. Ask the user: `Do you want .cadence tracked in git history? (yes/no)`.
|
|
23
|
+
10. If the user answers yes:
|
|
27
24
|
- Run `cd "$PROJECT_ROOT" && python3 "$CADENCE_SCRIPTS_DIR/configure-cadence-gitignore.py" --mode track`.
|
|
28
25
|
- At end of this skill conversation, run `cd "$PROJECT_ROOT" && python3 "$CADENCE_SCRIPTS_DIR/finalize-skill-checkpoint.py" --scope scaffold --checkpoint cadence-tracked --paths .`.
|
|
29
|
-
|
|
26
|
+
11. If the user answers no:
|
|
30
27
|
- Run `cd "$PROJECT_ROOT" && python3 "$CADENCE_SCRIPTS_DIR/configure-cadence-gitignore.py" --mode ignore`.
|
|
31
28
|
- At end of this skill conversation, run `cd "$PROJECT_ROOT" && python3 "$CADENCE_SCRIPTS_DIR/finalize-skill-checkpoint.py" --scope scaffold --checkpoint cadence-ignored --paths .`.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
12. If `finalize-skill-checkpoint.py` returns `status=no_changes`, continue without failure.
|
|
30
|
+
13. If `finalize-skill-checkpoint.py` reports an error, stop and surface it verbatim.
|
|
31
|
+
14. Execute scaffold actions serially. Do not run this flow in parallel with other setup gates.
|
|
32
|
+
15. In user-facing replies, summarize only the result. Do not expose internal command lines, skill chains, or execution traces unless explicitly requested.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Scaffold"
|
|
3
3
|
short_description: "Initialize Cadence project scaffolding for first-time setup"
|
|
4
|
-
default_prompt: "Initialize Cadence project scaffolding in the target project root, creating .cadence state files only when they do not already exist. Resolve PROJECT_ROOT first with scripts/resolve-project-root.py, then
|
|
4
|
+
default_prompt: "Initialize Cadence project scaffolding in the target project root, creating .cadence state files only when they do not already exist. Resolve PROJECT_ROOT first with scripts/resolve-project-root.py, then run scripts/run-scaffold-gate.py --project-root \"$PROJECT_ROOT\" (this command performs route assertion internally). Next resolve CADENCE_SCRIPTS_DIR with scripts/resolve-project-scripts-dir.py --project-root \"$PROJECT_ROOT\" and run scripts/check-project-repo-status.py --project-root \"$PROJECT_ROOT\"; treat repo_enabled as the authoritative push mode (false means local-only commits). Rerun scripts/check-project-repo-status.py only after creating a GitHub remote to confirm repo_enabled=true. If the user chooses local-only mode, do not run an extra repo-status write pass just to persist false. Execute git/state-changing scaffold commands from PROJECT_ROOT so commits and .cadence updates target the correct repository. At end of a successful scaffold conversation, run scripts/finalize-skill-checkpoint.py from PROJECT_ROOT with --paths . and scope/checkpoint aligned to the selected .cadence policy (scaffold/cadence-tracked for track mode, scaffold/cadence-ignored for ignore mode); allow status=no_changes and treat checkpoint or push failures as blocking errors surfaced verbatim. In user-facing replies, summarize outcome only and avoid internal command or routing traces unless explicitly requested."
|