@pieerry/harness-kit 3.3.0 → 4.0.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 (87) hide show
  1. package/.claude/{plugins → agents}/product-manager/README.md +32 -30
  2. package/.claude/{plugins → agents}/product-manager/guides/examples/good-prp-example.md +2 -2
  3. package/.claude/{plugins → agents}/product-manager/guides/pipeline.md +7 -7
  4. package/.claude/{plugins → agents}/product-manager/sensors/prp-links.md +1 -1
  5. package/.claude/{plugins → agents}/product-manager/skills/prd/SKILL.md +2 -2
  6. package/.claude/{plugins → agents}/product-manager/skills/prp/SKILL.md +4 -4
  7. package/.claude/agents/product-manager.md +2 -2
  8. package/.claude/agents/staff-software-engineer/README.md +87 -0
  9. package/.claude/{plugins → agents}/staff-software-engineer/guides/conventions-override.md +3 -3
  10. package/.claude/{plugins → agents}/staff-software-engineer/guides/pipeline.md +11 -7
  11. package/.claude/{plugins → agents}/staff-software-engineer/sensors/dev-structure.md +2 -2
  12. package/.claude/{plugins → agents}/staff-software-engineer/sensors/pr-structure.md +3 -3
  13. package/.claude/{plugins → agents}/staff-software-engineer/sensors/test-structure.md +2 -2
  14. package/.claude/agents/staff-software-engineer.md +4 -4
  15. package/.claude/commands/pipeline/reset.md +1 -1
  16. package/.claude/commands/product-manager/prd.md +11 -11
  17. package/.claude/commands/product-manager/prp.md +12 -12
  18. package/.claude/commands/product-manager/run.md +8 -4
  19. package/.claude/commands/sse/dev.md +11 -11
  20. package/.claude/commands/sse/plan.md +11 -12
  21. package/.claude/commands/sse/pr.md +6 -7
  22. package/.claude/commands/sse/run.md +12 -5
  23. package/.claude/commands/sse/test.md +5 -5
  24. package/.claude/conventions/README.md +1 -1
  25. package/.claude/hooks/activity-pre-read.sh +4 -4
  26. package/.claude/hooks/status-line.sh +11 -11
  27. package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-eval-prd.sh +11 -9
  28. package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-eval-prp.sh +11 -9
  29. package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-write-prd.sh +7 -5
  30. package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/post-write-prp.sh +8 -6
  31. package/.claude/{plugins/product-manager/hooks → runtime/hooks/product-manager}/pre-prp-check.sh +5 -3
  32. package/.claude/{plugins/staff-software-engineer/hooks → runtime/hooks/staff-software-engineer}/post-eval-sse.sh +13 -11
  33. package/.claude/{plugins/staff-software-engineer/hooks → runtime/hooks/staff-software-engineer}/post-write-sse.sh +11 -9
  34. package/.claude/runtime/scripts/product-manager/__pycache__/confluence-publish.cpython-314.pyc +0 -0
  35. package/.claude/runtime/scripts/product-manager/__pycache__/link-validator.cpython-314.pyc +0 -0
  36. package/.claude/runtime/scripts/product-manager/__pycache__/sensor-runner.cpython-314.pyc +0 -0
  37. package/.claude/runtime/scripts/product-manager/__pycache__/token-phase.cpython-314.pyc +0 -0
  38. package/.claude/runtime/scripts/product-manager/confluence-publish.py +206 -0
  39. package/.claude/{plugins/product-manager/scripts → runtime/scripts/product-manager}/link-validator.py +1 -1
  40. package/.claude/{plugins/product-manager/scripts → runtime/scripts/product-manager}/token-phase.py +2 -2
  41. package/.claude/scripts/__pycache__/activity.cpython-314.pyc +0 -0
  42. package/.claude/scripts/__pycache__/pipeline.cpython-314.pyc +0 -0
  43. package/.claude/scripts/__pycache__/pr-monitor.cpython-314.pyc +0 -0
  44. package/.claude/scripts/pipeline.py +6 -6
  45. package/.claude/settings.json +7 -7
  46. package/.claude/settings.local.json +11 -3
  47. package/AGENTS.md +141 -0
  48. package/CLAUDE.md +9 -7
  49. package/README.md +88 -290
  50. package/VERSION +1 -1
  51. package/bin/hk.js +16 -8
  52. package/package.json +5 -3
  53. package/setup/install.sh +59 -40
  54. package/setup/update.sh +5 -0
  55. package/.claude/plugins/product-manager/scripts/confluence-publish.py +0 -205
  56. package/.claude/plugins/staff-software-engineer/README.md +0 -90
  57. /package/.claude/{plugins → agents}/product-manager/evals/prd-quality.md +0 -0
  58. /package/.claude/{plugins → agents}/product-manager/evals/prd-readiness.md +0 -0
  59. /package/.claude/{plugins → agents}/product-manager/evals/prp-context-readiness.md +0 -0
  60. /package/.claude/{plugins → agents}/product-manager/evals/prp-quality.md +0 -0
  61. /package/.claude/{plugins → agents}/product-manager/guides/examples/good-prd-example.md +0 -0
  62. /package/.claude/{plugins → agents}/product-manager/guides/prd-guidelines.md +0 -0
  63. /package/.claude/{plugins → agents}/product-manager/guides/product-guidelines.md +0 -0
  64. /package/.claude/{plugins → agents}/product-manager/guides/prp-guidelines.md +0 -0
  65. /package/.claude/{plugins → agents}/product-manager/guides/templates/prd.md +0 -0
  66. /package/.claude/{plugins → agents}/product-manager/guides/templates/prp.md +0 -0
  67. /package/.claude/{plugins → agents}/product-manager/guides/writing-style.md +0 -0
  68. /package/.claude/{plugins → agents}/product-manager/sensors/prd-acceptance-criteria.md +0 -0
  69. /package/.claude/{plugins → agents}/product-manager/sensors/prd-structure.md +0 -0
  70. /package/.claude/{plugins → agents}/product-manager/sensors/prp-context-quality.md +0 -0
  71. /package/.claude/{plugins → agents}/product-manager/sensors/prp-structure.md +0 -0
  72. /package/.claude/{plugins → agents}/staff-software-engineer/evals/dev-quality.md +0 -0
  73. /package/.claude/{plugins → agents}/staff-software-engineer/evals/plan-quality.md +0 -0
  74. /package/.claude/{plugins → agents}/staff-software-engineer/evals/pr-quality.md +0 -0
  75. /package/.claude/{plugins → agents}/staff-software-engineer/evals/test-quality.md +0 -0
  76. /package/.claude/{plugins → agents}/staff-software-engineer/guides/coding-style.md +0 -0
  77. /package/.claude/{plugins → agents}/staff-software-engineer/guides/commit-style.md +0 -0
  78. /package/.claude/{plugins → agents}/staff-software-engineer/sensors/code-conventions.md +0 -0
  79. /package/.claude/{plugins → agents}/staff-software-engineer/sensors/plan-structure.md +0 -0
  80. /package/.claude/{plugins → agents}/staff-software-engineer/sensors/test-coverage.md +0 -0
  81. /package/.claude/{plugins → agents}/staff-software-engineer/skills/backend/SKILL.md +0 -0
  82. /package/.claude/{plugins → agents}/staff-software-engineer/skills/devops/SKILL.md +0 -0
  83. /package/.claude/{plugins → agents}/staff-software-engineer/skills/mobile/SKILL.md +0 -0
  84. /package/.claude/{plugins → agents}/staff-software-engineer/skills/web/SKILL.md +0 -0
  85. /package/.claude/{plugins/product-manager/outputs → runtime/outputs/pm}/.markers/.gitkeep +0 -0
  86. /package/.claude/{plugins/staff-software-engineer/outputs → runtime/outputs/sse}/.markers/.gitkeep +0 -0
  87. /package/.claude/{plugins/product-manager/scripts → runtime/scripts/product-manager}/sensor-runner.py +0 -0
