mova-claude-import 0.1.1 → 0.1.3

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 (188) hide show
  1. package/README.md +95 -29
  2. package/control_surface_exclusions_v0.json +8 -0
  3. package/dist/anthropic_profile_v0.d.ts +1 -1
  4. package/dist/anthropic_profile_v0.js +1 -0
  5. package/dist/cli.js +206 -23
  6. package/dist/control_apply_v0.d.ts +5 -1
  7. package/dist/control_apply_v0.js +125 -8
  8. package/dist/control_check_v0.d.ts +1 -0
  9. package/dist/control_check_v0.js +194 -23
  10. package/dist/control_prefill_v0.js +128 -9
  11. package/dist/control_surface_coverage_v0.d.ts +22 -0
  12. package/dist/control_surface_coverage_v0.js +128 -0
  13. package/dist/control_v0.d.ts +149 -0
  14. package/dist/control_v0.js +360 -0
  15. package/dist/control_v0_schema.d.ts +6 -0
  16. package/dist/control_v0_schema.js +19 -0
  17. package/dist/init_v0.d.ts +6 -1
  18. package/dist/init_v0.js +41 -1
  19. package/dist/observability_writer_v0.d.ts +1 -0
  20. package/dist/observability_writer_v0.js +157 -0
  21. package/dist/observe_v0.d.ts +8 -0
  22. package/dist/observe_v0.js +57 -0
  23. package/dist/presets_v0.d.ts +11 -0
  24. package/dist/presets_v0.js +52 -0
  25. package/dist/redaction.js +5 -1
  26. package/dist/run_import.js +111 -26
  27. package/docs/CLAUDE_CONTROL_SURFACE_MAP_v0.md +78 -0
  28. package/docs/OPERATOR_GUIDE_v0.md +11 -0
  29. package/fixtures/pos/basic/mova/control_v0.json +93 -0
  30. package/fixtures/pos/claude_code_demo_full/.claude/agents/code-reviewer.md +13 -0
  31. package/fixtures/pos/claude_code_demo_full/.claude/agents/github-workflow.md +10 -0
  32. package/fixtures/pos/claude_code_demo_full/.claude/commands/code-quality.md +8 -0
  33. package/fixtures/pos/claude_code_demo_full/.claude/commands/docs-sync.md +8 -0
  34. package/fixtures/pos/claude_code_demo_full/.claude/commands/onboard.md +8 -0
  35. package/fixtures/pos/claude_code_demo_full/.claude/commands/pr-review.md +10 -0
  36. package/fixtures/pos/claude_code_demo_full/.claude/commands/pr-summary.md +8 -0
  37. package/fixtures/pos/claude_code_demo_full/.claude/commands/ticket.md +10 -0
  38. package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-eval.js +13 -0
  39. package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-eval.sh +15 -0
  40. package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-rules.json +21 -0
  41. package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-rules.schema.json +24 -0
  42. package/fixtures/pos/claude_code_demo_full/.claude/rules/code-style.md +5 -0
  43. package/fixtures/pos/claude_code_demo_full/.claude/rules/security.md +5 -0
  44. package/fixtures/pos/claude_code_demo_full/.claude/settings.json +102 -0
  45. package/fixtures/pos/claude_code_demo_full/.claude/settings.md +6 -0
  46. package/fixtures/pos/claude_code_demo_full/.claude/skills/core-components/SKILL.md +9 -0
  47. package/fixtures/pos/claude_code_demo_full/.claude/skills/formik-patterns/SKILL.md +9 -0
  48. package/fixtures/pos/claude_code_demo_full/.claude/skills/graphql-schema/SKILL.md +10 -0
  49. package/fixtures/pos/claude_code_demo_full/.claude/skills/react-ui-patterns/SKILL.md +10 -0
  50. package/fixtures/pos/claude_code_demo_full/.claude/skills/systematic-debugging/SKILL.md +9 -0
  51. package/fixtures/pos/claude_code_demo_full/.claude/skills/testing-patterns/SKILL.md +10 -0
  52. package/fixtures/pos/claude_code_demo_full/.github/workflows/pr-claude-code-review.yml +14 -0
  53. package/fixtures/pos/claude_code_demo_full/.github/workflows/scheduled-claude-code-dependency-audit.yml +14 -0
  54. package/fixtures/pos/claude_code_demo_full/.github/workflows/scheduled-claude-code-docs-sync.yml +14 -0
  55. package/fixtures/pos/claude_code_demo_full/.github/workflows/scheduled-claude-code-quality.yml +14 -0
  56. package/fixtures/pos/claude_code_demo_full/.mcp.json +44 -0
  57. package/fixtures/pos/claude_code_demo_full/CLAUDE.md +28 -0
  58. package/fixtures/pos/control_basic_project/mova/control_v0.json +93 -0
  59. package/fixtures/pos/observability_basic/CLAUDE.md +3 -0
  60. package/{.tmp_test_zip/out1 → fixtures/pos/preset_safe_observable_v0}/.mcp.json +3 -3
  61. package/fixtures/pos/preset_safe_observable_v0/CLAUDE.md +3 -0
  62. package/package.json +2 -1
  63. package/presets/safe_observable_v0/assets/.claude/agents/code-reviewer.md +9 -0
  64. package/presets/safe_observable_v0/assets/.claude/commands/finish.md +9 -0
  65. package/presets/safe_observable_v0/assets/.claude/commands/start.md +9 -0
  66. package/presets/safe_observable_v0/assets/.claude/hooks/skill-eval.js +15 -0
  67. package/presets/safe_observable_v0/assets/.claude/hooks/skill-eval.sh +17 -0
  68. package/presets/safe_observable_v0/assets/.claude/hooks/skill-rules.json +26 -0
  69. package/presets/safe_observable_v0/assets/.claude/rules/code-style.md +6 -0
  70. package/presets/safe_observable_v0/assets/.claude/rules/security.md +6 -0
  71. package/presets/safe_observable_v0/assets/.claude/skills/git-workflow/SKILL.md +9 -0
  72. package/presets/safe_observable_v0/assets/.claude/skills/security-basics/SKILL.md +9 -0
  73. package/presets/safe_observable_v0/assets/.claude/skills/systematic-debugging/SKILL.md +9 -0
  74. package/presets/safe_observable_v0/assets/.claude/skills/testing-patterns/SKILL.md +9 -0
  75. package/presets/safe_observable_v0/control_v0.json +214 -0
  76. package/schemas/mova.control_v0.schema.json +252 -0
  77. package/src/anthropic_profile_v0.ts +1 -0
  78. package/src/cli.ts +194 -23
  79. package/src/control_apply_v0.ts +131 -8
  80. package/src/control_check_v0.ts +203 -23
  81. package/src/control_prefill_v0.ts +136 -8
  82. package/src/control_surface_coverage_v0.ts +164 -0
  83. package/src/control_v0.ts +808 -0
  84. package/src/control_v0_schema.ts +26 -0
  85. package/src/init_v0.ts +48 -1
  86. package/src/observability_writer_v0.ts +157 -0
  87. package/src/observe_v0.ts +64 -0
  88. package/src/presets_v0.ts +58 -0
  89. package/src/redaction.ts +6 -1
  90. package/src/run_import.ts +132 -26
  91. package/test/control_demo_full_roundtrip.test.js +92 -0
  92. package/test/control_surface_coverage_v0.test.js +36 -0
  93. package/test/control_v0_schema_validation.test.js +69 -0
  94. package/test/init_v0.test.js +9 -0
  95. package/test/observability_writer_v0.test.js +59 -0
  96. package/test/preset_safe_observable_v0.test.js +55 -0
  97. package/test/profile_v0_output.test.js +1 -0
  98. package/test/scaffold_v0_output.test.js +1 -0
  99. package/tools/control_surface_coverage_v0.mjs +27 -0
  100. package/tools/smoke_v0.mjs +33 -0
  101. package/.tmp_test_control_apply/proj/.claude/agents/example_agent.md +0 -3
  102. package/.tmp_test_control_apply/proj/.claude/commands/example_command.md +0 -3
  103. package/.tmp_test_control_apply/proj/.claude/hooks/example_hook.sh +0 -2
  104. package/.tmp_test_control_apply/proj/.claude/output-styles/example_style.md +0 -3
  105. package/.tmp_test_control_apply/proj/.claude/settings.json +0 -30
  106. package/.tmp_test_control_apply/proj/.claude/settings.local.example.json +0 -3
  107. package/.tmp_test_control_apply/proj/.mcp.json +0 -3
  108. package/.tmp_test_control_apply/proj/CLAUDE.md +0 -13
  109. package/.tmp_test_control_apply/proj/MOVA.md +0 -3
  110. package/.tmp_test_control_check/proj/.mcp.json +0 -1
  111. package/.tmp_test_control_check/proj/CLAUDE.md +0 -1
  112. package/.tmp_test_control_prefill/out1/claude_control_profile_v0.json +0 -114
  113. package/.tmp_test_control_prefill/out1/prefill_report_v0.json +0 -13
  114. package/.tmp_test_control_prefill/out2/claude_control_profile_v0.json +0 -114
  115. package/.tmp_test_control_prefill/out2/prefill_report_v0.json +0 -13
  116. package/.tmp_test_overlay/proj/.claude/skills/a.md +0 -1
  117. package/.tmp_test_overlay/proj/.mcp.json +0 -1
  118. package/.tmp_test_overlay/proj/CLAUDE.md +0 -1
  119. package/.tmp_test_profile/proj/.claude/skills/a.md +0 -1
  120. package/.tmp_test_profile/proj/.mcp.json +0 -1
  121. package/.tmp_test_profile/proj/CLAUDE.md +0 -1
  122. package/.tmp_test_scaffold_apply/proj/.claude/agents/example_agent.md +0 -3
  123. package/.tmp_test_scaffold_apply/proj/.claude/commands/example_command.md +0 -3
  124. package/.tmp_test_scaffold_apply/proj/.claude/hooks/example_hook.sh +0 -2
  125. package/.tmp_test_scaffold_apply/proj/.claude/output-styles/example_style.md +0 -3
  126. package/.tmp_test_scaffold_apply/proj/.claude/settings.json +0 -30
  127. package/.tmp_test_scaffold_apply/proj/.claude/settings.local.example.json +0 -3
  128. package/.tmp_test_scaffold_apply/proj/.mcp.json +0 -3
  129. package/.tmp_test_scaffold_apply/proj/CLAUDE.md +0 -13
  130. package/.tmp_test_scaffold_apply/proj/MOVA.md +0 -3
  131. package/.tmp_test_strict/mova/claude_import/v0/VERSION.json +0 -10
  132. package/.tmp_test_strict/mova/claude_import/v0/episode_import_run.json +0 -20
  133. package/.tmp_test_strict/mova/claude_import/v0/import_manifest.json +0 -20
  134. package/.tmp_test_strict/mova/claude_import/v0/input_policy_report_v0.json +0 -32
  135. package/.tmp_test_zip/out1/.claude/agents/example_agent.md +0 -3
  136. package/.tmp_test_zip/out1/.claude/commands/example_command.md +0 -3
  137. package/.tmp_test_zip/out1/.claude/commands/mova_context.md +0 -4
  138. package/.tmp_test_zip/out1/.claude/commands/mova_lint.md +0 -4
  139. package/.tmp_test_zip/out1/.claude/commands/mova_proof.md +0 -6
  140. package/.tmp_test_zip/out1/.claude/hooks/example_hook.sh +0 -2
  141. package/.tmp_test_zip/out1/.claude/output-styles/example_style.md +0 -3
  142. package/.tmp_test_zip/out1/.claude/settings.json +0 -30
  143. package/.tmp_test_zip/out1/.claude/settings.local.example.json +0 -3
  144. package/.tmp_test_zip/out1/.claude/skills/a/SKILL.md +0 -1
  145. package/.tmp_test_zip/out1/.claude/skills/mova-control-v0/SKILL.md +0 -11
  146. package/.tmp_test_zip/out1/.claude/skills/mova-layer-v0/SKILL.md +0 -8
  147. package/.tmp_test_zip/out1/CLAUDE.md +0 -4
  148. package/.tmp_test_zip/out1/MOVA.md +0 -10
  149. package/.tmp_test_zip/out1/export.zip +0 -0
  150. package/.tmp_test_zip/out1/mova/claude_import/v0/VERSION.json +0 -10
  151. package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/instruction_profile_v0.json +0 -8
  152. package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/mcp_servers_v0.json +0 -4
  153. package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/skills_catalog_v0.json +0 -11
  154. package/.tmp_test_zip/out1/mova/claude_import/v0/episode_import_run.json +0 -80
  155. package/.tmp_test_zip/out1/mova/claude_import/v0/export_manifest_v0.json +0 -32
  156. package/.tmp_test_zip/out1/mova/claude_import/v0/import_manifest.json +0 -33
  157. package/.tmp_test_zip/out1/mova/claude_import/v0/input_policy_report_v0.json +0 -38
  158. package/.tmp_test_zip/out1/mova/claude_import/v0/lint_report_v0.json +0 -6
  159. package/.tmp_test_zip/out1/mova/claude_import/v0/redaction_report.json +0 -4
  160. package/.tmp_test_zip/out2/.claude/agents/example_agent.md +0 -3
  161. package/.tmp_test_zip/out2/.claude/commands/example_command.md +0 -3
  162. package/.tmp_test_zip/out2/.claude/commands/mova_context.md +0 -4
  163. package/.tmp_test_zip/out2/.claude/commands/mova_lint.md +0 -4
  164. package/.tmp_test_zip/out2/.claude/commands/mova_proof.md +0 -6
  165. package/.tmp_test_zip/out2/.claude/hooks/example_hook.sh +0 -2
  166. package/.tmp_test_zip/out2/.claude/output-styles/example_style.md +0 -3
  167. package/.tmp_test_zip/out2/.claude/settings.json +0 -30
  168. package/.tmp_test_zip/out2/.claude/settings.local.example.json +0 -3
  169. package/.tmp_test_zip/out2/.claude/skills/a/SKILL.md +0 -1
  170. package/.tmp_test_zip/out2/.claude/skills/mova-control-v0/SKILL.md +0 -11
  171. package/.tmp_test_zip/out2/.claude/skills/mova-layer-v0/SKILL.md +0 -8
  172. package/.tmp_test_zip/out2/.mcp.json +0 -3
  173. package/.tmp_test_zip/out2/CLAUDE.md +0 -4
  174. package/.tmp_test_zip/out2/MOVA.md +0 -10
  175. package/.tmp_test_zip/out2/export.zip +0 -0
  176. package/.tmp_test_zip/out2/mova/claude_import/v0/VERSION.json +0 -10
  177. package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/instruction_profile_v0.json +0 -8
  178. package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/mcp_servers_v0.json +0 -4
  179. package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/skills_catalog_v0.json +0 -11
  180. package/.tmp_test_zip/out2/mova/claude_import/v0/episode_import_run.json +0 -80
  181. package/.tmp_test_zip/out2/mova/claude_import/v0/export_manifest_v0.json +0 -32
  182. package/.tmp_test_zip/out2/mova/claude_import/v0/import_manifest.json +0 -33
  183. package/.tmp_test_zip/out2/mova/claude_import/v0/input_policy_report_v0.json +0 -38
  184. package/.tmp_test_zip/out2/mova/claude_import/v0/lint_report_v0.json +0 -6
  185. package/.tmp_test_zip/out2/mova/claude_import/v0/redaction_report.json +0 -4
  186. package/.tmp_test_zip/proj/.claude/skills/a.md +0 -1
  187. package/.tmp_test_zip/proj/.mcp.json +0 -1
  188. package/.tmp_test_zip/proj/CLAUDE.md +0 -1
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "https://mova.dev/schemas/mova.control_v0.schema.json",
3
+ "version": "control_v0",
4
+ "claude_md": {
5
+ "inject_control_entry": true,
6
+ "marker": "<!-- MOVA_CONTROL_ENTRY_V0 -->",
7
+ "priority_sources": ["CLAUDE.md", ".claude/CLAUDE.md", "~/.claude/CLAUDE.md"]
8
+ },
9
+ "claude_memory": {
10
+ "enable": true,
11
+ "sources": ["CLAUDE.md"]
12
+ },
13
+ "overlay": {
14
+ "enable": true
15
+ },
16
+ "settings": {
17
+ "include_co_authored_by": true,
18
+ "env": {}
19
+ },
20
+ "mcp": {
21
+ "servers": {},
22
+ "enable_all_project_mcp_servers": false,
23
+ "enabled_mcpjson_servers": [],
24
+ "env_substitutions": {
25
+ "format": "${VAR}",
26
+ "default_format": "${VAR:-default}"
27
+ }
28
+ },
29
+ "policy": {
30
+ "mode": "report_only",
31
+ "hooks": {
32
+ "enable": true,
33
+ "on_invalid_hook": "report_only",
34
+ "definitions": [],
35
+ "events": {}
36
+ },
37
+ "permissions": {
38
+ "allow": [],
39
+ "deny": [],
40
+ "on_conflict": "deny_wins",
41
+ "on_unknown": "report_only"
42
+ },
43
+ "plugins": {
44
+ "enable": true,
45
+ "allowed_plugin_ids": [],
46
+ "denied_plugin_ids": [],
47
+ "on_unknown": "report_only",
48
+ "enabled_plugins": {}
49
+ }
50
+ },
51
+ "lsp": {
52
+ "enabled_plugins": [],
53
+ "config_path": ".claude/lsp.json",
54
+ "managed": false
55
+ },
56
+ "skill_eval": {
57
+ "enable": false,
58
+ "hooks": {
59
+ "shell": ".claude/hooks/skill-eval.sh",
60
+ "node": ".claude/hooks/skill-eval.js"
61
+ },
62
+ "rules_path": ".claude/hooks/skill-rules.json",
63
+ "scoring": {
64
+ "threshold": 0.6
65
+ }
66
+ },
67
+ "observability": {
68
+ "enable": true,
69
+ "mode": "report_only",
70
+ "writer": {
71
+ "type": "node",
72
+ "script_path": ".claude/hooks/mova-observe.js"
73
+ },
74
+ "output_dir": ".mova/episodes",
75
+ "stdout_tail_bytes": 4000,
76
+ "stderr_tail_bytes": 4000,
77
+ "max_event_bytes": 20000,
78
+ "tail_lines": 50,
79
+ "include_tools": ["Bash", "Read", "Edit", "MultiEdit", "Write"],
80
+ "include_events": ["PostToolUse", "UserPromptSubmit", "Stop"]
81
+ },
82
+ "assets": {
83
+ "skills": [],
84
+ "agents": [],
85
+ "commands": [],
86
+ "rules": [],
87
+ "hooks": [],
88
+ "workflows": [],
89
+ "docs": [],
90
+ "dotfiles": [],
91
+ "schemas": []
92
+ }
93
+ }
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: code-reviewer
3
+ version: v0
4
+ ---
5
+
6
+ # code-reviewer
7
+
8
+ Checklist:
9
+ - Correctness and edge cases
10
+ - Security and permissions
11
+ - Tests updated or added
12
+ - Performance regressions
13
+ - Docs for behavior changes
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: github-workflow
3
+ version: v0
4
+ ---
5
+
6
+ # github-workflow
7
+
8
+ Checklist:
9
+ - Validate workflow YAML structure.
10
+ - Ensure scheduled jobs are scoped and safe.
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: code-quality
3
+ allowed-tools: ["Bash", "Read"]
4
+ ---
5
+
6
+ # code-quality
7
+
8
+ Run lint + tests and summarize results.
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: docs-sync
3
+ allowed-tools: ["Read", "Edit"]
4
+ ---
5
+
6
+ # docs-sync
7
+
8
+ Sync project docs with recent changes.
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: onboard
3
+ allowed-tools: ["Read"]
4
+ ---
5
+
6
+ # onboard
7
+
8
+ Provide a quick onboarding summary.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: pr-review
3
+ allowed-tools: ["Read"]
4
+ ---
5
+
6
+ # pr-review
7
+
8
+ 1) Summarize changes by area.
9
+ 2) Identify risks and regressions.
10
+ 3) Verify tests and coverage.
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: pr-summary
3
+ allowed-tools: ["Read"]
4
+ ---
5
+
6
+ # pr-summary
7
+
8
+ Summarize PR changes and risks.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: ticket
3
+ allowed-tools: ["Bash", "Read", "Edit"]
4
+ ---
5
+
6
+ # ticket
7
+
8
+ 1) Parse ticket requirements.
9
+ 2) Identify impacted files and owners.
10
+ 3) Propose a plan and ask for confirmation.
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ const prompt = process.env.CLAUDE_USER_PROMPT || process.env.CLAUDE_PROMPT || "";
3
+ let skill = "general";
4
+
5
+ if (/graphql/i.test(prompt)) {
6
+ skill = "graphql-schema";
7
+ } else if (/test/i.test(prompt)) {
8
+ skill = "testing-patterns";
9
+ } else if (/react|ui/i.test(prompt)) {
10
+ skill = "react-ui-patterns";
11
+ }
12
+
13
+ process.stdout.write(JSON.stringify({ feedback: `skill-eval: ${skill}`, suppressOutput: true }));
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ prompt="${CLAUDE_USER_PROMPT:-${CLAUDE_PROMPT:-}}"
5
+ skill="general"
6
+
7
+ if echo "$prompt" | grep -qi "graphql"; then
8
+ skill="graphql-schema"
9
+ elif echo "$prompt" | grep -qi "test"; then
10
+ skill="testing-patterns"
11
+ elif echo "$prompt" | grep -qi "react\\|ui"; then
12
+ skill="react-ui-patterns"
13
+ fi
14
+
15
+ echo "{\"feedback\": \"skill-eval: ${skill}\", \"suppressOutput\": true}"
@@ -0,0 +1,21 @@
1
+ {
2
+ "version": "v0",
3
+ "threshold": 0.6,
4
+ "rules": [
5
+ {
6
+ "id": "graphql-schema",
7
+ "keywords": ["graphql", "schema", "resolver"],
8
+ "score": 0.9
9
+ },
10
+ {
11
+ "id": "testing-patterns",
12
+ "keywords": ["test", "jest", "vitest", "tdd"],
13
+ "score": 0.8
14
+ },
15
+ {
16
+ "id": "react-ui-patterns",
17
+ "keywords": ["react", "ui", "component", "hook"],
18
+ "score": 0.7
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "skill-rules.schema.json",
4
+ "type": "object",
5
+ "properties": {
6
+ "version": { "type": "string" },
7
+ "threshold": { "type": "number" },
8
+ "rules": {
9
+ "type": "array",
10
+ "items": {
11
+ "type": "object",
12
+ "properties": {
13
+ "id": { "type": "string" },
14
+ "keywords": { "type": "array", "items": { "type": "string" } },
15
+ "score": { "type": "number" }
16
+ },
17
+ "required": ["id", "keywords", "score"],
18
+ "additionalProperties": false
19
+ }
20
+ }
21
+ },
22
+ "required": ["version", "threshold", "rules"],
23
+ "additionalProperties": false
24
+ }
@@ -0,0 +1,5 @@
1
+ # Code Style
2
+
3
+ - Prefer clear naming over abbreviations.
4
+ - Keep functions under ~50 lines.
5
+ - Avoid nested ternaries.
@@ -0,0 +1,5 @@
1
+ # Security
2
+
3
+ - Never log secrets.
4
+ - Validate all external input.
5
+ - Use least-privilege access for tokens.
@@ -0,0 +1,102 @@
1
+ {
2
+ "includeCoAuthoredBy": true,
3
+ "env": {
4
+ "INSIDE_CLAUDE_CODE": "1",
5
+ "BASH_DEFAULT_TIMEOUT_MS": "420000",
6
+ "BASH_MAX_TIMEOUT_MS": "420000"
7
+ },
8
+ "hooks": {
9
+ "enable": true,
10
+ "definitions": [],
11
+ "behavior": {
12
+ "on_invalid_hook": "report_only"
13
+ },
14
+ "UserPromptSubmit": [
15
+ {
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/skill-eval.sh",
20
+ "timeout": 5
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "PreToolUse": [
26
+ {
27
+ "matcher": "Edit|MultiEdit|Write",
28
+ "hooks": [
29
+ {
30
+ "type": "command",
31
+ "command": "[ \"$(git branch --show-current)\" != \"main\" ] || { echo '{\"block\": true, \"message\": \"Cannot edit files on main branch. Create a feature branch first.\"}' >&2; exit 2; }",
32
+ "timeout": 5
33
+ }
34
+ ]
35
+ }
36
+ ],
37
+ "PostToolUse": [
38
+ {
39
+ "matcher": "Edit|MultiEdit|Write",
40
+ "hooks": [
41
+ {
42
+ "type": "command",
43
+ "command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.(js|jsx|ts|tsx)$ ]]; then\n npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>&1\n exit_code=$?\n if [ $exit_code -ne 0 ]; then\n echo '{\"feedback\": \"Formatting failed.\"}' >&2\n exit 1\n fi\n echo '{\"feedback\": \"Formatting applied.\", \"suppressOutput\": true}'\nfi",
44
+ "timeout": 30
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "matcher": "Edit|MultiEdit|Write",
50
+ "hooks": [
51
+ {
52
+ "type": "command",
53
+ "command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.test\\.(js|jsx|ts|tsx)$ ]]; then\n npm test -- --findRelatedTests \"$CLAUDE_TOOL_INPUT_FILE_PATH\" --passWithNoTests 2>&1 | tail -30\n exit 0\nfi",
54
+ "timeout": 90
55
+ }
56
+ ]
57
+ }
58
+ ],
59
+ "Stop": [
60
+ {
61
+ "hooks": [
62
+ {
63
+ "type": "command",
64
+ "command": "echo '{\"feedback\": \"Stop hook executed.\", \"suppressOutput\": true}'",
65
+ "timeout": 3
66
+ }
67
+ ]
68
+ }
69
+ ]
70
+ },
71
+ "mcp": {
72
+ "enableAllProjectMcpServers": false,
73
+ "enabledMcpjsonServers": ["jira", "github", "linear", "sentry", "memory"]
74
+ },
75
+ "permissions": {
76
+ "allow": ["Bash", "Edit", "Read"],
77
+ "deny": ["WriteToMain"],
78
+ "behavior": {
79
+ "on_conflict": "deny_wins",
80
+ "on_unknown": "report_only"
81
+ }
82
+ },
83
+ "plugins": {
84
+ "enable": true,
85
+ "allowed_plugin_ids": ["typescript-lsp", "pyright-lsp"],
86
+ "denied_plugin_ids": [],
87
+ "behavior": {
88
+ "on_unknown": "report_only"
89
+ },
90
+ "enabledPlugins": {
91
+ "typescript-lsp": true,
92
+ "pyright-lsp": true
93
+ }
94
+ },
95
+ "lsp": {
96
+ "enabledPlugins": ["typescript-lsp", "pyright-lsp"]
97
+ },
98
+ "claude_md": {
99
+ "inject_control_entry": true,
100
+ "marker": "<!-- MOVA_CONTROL_ENTRY_V0 -->"
101
+ }
102
+ }
@@ -0,0 +1,6 @@
1
+ # Claude Code Settings
2
+
3
+ This file documents project-specific Claude Code settings.
4
+
5
+ - Hooks: PreToolUse, PostToolUse, UserPromptSubmit, Stop
6
+ - MCP servers: jira, github, linear, sentry, memory
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: core-components
3
+ version: v0
4
+ ---
5
+
6
+ # core-components
7
+
8
+ - Follow component conventions for shared UI.
9
+ - Keep props minimal and documented.
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: formik-patterns
3
+ version: v0
4
+ ---
5
+
6
+ # formik-patterns
7
+
8
+ - Validate inputs early.
9
+ - Prefer schema-driven validation.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: graphql-schema
3
+ version: v0
4
+ ---
5
+
6
+ # graphql-schema
7
+
8
+ - Keep schema changes backward compatible when possible.
9
+ - Prefer explicit input types.
10
+ - Add tests for resolvers and auth rules.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: react-ui-patterns
3
+ version: v0
4
+ ---
5
+
6
+ # react-ui-patterns
7
+
8
+ - Keep components small and composable.
9
+ - Prefer controlled inputs for forms.
10
+ - Handle loading/empty/error states explicitly.
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: systematic-debugging
3
+ version: v0
4
+ ---
5
+
6
+ # systematic-debugging
7
+
8
+ - Form hypotheses and test them one by one.
9
+ - Reduce the repro to the smallest case.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: testing-patterns
3
+ version: v0
4
+ ---
5
+
6
+ # testing-patterns
7
+
8
+ - Prefer TDD: red -> green -> refactor.
9
+ - Test behavior, not implementation.
10
+ - Use factories/helpers to build fixtures.
@@ -0,0 +1,14 @@
1
+ name: pr-claude-code-review
2
+
3
+ on:
4
+ pull_request:
5
+ branches: ["main"]
6
+
7
+ jobs:
8
+ review:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v4
13
+ - name: Run review
14
+ run: echo "Claude Code review placeholder"
@@ -0,0 +1,14 @@
1
+ name: scheduled-claude-code-dependency-audit
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 5 * * 0"
6
+
7
+ jobs:
8
+ audit:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v4
13
+ - name: Audit dependencies
14
+ run: echo "Dependency audit placeholder"
@@ -0,0 +1,14 @@
1
+ name: scheduled-claude-code-docs-sync
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 4 * * 2"
6
+
7
+ jobs:
8
+ docs:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v4
13
+ - name: Sync docs
14
+ run: echo "Docs sync placeholder"
@@ -0,0 +1,14 @@
1
+ name: scheduled-claude-code-quality
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 3 * * 1"
6
+
7
+ jobs:
8
+ quality:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v4
13
+ - name: Run quality
14
+ run: echo "Claude Code quality placeholder"
@@ -0,0 +1,44 @@
1
+ {
2
+ "mcpServers": {
3
+ "jira": {
4
+ "type": "stdio",
5
+ "command": "npx",
6
+ "args": ["-y", "@anthropic/mcp-jira"],
7
+ "env": {
8
+ "JIRA_HOST": "${JIRA_HOST}",
9
+ "JIRA_EMAIL": "${JIRA_EMAIL}",
10
+ "JIRA_API_TOKEN": "${JIRA_API_TOKEN}"
11
+ }
12
+ },
13
+ "github": {
14
+ "type": "stdio",
15
+ "command": "npx",
16
+ "args": ["-y", "@anthropic/mcp-github"],
17
+ "env": {
18
+ "GITHUB_TOKEN": "${GITHUB_TOKEN}"
19
+ }
20
+ },
21
+ "linear": {
22
+ "type": "stdio",
23
+ "command": "npx",
24
+ "args": ["-y", "@anthropic/mcp-linear"],
25
+ "env": {
26
+ "LINEAR_API_KEY": "${LINEAR_API_KEY}"
27
+ }
28
+ },
29
+ "sentry": {
30
+ "type": "stdio",
31
+ "command": "npx",
32
+ "args": ["-y", "@anthropic/mcp-sentry"],
33
+ "env": {
34
+ "SENTRY_AUTH_TOKEN": "${SENTRY_AUTH_TOKEN}",
35
+ "SENTRY_ORG": "${SENTRY_ORG}"
36
+ }
37
+ },
38
+ "memory": {
39
+ "type": "stdio",
40
+ "command": "npx",
41
+ "args": ["-y", "@anthropic/mcp-memory"]
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,28 @@
1
+ # Claude Code Demo (Full)
2
+
3
+ ## Quick Facts
4
+
5
+ - Stack: React, TypeScript, Node.js
6
+ - Test: `npm test`
7
+ - Lint: `npm run lint`
8
+ - Build: `npm run build`
9
+
10
+ ## Key Directories
11
+
12
+ - `src/components/` - UI components
13
+ - `src/hooks/` - Custom hooks
14
+ - `src/api/` - API clients
15
+ - `tests/` - Test suites
16
+
17
+ ## Project Rules
18
+
19
+ - Prefer `interface` over `type` except unions.
20
+ - No `any`; use `unknown`.
21
+ - Use early returns to reduce nesting.
22
+ - Run lint + tests before PR.
23
+
24
+ ## Skill Activation
25
+
26
+ - Tests -> `testing-patterns`
27
+ - GraphQL -> `graphql-schema`
28
+ - UI components -> `react-ui-patterns`