@ironbee-ai/cli 0.1.1 → 0.2.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +38 -9
  3. package/dist/assets/banner.txt +9 -6
  4. package/dist/clients/base.d.ts +3 -1
  5. package/dist/clients/base.d.ts.map +1 -1
  6. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  7. package/dist/clients/claude/hooks/clear-verdict.js +2 -1
  8. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  9. package/dist/clients/claude/hooks/require-verdict.d.ts +13 -0
  10. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -0
  11. package/dist/clients/claude/hooks/require-verdict.js +42 -0
  12. package/dist/clients/claude/hooks/require-verdict.js.map +1 -0
  13. package/dist/clients/claude/hooks/session-start.d.ts +4 -3
  14. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  15. package/dist/clients/claude/hooks/session-start.js +22 -18
  16. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  17. package/dist/clients/claude/index.d.ts +2 -1
  18. package/dist/clients/claude/index.d.ts.map +1 -1
  19. package/dist/clients/claude/index.js +46 -24
  20. package/dist/clients/claude/index.js.map +1 -1
  21. package/dist/clients/claude/rule.md +10 -8
  22. package/dist/clients/claude/skill.md +32 -9
  23. package/dist/clients/cursor/hooks/clear-verdict.d.ts +11 -0
  24. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -0
  25. package/dist/clients/cursor/hooks/clear-verdict.js +57 -0
  26. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -0
  27. package/dist/clients/cursor/hooks/require-verdict.d.ts +12 -0
  28. package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -0
  29. package/dist/clients/cursor/hooks/require-verdict.js +48 -0
  30. package/dist/clients/cursor/hooks/require-verdict.js.map +1 -0
  31. package/dist/clients/cursor/hooks/session-start.d.ts +9 -0
  32. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -0
  33. package/dist/clients/cursor/hooks/session-start.js +75 -0
  34. package/dist/clients/cursor/hooks/session-start.js.map +1 -0
  35. package/dist/clients/cursor/hooks/track-action.d.ts +16 -0
  36. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -0
  37. package/dist/clients/cursor/hooks/track-action.js +92 -0
  38. package/dist/clients/cursor/hooks/track-action.js.map +1 -0
  39. package/dist/clients/cursor/hooks/verify-gate.d.ts +13 -0
  40. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -0
  41. package/dist/clients/cursor/hooks/verify-gate.js +49 -0
  42. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -0
  43. package/dist/clients/cursor/index.d.ts +20 -0
  44. package/dist/clients/cursor/index.d.ts.map +1 -0
  45. package/dist/clients/cursor/index.js +213 -0
  46. package/dist/clients/cursor/index.js.map +1 -0
  47. package/dist/clients/cursor/rule.md +42 -0
  48. package/dist/clients/cursor/skill.md +86 -0
  49. package/dist/clients/registry.d.ts.map +1 -1
  50. package/dist/clients/registry.js +2 -1
  51. package/dist/clients/registry.js.map +1 -1
  52. package/dist/commands/hook.d.ts.map +1 -1
  53. package/dist/commands/hook.js +61 -0
  54. package/dist/commands/hook.js.map +1 -1
  55. package/dist/commands/install.d.ts.map +1 -1
  56. package/dist/commands/install.js +1 -13
  57. package/dist/commands/install.js.map +1 -1
  58. package/dist/commands/status.js +3 -3
  59. package/dist/commands/verify.js +3 -3
  60. package/dist/hooks/core/actions.d.ts +7 -0
  61. package/dist/hooks/core/actions.d.ts.map +1 -1
  62. package/dist/hooks/core/actions.js +5 -0
  63. package/dist/hooks/core/actions.js.map +1 -1
  64. package/dist/hooks/core/submit-verdict.d.ts +21 -0
  65. package/dist/hooks/core/submit-verdict.d.ts.map +1 -0
  66. package/dist/hooks/core/submit-verdict.js +109 -0
  67. package/dist/hooks/core/submit-verdict.js.map +1 -0
  68. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  69. package/dist/hooks/core/verify-gate.js +66 -49
  70. package/dist/hooks/core/verify-gate.js.map +1 -1
  71. package/dist/index.js +0 -0
  72. package/dist/lib/icon.js +1 -1
  73. package/dist/lib/icon.js.map +1 -1
  74. package/package.json +12 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.1 (2026-03-16)
4
+
5
+ # 0.2.0 (2026-03-16)
6
+
3
7
  ## 0.1.1 (2026-03-14)
4
8
 