@@ -2,23 +2,23 @@
2
2
  description: Implement the approved plan in code. Writes commits, runs gates, returns diff summary.
3
3
  ---
4
4
 
5
- Implement plan. Follow .claude/plugins/staff-software-engineer/guides/pipeline.md.
5
+ Implement plan. Follow .claude/agents/staff-software-engineer/guides/pipeline.md.
6
6
 
7
7
  Print header card before coding and footer card after gates run. Format: .claude/scripts/stage-card.md.
8
8
 
9
- Source plan: latest in .claude/plugins/staff-software-engineer/outputs/plan/ with approved marker. None, abort. Ask user to run /sse:plan first.
9
+ Source plan: latest in .claude/runtime/outputs/sse/plan/ with approved marker. None, abort. Ask user to run /sse:plan first.
10
10
 
11
11
  Before coding, write phase start marker:
12
12
 
13
13
  ```
14
- .claude/plugins/staff-software-engineer/outputs/.markers/{feature_id}.dev.start
14
+ .claude/runtime/outputs/sse/.markers/{feature_id}.dev-generate.start
15
15
  ```
16
16
 
17
17
  Read:
18
18
  - source plan
19
- - area skill: .claude/plugins/staff-software-engineer/skills/{area}/SKILL.md
20
- - .claude/plugins/staff-software-engineer/guides/coding-style.md
21
- - .claude/plugins/staff-software-engineer/guides/commit-style.md
19
+ - area skill: .claude/agents/staff-software-engineer/skills/{area}/SKILL.md
20
+ - .claude/agents/staff-software-engineer/guides/coding-style.md
21
+ - .claude/agents/staff-software-engineer/guides/commit-style.md
22
22
  - project conventions: {repo}/.claude/conventions/{area}.md if present
23
23
 
24
24
  Read 3+ similar files in target repo before writing. Match conventions:
@@ -29,20 +29,20 @@ Read 3+ similar files in target repo before writing. Match conventions:
29
29
  Write code in small commits (1-4 files, < 100 lines ideal). Conventional Commits format.
30
30
 
31
31
  Code gates (run after each implementation step):
32
- - .claude/plugins/staff-software-engineer/sensors/code-conventions.md (lint, formatting, banned patterns)
33
- - .claude/plugins/staff-software-engineer/sensors/test-coverage.md (every feature/bugfix has tests)
32
+ - .claude/agents/staff-software-engineer/sensors/code-conventions.md (lint, formatting, banned patterns)
33
+ - .claude/agents/staff-software-engineer/sensors/test-coverage.md (every feature/bugfix has tests)
34
34
 
35
35
  Any gate fails, fix and retry. Max 3 attempts. Hard stop after 3.
36
36
 
37
- After done, write `.claude/plugins/staff-software-engineer/outputs/dev/{feature_id}.md` with summary:
37
+ After done, write `.claude/runtime/outputs/sse/dev/{feature_id}.md` with summary:
38
38
  - files changed
39
39
  - commits
40
40
  - gate results
41
41
  - blockers if any
42
42
 
43
43
  Document gates (run on saved summary):
