@curdx/flow 2.3.11 → 3.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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -20
- package/CHANGELOG.md +55 -2
- package/README.md +69 -19
- package/agents/flow-adversary.md +1 -0
- package/agents/flow-architect.md +1 -0
- package/agents/flow-brownfield-analyst.md +1 -0
- package/agents/flow-edge-hunter.md +1 -0
- package/agents/flow-planner.md +1 -0
- package/agents/flow-researcher.md +1 -0
- package/agents/flow-reviewer.md +1 -0
- package/agents/flow-ui-researcher.md +1 -0
- package/agents/flow-verifier.md +1 -0
- package/bin/curdx-flow-state +104 -0
- package/hooks/hooks.json +72 -0
- package/hooks/scripts/common.sh +191 -0
- package/hooks/scripts/config-change-guard.sh +94 -0
- package/hooks/scripts/flow-context-watch.sh +94 -0
- package/hooks/scripts/quick-mode-guard.sh +4 -3
- package/hooks/scripts/session-start.sh +14 -10
- package/hooks/scripts/session-title.sh +87 -0
- package/hooks/scripts/stop-watcher.sh +4 -3
- package/hooks/scripts/subagent-artifact-guard.sh +7 -74
- package/hooks/scripts/subagent-statusline.sh +8 -2
- package/hooks/scripts/task-lifecycle-guard.sh +106 -0
- package/hooks/scripts/teammate-idle-guard.sh +83 -0
- package/knowledge/claude-code-runtime-contracts.md +21 -0
- package/monitors/scripts/flow-state-monitor.sh +8 -5
- package/output-styles/curdx-fast-mode.md +42 -0
- package/output-styles/curdx-spec-mode.md +46 -0
- package/package.json +5 -3
- package/schemas/agent-frontmatter.schema.json +4 -1
- package/schemas/spec-state.schema.json +18 -0
- package/settings.json +2 -1
- package/skills/implement/SKILL.md +8 -0
- package/skills/implement/references/linear-execution.md +11 -0
- package/skills/implement/references/native-task-sync.md +107 -0
- package/skills/implement/references/progress-contract.md +4 -0
- package/skills/implement/references/state-init.md +3 -0
- package/skills/implement/references/stop-hook-execution.md +19 -5
- package/skills/implement/references/subagent-execution.md +16 -2
- package/skills/implement/references/wave-execution.md +18 -0
- package/skills/status/references/gather-contract.md +3 -0
- package/skills/status/references/output-contract.md +1 -0
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
|
|
9
|
-
"version": "
|
|
9
|
+
"version": "3.0.0"
|
|
10
10
|
},
|
|
11
11
|
"allowCrossMarketplaceDependenciesOn": [
|
|
12
12
|
"context7-marketplace"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"name": "curdx-flow",
|
|
17
17
|
"source": "./",
|
|
18
18
|
"description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
|
|
19
|
-
"version": "
|
|
19
|
+
"version": "3.0.0",
|
|
20
20
|
"author": {
|
|
21
21
|
"name": "wdx",
|
|
22
22
|
"email": "bydongxin@gmail.com"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "curdx-flow",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "wdx",
|
|
@@ -18,25 +18,7 @@
|
|
|
18
18
|
"claude-code"
|
|
19
19
|
],
|
|
20
20
|
"skills": "./skills/",
|
|
21
|
-
"agents":
|
|
22
|
-
"./agents/flow-adversary.md",
|
|
23
|
-
"./agents/flow-architect.md",
|
|
24
|
-
"./agents/flow-brownfield-analyst.md",
|
|
25
|
-
"./agents/flow-debugger.md",
|
|
26
|
-
"./agents/flow-edge-hunter.md",
|
|
27
|
-
"./agents/flow-executor.md",
|
|
28
|
-
"./agents/flow-orchestrator.md",
|
|
29
|
-
"./agents/flow-planner.md",
|
|
30
|
-
"./agents/flow-product-designer.md",
|
|
31
|
-
"./agents/flow-qa-engineer.md",
|
|
32
|
-
"./agents/flow-researcher.md",
|
|
33
|
-
"./agents/flow-reviewer.md",
|
|
34
|
-
"./agents/flow-security-auditor.md",
|
|
35
|
-
"./agents/flow-triage-analyst.md",
|
|
36
|
-
"./agents/flow-ui-researcher.md",
|
|
37
|
-
"./agents/flow-ux-designer.md",
|
|
38
|
-
"./agents/flow-verifier.md"
|
|
39
|
-
],
|
|
21
|
+
"agents": "./agents/",
|
|
40
22
|
"outputStyles": "./output-styles/",
|
|
41
23
|
"monitors": "./monitors/monitors.json",
|
|
42
24
|
"userConfig": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,63 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.0.0
|
|
4
|
+
|
|
5
|
+
The modernization release. No breaking changes for end users — internal
|
|
6
|
+
manifest reshape, schema realignment, and platform-feature uptake.
|
|
7
|
+
|
|
8
|
+
- aligned `schemas/agent-frontmatter.schema.json` with the canonical field
|
|
9
|
+
list documented at <https://code.claude.com/docs/en/sub-agents.md>; reversed
|
|
10
|
+
the P1 contract validator's misjudgement that flagged `effort`,
|
|
11
|
+
`maxTurns`, `background`, and `color` as non-canonical, and replaced it
|
|
12
|
+
with a strict-mode threshold check on combined `description + when_to_use`
|
|
13
|
+
length (1536-char skill listing cap)
|
|
14
|
+
- collapsed `plugin.json#agents` from a 17-entry explicit array to the
|
|
15
|
+
directory pointer `"./agents/"`, matching `skills` and `outputStyles` and
|
|
16
|
+
eliminating per-agent manifest drift
|
|
17
|
+
- explicitly forbade plugin-ignored fields (`hooks`, `mcpServers`,
|
|
18
|
+
`permissionMode`) at schema validation time so misconfigurations surface
|
|
19
|
+
before install instead of being silently dropped at runtime
|
|
20
|
+
- shipped a plugin root `bin/` directory: `bin/curdx-flow-state` emits a
|
|
21
|
+
one-line snapshot of the active spec and is added to the Bash tool's
|
|
22
|
+
`PATH` whenever the plugin is enabled (Claude Code v2.1.91+); agents,
|
|
23
|
+
skills, and hooks can call it as a bare command instead of duplicating
|
|
24
|
+
Python/Bash snippets
|
|
25
|
+
- added `subagentStatusLine.refreshInterval: 5` so the worktree-aware
|
|
26
|
+
status line refreshes automatically (Claude Code Week 15 statusline
|
|
27
|
+
feature)
|
|
28
|
+
- shipped two new output styles, `CurdX Spec Mode` (verbose, artifact-first)
|
|
29
|
+
and `CurdX Fast Mode` (low-ceremony surgical work), alongside the
|
|
30
|
+
default evidence-first style
|
|
31
|
+
- expanded the test suite from 10 to 110+ assertions across five new files:
|
|
32
|
+
every skill frontmatter parses with name/description/length contract,
|
|
33
|
+
every hook script invoked from `hooks.json` is executable + bash-parsable,
|
|
34
|
+
every output style has frontmatter + non-trivial body, the
|
|
35
|
+
`RECOMMENDED_PLUGINS` registry stays in lockstep with `session-start.sh`,
|
|
36
|
+
and every plugin `bin/` executable parses + runs without crashing
|
|
37
|
+
- restored the README and CHANGELOG that were dropped during the
|
|
38
|
+
P1 slate-clearing (commits 0dee423 / 8b14aba) and updated them to v3.0.0
|
|
39
|
+
|
|
40
|
+
## 2.3.11
|
|
41
|
+
|
|
42
|
+
- internal-only patches; no user-facing behavior change
|
|
43
|
+
|
|
44
|
+
## 2.3.10
|
|
45
|
+
|
|
46
|
+
- auto-heal legacy Context7 state on upgrade; doctor reports "all healthy" once
|
|
47
|
+
the legacy user-level Context7 MCP entry has been reconciled
|
|
48
|
+
|
|
49
|
+
## 2.3.9
|
|
50
|
+
|
|
51
|
+
- aligned Claude runtime hooks with the official auto-discovery contract
|
|
52
|
+
(`hooks.json` is loaded automatically; manifest `hooks` field is reserved
|
|
53
|
+
for non-standard locations only) and resolved the `context7-plugin
|
|
54
|
+
unknown version` install failure that blocked upgrades
|
|
55
|
+
|
|
3
56
|
## 2.3.8
|
|
4
57
|
|
|
5
58
|
- taught `doctor` to detect dirty CurDX-Flow source checkouts, so plugin developers immediately see when Claude cannot possibly be running their latest local edits yet
|
|
6
59
|
- surfaced bundled source repo metadata (`branch`, `shortSha`, `exactTag`, `dirty`) alongside bundled plugin body version in diagnostics and JSON output
|
|
7
|
-
- documented the reinstall workflow for
|
|
60
|
+
- documented the reinstall workflow for "same version, but local source changed" plugin-development scenarios
|
|
8
61
|
|
|
9
62
|
## 2.3.7
|
|
10
63
|
|
|
@@ -26,7 +79,7 @@
|
|
|
26
79
|
|
|
27
80
|
## 2.3.1
|
|
28
81
|
|
|
29
|
-
- expanded `doctor` to report CurDX-Flow
|
|
82
|
+
- expanded `doctor` to report CurDX-Flow's bundled main-thread agent, monitor surface, and plugin option defaults
|
|
30
83
|
- documented where Claude Code stores CurDX-Flow non-sensitive `userConfig` values in `pluginConfigs`
|
|
31
84
|
- added troubleshooting guidance for stop-hook blocking and plugin monitor behavior
|
|
32
85
|
|
package/README.md
CHANGED
|
@@ -9,8 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
CurdX-Flow is a skill-first Claude Code plugin. The public surface stays small:
|
|
11
11
|
11 slash commands, 5 auto-invoked skills, 17 internal agents, and a thin set of
|
|
12
|
-
|
|
13
|
-
`knowledge/`.
|
|
12
|
+
runtime contracts. The heavy workflow detail lives in `skills/*/references/`,
|
|
13
|
+
`knowledge/`, and the `agent-preamble/`.
|
|
14
|
+
|
|
15
|
+
v3.0.0 is the modernization release: the plugin manifest, agent/skill schemas,
|
|
16
|
+
and contract validator are aligned with the latest Claude Code plugin spec
|
|
17
|
+
([sub-agents.md](https://code.claude.com/docs/en/sub-agents.md),
|
|
18
|
+
[plugins-reference.md](https://code.claude.com/docs/en/plugins-reference.md)),
|
|
19
|
+
and the plugin now ships a `bin/` directory whose executables are added to the
|
|
20
|
+
Bash tool's `PATH` while CurdX-Flow is enabled (Claude Code v2.1.91+).
|
|
14
21
|
|
|
15
22
|
## Install
|
|
16
23
|
|
|
@@ -21,10 +28,10 @@ npx @curdx/flow install --all
|
|
|
21
28
|
Requires modern Claude Code and Node 18+. The install flow registers the plugin,
|
|
22
29
|
required reasoning/doc tools, and recommended companion plugins. Run
|
|
23
30
|
`npx @curdx/flow doctor` after install if anything looks off. For CI or wrapper
|
|
24
|
-
automation, use `npx @curdx/flow doctor --json`, which
|
|
25
|
-
managed settings
|
|
31
|
+
automation, use `npx @curdx/flow doctor --json`, which reports file-based
|
|
32
|
+
managed settings at their correct precedence layer.
|
|
26
33
|
|
|
27
|
-
After restart,
|
|
34
|
+
After restart, CurdX-Flow routes the main thread through `flow-orchestrator`
|
|
28
35
|
by default and starts the bundled `.flow` progress monitor in interactive
|
|
29
36
|
Claude Code sessions.
|
|
30
37
|
|
|
@@ -70,26 +77,69 @@ This produces a durable audit trail instead of a chat-only claim of completion.
|
|
|
70
77
|
## What ships
|
|
71
78
|
|
|
72
79
|
- 11 slash commands and 5 auto-invoked skills
|
|
73
|
-
- 17 internal agents
|
|
74
|
-
-
|
|
75
|
-
- a
|
|
76
|
-
-
|
|
77
|
-
- 4 execution strategies for `/curdx-flow:implement`
|
|
80
|
+
- 17 internal agents wired through `flow-orchestrator`
|
|
81
|
+
- 3 output styles: default, `CurdX Spec Mode`, `CurdX Fast Mode`
|
|
82
|
+
- a `flow-state` background monitor that streams spec progress changes back into Claude
|
|
83
|
+
- 9 composable gates and 14 knowledge docs referenced by every agent
|
|
84
|
+
- 4 execution strategies for `/curdx-flow:implement` (linear, subagent, stop-hook, wave)
|
|
85
|
+
- a plugin `bin/` directory: `curdx-flow-state` is PATH-mounted while the plugin is enabled, so agents and hooks can call it as a bare command
|
|
78
86
|
- thin public docs, thick supporting references
|
|
79
87
|
|
|
80
|
-
##
|
|
88
|
+
## Plugin layout
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
.claude-plugin/
|
|
92
|
+
plugin.json plugin manifest (agents/skills/outputStyles point at directories, not file lists)
|
|
93
|
+
marketplace.json
|
|
94
|
+
agents/ 17 specialist subagents
|
|
95
|
+
skills/ 16 skills (commands + auto-invoked)
|
|
96
|
+
hooks/
|
|
97
|
+
hooks.json SessionStart, UserPromptSubmit, Stop, SubagentStop, …
|
|
98
|
+
scripts/ shell handlers (sourced helpers in common.sh, invoked scripts +x)
|
|
99
|
+
gates/ 9 composable review gates
|
|
100
|
+
knowledge/ 14 long-form references @-included by agents
|
|
101
|
+
monitors/
|
|
102
|
+
monitors.json background watchers (flow-state)
|
|
103
|
+
output-styles/ default + spec-mode + fast-mode
|
|
104
|
+
agent-preamble/ shared preamble all agents @-include
|
|
105
|
+
schemas/ JSON Schemas for plugin manifest, agent / skill frontmatter, hooks
|
|
106
|
+
templates/ scaffold templates the CLI installer copies into .flow/
|
|
107
|
+
bin/ plugin executables on PATH (curdx-flow-state, plus the npm CLI bin)
|
|
108
|
+
cli/ npm-published CLI installer (install / upgrade / doctor / uninstall)
|
|
109
|
+
test/ node:test suite + plugin contract validator regression baseline
|
|
110
|
+
scripts/ release.sh + validate-plugin-contracts.mjs + npm-dist-tag
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Compatibility notes
|
|
114
|
+
|
|
115
|
+
- **Skill shell execution** — CurdX-Flow skills rely on Bash tool calls. If your
|
|
116
|
+
Claude Code settings have `disableSkillShellExecution: true`, the spec
|
|
117
|
+
workflow will not run; remove that setting or scope it away from CurdX-Flow.
|
|
118
|
+
- **Plugin agent fields** — agent frontmatter follows the canonical fields
|
|
119
|
+
documented at
|
|
120
|
+
[sub-agents.md](https://code.claude.com/docs/en/sub-agents.md). The fields
|
|
121
|
+
`hooks`, `mcpServers`, and `permissionMode` are silently ignored by the
|
|
122
|
+
Claude Code plugin runtime; CurdX-Flow's schema rejects them at validation
|
|
123
|
+
time so misconfigurations surface before install.
|
|
124
|
+
- **Plugin executables on PATH** — the plugin root `bin/` directory lands on
|
|
125
|
+
the Bash tool's `PATH` while CurdX-Flow is enabled (Claude Code v2.1.91+).
|
|
126
|
+
|
|
127
|
+
## Development
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm test # 110+ tests
|
|
131
|
+
npm run validate:contracts # lenient validator
|
|
132
|
+
npm run validate:contracts:strict # strict validator (skill description-length cap is fatal)
|
|
133
|
+
claude plugin validate . # ground-truth gate
|
|
134
|
+
```
|
|
81
135
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
- [docs/headless-ci.md](./docs/headless-ci.md) for `claude --bare -p`, `system/init`, `system/plugin_install`, and CI patterns
|
|
86
|
-
- [docs/troubleshoot.md](./docs/troubleshoot.md) for operator fixes
|
|
87
|
-
- [docs/architecture.md](./docs/architecture.md) for the skill-first layout
|
|
88
|
-
- [docs/agent-reference.md](./docs/agent-reference.md) for the 17 internal agents and their artifacts
|
|
136
|
+
`scripts/release.sh major|minor|patch` bumps `package.json`, `plugin.json`,
|
|
137
|
+
`marketplace.json`, and the lockfile in lockstep, commits, tags, and pushes.
|
|
138
|
+
The tag push triggers `.github/workflows/npm-publish.yml`.
|
|
89
139
|
|
|
90
140
|
## Notes
|
|
91
141
|
|
|
92
142
|
- `enterprise` mode turns on adversarial, edge-case, security, and DevEx gates.
|
|
93
|
-
- `subagent` is serial; `wave` is the parallel strategy.
|
|
143
|
+
- `subagent` is serial; `wave` is the parallel execution strategy.
|
|
94
144
|
- Headless usage should favor `claude --bare -p` and explicit `--plugin-dir`,
|
|
95
145
|
`--settings`, and `--mcp-config` wiring.
|
package/agents/flow-adversary.md
CHANGED
package/agents/flow-architect.md
CHANGED
package/agents/flow-planner.md
CHANGED
package/agents/flow-reviewer.md
CHANGED
package/agents/flow-verifier.md
CHANGED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# curdx-flow-state — emit a one-line snapshot of the active CurDX-Flow spec.
|
|
3
|
+
#
|
|
4
|
+
# When the curdx-flow plugin is enabled, Claude Code adds the plugin's bin/
|
|
5
|
+
# directory to the Bash tool's PATH (Claude Code v2.1.91+). Agents, skills,
|
|
6
|
+
# and hooks can then call `curdx-flow-state` as a bare command instead of
|
|
7
|
+
# duplicating Python/Bash snippets that walk .flow state.
|
|
8
|
+
#
|
|
9
|
+
# Output format (single line, stable contract):
|
|
10
|
+
# spec=<name> phase=<phase> strategy=<strategy> tasks=<idx>/<total> unchecked=<n> [failed_attempts=<n>] [loop=<n>]
|
|
11
|
+
#
|
|
12
|
+
# Exit codes:
|
|
13
|
+
# 0 state available (line printed)
|
|
14
|
+
# 2 no .flow/ root found
|
|
15
|
+
# 3 no active spec
|
|
16
|
+
#
|
|
17
|
+
# Usage from a Bash tool call (or any shell):
|
|
18
|
+
# curdx-flow-state # current cwd
|
|
19
|
+
# curdx-flow-state /path/to/repo
|
|
20
|
+
|
|
21
|
+
set -u
|
|
22
|
+
|
|
23
|
+
ROOT="${CLAUDE_PLUGIN_ROOT:-}"
|
|
24
|
+
if [ -z "$ROOT" ]; then
|
|
25
|
+
# Resolve relative to this script's location (works for npm install + plugin install).
|
|
26
|
+
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# shellcheck source=hooks/scripts/common.sh
|
|
30
|
+
. "$ROOT/hooks/scripts/common.sh"
|
|
31
|
+
|
|
32
|
+
target="${1:-${PWD:-}}"
|
|
33
|
+
flow_root="$(resolve_flow_root "$target" 2>/dev/null || true)"
|
|
34
|
+
[ -n "$flow_root" ] || exit 2
|
|
35
|
+
|
|
36
|
+
active="$(cat "$flow_root/.flow/.active-spec" 2>/dev/null || true)"
|
|
37
|
+
[ -n "$active" ] || exit 3
|
|
38
|
+
|
|
39
|
+
spec_dir="$flow_root/.flow/specs/$active"
|
|
40
|
+
state_file="$spec_dir/.state.json"
|
|
41
|
+
tasks_file="$spec_dir/tasks.md"
|
|
42
|
+
|
|
43
|
+
if has_python3; then
|
|
44
|
+
export CURDX_STATE_ACTIVE="$active"
|
|
45
|
+
export CURDX_STATE_FILE="$state_file"
|
|
46
|
+
export CURDX_TASKS_FILE="$tasks_file"
|
|
47
|
+
python3 <<'PY'
|
|
48
|
+
import json
|
|
49
|
+
import os
|
|
50
|
+
import re
|
|
51
|
+
|
|
52
|
+
active = os.environ["CURDX_STATE_ACTIVE"]
|
|
53
|
+
state_file = os.environ["CURDX_STATE_FILE"]
|
|
54
|
+
tasks_file = os.environ["CURDX_TASKS_FILE"]
|
|
55
|
+
|
|
56
|
+
phase = "unknown"
|
|
57
|
+
strategy = "unknown"
|
|
58
|
+
task_index = 0
|
|
59
|
+
total_tasks = 0
|
|
60
|
+
failed_attempts = 0
|
|
61
|
+
global_iteration = 0
|
|
62
|
+
|
|
63
|
+
if os.path.exists(state_file):
|
|
64
|
+
try:
|
|
65
|
+
state = json.load(open(state_file, "r", encoding="utf-8"))
|
|
66
|
+
phase = state.get("phase") or phase
|
|
67
|
+
strategy = state.get("strategy") or strategy
|
|
68
|
+
execute_state = state.get("execute_state") or {}
|
|
69
|
+
task_index = int(execute_state.get("task_index") or 0)
|
|
70
|
+
total_tasks = int(execute_state.get("total_tasks") or 0)
|
|
71
|
+
failed_attempts = int(execute_state.get("failed_attempts") or 0)
|
|
72
|
+
global_iteration = int(execute_state.get("global_iteration") or 0)
|
|
73
|
+
except Exception:
|
|
74
|
+
phase = "invalid-state"
|
|
75
|
+
|
|
76
|
+
unchecked = -1
|
|
77
|
+
if os.path.exists(tasks_file):
|
|
78
|
+
try:
|
|
79
|
+
text = open(tasks_file, "r", encoding="utf-8").read()
|
|
80
|
+
unchecked = len(re.findall(r"^- \[ \] \*\*[0-9]+(\.[0-9]+|\.VF|\.X(\+[0-9]+)?)*\*\*", text, re.M))
|
|
81
|
+
except Exception:
|
|
82
|
+
unchecked = -1
|
|
83
|
+
|
|
84
|
+
parts = [
|
|
85
|
+
f"spec={active}",
|
|
86
|
+
f"phase={phase}",
|
|
87
|
+
f"strategy={strategy}",
|
|
88
|
+
]
|
|
89
|
+
if total_tasks > 0:
|
|
90
|
+
parts.append(f"tasks={task_index}/{total_tasks}")
|
|
91
|
+
parts.append(f"unchecked={unchecked}")
|
|
92
|
+
if failed_attempts > 0:
|
|
93
|
+
parts.append(f"failed_attempts={failed_attempts}")
|
|
94
|
+
if global_iteration > 0:
|
|
95
|
+
parts.append(f"loop={global_iteration}")
|
|
96
|
+
|
|
97
|
+
print(" ".join(parts))
|
|
98
|
+
PY
|
|
99
|
+
exit 0
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# Fallback when python3 is unavailable: emit minimum useful info.
|
|
103
|
+
printf 'spec=%s\n' "$active"
|
|
104
|
+
exit 0
|
package/hooks/hooks.json
CHANGED
|
@@ -21,6 +21,37 @@
|
|
|
21
21
|
]
|
|
22
22
|
}
|
|
23
23
|
],
|
|
24
|
+
"UserPromptSubmit": [
|
|
25
|
+
{
|
|
26
|
+
"hooks": [
|
|
27
|
+
{
|
|
28
|
+
"type": "command",
|
|
29
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/session-title.sh",
|
|
30
|
+
"statusMessage": "Refreshing CurDX-Flow session title"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"CwdChanged": [
|
|
36
|
+
{
|
|
37
|
+
"hooks": [
|
|
38
|
+
{
|
|
39
|
+
"type": "command",
|
|
40
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/flow-context-watch.sh"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"FileChanged": [
|
|
46
|
+
{
|
|
47
|
+
"hooks": [
|
|
48
|
+
{
|
|
49
|
+
"type": "command",
|
|
50
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/flow-context-watch.sh"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
],
|
|
24
55
|
"Stop": [
|
|
25
56
|
{
|
|
26
57
|
"hooks": [
|
|
@@ -43,6 +74,47 @@
|
|
|
43
74
|
]
|
|
44
75
|
}
|
|
45
76
|
],
|
|
77
|
+
"TaskCreated": [
|
|
78
|
+
{
|
|
79
|
+
"hooks": [
|
|
80
|
+
{
|
|
81
|
+
"type": "command",
|
|
82
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/task-lifecycle-guard.sh"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"TaskCompleted": [
|
|
88
|
+
{
|
|
89
|
+
"hooks": [
|
|
90
|
+
{
|
|
91
|
+
"type": "command",
|
|
92
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/task-lifecycle-guard.sh"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"TeammateIdle": [
|
|
98
|
+
{
|
|
99
|
+
"hooks": [
|
|
100
|
+
{
|
|
101
|
+
"type": "command",
|
|
102
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/teammate-idle-guard.sh"
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"ConfigChange": [
|
|
108
|
+
{
|
|
109
|
+
"matcher": "project_settings|local_settings",
|
|
110
|
+
"hooks": [
|
|
111
|
+
{
|
|
112
|
+
"type": "command",
|
|
113
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/config-change-guard.sh"
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
],
|
|
46
118
|
"PreToolUse": [
|
|
47
119
|
{
|
|
48
120
|
"matcher": "AskUserQuestion",
|