create-issflow 1.0.2 → 1.1.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 (42) hide show
  1. package/README.md +61 -56
  2. package/bin/cli.js +269 -259
  3. package/package.json +32 -28
  4. package/template/.claude/agents/debugger.md +47 -47
  5. package/template/.claude/agents/e2e-runner.md +66 -66
  6. package/template/.claude/agents/implementer.md +79 -75
  7. package/template/.claude/agents/planner.md +93 -71
  8. package/template/.claude/agents/researcher.md +103 -103
  9. package/template/.claude/agents/synthesizer.md +78 -72
  10. package/template/.claude/agents/test-author.md +70 -70
  11. package/template/.claude/commands/change-request.md +53 -0
  12. package/template/.claude/commands/log-decision.md +33 -33
  13. package/template/.claude/commands/log-issue.md +28 -28
  14. package/template/.claude/commands/overview.md +114 -99
  15. package/template/.claude/commands/phase.md +230 -202
  16. package/template/.claude/commands/propose.md +71 -0
  17. package/template/.claude/commands/quick.md +30 -30
  18. package/template/.claude/commands/replan.md +68 -63
  19. package/template/.claude/commands/store-wisdom.md +195 -195
  20. package/template/.claude/commands/synthesize.md +26 -26
  21. package/template/.claude/commands/unstuck.md +40 -40
  22. package/template/.claude/hooks/pre-compact.js +42 -0
  23. package/template/.claude/hooks/session-start.js +137 -0
  24. package/template/.claude/hooks/subagent-stop.js +18 -0
  25. package/template/.claude/istartsoft-flow/METHODOLOGY.md +403 -229
  26. package/template/.claude/skills/caveman/SKILL.md +39 -39
  27. package/template/.claude/skills/code-standards/SKILL.md +61 -0
  28. package/template/.claude/skills/code-standards/references/architecture.md +61 -0
  29. package/template/.claude/skills/code-standards/references/naming.md +60 -0
  30. package/template/.claude/skills/grill-me/SKILL.md +31 -10
  31. package/template/.claude/skills/karpathy-guidelines/SKILL.md +34 -34
  32. package/template/.claude/skills/security/SKILL.md +70 -0
  33. package/template/.claude/skills/security/references/pentest-checklist.md +46 -0
  34. package/template/.claude/skills/security/references/secure-coding.md +50 -0
  35. package/template/.claude/skills/security/references/standards.md +60 -0
  36. package/template/.claude/skills/security/references/threat-modeling.md +36 -0
  37. package/template/.claude/skills/ux-design/SKILL.md +113 -99
  38. package/template/.claude/skills/ux-design/{wireframe-template.md → references/wireframe-template.md} +95 -95
  39. package/template/.claude/templates/proposal.html +126 -0
  40. package/template/.claude/hooks/pre-compact.sh +0 -25
  41. package/template/.claude/hooks/session-start.sh +0 -120
  42. package/template/.claude/hooks/subagent-stop.sh +0 -11