44
- - Sensor: .claude/plugins/staff-software-engineer/sensors/dev-structure.md (auto-run by post-write hook)
45
- - Eval: .claude/plugins/staff-software-engineer/evals/dev-quality.md (you score it; threshold 8.0)
44
+ - Sensor: .claude/agents/staff-software-engineer/sensors/dev-structure.md (auto-run by post-write hook)
45
+ - Eval: .claude/agents/staff-software-engineer/evals/dev-quality.md (you score it; threshold 8.0)
46
46
 
47
47
  Append approval marker only when code gates pass and dev-quality eval is >= 8.0:
48
48
 
@@ -2,35 +2,34 @@
2
2
  description: Generate an implementation plan from an approved PRP. Sensors and evals gate.
3
3
  ---
4
4
 
5
- Generate technical plan. Follow .claude/plugins/staff-software-engineer/guides/pipeline.md for retry, approval, publish.
5
+ Generate technical plan. Follow .claude/agents/staff-software-engineer/guides/pipeline.md for retry, approval, publish.
6
6
 
7
7
  Print header card before drafting and footer card after gates run. Format: .claude/scripts/stage-card.md.
8
8
 
9
- Source PRP: user passes path, use it. Else pick most recent in .claude/plugins/product-manager/outputs/prp/. None found, abort. Tell user to run /product-manager:prp first.
9
+ Source PRP: user passes path, use it. Else pick most recent in .claude/runtime/outputs/pm/prp/. None found, abort. Tell user to run /product-manager:prp first.
10
10
 
11
- Compute feature_id from source PRP filename (basename without .md). Save plan to .claude/plugins/staff-software-engineer/outputs/plan/{feature_id}.md so it matches.
11
+ Compute feature_id from source PRP filename (basename without .md). Save plan to .claude/runtime/outputs/sse/plan/{feature_id}.md so it matches.
12
12
 
13
13
  Before generating, write phase start marker:
14
14
 
15
15
  ```
16
- .claude/plugins/staff-software-engineer/outputs/.markers/{feature_id}.plan-generate.start
16
+ .claude/runtime/outputs/sse/.markers/{feature_id}.plan-generate.start
17
17
  ```
18
18
 
19
19
  Content: `{"timestamp": "<ISO-8601 UTC now>", "session_id": ""}`
20
20
 
21
21
  Read:
22
22
  - source PRP
23
- - .claude/plugins/staff-software-engineer/guides/pipeline.md
24
- - .claude/plugins/staff-software-engineer/guides/coding-style.md
25
- - .claude/plugins/staff-software-engineer/guides/examples/good-plan-example.md
26
- - area-specific skill: .claude/plugins/staff-software-engineer/skills/{area}/SKILL.md (area = backend, web, mobile, devops)
27
- - project conventions if present: {repo}/.claude/conventions/{area}.md (see .claude/plugins/staff-software-engineer/guides/conventions-override.md)
23
+ - .claude/agents/staff-software-engineer/guides/pipeline.md
24
+ - .claude/agents/staff-software-engineer/guides/coding-style.md
25
+ - area-specific skill: .claude/agents/staff-software-engineer/skills/{area}/SKILL.md (area = backend, web, mobile, devops)
26
+ - project conventions if present: {repo}/.claude/conventions/{area}.md (see .claude/agents/staff-software-engineer/guides/conventions-override.md)
28
27
 
29
- Save to .claude/plugins/staff-software-engineer/outputs/plan/{feature_id}.md.
28
+ Save to .claude/runtime/outputs/sse/plan/{feature_id}.md.
30
29
 
31
- Sensors: .claude/plugins/staff-software-engineer/sensors/plan-structure.md.
30
+ Sensors: .claude/agents/staff-software-engineer/sensors/plan-structure.md.
32
31
 
33
- Evals: .claude/plugins/staff-software-engineer/evals/plan-quality.md.
32
+ Evals: .claude/agents/staff-software-engineer/evals/plan-quality.md.
34
33
 
35
34
  After save, reply with this exact shape (name actual sensors/evals/guides that ran):
36
35
 
@@ -13,12 +13,11 @@ Prerequisites:
13
13
  Before opening, write phase start marker:
14
14
 
15
15
  ```
16
- .claude/plugins/staff-software-engineer/outputs/.markers/{feature_id}.pr.start
16
+ .claude/runtime/outputs/sse/.markers/{feature_id}.pr-generate.start
17
17
  ```
18
18
 
19
19
  Read:
20
- - .claude/plugins/staff-software-engineer/guides/pr-template.md
21
- - .claude/plugins/staff-software-engineer/guides/commit-style.md
20
+ - .claude/agents/staff-software-engineer/guides/commit-style.md
22
21
  - latest plan and dev outputs (for body content)
23
22
 
24
23
  Detect ticket id from branch name (e.g., `feat/PROJ-123-foo` -> `PROJ-123`). Branch has none, ask user once. Never call Jira API.
@@ -30,7 +29,7 @@ Compose:
30
29
 
31
30
  Open via `gh pr create --draft --title "..." --body "..."`.
32
31
 
33
- Save .claude/plugins/staff-software-engineer/outputs/pr/{feature_id}.md with:
32
+ Save .claude/runtime/outputs/sse/pr/{feature_id}.md with:
34
33
  - pr url
35
34
  - title
36
35
  - draft status
@@ -39,8 +38,8 @@ Save .claude/plugins/staff-software-engineer/outputs/pr/{feature_id}.md with:
39
38
  - refs (plan + dev paths)
40
39
 
41
40
  Document gates (run on saved record):