5
9
  All notable changes to this project will be documented in this file.
package/README.md CHANGED
@@ -9,14 +9,13 @@
9
9
 
10
10
  <p align="center">
11
11
  <a href="https://www.npmjs.com/package/@ironbee-ai/cli"><img src="https://img.shields.io/npm/v/@ironbee-ai/cli.svg" alt="npm version" /></a>
12
- <a href="https://www.npmjs.com/package/@ironbee-ai/cli"><img src="https://img.shields.io/npm/dm/@ironbee-ai/cli.svg" alt="npm downloads" /></a>
13
- <a href="https://github.com/ironbee-ai/ironbee-cli/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@ironbee-ai/cli.svg" alt="license" /></a>
14
- <a href="https://github.com/ironbee-ai/ironbee-cli/actions"><img src="https://img.shields.io/github/actions/workflow/status/ironbee-ai/@ironbee-ai/cli/build.yml?branch=main" alt="CI" /></a>
12
+ <a href="https://github.com/ironbee-ai/ironbee-cli/blob/main/LICENSE"><img src="https://img.shields.io/github/license/ironbee-ai/ironbee-cli.svg" alt="license" /></a>
13
+ <a href="https://github.com/ironbee-ai/ironbee-cli/actions"><img src="https://img.shields.io/github/actions/workflow/status/ironbee-ai/ironbee-cli/build.yml?branch=main" alt="CI" /></a>
15
14
  </p>
16
15
 
17
16
  ---
18
17
 