@@ -1,120 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SessionStart hook. stdout is injected into Claude's context every session.
3
- set -euo pipefail
4
- cd "${CLAUDE_PROJECT_DIR:-.}"
5
-
6
- emit () { printf '%s\n' "$1"; }
7
-
8
- emit "=== iStartSoftFlow AUTO-CONTEXT (injected by hook, NOT optional) ==="
9
- emit ""
10
-
11
- # 1. git state
12
- emit "## Git"
13
- emit "branch: $(git branch --show-current 2>/dev/null || echo n/a)"
14
- emit "uncommitted: $(git status --short 2>/dev/null | wc -l | tr -d ' ') file(s)"
15
- git log --oneline -3 2>/dev/null | sed 's/^/ /' || true
16
- emit ""
17
-
18
- # 2. active state
19
- if [ -f docs/STATE.md ]; then
20
- emit "## STATE.md (current position - READ THIS FIRST)"
21
- cat docs/STATE.md
22
- emit ""
23
- else
24
- emit "## STATE.md missing -> run /overview to bootstrap the project."
25
- emit ""
26
- fi
27
-
28
- # 3. issue log
29
- if [ -f docs/ISSUES.md ]; then
30
- OPEN=$(grep -c '^- \[ \]' docs/ISSUES.md 2>/dev/null || true)
31
- OPEN=${OPEN:-0}
32
- emit "## ISSUES.md (${OPEN} open) - check this before debugging anything"
33
- awk '/^### / {p=1} p' docs/ISSUES.md 2>/dev/null | head -100
34
- emit ""
35
- fi
36
-
37
- # 3b. research index
38
- if [ -f docs/research/INDEX.md ]; then
39
- RCOUNT=$(grep -c '^[0-9]' docs/research/INDEX.md 2>/dev/null || true)
40
- RCOUNT=${RCOUNT:-0}
41
- emit "## research/INDEX.md (${RCOUNT} prior investigations)"
42
- emit "grep this before any new research or debugging."
43
- grep '^[0-9]' docs/research/INDEX.md 2>/dev/null | tail -15 | sed 's/^/ /' || true
44
- emit ""
45
- fi
46
-
47
-
48
- # 3d. shared KB — pull latest + load snapshot
49
- KB_CONFIG=".claude/kb-config.json"
50
- if [ -f "$KB_CONFIG" ]; then
51
- KB_PATH=$(python3 -c "import json; print(json.load(open('$KB_CONFIG')).get('kb_path',''))" 2>/dev/null || echo "")
52
- KB_PATH_EXPANDED="${KB_PATH/#\~/$HOME}"
53
-
54
- if [ -n "$KB_PATH_EXPANDED" ] && [ -d "$KB_PATH_EXPANDED" ]; then
55
- emit "## Shared KB"
56
-
57
- # Pull latest (fail silently — offline or no remote shouldn't break session start)
58
- if git -C "$KB_PATH_EXPANDED" pull --ff-only --quiet 2>/dev/null; then
59
- emit "KB pulled: OK"
60
- else
61
- emit "KB pull skipped (offline or conflict — using local copy)"
62
- fi
63
-
64
- # Load INDEX.md into session snapshot
65
- KB_INDEX="${KB_PATH_EXPANDED}/INDEX.md"
66
- SNAPSHOT="docs/.kb-snapshot.md"
67
-
68
- if [ -f "$KB_INDEX" ]; then
69
- TODAY=$(date +%Y-%m-%d)
70
- CUTOFF=$(date -d "6 months ago" +%Y-%m-%d 2>/dev/null \
71
- || python3 -c "from datetime import date, timedelta; print((date.today() - timedelta(days=180)).isoformat())" 2>/dev/null \
72
- || echo "2000-01-01")
73
-
74
- {
75
- echo "# KB snapshot — loaded $(date +%Y-%m-%d)"
76
- echo "# Stale = created date older than ${CUTOFF}"
77
- echo ""
78
- while IFS='|' read -r entry_date domain slug summary rest; do
79
- entry_date=$(echo "$entry_date" | tr -d ' ')
80
- # Mark stale if date field present and older than cutoff
81
- if [ -n "$entry_date" ] && [[ "$entry_date" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
82
- if [[ "$entry_date" < "$CUTOFF" ]]; then
83
- echo "[STALE] ${entry_date} |${domain} |${slug} |${summary} |${rest}"
84
- else
85
- echo "${entry_date} |${domain} |${slug} |${summary} |${rest}"
86
- fi
87
- else
88
- echo "${entry_date} |${domain} |${slug} |${summary} |${rest}"
89
- fi
90
- done < <(grep -v '^#' "$KB_INDEX" | grep -v '^$')
91
- } > "$SNAPSHOT"
92
-
93
- TOTAL=$(grep -c '|' "$SNAPSHOT" 2>/dev/null || echo 0)
94
- STALE=$(grep -c '^\[STALE\]' "$SNAPSHOT" 2>/dev/null || echo 0)
95
- emit "KB snapshot loaded: ${TOTAL} entries (${STALE} stale — researcher will re-research these)"
96
- emit "Snapshot at docs/.kb-snapshot.md — researcher reads this before web search."
97
- else
98
- emit "KB INDEX.md not found at ${KB_PATH_EXPANDED} — run /store-wisdom to populate it."
99
- fi
100
- emit ""
101
- else
102
- emit "## Shared KB: configured but path not found (${KB_PATH})"
103
- emit "Fix kb_path in .claude/kb-config.json (or re-run: npx create-issflow)."
104
- emit ""
105
- fi
106
- fi
107
-
108
- # 4. hard rule reminder
109
- emit "## RULES (enforced this session)"
110
- emit "- caveman ULTRA mode is active."
111
- emit "- before debugging ANY error: grep ISSUES.md AND research/INDEX.md first."
112
- emit "- debug attempts: WARN at 2; first hard-stop at 3 STOPS and asks you."
113
- emit "- end of every phase: run /synthesize, then /clear."
114
- emit "- small obvious change? use /quick, not /phase."
115
- if [ -f "$KB_CONFIG" ]; then
116
- emit "- KB active: researcher checks docs/.kb-snapshot.md before web search."
117
- emit "- learned something worth keeping? run /store-wisdom."
118
- fi
119
- emit "=== END AUTO-CONTEXT ==="
120
- exit 0
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SubagentStop hook.
3
- set -euo pipefail
4
- cd "${CLAUDE_PROJECT_DIR:-.}"
5
-
6
- mkdir -p docs/.snapshots
7
- LOG="docs/.snapshots/agent-trace.log"
8
- echo "$(date +%H:%M:%S) subagent finished" >> "$LOG"
9
-
10
- tail -n 50 "$LOG" > "$LOG.tmp" 2>/dev/null && mv "$LOG.tmp" "$LOG" || true
11
- exit 0