42
- - Sensor: .claude/plugins/staff-software-engineer/sensors/pr-structure.md (auto-run by post-write hook)
43
- - Eval: .claude/plugins/staff-software-engineer/evals/pr-quality.md (you score it; threshold 8.0)
41
+ - Sensor: .claude/agents/staff-software-engineer/sensors/pr-structure.md (auto-run by post-write hook)
42
+ - Eval: .claude/agents/staff-software-engineer/evals/pr-quality.md (you score it; threshold 8.0)
44
43
 
45
44
  Append approval marker only when sensor passes and pr-quality eval is >= 8.0:
46
45
 
@@ -56,7 +55,7 @@ PR opened: {url}
56
55
  draft: {yes|no}
57
56
  sensors: pr-structure ok
58
57
  eval: pr-quality {N}/10
59
- guides: pr-template.md, commit-style.md
58
+ guides: commit-style.md
60
59
  refs: plan/{feature_id}.md, dev/{feature_id}.md
61
60
  next: request review (if draft, mark ready when checks pass)
62
61
  ```
@@ -8,16 +8,17 @@ Run end to end.
8
8
  2. Invoke /sse:dev. Implements plan in code.
9
9
  3. Invoke /sse:test. Runs project test suite.
10
10
  4. Invoke /sse:pr. Opens pull request.
11
- 5. Return summary.
11
+ 5. Invoke /sse:pr-monitor. Arms backoff polling, auto-clears pipeline state on merge. Skip if user passed `--no-monitor` or `gh pr view` already returns MERGED.
12
+ 6. Return summary.
12
13
 
13
- Follow .claude/plugins/staff-software-engineer/guides/pipeline.md for retry, approval markers, token accounting, publish behavior.
14
+ Follow .claude/agents/staff-software-engineer/guides/pipeline.md for retry, approval markers, token accounting, publish behavior.
14
15
 
15
16
  Return format. Name every sensor, eval, guide that ran. Generic summaries not acceptable — list specifics so user sees what was checked and loaded.
16
17
 
17
18
  ```
18
19
  Engineering pipeline complete.
19
20
 
20
- Plan: .claude/plugins/staff-software-engineer/outputs/plan/{path}
21
+ Plan: .claude/runtime/outputs/sse/plan/{path}
21
22
  sensors: {sensor-name} ok ({sub-check, sub-check, ...}), {sensor-name} ok
22
23
  eval: {eval-name} {score}/10 (attempts: N)
23
24
  guides: {guide-1.md}, {guide-2.md}, skills/{area}/SKILL.md
@@ -30,7 +31,7 @@ Dev: branch {branch}
30
31
  guides: coding-style.md, commit-style.md, skills/{area}/SKILL.md
31
32
  refs: plan/{feature_id}.md, conventions/{area}.md
32
33
 
33
- Test: .claude/plugins/staff-software-engineer/outputs/test/{path}
34
+ Test: .claude/runtime/outputs/sse/test/{path}
34
35
  command: {detected-test-command}
35
36
  passed: N, failed: M
36
37
  duration: {seconds}s
@@ -38,9 +39,15 @@ Test: .claude/plugins/staff-software-engineer/outputs/test/{path}
38
39
  PR: {url}
39
40
  title: {title}
40
41
  draft: yes|no
41
- guides: pr-template.md, commit-style.md
42
+ guides: commit-style.md
42
43
  refs: plan/{feature_id}.md, dev/{feature_id}.md
43
44
 
45
+ Monitor: {armed, first check in 3min, escalates to 30min cap | skipped, reason}
46
+
47
+ Tokens: outputs/tokens/{feature_id}.json
48
+ totals: in={N} out={N} cache_r={N}
49
+ phases: plan-generate, plan-validate, dev-generate, dev-validate, test-generate, test-validate, pr-generate, pr-validate
50
+
44
51
  Confluence: {published to {space-key}: {url} | skipped, reason}
45
52
 
46
53
  Blockers:
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Run the project test suite. Reports results to .claude/plugins/staff-software-engineer/outputs/test/.
2
+ description: Run the project test suite. Reports results to .claude/runtime/outputs/sse/test/.
3
3
  ---
4
4
 
5
5
  Run test suite for current repo.
@@ -17,12 +17,12 @@ Detect project test command (in order):
17
17
  Before running, write phase start marker:
18
18
 
19
19
  ```
20
- .claude/plugins/staff-software-engineer/outputs/.markers/{feature_id}.test.start
20
+ .claude/runtime/outputs/sse/.markers/{feature_id}.test-generate.start
21
21
  ```
22
22
 
23
23
  Run test command. Capture stdout and stderr.
24
24
 
25
- Save .claude/plugins/staff-software-engineer/outputs/test/{feature_id}.md with:
25
+ Save .claude/runtime/outputs/sse/test/{feature_id}.md with:
26
26
  - command run
27
27
  - exit code
28
28
  - passed, failed counts
@@ -30,8 +30,8 @@ Save .claude/plugins/staff-software-engineer/outputs/test/{feature_id}.md with:
30
30
  - duration
31
31
 
32
32
  Document gates (run on saved report):
33
- - Sensor: .claude/plugins/staff-software-engineer/sensors/test-structure.md (auto-run by post-write hook)
34
- - Eval: .claude/plugins/staff-software-engineer/evals/test-quality.md (you score it; threshold 8.0)
33
+ - Sensor: .claude/agents/staff-software-engineer/sensors/test-structure.md (auto-run by post-write hook)
34
+ - Eval: .claude/agents/staff-software-engineer/evals/test-quality.md (you score it; threshold 8.0)
35
35
 