19
- [IronBee](https://ironbee.ai) ensures that AI agents verify their code changes before completing a task. When an agent edits code, it cannot finish until it navigates to the affected pages, functionally tests the changes, and writes a passing verdict.
18
+ [IronBee](https://ironbee.ai) ensures that AI agents verify their code changes before completing a task. When an agent edits code, it cannot finish until it navigates to the affected pages, functionally tests the changes, and submits a passing verdict.
20
19
 
21
20
  No more "it should work" — every change is tested.
22
21
 
@@ -27,7 +26,7 @@ Powered by [browser-devtools-mcp](https://browser-devtools.com) — the agent na
27
26
  | Client | Status |
28
27
  |--------|--------|
29
28
  | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | Supported |
30
- | Cursor | Planned |
29
+ | [Cursor](https://cursor.com) | Supported |
31
30
  | Codex | Planned |
32
31
  | OpenCode | Planned |
33
32
 
@@ -52,6 +51,16 @@ This auto-detects your AI client and writes:
52
51
  - MCP server config (so the agent has browser access)
53
52
  - Browser-devtools permissions
54
53
 
54
+ ### Cursor: additional setup
55
+
56
+ Cursor requires manual activation of the MCP server after install:
57
+
58
+ 1. **Restart Cursor** to load the new hooks and MCP config
59
+ 2. Go to **Settings → Tools & MCP** and verify **browser-devtools** is enabled
60
+ 3. If the server shows as enabled but tools are unavailable, toggle it off and on
61
+
62
+ > **Note:** This is a [known Cursor limitation](https://forum.cursor.com/t/mcp-tools-only-available-to-agent-after-manually-toggling-server-off-on-even-when-already-enabled/152859) — MCP servers added via `mcp.json` may need manual activation.
63
+
55
64
  ### That's it
56
65
 
57
66
  The next time your AI agent edits code, IronBee will require browser verification before the task can complete.
@@ -100,15 +109,18 @@ When the agent tries to complete a task, IronBee runs these checks:
100
109
 
101
110
  1. **Were code files edited?** — If no matching files were changed, the agent completes normally.
102
111
  2. **Were browser tools used?** — The agent must have called: navigate, screenshot, accessibility snapshot, and console check.
103
- 3. **Does a verdict file exist?** — The agent must write a JSON verdict after testing.
104
- 4. **Is the verdict valid?** — Must include `status`, `pages_tested`, `checks`, `console_errors`, and `network_failures`.
112
+ 3. **Does a verdict exist?** — The agent must submit a verdict via `ironbee hook submit-verdict` after testing.
113
+ 4. **Is the verdict valid?** — Must include `session_id`, `status`, `pages_tested`, `checks`, `console_errors`, and `network_failures`.
105
114
  5. **Pass or fail?** — Pass allows completion. Fail blocks the agent and asks it to fix the issues and re-verify.
106
115
  6. **Retry limit** — After `maxRetries` failed attempts (default 3), the agent is allowed to complete but must report unresolved issues.
107
116
 
108
117
  ### Verdict format
109
118
 
119
+ Verdicts are submitted via `echo '<json>' | ironbee hook submit-verdict`:
120
+
110
121
  ```json
111
122
  {
123
+ "session_id": "<your-session-id>",
112
124
  "status": "pass",
113
125
  "pages_tested": ["http://localhost:3000/dashboard"],
114
126
  "checks": ["form submits successfully", "new item appears in list"],
@@ -117,19 +129,36 @@ When the agent tries to complete a task, IronBee runs these checks:
117
129
  }
118
130
  ```
119
131
 
120
- On failure, include an `errors` array describing what went wrong:
132
+ On failure, include an `issues` array describing what went wrong:
121
133
 
122
134
  ```json
123
135
  {
136
+ "session_id": "<your-session-id>",
124
137
  "status": "fail",
125
138
  "pages_tested": ["http://localhost:3000/dashboard"],
126
139
  "checks": ["form renders", "submit button unresponsive"],
127
140
  "console_errors": 2,
128
141
  "network_failures": 0,
129
- "errors": ["button click handler not firing", "TypeError in console"]
142
+ "issues": ["button click handler not firing", "TypeError in console"]
130
143
  }
131
144
  ```
132
145
 
146
+ On pass after a previous fail, include a `fixes` array describing what was fixed:
147
+
148
+ ```json
149
+ {
150
+ "session_id": "<your-session-id>",
151
+ "status": "pass",
152
+ "pages_tested": ["http://localhost:3000/dashboard"],
153
+ "checks": ["form submits successfully", "new item appears in list"],
154
+ "console_errors": 0,
155
+ "network_failures": 0,
156
+ "fixes": ["reattached click handler to submit button", "fixed TypeError in event handler"]
157
+ }
158
+ ```
159
+
160
+ The agent must submit a verdict after **every** verification attempt — both pass and fail. File edits are blocked until a verdict is submitted after using browser tools.
161
+
133
162
  ## Session Isolation
134
163
 
135
164
  Each AI session gets its own directory under `.ironbee/sessions/<session-id>/`:
@@ -1,6 +1,9 @@
1
-  ██╗ ██████╗   ██████╗  ███╗   ██╗ ██████╗  ███████╗ ███████╗
2
-  ██║ ██╔══██╗ ██╔═══██╗ ████╗  ██║ ██╔══██╗ ██╔════╝ ██╔════╝
3
-  ██║ ██████╔╝ ██║   ██║ ██╔██╗ ██║ ██████╔╝ █████╗   █████╗  
4
-  ██║ ██╔══██╗ ██║   ██║ ██║╚██╗██║ ██╔══██╗ ██╔══╝   ██╔══╝  
5
-  ██║ ██║  ██║ ╚██████╔╝ ██║ ╚████║ ██████╔╝ ███████╗ ███████╗
6
-  ╚═╝ ╚═╝  ╚═╝  ╚═════╝  ╚═╝  ╚═══╝ ╚═════╝  ╚══════╝ ╚══════╝
1
+
2
+ ██╗ ██████╗ ██████╗ ███╗ ██╗ ██████╗ ███████╗ ███████╗
3
+ ██║ ██╔══██╗ ██╔═══██╗ ████╗ ██║ ██╔══██╗ ██╔════╝ ██╔════╝
4
+ ██║ ██████╔╝ ██║ ██║ ██╔██╗ ██║ ██████╔╝ █████╗ █████╗
5
+ ██║ ██╔══██╗ ██║ ██║ ██║╚██╗██║ ██╔══██╗ ██╔══╝ ██╔══╝
6
+ ██║ ██║ ██║ ╚██████╔╝ ██║ ╚████║ ██████╔╝ ███████╗ ███████╗
7
+ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚══════╝ ╚══════╝
8
+
9
+ The Verification Layer for Agentic Development
@@ -3,7 +3,7 @@ export interface IClient {
3
3
  /** Returns true if this client is detected in the project directory. */
4
4
  detect(projectDir: string): boolean;
5
5
  /** Installs hooks and guidance files into the project directory. */
6
- install(projectDir: string, ironbeePath: string): void;
6
+ install(projectDir: string): void;
7
7
  /** Removes IronBee hooks and guidance files from the project directory. */
8
8
  uninstall(projectDir: string): void;
9
9
  /** Resolves the project directory from client-specific env vars, falling back to cwd. */
@@ -16,5 +16,7 @@ export interface IClient {
16
16
  runTrackAction(projectDir: string): void;
17
17
  /** Runs the session-start hook for this client. */
18
18
  runSessionStart(projectDir: string): void;
19
+ /** Runs the require-verdict PreToolUse hook for this client. */
20
+ runRequireVerdict(projectDir: string): void;
19
21
  }
20
22
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/clients/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,oEAAoE;IACpE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvD,2EAA2E;IAC3E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,yFAAyF;IACzF,iBAAiB,IAAI,MAAM,CAAC;IAE5B,sDAAsD;IACtD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,+DAA+D;IAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C,8DAA8D;IAC9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzC,mDAAmD;IACnD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/clients/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,oEAAoE;IACpE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,2EAA2E;IAC3E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,yFAAyF;IACzF,iBAAiB,IAAI,MAAM,CAAC;IAE5B,sDAAsD;IACtD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,+DAA+D;IAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C,8DAA8D;IAC9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzC,mDAAmD;IACnD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C,gEAAgE;IAChE,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA2C5C"}
1
+ {"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA6C5C"}
@@ -41,6 +41,7 @@ function run(projectDir) {
41
41
  process.exit(0);
42
42
  }
43
43
  }
44
+ const actionsFile = `${projectDir}/.ironbee/sessions/${sessionId}/actions.jsonl`;
44
45
  // record file edit in actions.jsonl
45
46
  const fileEditEntry = {
46
47
  type: "file_edit",
@@ -48,7 +49,7 @@ function run(projectDir) {
48
49
  tool_name: input.tool_name ?? "unknown",
49
50
  file_path: writtenFile,
50
51
  };
51
- (0, actions_1.appendAction)(`${projectDir}/.ironbee/sessions/${sessionId}/actions.jsonl`, fileEditEntry);
52
+ (0, actions_1.appendAction)(actionsFile, fileEditEntry);
52
53
  (0, clear_verdict_1.runClearVerdict)({
53
54
  verdictFile: `${projectDir}/.ironbee/sessions/${sessionId}/verdict.json`,
54
55
  retryFile: `${projectDir}/.ironbee/sessions/${sessionId}/retries`,
@@ -1 +1 @@
1
- {"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAgBH,kBA2CC;AAzDD,qEAAoE;AACpE,yDAA2E;AAC3E,gDAAsF;AACtF,gDAAyD;AACzD,8CAA+C;AAU/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,SAAS,GAAW,SAAS,CAAC;IAClC,IAAI,KAA6B,CAAC;IAClC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA2B,CAAC;QAC1D,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAC1C,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,MAAM,WAAW,GAAuB,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IACpE,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpG,eAAM,CAAC,KAAK,CAAC,wDAAwD,WAAW,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,MAAM,GAAkB,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,IAAA,6BAAoB,EAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7C,eAAM,CAAC,KAAK,CAAC,+DAA+D,WAAW,GAAG,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAmB;QAClC,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;QACvC,SAAS,EAAE,WAAW;KACzB,CAAC;IACF,IAAA,sBAAY,EAAC,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAE1F,IAAA,+BAAe,EAAC;QACZ,WAAW,EAAE,GAAG,UAAU,sBAAsB,SAAS,eAAe;QACxE,SAAS,EAAE,GAAG,UAAU,sBAAsB,SAAS,UAAU;KACpE,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAgBH,kBA6CC;AA3DD,qEAAoE;AACpE,yDAA2E;AAC3E,gDAAsF;AACtF,gDAAyD;AACzD,8CAA+C;AAU/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,SAAS,GAAW,SAAS,CAAC;IAClC,IAAI,KAA6B,CAAC;IAClC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA2B,CAAC;QAC1D,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAC1C,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,MAAM,WAAW,GAAuB,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IACpE,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpG,eAAM,CAAC,KAAK,CAAC,wDAAwD,WAAW,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,MAAM,GAAkB,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,IAAA,6BAAoB,EAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7C,eAAM,CAAC,KAAK,CAAC,+DAA+D,WAAW,GAAG,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IAEzF,oCAAoC;IACpC,MAAM,aAAa,GAAmB;QAClC,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;QACvC,SAAS,EAAE,WAAW;KACzB,CAAC;IACF,IAAA,sBAAY,EAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEzC,IAAA,+BAAe,EAAC;QACZ,WAAW,EAAE,GAAG,UAAU,sBAAsB,SAAS,eAAe;QACxE,SAAS,EAAE,GAAG,UAAU,sBAAsB,SAAS,UAAU;KACpE,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Claude Code — require-verdict hook adapter
3
+ *
4
+ * PreToolUse hook for Write|Edit|MultiEdit — blocks file edits
5
+ * if the agent used browser-devtools tools but hasn't submitted
6
+ * a verdict yet. Forces the agent to submit a fail verdict
7
+ * before fixing code.
8
+ *
9
+ * Exit 0 = allow edit
10
+ * Exit 2 = block edit (stderr message shown to agent)
11
+ */
12
+ export declare function run(projectDir: string): void;
13
+ //# sourceMappingURL=require-verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA0B5C"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Claude Code — require-verdict hook adapter
4
+ *
5
+ * PreToolUse hook for Write|Edit|MultiEdit — blocks file edits
6
+ * if the agent used browser-devtools tools but hasn't submitted
7
+ * a verdict yet. Forces the agent to submit a fail verdict
8
+ * before fixing code.
9
+ *
10
+ * Exit 0 = allow edit
11
+ * Exit 2 = block edit (stderr message shown to agent)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.run = run;
15
+ const actions_1 = require("../../../hooks/core/actions");
16
+ const logger_1 = require("../../../lib/logger");
17
+ const stdin_1 = require("../../../lib/stdin");
18
+ function run(projectDir) {
19
+ let input;
20
+ try {
21
+ input = JSON.parse((0, stdin_1.readStdin)());
22
+ }
23
+ catch (e) {
24
+ logger_1.logger.debug(`failed to parse stdin: ${e}`);
25
+ process.exit(0);
26
+ }
27
+ const sessionId = input.session_id ?? "default";
28
+ (0, logger_1.setLogFile)(`${projectDir}/.ironbee/sessions/${sessionId}/session.log`);
29
+ const actionsFile = `${projectDir}/.ironbee/sessions/${sessionId}/actions.jsonl`;
30
+ if ((0, actions_1.hasToolCallsSinceLastVerdict)(actionsFile)) {
31
+ process.stderr.write(`BLOCKED: You used browser-devtools tools but did not submit a verdict. You MUST submit a verdict (pass or fail) before editing code.
32
+
33
+ Submit your verdict first:
34
+ echo '{"session_id":"${sessionId}","status":"fail","pages_tested":[...],"checks":[...],"console_errors":0,"network_failures":0,"issues":["describe what failed"]}' | ironbee hook submit-verdict
35
+
36
+ Then you can edit code to fix the issues.
37
+ `);
38
+ process.exit(2);
39
+ }
40
+ process.exit(0);
41
+ }
42
+ //# sourceMappingURL=require-verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAcH,kBA0BC;AAtCD,yDAA2E;AAC3E,gDAAyD;AACzD,8CAA+C;AAU/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IAEzF,IAAI,IAAA,sCAA4B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Claude Code — session-start hook adapter
3
3
  *
4
- * SessionStart hook — appends a session_start entry to actions.jsonl
5
- * and outputs the session verdict path to stdout so Claude knows
6
- * where to write the verdict without waiting for the Stop hook.
4
+ * SessionStart hook — appends a session_start entry to actions.jsonl,
5
+ * persists IRONBEE_SESSION_ID via CLAUDE_ENV_FILE so that subsequent
6
+ * Bash commands (like submit-verdict) can access it automatically,
7
+ * and outputs the session ID and submit-verdict command to stdout.
7
8
  */
8
9
  export declare function run(projectDir: string): void;
9
10
  //# sourceMappingURL=session-start.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA8D5C"}
1
+ {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiE5C"}
@@ -2,9 +2,10 @@
2
2
  /**
3
3
  * Claude Code — session-start hook adapter
4
4
  *
5
- * SessionStart hook — appends a session_start entry to actions.jsonl
6
- * and outputs the session verdict path to stdout so Claude knows
7
- * where to write the verdict without waiting for the Stop hook.
5
+ * SessionStart hook — appends a session_start entry to actions.jsonl,
6
+ * persists IRONBEE_SESSION_ID via CLAUDE_ENV_FILE so that subsequent
7
+ * Bash commands (like submit-verdict) can access it automatically,
8
+ * and outputs the session ID and submit-verdict command to stdout.
8
9
  */
9
10
  Object.defineProperty(exports, "__esModule", { value: true });
10
11
  exports.run = run;
@@ -31,40 +32,43 @@ function run(projectDir) {
31
32
  };
32
33
  (0, actions_1.appendAction)(actionsFile, entry);
33
34
  logger_1.logger.debug(`session-start: ${sessionId} (${input.source ?? "unknown"})`);
34
- // output verdict path + format to stdout — Claude receives this as context
35
- const verdictPath = `.ironbee/sessions/${sessionId}/verdict.json`;
36
- const verdictFormatPass = JSON.stringify({
35
+ const verdictPass = JSON.stringify({
36
+ session_id: sessionId,
37
37
  status: "pass",
38
38
  pages_tested: ["http://localhost:3000/affected-page"],
39
- checks: ["form submits successfully", "new item appears in list", "no console errors"],
39
+ checks: ["form submits successfully", "new item appears in list"],
40
40
  console_errors: 0,
41
41
  network_failures: 0,
42
42
  });
43
- const verdictFormatFail = JSON.stringify({
43
+ const verdictFail = JSON.stringify({
44
+ session_id: sessionId,
44
45
  status: "fail",
45
46
  pages_tested: ["http://localhost:3000/affected-page"],
46
47
  checks: ["form renders", "submit button unresponsive"],
47
48
  console_errors: 2,
48
49
  network_failures: 0,
49
- errors: ["button click handler not firing", "TypeError in console"],
50
+ issues: ["button click handler not firing", "TypeError in console"],
50
51
  });
51
52
  process.stdout.write(`
52
53
  =====================================
53
54
  IRONBEE VERIFICATION — SESSION ACTIVE
54
55
  =====================================
55
- Verdict file path: ${verdictPath}
56
+ Session ID: ${sessionId}
56
57
 
57
- After browser verification, use the Write tool to write your verdict JSON to exactly this path:
58
- ${verdictPath}
58
+ You MUST verify all code changes in the browser before completing any task.
59
+ After EVERY verification attempt, you MUST submit a verdict BEFORE doing anything else.
60
+ - If pass → submit pass verdict
61
+ - If fail → submit fail verdict FIRST, then fix. Do NOT skip to fixing code without submitting.
59
62
 
60
- Verdict format:
61
- On pass: ${verdictFormatPass}
62
- On fail: ${verdictFormatFail}
63
+ Submit via Bash:
64
+ echo '${verdictPass}' | ironbee hook submit-verdict
63
65
 
64
- Required fields: status, pages_tested, checks, console_errors, network_failures
65
- On fail, include: errors (array of issue descriptions)
66
+ On fail (issues is required):
67
+ echo '${verdictFail}' | ironbee hook submit-verdict
66
68
 
67
- Do NOT guess or change this path. This is your session-specific verdict file.
69
+ Required fields: session_id, status, pages_tested, checks, console_errors, network_failures
70
+ On fail, include: issues (array of strings describing what failed)
71
+ On pass after a previous fail, include: fixes (array of strings describing what was fixed)
68
72
  =====================================
69
73
  `);
70
74
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAWH,kBA8DC;AAvED,yDAA+E;AAC/E,gDAAyD;AACzD,8CAA+C;AAO/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA4B,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IACzF,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAuB;QAC9B,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;IAEF,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjC,eAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,KAAK,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;IAE3E,2EAA2E;IAC3E,MAAM,WAAW,GAAW,qBAAqB,SAAS,eAAe,CAAC;IAC1E,MAAM,iBAAiB,GAAW,IAAI,CAAC,SAAS,CAAC;QAC7C,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,2BAA2B,EAAE,0BAA0B,EAAE,mBAAmB,CAAC;QACtF,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAW,IAAI,CAAC,SAAS,CAAC;QAC7C,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACtD,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,iCAAiC,EAAE,sBAAsB,CAAC;KACtE,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;qBAIJ,WAAW;;;IAG5B,WAAW;;;aAGF,iBAAiB;aACjB,iBAAiB;;;;;;;CAO7B,CAAC,CAAC;IAEC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAWH,kBAiEC;AA1ED,yDAA+E;AAC/E,gDAAyD;AACzD,8CAA+C;AAO/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA4B,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IACzF,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAuB;QAC9B,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;IAEF,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjC,eAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,KAAK,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC;QACvC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,2BAA2B,EAAE,0BAA0B,CAAC;QACjE,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC;QACvC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACtD,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,iCAAiC,EAAE,sBAAsB,CAAC;KACtE,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;cAIX,SAAS;;;;;;;;UAQb,WAAW;;;UAGX,WAAW;;;;;;CAMpB,CAAC,CAAC;IAEC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -3,12 +3,13 @@ export declare class ClaudeClient implements IClient {
3
3
  readonly name: string;
4
4
  detect(projectDir: string): boolean;
5
5
  resolveProjectDir(): string;
6
- install(projectDir: string, ironBeePath: string): void;
6
+ install(projectDir: string): void;
7
7
  uninstall(projectDir: string): void;
8
8
  runVerifyGate(projectDir: string): void;
9
9
  runClearVerdict(projectDir: string): void;
10
10
  runTrackAction(projectDir: string): void;
11
11
  runSessionStart(projectDir: string): void;
12
+ runRequireVerdict(projectDir: string): void;
12
13
  private isIronBeeHook;
13
14
  private mergeHooksConfig;
14
15
  private removeIronBeeHooks;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/claude/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAyClC,qBAAa,YAAa,YAAW,OAAO;IACxC,SAAgB,IAAI,EAAE,MAAM,CAAY;IAEjC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAInC,iBAAiB,IAAI,MAAM;IAI3B,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IA6BtD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAqBnC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIhD,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IA6ExB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,gBAAgB;CA2B3B;AAuBD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAG1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/claude/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA0ClC,qBAAa,YAAa,YAAW,OAAO;IACxC,SAAgB,IAAI,EAAE,MAAM,CAAY;IAEjC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAInC,iBAAiB,IAAI,MAAM;IAI3B,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA6BjC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAqBnC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIlD,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IA2FxB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,gBAAgB;CAgC3B;AAuBD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAG1D"}
@@ -10,6 +10,7 @@ const verify_gate_1 = require("./hooks/verify-gate");
10
10
  const clear_verdict_1 = require("./hooks/clear-verdict");
11
11
  const track_action_1 = require("./hooks/track-action");
12
12
  const session_start_1 = require("./hooks/session-start");
13
+ const require_verdict_1 = require("./hooks/require-verdict");
13
14
  const MCP_SERVER_NAME = "browser-devtools";
14
15
  const MCP_SERVER_PACKAGE = "browser-devtools-mcp";
15
16
  const IRONBEE_HOOK_MARKER = "ironbee";
@@ -23,14 +24,14 @@ class ClaudeClient {
23
24
  resolveProjectDir() {
24
25
  return process.env.CLAUDE_PROJECT_DIR ?? process.cwd();
25
26
  }
26
- install(projectDir, ironBeePath) {
27
+ install(projectDir) {
27
28
  const claudeDir = (0, path_1.join)(projectDir, ".claude");
28
29
  const skillsDir = (0, path_1.join)(claudeDir, "skills");
29
30
  const rulesDir = (0, path_1.join)(claudeDir, "rules");
30
31
  (0, fs_1.mkdirSync)(skillsDir, { recursive: true });
31
32
  (0, fs_1.mkdirSync)(rulesDir, { recursive: true });
32
33
  const settingsPath = (0, path_1.join)(claudeDir, "settings.json");
33
- this.mergeHooksConfig(settingsPath, ironBeePath);
34
+ this.mergeHooksConfig(settingsPath);
34
35
  this.writePermissions(settingsPath);
35
36
  const skillPath = (0, path_1.join)(skillsDir, "ironbee-verification.md");
36
37
  const skillContent = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, "skill.md"), "utf-8");
@@ -73,10 +74,13 @@ class ClaudeClient {
73
74
  runSessionStart(projectDir) {
74
75
  (0, session_start_1.run)(projectDir);
75
76
  }
77
+ runRequireVerdict(projectDir) {
78
+ (0, require_verdict_1.run)(projectDir);
79
+ }
76
80
  isIronBeeHook(entry) {
77
81
  return entry.hooks.some((h) => h.command.includes(IRONBEE_HOOK_MARKER));
78
82
  }
79
- mergeHooksConfig(settingsPath, ironBeePath) {
83
+ mergeHooksConfig(settingsPath) {
80
84
  let settings = {};
81
85
  if ((0, fs_1.existsSync)(settingsPath)) {
82
86
  try {
@@ -94,42 +98,55 @@ class ClaudeClient {
94
98
  for (const eventType of Object.keys(settings.hooks)) {
95
99
  settings.hooks[eventType] = settings.hooks[eventType].filter((entry) => !this.isIronBeeHook(entry));
96
100
  }
97
- // add ironbee PostToolUse hooks
98
- if (!settings.hooks.PostToolUse) {
99
- settings.hooks.PostToolUse = [];
101
+ // ── SessionStart record session, output instructions ──
102
+ if (!settings.hooks.SessionStart) {
103
+ settings.hooks.SessionStart = [];
100
104
  }
101
- settings.hooks.PostToolUse.push({
105
+ settings.hooks.SessionStart.push({
106
+ matcher: "",
107
+ hooks: [
108
+ {
109
+ type: "command",
110
+ command: `ironbee hook session-start --client claude`,
111
+ },
112
+ ],
113
+ });
114
+ // ── PreToolUse — block edits if browser tools used without verdict ──
115
+ if (!settings.hooks.PreToolUse) {
116
+ settings.hooks.PreToolUse = [];
117
+ }
118
+ settings.hooks.PreToolUse.push({
102
119
  matcher: "Write|Edit|MultiEdit",
103
120
  hooks: [
104
121
  {
105
122
  type: "command",
106
- command: `"${ironBeePath}" hook clear-verdict --client claude`,
123
+ command: `ironbee hook require-verdict --client claude`,
107
124
  },
108
125
  ],
109
126
  });
127
+ // ── PostToolUse — record file edits + track browser tool calls ──
128
+ if (!settings.hooks.PostToolUse) {
129
+ settings.hooks.PostToolUse = [];
130
+ }
110
131
  settings.hooks.PostToolUse.push({
111
- matcher: "mcp__browser-devtools__.*",
132
+ matcher: "Write|Edit|MultiEdit",
112
133
  hooks: [
113
134
  {
114
135
  type: "command",
115
- command: `"${ironBeePath}" hook track-action --client claude`,
136
+ command: `ironbee hook clear-verdict --client claude`,
116
137
  },
117
138
  ],
118
139
  });
119
- // add ironbee SessionStart hook
120
- if (!settings.hooks.SessionStart) {
121
- settings.hooks.SessionStart = [];
122
- }
123
- settings.hooks.SessionStart.push({
124
- matcher: "",
140
+ settings.hooks.PostToolUse.push({
141
+ matcher: "mcp__browser-devtools__.*",
125
142
  hooks: [
126
143
  {
127
144
  type: "command",
128
- command: `"${ironBeePath}" hook session-start --client claude`,
145
+ command: `ironbee hook track-action --client claude`,
129
146
  },
130
147
  ],
131
148
  });
132
- // add ironbee Stop hook
149
+ // ── Stop — verify-gate, blocks completion until verified ──
133
150
  if (!settings.hooks.Stop) {
134
151
  settings.hooks.Stop = [];
135
152
  }
@@ -138,7 +155,7 @@ class ClaudeClient {
138
155
  hooks: [
139
156
  {
140
157
  type: "command",
141
- command: `"${ironBeePath}" hook verify-gate --client claude`,
158
+ command: `ironbee hook verify-gate --client claude`,
142
159
  },
143
160
  ],
144
161
  });
@@ -183,9 +200,10 @@ class ClaudeClient {
183
200
  }
184
201
  try {
185
202
  const settings = JSON.parse((0, fs_1.readFileSync)(settingsPath, "utf-8"));
186
- const permission = `mcp__${MCP_SERVER_NAME}__*`;
203
+ const mcpPermission = `mcp__${MCP_SERVER_NAME}__*`;
204
+ const bashPermission = "Bash(ironbee *)";
187
205
  if (settings.permissions?.allow) {
188
- settings.permissions.allow = settings.permissions.allow.filter((p) => p !== permission);
206
+ settings.permissions.allow = settings.permissions.allow.filter((p) => p !== mcpPermission && p !== bashPermission);
189
207
  (0, fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2));
190
208
  }
191
209
  }
@@ -238,9 +256,13 @@ class ClaudeClient {
238
256
  if (!settings.permissions.allow) {
239
257
  settings.permissions.allow = [];
240
258
  }
241
- const permission = `mcp__${MCP_SERVER_NAME}__*`;
242
- if (!settings.permissions.allow.includes(permission)) {
243
- settings.permissions.allow.push(permission);
259
+ const mcpPermission = `mcp__${MCP_SERVER_NAME}__*`;
260
+ if (!settings.permissions.allow.includes(mcpPermission)) {
261
+ settings.permissions.allow.push(mcpPermission);
262
+ }
263
+ const bashPermission = "Bash(ironbee *)";
264
+ if (!settings.permissions.allow.includes(bashPermission)) {
265
+ settings.permissions.allow.push(bashPermission);
244
266
  }
245
267
  (0, fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2));
246
268
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/claude/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/claude/index.ts"],"names":[],"mappings":"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"}