36
36
  Append approval marker only when exit code is 0 and test-quality eval is >= 8.0:
37
37
 
@@ -9,4 +9,4 @@ Override staff-software-engineer plugin defaults for this repo. Create files as
9
9
 
10
10
  When a file exists here, plugin reads it on top of defaults. Rules in this folder win.
11
11
 
12
- See `.claude/plugins/staff-software-engineer/guides/conventions-override.md` for the full reference.
12
+ See `.claude/agents/staff-software-engineer/guides/conventions-override.md` for the full reference.
@@ -1,15 +1,15 @@
1
1
  #!/bin/sh
2
2
  # PreToolUse hook on Read. If the file being read is a sensor/eval/guide
3
- # under any plugin, mark current activity so status-line.sh can surface it.
3
+ # under any agent, mark current activity so status-line.sh can surface it.
4
4
 
5
5
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
6
6
  [ -z "$FILE_PATH" ] && exit 0
7
7
 
8
8
  KIND=""
9
9
  case "$FILE_PATH" in
10
- */plugins/*/sensors/*.md) KIND=sensor ;;
11
- */plugins/*/evals/*.md) KIND=eval ;;
12
- */plugins/*/guides/*.md) KIND=guide ;;
10
+ */agents/*/sensors/*.md) KIND=sensor ;;
11
+ */agents/*/evals/*.md) KIND=eval ;;
12
+ */agents/*/guides/*.md) KIND=guide ;;
13
13
  *) exit 0 ;;
14
14
  esac
15
15
 
@@ -30,14 +30,14 @@ fi
30
30
 
31
31
  # --- Fallback: original file-scan logic ---
32
32
 
33
- PM_DIR=".claude/plugins/product-manager"
34
- SSE_DIR=".claude/plugins/staff-software-engineer"
33
+ PM_DIR=".claude/runtime/outputs/pm"
34
+ SSE_DIR=".claude/runtime/outputs/sse"
35
35
 
36
36
  render() {
37
37
  LATEST=""
38
- for f in "$PM_DIR/outputs/prd/"*.md "$PM_DIR/outputs/prp/"*.md \
39
- "$SSE_DIR/outputs/plan/"*.md "$SSE_DIR/outputs/dev/"*.md \
40
- "$SSE_DIR/outputs/test/"*.md "$SSE_DIR/outputs/pr/"*.md; do
38
+ for f in "$PM_DIR/prd/"*.md "$PM_DIR/prp/"*.md \
39
+ "$SSE_DIR/plan/"*.md "$SSE_DIR/dev/"*.md \
40
+ "$SSE_DIR/test/"*.md "$SSE_DIR/pr/"*.md; do
41
41
  [ -f "$f" ] || continue
42
42
  if [ -z "$LATEST" ] || [ "$f" -nt "$LATEST" ]; then
43
43
  LATEST="$f"
@@ -74,12 +74,12 @@ render() {
74
74
  current_state=""
75
75
  for stage in prd prp plan dev test pr; do
76
76
  case $stage in
77
- prd) f="$PM_DIR/outputs/prd/${FID}.md" ;;
78
- prp) f="$PM_DIR/outputs/prp/${FID}.md" ;;
79
- plan) f="$SSE_DIR/outputs/plan/${FID}.md" ;;
80
- dev) f="$SSE_DIR/outputs/dev/${FID}.md" ;;
81
- test) f="$SSE_DIR/outputs/test/${FID}.md" ;;
82
- pr) f="$SSE_DIR/outputs/pr/${FID}.md" ;;
77
+ prd) f="$PM_DIR/prd/${FID}.md" ;;
78
+ prp) f="$PM_DIR/prp/${FID}.md" ;;
79
+ plan) f="$SSE_DIR/plan/${FID}.md" ;;
80
+ dev) f="$SSE_DIR/dev/${FID}.md" ;;
81
+ test) f="$SSE_DIR/test/${FID}.md" ;;
82
+ pr) f="$SSE_DIR/pr/${FID}.md" ;;
83
83
  esac
84
84
  s=$(check_state "$f")
85
85
  if [ "$s" = "approved" ]; then
@@ -7,10 +7,12 @@
7
7
  set -euo pipefail
8
8
 
9
9
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
10
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
10
+ AGENT_DIR=".claude/agents/product-manager"
11
+ OUTPUTS_DIR=".claude/runtime/outputs/pm"
12
+ SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
11
13
 
12
14
  case "$FILE_PATH" in
13
- *.claude/plugins/product-manager/outputs/prd/*.md) ;;
15
+ *.claude/runtime/outputs/pm/prd/*.md) ;;
14
16
  *) exit 0 ;;
15
17
  esac
16
18
 
@@ -25,7 +27,7 @@ fi
25
27
  echo "[hook] PRD approved, publishing $(basename "$FILE_PATH")" >&2
26
28
 
27
29
  FEATURE_ID="$(basename "$FILE_PATH" .md)"
28
- MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
30
+ MARKERS_DIR="$OUTPUTS_DIR/.markers"
29
31
  mkdir -p "$MARKERS_DIR"
30
32
  NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
31
33
 
@@ -35,21 +37,21 @@ if [ -f "$MARKERS_DIR/${FEATURE_ID}.prd-validate.start" ]; then
35
37
  fi
36
38
 
37
39
  # Token accounting for both phases
38
- python3 "$PLUGIN_DIR/scripts/token-phase.py" \
40
+ python3 "$SCRIPTS_DIR/token-phase.py" \
39
41
  --feature-id "$FEATURE_ID" \
40
42
  --phase "prd-generate" \
41
- --plugin-dir "$PLUGIN_DIR" \
43
+ --plugin-dir "$OUTPUTS_DIR" \
42
44
  --prd-path "$FILE_PATH" >&2 || true
43
45
 
44
- python3 "$PLUGIN_DIR/scripts/token-phase.py" \
46
+ python3 "$SCRIPTS_DIR/token-phase.py" \
45
47
  --feature-id "$FEATURE_ID" \
46
48
  --phase "prd-validate" \
47
- --plugin-dir "$PLUGIN_DIR" \
49
+ --plugin-dir "$OUTPUTS_DIR" \
48
50
  --prd-path "$FILE_PATH" >&2 || true
49
51
 
50
52
  # Confluence (optional)
51
53
  if [ -n "${JIRA_USERNAME:-}" ] && [ -n "${JIRA_API_TOKEN:-}" ]; then
52
- python3 "$PLUGIN_DIR/scripts/confluence-publish.py" \
54
+ python3 "$SCRIPTS_DIR/confluence-publish.py" \
53
55
  --artifact "$FILE_PATH" \
54
56
  --kind prd >&2 || {
55
57
  echo "[hook] Confluence publish failed but local copy is saved" >&2
@@ -59,7 +61,7 @@ else
59
61
  fi
60
62
 
61
63
  # Append published marker + inline tokens reference
62
- TOKENS_FILE="$PLUGIN_DIR/outputs/tokens/${FEATURE_ID}.json"
64
+ TOKENS_FILE="$OUTPUTS_DIR/tokens/${FEATURE_ID}.json"
63
65
  if [ -f "$TOKENS_FILE" ]; then
64
66
  TOKENS_LINE=$(python3 -c "
65
67
  import json,sys
@@ -7,10 +7,12 @@
7
7
  set -euo pipefail
8
8
 
9
9
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
10
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
10
+ AGENT_DIR=".claude/agents/product-manager"
11
+ OUTPUTS_DIR=".claude/runtime/outputs/pm"
12
+ SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
11
13
 
12
14
  case "$FILE_PATH" in
13
- *.claude/plugins/product-manager/outputs/prp/*.md) ;;
15
+ *.claude/runtime/outputs/pm/prp/*.md) ;;
14
16
  *) exit 0 ;;
15
17
  esac
16
18
 
@@ -25,7 +27,7 @@ fi
25
27
  echo "[hook] PRP approved, finalizing handoff for $(basename "$FILE_PATH")" >&2
26
28
 
27
29
  FEATURE_ID="$(basename "$FILE_PATH" .md)"
28
- MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
30
+ MARKERS_DIR="$OUTPUTS_DIR/.markers"
29
31
  mkdir -p "$MARKERS_DIR"
30
32
  NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
31
33
 
@@ -33,26 +35,26 @@ if [ -f "$MARKERS_DIR/${FEATURE_ID}.prp-validate.start" ]; then
33
35
  printf '{"timestamp":"%s"}\n' "$NOW" > "$MARKERS_DIR/${FEATURE_ID}.prp-validate.end"
34
36
  fi
35
37
 
36
- python3 "$PLUGIN_DIR/scripts/token-phase.py" \
38
+ python3 "$SCRIPTS_DIR/token-phase.py" \
37
39
  --feature-id "$FEATURE_ID" \
38
40
  --phase "prp-generate" \
39
- --plugin-dir "$PLUGIN_DIR" \
41
+ --plugin-dir "$OUTPUTS_DIR" \
40
42
  --prp-path "$FILE_PATH" >&2 || true
41
43
 
42
- python3 "$PLUGIN_DIR/scripts/token-phase.py" \
44
+ python3 "$SCRIPTS_DIR/token-phase.py" \
43
45
  --feature-id "$FEATURE_ID" \
44
46
  --phase "prp-validate" \
45
- --plugin-dir "$PLUGIN_DIR" \
47
+ --plugin-dir "$OUTPUTS_DIR" \
46
48
  --prp-path "$FILE_PATH" >&2 || true
47
49
 
48
50
  if [ -n "${JIRA_USERNAME:-}" ] && [ -n "${JIRA_API_TOKEN:-}" ]; then
49
- python3 "$PLUGIN_DIR/scripts/confluence-publish.py" \
51
+ python3 "$SCRIPTS_DIR/confluence-publish.py" \
50
52
  --artifact "$FILE_PATH" \
51
53
  --kind prp >&2 || true
52
54
  fi
53
55
 
54
56
  # Inline tokens summary
55
- TOKENS_FILE="$PLUGIN_DIR/outputs/tokens/${FEATURE_ID}.json"
57
+ TOKENS_FILE="$OUTPUTS_DIR/tokens/${FEATURE_ID}.json"
56
58
  if [ -f "$TOKENS_FILE" ]; then
57
59
  TOKENS_LINE=$(python3 -c "
58
60
  import json,sys
@@ -7,10 +7,12 @@
7
7
  set -euo pipefail
8
8
 
9
9
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
10
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
10
+ AGENT_DIR=".claude/agents/product-manager"
11
+ OUTPUTS_DIR=".claude/runtime/outputs/pm"
12
+ SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
11
13
 
12
14
  case "$FILE_PATH" in
13
- *.claude/plugins/product-manager/outputs/prd/*.md) ;;
15
+ *.claude/runtime/outputs/pm/prd/*.md) ;;
14
16
  *) exit 0 ;;
15
17
  esac
16
18
 
@@ -22,9 +24,9 @@ fi
22
24
  echo "[hook] Running PRD sensors on $(basename "$FILE_PATH")" >&2
23
25
 
24
26
  FAILURES=()
25
- for sensor in "$PLUGIN_DIR"/sensors/prd-*.md; do
27
+ for sensor in "$AGENT_DIR"/sensors/prd-*.md; do
26
28
  [ -f "$sensor" ] || continue
27
- if ! python3 "$PLUGIN_DIR/scripts/sensor-runner.py" \
29
+ if ! python3 "$SCRIPTS_DIR/sensor-runner.py" \
28
30
  --sensor "$sensor" \
29
31
  --artifact "$FILE_PATH" >&2; then
30
32
  FAILURES+=("$(basename "$sensor")")
@@ -42,7 +44,7 @@ echo "[hook] PRD sensors passed" >&2
42
44
 
43
45
  # Token phase markers: only on first save (no validate.start yet)
44
46
  FEATURE_ID="$(basename "$FILE_PATH" .md)"
45
- MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
47
+ MARKERS_DIR="$OUTPUTS_DIR/.markers"
46
48
  mkdir -p "$MARKERS_DIR"
47
49
  NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
48
50
 
@@ -7,10 +7,12 @@
7
7
  set -euo pipefail
8
8
 
9
9
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
10
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
10
+ AGENT_DIR=".claude/agents/product-manager"
11
+ OUTPUTS_DIR=".claude/runtime/outputs/pm"
12
+ SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
11
13
 
12
14
  case "$FILE_PATH" in
13
- *.claude/plugins/product-manager/outputs/prp/*.md) ;;
15
+ *.claude/runtime/outputs/pm/prp/*.md) ;;
14
16
  *) exit 0 ;;
15
17
  esac
16
18
 
@@ -21,16 +23,16 @@ fi
21
23
  echo "[hook] Running PRP sensors on $(basename "$FILE_PATH")" >&2
22
24
 
23
25
  FAILURES=()
24
- for sensor in "$PLUGIN_DIR"/sensors/prp-*.md; do
26
+ for sensor in "$AGENT_DIR"/sensors/prp-*.md; do
25
27
  [ -f "$sensor" ] || continue
26
- if ! python3 "$PLUGIN_DIR/scripts/sensor-runner.py" \
28
+ if ! python3 "$SCRIPTS_DIR/sensor-runner.py" \
27
29
  --sensor "$sensor" \
28
30
  --artifact "$FILE_PATH" >&2; then
29
31
  FAILURES+=("$(basename "$sensor")")
30
32
  fi
31
33
  done
32
34
 
33
- if ! python3 "$PLUGIN_DIR/scripts/link-validator.py" \
35
+ if ! python3 "$SCRIPTS_DIR/link-validator.py" \
34
36
  --artifact "$FILE_PATH" \
35
37
  --repo-root "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" >&2; then
36
38
  FAILURES+=("link-validator")
@@ -47,7 +49,7 @@ echo "[hook] PRP sensors passed" >&2
47
49
 
48
50
  # Token phase markers
49
51
  FEATURE_ID="$(basename "$FILE_PATH" .md)"
50
- MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
52
+ MARKERS_DIR="$OUTPUTS_DIR/.markers"
51
53
  mkdir -p "$MARKERS_DIR"
52
54
  NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
53
55
 
@@ -7,10 +7,12 @@
7
7
  set -euo pipefail
8
8
 
9
9
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
10
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
10
+ AGENT_DIR=".claude/agents/product-manager"
11
+ OUTPUTS_DIR=".claude/runtime/outputs/pm"
12
+ SCRIPTS_DIR=".claude/runtime/scripts/product-manager"
11
13
 
12
14
  case "$FILE_PATH" in
13
- *.claude/plugins/product-manager/outputs/prp/*.md) ;;
15
+ *.claude/runtime/outputs/pm/prp/*.md) ;;
14
16
  *) exit 0 ;;
15
17
  esac
16
18
 
@@ -30,7 +32,7 @@ fi
30
32
 
31
33
  # Look for any approved PRD matching the slug
32
34
  MATCHED=""
33
- for prd in "$PLUGIN_DIR"/outputs/prd/*"-${SLUG}.md"; do
35
+ for prd in "$OUTPUTS_DIR"/prd/*"-${SLUG}.md"; do
34
36
  [ -f "$prd" ] || continue
35
37
  if grep -q "<!-- approved:" "$prd"; then
36
38
  MATCHED="$prd"
@@ -10,14 +10,16 @@
10
10
  set -euo pipefail
11
11
 
12
12
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
13
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
13
+ AGENT_DIR=".claude/agents/staff-software-engineer"
14
+ OUTPUTS_DIR=".claude/runtime/outputs/sse"
15
+ SCRIPTS_DIR=".claude/runtime/scripts/staff-software-engineer"
14
16
 
15
17
  PHASE=""
16
18
  case "$FILE_PATH" in
17
- *.claude/plugins/staff-software-engineer/outputs/plan/*.md) PHASE=plan ;;
18
- *.claude/plugins/staff-software-engineer/outputs/dev/*.md) PHASE=dev ;;
19
- *.claude/plugins/staff-software-engineer/outputs/test/*.md) PHASE=test ;;
20
- *.claude/plugins/staff-software-engineer/outputs/pr/*.md) PHASE=pr ;;
19
+ *.claude/runtime/outputs/sse/plan/*.md) PHASE=plan ;;
20
+ *.claude/runtime/outputs/sse/dev/*.md) PHASE=dev ;;
21
+ *.claude/runtime/outputs/sse/test/*.md) PHASE=test ;;
22
+ *.claude/runtime/outputs/sse/pr/*.md) PHASE=pr ;;
21
23
  *) exit 0 ;;
22
24
  esac
23
25
 
@@ -30,7 +32,7 @@ if grep -q "<!-- published:" "$FILE_PATH"; then
30
32
  fi
31
33
 
32
34
  FEATURE_ID="$(basename "$FILE_PATH" .md)"
33
- MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
35
+ MARKERS_DIR="$OUTPUTS_DIR/.markers"
34
36
  mkdir -p "$MARKERS_DIR"
35
37
  NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
36
38
 
@@ -38,17 +40,17 @@ if [ -f "$MARKERS_DIR/${FEATURE_ID}.${PHASE}-validate.start" ]; then
38
40
  printf '{"timestamp":"%s"}\n' "$NOW" > "$MARKERS_DIR/${FEATURE_ID}.${PHASE}-validate.end"
39
41
  fi
40
42
 
41
- python3 "$PLUGIN_DIR/scripts/token-phase.py" \
43
+ python3 "$SCRIPTS_DIR/token-phase.py" \
42
44
  --feature-id "$FEATURE_ID" \
43
45
  --phase "${PHASE}-generate" \
44
- --plugin-dir "$PLUGIN_DIR" >&2 || true
46
+ --plugin-dir "$OUTPUTS_DIR" >&2 || true
45
47
 
46
- python3 "$PLUGIN_DIR/scripts/token-phase.py" \
48
+ python3 "$SCRIPTS_DIR/token-phase.py" \
47
49
  --feature-id "$FEATURE_ID" \
48
50
  --phase "${PHASE}-validate" \
49
- --plugin-dir "$PLUGIN_DIR" >&2 || true
51
+ --plugin-dir "$OUTPUTS_DIR" >&2 || true
50
52
 
51
- TOKENS_FILE="$PLUGIN_DIR/outputs/tokens/${FEATURE_ID}.json"
53
+ TOKENS_FILE="$OUTPUTS_DIR/tokens/${FEATURE_ID}.json"
52
54
  if [ -f "$TOKENS_FILE" ]; then
53
55
  TOKENS_LINE=$(python3 -c "
54
56
  import json
@@ -8,14 +8,16 @@
8
8
  set -euo pipefail
9
9
 
10
10
  FILE_PATH="${CLAUDE_TOOL_FILE_PATH:-}"
11
- PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
11
+ AGENT_DIR=".claude/agents/staff-software-engineer"
12
+ OUTPUTS_DIR=".claude/runtime/outputs/sse"
13
+ SCRIPTS_DIR=".claude/runtime/scripts/staff-software-engineer"
12
14
 
13
15
  PHASE=""
14
16
  case "$FILE_PATH" in
15
- *.claude/plugins/staff-software-engineer/outputs/plan/*.md) PHASE=plan ;;
16
- *.claude/plugins/staff-software-engineer/outputs/dev/*.md) PHASE=dev ;;
17
- *.claude/plugins/staff-software-engineer/outputs/test/*.md) PHASE=test ;;
18
- *.claude/plugins/staff-software-engineer/outputs/pr/*.md) PHASE=pr ;;
17
+ *.claude/runtime/outputs/sse/plan/*.md) PHASE=plan ;;
18
+ *.claude/runtime/outputs/sse/dev/*.md) PHASE=dev ;;
19
+ *.claude/runtime/outputs/sse/test/*.md) PHASE=test ;;
20
+ *.claude/runtime/outputs/sse/pr/*.md) PHASE=pr ;;
19
21
  *) exit 0 ;;
20
22
  esac
21
23
 
@@ -23,16 +25,16 @@ if grep -q "<!-- approved:" "$FILE_PATH" 2>/dev/null; then
23
25
  exit 0
24
26
  fi
25
27
 
26
- ACTIVITY="$(cd "$PLUGIN_DIR/../../.." && pwd)/.claude/scripts/activity.py"
28
+ ACTIVITY=".claude/scripts/activity.py"
27
29
  set_activity() { [ -x "$ACTIVITY" ] && python3 "$ACTIVITY" set "$1" "$2" 2>/dev/null || true; }
28
30
  clear_activity() { [ -x "$ACTIVITY" ] && python3 "$ACTIVITY" clear 2>/dev/null || true; }
29
31
 
30
32
  FAILURES=()
31
- for sensor in "$PLUGIN_DIR"/sensors/${PHASE}-*.md; do
33
+ for sensor in "$AGENT_DIR"/sensors/${PHASE}-*.md; do
32
34
  [ -f "$sensor" ] || continue
33
35
  sname="$(basename "$sensor" .md)"
34
36
  set_activity sensor "$sname"
35
- if ! python3 "$PLUGIN_DIR/scripts/sensor-runner.py" \
37
+ if ! python3 "$SCRIPTS_DIR/sensor-runner.py" \
36
38
  --sensor "$sensor" \
37
39
  --artifact "$FILE_PATH" >&2; then
38
40
  FAILURES+=("$sname")
@@ -46,7 +48,7 @@ if [ ${#FAILURES[@]} -gt 0 ]; then
46
48
  fi
47
49
 
48
50
  FEATURE_ID="$(basename "$FILE_PATH" .md)"
49
- MARKERS_DIR="$PLUGIN_DIR/outputs/.markers"
51
+ MARKERS_DIR="$OUTPUTS_DIR/.markers"
50
52
  mkdir -p "$MARKERS_DIR"
51
53
  NOW="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
52
54