@renoxar/koolie 1.25.0 → 2.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 (232) hide show
  1. package/.github/workflows/publish.yml +177 -0
  2. package/.koolie/QUELLREPOSITORIUM.md +9 -14
  3. package/.koolie/core/CHANGELOG.md +59 -0
  4. package/.koolie/core/LICENSE-HINWEIS.md +5 -6
  5. package/.koolie/core/OWNERS.md +2 -2
  6. package/.koolie/core/VERSION +1 -1
  7. package/.koolie/core/build/doc/00-kopf.md +6 -6
  8. package/.koolie/core/build/doc/01-executive-summary.md +8 -8
  9. package/.koolie/core/build/doc/03-ziele-nichtziele.md +2 -2
  10. package/.koolie/core/build/doc/04-geltungsbereich.md +4 -4
  11. package/.koolie/core/build/doc/05-glossar.md +3 -3
  12. package/.koolie/core/build/doc/07-architektur.md +2 -2
  13. package/.koolie/core/build/doc/07a-abbildungsschicht.md +9 -9
  14. package/.koolie/core/build/doc/08-trennung.md +3 -3
  15. package/.koolie/core/build/doc/09-betriebsmodi.md +8 -8
  16. package/.koolie/core/build/doc/15-referenzstruktur.md +56 -27
  17. package/.koolie/core/build/doc/16-agentenanweisung.md +2 -2
  18. package/.koolie/core/build/doc/20-referenz-skills.md +46 -46
  19. package/.koolie/core/build/doc/25-governance.md +9 -1
  20. package/.koolie/core/build/doc/26-qs-test.md +32 -3
  21. package/.koolie/core/build/doc/27-pilot.md +2 -2
  22. package/.koolie/core/build/doc/28-uebernahme.md +9 -1
  23. package/.koolie/core/build/doc/30-roadmap.md +3 -1
  24. package/.koolie/core/build/doc/31-anhaenge.md +1 -1
  25. package/.koolie/core/checklists/01-preflight.md +3 -3
  26. package/.koolie/core/checklists/02-privacy-context.md +1 -1
  27. package/.koolie/core/checklists/03-before-code-change.md +2 -2
  28. package/.koolie/core/checklists/04-review-ai-code.md +1 -1
  29. package/.koolie/core/checklists/05-testing.md +1 -1
  30. package/.koolie/core/checklists/06-security.md +1 -1
  31. package/.koolie/core/checklists/08-merge-request.md +1 -1
  32. package/.koolie/core/checklists/09-onboarding.md +2 -2
  33. package/.koolie/core/checklists/10-project-adoption.md +8 -8
  34. package/.koolie/core/checklists/11-framework-release.md +14 -14
  35. package/.koolie/core/clientmap.py +2 -2
  36. package/.koolie/core/clients/README.md +54 -52
  37. package/.koolie/core/clients/_template/CLIENT_PACK.md +19 -19
  38. package/.koolie/core/clients/claude-code/CLIENT_PACK.md +108 -164
  39. package/.koolie/core/clients/claude-code/manifest.json +5 -5
  40. package/.koolie/core/clients/claude-code/root-template/.claude/README.md +9 -9
  41. package/.koolie/core/clients/cursor/CLIENT_PACK.md +66 -60
  42. package/.koolie/core/clients/cursor/manifest.json +3 -3
  43. package/.koolie/core/clients/cursor/root-template/.cursor/README.md +3 -3
  44. package/.koolie/core/clients/devin-desktop/CLIENT_PACK.md +62 -64
  45. package/.koolie/core/clients/devin-desktop/manifest.json +5 -5
  46. package/.koolie/core/clients/devin-desktop/root-template/.devin/README.md +9 -9
  47. package/.koolie/core/clients/kiro/CLIENT_PACK.md +55 -48
  48. package/.koolie/core/clients/kiro/manifest.json +4 -4
  49. package/.koolie/core/clients/kiro/root-template/.kiro/README.md +3 -3
  50. package/.koolie/core/clients/openai-codex/CLIENT_PACK.md +98 -103
  51. package/.koolie/core/clients/openai-codex/manifest.json +3 -3
  52. package/.koolie/core/clients/openai-codex/root-template/.codex/README.md +2 -2
  53. package/.koolie/core/decision-trees/02-may-ai-do-task.md +2 -2
  54. package/.koolie/core/decision-trees/03-analyze-or-modify.md +12 -12
  55. package/.koolie/core/decision-trees/04-required-review.md +1 -1
  56. package/.koolie/core/docs/ADOPTION_GUIDE.md +281 -385
  57. package/.koolie/core/docs/DOCUMENTATION_STANDARD.md +44 -36
  58. package/.koolie/core/docs/PLACEHOLDER_REGISTRY.md +8 -8
  59. package/.koolie/core/docs/ROADMAP.md +34 -17
  60. package/.koolie/core/docs/RUNTIME_GLOSSARY.md +34 -35
  61. package/.koolie/core/examples/example-ergebnisbericht.md +1 -1
  62. package/.koolie/core/examples/example-mr-description.md +2 -2
  63. package/.koolie/core/framework/core/00-principles.md +1 -1
  64. package/.koolie/core/framework/core/01-governance.md +8 -8
  65. package/.koolie/core/framework/core/02-privacy.md +12 -12
  66. package/.koolie/core/framework/core/03-security.md +13 -11
  67. package/.koolie/core/framework/core/05-working-model.md +22 -22
  68. package/.koolie/core/framework/core/06-prompting-rules.md +5 -5
  69. package/.koolie/core/framework/core/07-review-rules.md +1 -1
  70. package/.koolie/core/framework/core/08-skill-conventions.md +11 -11
  71. package/.koolie/core/framework/core/09-risk-model.md +6 -6
  72. package/.koolie/core/framework/core/10-error-escalation.md +1 -1
  73. package/.koolie/core/framework/org-policies/MAPPING_CLASSIFICATION.md +1 -1
  74. package/.koolie/core/framework/overlay-patterns/general.md +63 -75
  75. package/.koolie/core/framework/role-packs/README.md +16 -28
  76. package/.koolie/core/framework/role-packs/_template/ROLE_PACK.md +3 -3
  77. package/.koolie/core/framework/role-packs/requirements-engineering/ROLE_PACK.md +23 -22
  78. package/.koolie/core/framework/role-packs/requirements-engineering/runtime/30-role-requirements-engineering.md +5 -5
  79. package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/CHANGELOG.md +2 -1
  80. package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/EXAMPLES.md +5 -5
  81. package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/SKILL.md +9 -9
  82. package/.koolie/core/framework/role-packs/requirements-engineering/skills/koolie-ticket/TESTS.md +22 -0
  83. package/.koolie/core/framework/role-packs/software-development/ROLE_PACK.md +16 -16
  84. package/.koolie/core/framework/role-packs/software-development/runtime/30-role-software-development.md +1 -1
  85. package/.koolie/core/framework/runtime/agents/{fw-reviewer.md → koolie-reviewer.md} +2 -2
  86. package/.koolie/core/framework/runtime/permissions.json +13 -13
  87. package/.koolie/core/framework/runtime/root-instruction.md +5 -5
  88. package/.koolie/core/framework/runtime/rules/10-privacy-security.md +2 -2
  89. package/.koolie/core/framework/runtime/rules/15-development-rules.md +1 -1
  90. package/.koolie/core/framework/runtime/rules/16-plan-spezifikation.md +1 -1
  91. package/.koolie/core/framework/runtime/rules/20-project-overlay.md +2 -2
  92. package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/CHANGELOG.md +2 -1
  93. package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/EXAMPLES.md +8 -8
  94. package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/SKILL.md +21 -21
  95. package/.koolie/core/framework/skills/koolie-bugfix-prepare/TESTS.md +15 -0
  96. package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/CHANGELOG.md +2 -1
  97. package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/EXAMPLES.md +6 -6
  98. package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/SKILL.md +12 -12
  99. package/.koolie/core/framework/skills/koolie-change-analyze/TESTS.md +16 -0
  100. package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/CHANGELOG.md +2 -1
  101. package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/EXAMPLES.md +4 -4
  102. package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/SKILL.md +15 -15
  103. package/.koolie/core/framework/skills/koolie-change-small/TESTS.md +13 -0
  104. package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/CHANGELOG.md +2 -1
  105. package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/EXAMPLES.md +4 -4
  106. package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/SKILL.md +10 -10
  107. package/.koolie/core/framework/skills/koolie-code-explain/TESTS.md +11 -0
  108. package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/CHANGELOG.md +2 -1
  109. package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/EXAMPLES.md +3 -3
  110. package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/SKILL.md +8 -8
  111. package/.koolie/core/framework/skills/koolie-docs-update/TESTS.md +12 -0
  112. package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/CHANGELOG.md +2 -1
  113. package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/EXAMPLES.md +6 -6
  114. package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/SKILL.md +15 -15
  115. package/.koolie/core/framework/skills/koolie-error-analyze/TESTS.md +12 -0
  116. package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/CHANGELOG.md +2 -1
  117. package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/EXAMPLES.md +6 -6
  118. package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/SKILL.md +8 -8
  119. package/.koolie/core/framework/skills/koolie-mr-description/TESTS.md +12 -0
  120. package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/CHANGELOG.md +2 -1
  121. package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/EXAMPLES.md +4 -4
  122. package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/SKILL.md +8 -8
  123. package/.koolie/core/framework/skills/koolie-overlay-pflege/TESTS.md +13 -0
  124. package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/CHANGELOG.md +2 -1
  125. package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/EXAMPLES.md +7 -7
  126. package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/SKILL.md +14 -14
  127. package/.koolie/core/framework/skills/koolie-plan/TESTS.md +14 -0
  128. package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/CHANGELOG.md +2 -1
  129. package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/EXAMPLES.md +4 -4
  130. package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/SKILL.md +12 -12
  131. package/.koolie/core/framework/skills/koolie-refactor/TESTS.md +14 -0
  132. package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/CHANGELOG.md +2 -1
  133. package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/EXAMPLES.md +4 -4
  134. package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/SKILL.md +8 -8
  135. package/.koolie/core/framework/skills/koolie-repo-analyze/TESTS.md +11 -0
  136. package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/CHANGELOG.md +2 -1
  137. package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/EXAMPLES.md +3 -3
  138. package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/SKILL.md +7 -7
  139. package/.koolie/core/framework/skills/koolie-review-support/TESTS.md +13 -0
  140. package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/CHANGELOG.md +2 -1
  141. package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/EXAMPLES.md +5 -5
  142. package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/SKILL.md +11 -11
  143. package/.koolie/core/framework/skills/koolie-tests/TESTS.md +12 -0
  144. package/.koolie/core/framework/tech-packs/README.md +2 -2
  145. package/.koolie/core/framework/tech-packs/_template/TECH_PACK.md +2 -2
  146. package/.koolie/core/governance/ADOPTION_REGISTRY.md +22 -58
  147. package/.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md +1 -1
  148. package/.koolie/core/governance/DECISION_LOG.md +7 -1
  149. package/.koolie/core/governance/EXCEPTION_PROCESS.md +1 -1
  150. package/.koolie/core/governance/FEEDBACK_PROCESS.md +1 -1
  151. package/.koolie/core/governance/FRAMEWORK_DEV_PROFILE.md +64 -66
  152. package/.koolie/core/governance/PRIORITY_HIERARCHY.md +13 -13
  153. package/.koolie/core/governance/RACI.md +3 -3
  154. package/.koolie/core/governance/RELEASE_PROCESS.md +101 -108
  155. package/.koolie/core/governance/change-requests/CR-2026-173-oeffentlicher-auftritt-koolie-praefix.md +67 -0
  156. package/.koolie/core/install.py +99 -0
  157. package/.koolie/core/koexistenz.py +2 -2
  158. package/.koolie/core/onboarding/GUIDE.md +7 -7
  159. package/.koolie/core/onboarding/KNOWLEDGE_CHECK.md +1 -1
  160. package/.koolie/core/onboarding/MENTOR_CHECKLIST.md +3 -3
  161. package/.koolie/core/onboarding/QUICKSTART.md +2 -2
  162. package/.koolie/core/onboarding/REFERENCE.md +14 -14
  163. package/.koolie/core/onboarding/exercises/EXERCISES.md +8 -8
  164. package/.koolie/core/onboarding/exercises/README.md +47 -65
  165. package/.koolie/core/pilot/PILOT_CONCEPT.md +1 -1
  166. package/.koolie/core/prompts/01-understand-codebase.md +11 -7
  167. package/.koolie/core/prompts/02-impact-analysis.md +17 -7
  168. package/.koolie/core/prompts/03-implementation-planning.md +10 -6
  169. package/.koolie/core/prompts/04-code-generation.md +11 -5
  170. package/.koolie/core/prompts/05-test-generation.md +13 -7
  171. package/.koolie/core/prompts/06-refactoring.md +14 -8
  172. package/.koolie/core/prompts/07-debugging.md +13 -11
  173. package/.koolie/core/prompts/08-security-review.md +2 -2
  174. package/.koolie/core/prompts/09-performance-analysis.md +2 -2
  175. package/.koolie/core/prompts/10-documentation.md +6 -4
  176. package/.koolie/core/prompts/11-merge-request-review.md +7 -5
  177. package/.koolie/core/prompts/12-developer-training.md +5 -3
  178. package/.koolie/core/prompts/README.md +17 -15
  179. package/.koolie/core/templates/MR_AI_DISCLOSURE.md +2 -2
  180. package/.koolie/core/templates/PLAN_TEMPLATE.md +2 -2
  181. package/.koolie/core/templates/SKILL_TEMPLATE.md +3 -3
  182. package/.koolie/core/templates/project-overlay/OVERLAY.md +28 -22
  183. package/.koolie/core/templates/project-overlay/documents/architecture/decisions/README.md +1 -1
  184. package/.koolie/core/tests/EDGE_CASES.md +4 -7
  185. package/.koolie/core/tests/TEST_CATALOG.md +33 -33
  186. package/.koolie/core/tests/protocols/2026-10-02-oeffentlicher-auftritt-2.0.0.md +42 -0
  187. package/.koolie/core/tests/scripts/hook-check-secrets.py +2 -2
  188. package/.koolie/core/tests/scripts/hook-overlay-status.py +1 -1
  189. package/.koolie/core/tests/scripts/probe-pruefungen.py +4 -2
  190. package/.koolie/core/tests/scripts/pruefungen/berechtigungen.py +7 -7
  191. package/.koolie/core/tests/scripts/pruefungen/bestand.py +20 -3
  192. package/.koolie/core/tests/scripts/pruefungen/dokumente.py +88 -0
  193. package/.koolie/core/tests/scripts/pruefungen/gemeinsam.py +1 -1
  194. package/.koolie/core/tests/scripts/pruefungen/hooks.py +1 -1
  195. package/.koolie/core/tests/scripts/pruefungen/overlay.py +5 -5
  196. package/.koolie/core/tests/scripts/pruefungen/testkatalog.py +5 -5
  197. package/.koolie/core/tests/scripts/pruefungen/werkzeuge.py +81 -2
  198. package/.koolie/core/tests/scripts/sonden/teil02_packs_mandat_mcp.py +6 -6
  199. package/.koolie/core/tests/scripts/sonden/teil03_pruefungen_26_bis_36.py +11 -11
  200. package/.koolie/core/tests/scripts/sonden/teil04_pruefungen_37_bis_45.py +11 -11
  201. package/.koolie/core/tests/scripts/sonden/teil05_pruefungen_46_bis_55.py +4 -4
  202. package/.koolie/core/tests/scripts/sonden/teil06_pruefungen_57_bis_65.py +33 -33
  203. package/.koolie/core/tests/scripts/sonden/teil07_overlay_und_lieferung.py +3 -3
  204. package/.koolie/core/tests/scripts/sonden/teil08_pruefungen_66_bis_80.py +3 -3
  205. package/.koolie/core/tests/scripts/sonden/teil10_pruefungen_83_bis_95.py +3 -3
  206. package/.koolie/core/tests/scripts/sonden/teil11_pruefungen_104_und_105.py +2 -2
  207. package/.koolie/core/tests/scripts/sonden/teil14_modi_ausnahmen_skills.py +1 -1
  208. package/.koolie/core/tests/scripts/sonden/teil16_koexistenz.py +5 -5
  209. package/.koolie/core/tests/scripts/sonden/teil17_paketquellen.py +33 -0
  210. package/.koolie/core/tests/scripts/sonden/teil19_skillnamen.py +97 -0
  211. package/.koolie/core/tests/scripts/sonden/teil20_kennungen.py +70 -0
  212. package/.koolie/core/tests/scripts/validate-framework.py +15 -6
  213. package/.koolie/core/tests/scripts/validate-output.py +1 -1
  214. package/CONTRIBUTING.md +16 -10
  215. package/QUICKSTART.en.md +44 -51
  216. package/QUICKSTART.md +44 -50
  217. package/package.json +2 -2
  218. package/paketquellen/README.md +11 -11
  219. package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/TESTS.md +0 -22
  220. package/.koolie/core/framework/skills/fw-bugfix-prepare/TESTS.md +0 -15
  221. package/.koolie/core/framework/skills/fw-change-analyze/TESTS.md +0 -16
  222. package/.koolie/core/framework/skills/fw-change-small/TESTS.md +0 -13
  223. package/.koolie/core/framework/skills/fw-code-explain/TESTS.md +0 -11
  224. package/.koolie/core/framework/skills/fw-docs-update/TESTS.md +0 -12
  225. package/.koolie/core/framework/skills/fw-error-analyze/TESTS.md +0 -12
  226. package/.koolie/core/framework/skills/fw-mr-description/TESTS.md +0 -12
  227. package/.koolie/core/framework/skills/fw-overlay-pflege/TESTS.md +0 -13
  228. package/.koolie/core/framework/skills/fw-plan/TESTS.md +0 -14
  229. package/.koolie/core/framework/skills/fw-refactor/TESTS.md +0 -14
  230. package/.koolie/core/framework/skills/fw-repo-analyze/TESTS.md +0 -11
  231. package/.koolie/core/framework/skills/fw-review-support/TESTS.md +0 -13
  232. package/.koolie/core/framework/skills/fw-tests/TESTS.md +0 -12
@@ -8,7 +8,7 @@
8
8
  "agents_dir": ".claude/agents",
9
9
  "pack_runtime_dir": ".claude/rules",
10
10
  "has_rule_triggers": true,
11
- "core_skill_prefix": "fw-",
11
+ "core_skill_prefix": "koolie-",
12
12
  "core_paths": [
13
13
  ".claude/README.md"
14
14
  ],
@@ -58,7 +58,7 @@
58
58
  "skill_deny_field": "disallowed-tools",
59
59
  "_skill_deny_note": "Die Abbildung von permissions.deny (CR-2026-057, D-64/D-65). Gemessen am 2026-09-13 (tests/protocols/2026-09-13-erhebung-disallowed-tools.md): 'disallowed-tools' nimmt das Werkzeug aus dem Vorrat und schlaegt dabei sogar eine ausdrueckliche allow-Regel - ein Skill mit 'disallowed-tools: Write, Edit' konnte NICHT schreiben, obwohl Write in der allow-Liste stand; derselbe Skill ohne das Feld konnte es. Das ist genau das, was 'allowed-tools' nach B01 nicht ist. Die Werkzeugnamen kommen aus hook_tools dieses Manifests und NICHT aus skill_frontmatter.tool_names (D-28, CR-2026-057 E2): edit -> hook_tools.write, exec -> hook_tools.exec. Der Unterschied ist gewollt und gemessen - tool_names.edit fuehrt nur Edit und Write, hook_tools.write fuehrt zusaetzlich NotebookEdit; fuer eine Sperre waere das eine Luecke, und eine Luecke in der Liste ist ausnutzbar (Lauf E der Erhebung: mit gesperrtem Write, Edit schrieb der Skill ueber Bash).",
60
60
  "skill_deny_unmapped": "argumentmuster",
61
- "_skill_deny_unmapped_note": "Was dieses Pack bewusst NICHT abbildet, deklariert statt verschwiegen (CR-2026-057 E3, Bauart wie hook_tools_absent nach D-47): befehlsgenaue Verbote der Form Exec(git push). Gemessen am 2026-09-13, Laeufe G' und G'' (tests/protocols/2026-09-13-erhebung-disallowed-tools.md Abschnitt 4.3): Ein Eintrag mit Klammer - 'disallowed-tools: Bash(echo verboten:*)' und ebenso die Schreibweise mit Leerzeichen - laesst den Befehl LAUTLOS durchlaufen, ohne Verweigerung und ohne Fehlermeldung; derselbe Skill mit 'disallowed-tools: Bash' wies beide Befehle ab. Wer ein Argumentmuster schreibt, hat deshalb GAR KEINE Schranke, nicht bloss eine groebere. Die Alternative - das ganze Werkzeug sperren - ist strenger als gemeint und macht die allow-Eintraege derselben Skills wirkungslos: fw-tests koennte seinen Testbefehl nicht mehr ausfuehren. Betroffen sind fuenf der zwoelf Quellskills, und sie sind NICHT gleich betroffen - nachgezaehlt an der erzeugten Fassung, nicht an der Quelle: DREI tragen ausschliesslich befehlsgenaue Verbote und bekommen deshalb GAR KEINE Schranke je Skill (fw-change-small, fw-refactor, fw-tests); ZWEI nennen daneben das grobe Verb edit und bekommen eine TEILWEISE Schranke - ihre Editierwerkzeuge sind gesperrt, ihre git-Verbote nicht (fw-mr-description, fw-review-support). Die uebrigen sieben sind vollstaendig abgebildet. Pruefung 33 weist jedes Argumentmuster in einer erzeugten Fassung ab.",
61
+ "_skill_deny_unmapped_note": "Was dieses Pack bewusst NICHT abbildet, deklariert statt verschwiegen (CR-2026-057 E3, Bauart wie hook_tools_absent nach D-47): befehlsgenaue Verbote der Form Exec(git push). Gemessen am 2026-09-13, Laeufe G' und G'' (tests/protocols/2026-09-13-erhebung-disallowed-tools.md Abschnitt 4.3): Ein Eintrag mit Klammer - 'disallowed-tools: Bash(echo verboten:*)' und ebenso die Schreibweise mit Leerzeichen - laesst den Befehl LAUTLOS durchlaufen, ohne Verweigerung und ohne Fehlermeldung; derselbe Skill mit 'disallowed-tools: Bash' wies beide Befehle ab. Wer ein Argumentmuster schreibt, hat deshalb GAR KEINE Schranke, nicht bloss eine groebere. Die Alternative - das ganze Werkzeug sperren - ist strenger als gemeint und macht die allow-Eintraege derselben Skills wirkungslos: koolie-tests koennte seinen Testbefehl nicht mehr ausfuehren. Betroffen sind fuenf der zwoelf Quellskills, und sie sind NICHT gleich betroffen - nachgezaehlt an der erzeugten Fassung, nicht an der Quelle: DREI tragen ausschliesslich befehlsgenaue Verbote und bekommen deshalb GAR KEINE Schranke je Skill (koolie-change-small, koolie-refactor, koolie-tests); ZWEI nennen daneben das grobe Verb edit und bekommen eine TEILWEISE Schranke - ihre Editierwerkzeuge sind gesperrt, ihre git-Verbote nicht (koolie-mr-description, koolie-review-support). Die uebrigen sieben sind vollstaendig abgebildet. Pruefung 33 weist jedes Argumentmuster in einer erzeugten Fassung ab.",
62
62
  "drop_fields": [
63
63
  "permissions",
64
64
  "triggers"
@@ -83,8 +83,8 @@
83
83
  "dst": "<RULES_DIR>/15-development-rules.md"
84
84
  },
85
85
  {
86
- "src": "framework/runtime/agents/fw-reviewer.md",
87
- "dst": "<AGENTS_DIR>/fw-reviewer.md"
86
+ "src": "framework/runtime/agents/koolie-reviewer.md",
87
+ "dst": "<AGENTS_DIR>/koolie-reviewer.md"
88
88
  },
89
89
  {
90
90
  "src": "templates/rules/21-overlay-TEMPLATE.md.template",
@@ -189,7 +189,7 @@
189
189
  "permission_name_tools": [
190
190
  "Skill"
191
191
  ],
192
- "_permission_name_tools_note": "Werkzeuge, deren Regelargument kein Pfad ist, sondern ein Name. Fuer sie haengt die Abbildung weder das Wurzelpraefix (permission_path_prefix) noch das Praefixzeichen (permission_exec_suffix) an, und der Validator laesst sie neben permission_path_tools zu. Gemessen am 2026-09-14 (tests/protocols/2026-09-14-erhebung-skillaufruf.md, D-82): Der Skill-Aufruf ist bei diesem Client ein eigener Werkzeugaufruf mit dem Namen Skill und laeuft ohne allow-Regel in die Rueckfrage; das Argument wird WOERTLICH verglichen - Skill(fw-code-explain) laesst den Aufruf durch (Lauf C1), Skill(fw-*) nicht (Lauf D1), und Skill(fw-plan) weist fw-code-explain ab (Lauf E1, Kontrolllauf). Deshalb zwoelf woertliche Regeln statt eines Musters.",
192
+ "_permission_name_tools_note": "Werkzeuge, deren Regelargument kein Pfad ist, sondern ein Name. Fuer sie haengt die Abbildung weder das Wurzelpraefix (permission_path_prefix) noch das Praefixzeichen (permission_exec_suffix) an, und der Validator laesst sie neben permission_path_tools zu. Gemessen am 2026-09-14 (tests/protocols/2026-09-14-erhebung-skillaufruf.md, D-82): Der Skill-Aufruf ist bei diesem Client ein eigener Werkzeugaufruf mit dem Namen Skill und laeuft ohne allow-Regel in die Rueckfrage; das Argument wird WOERTLICH verglichen - Skill(koolie-code-explain) laesst den Aufruf durch (Lauf C1), Skill(koolie-*) nicht (Lauf D1), und Skill(koolie-plan) weist koolie-code-explain ab (Lauf E1, Kontrolllauf). Deshalb zwoelf woertliche Regeln statt eines Musters.",
193
193
  "mcp_permission_rule": {"werkzeug": "mcp__{server}__{werkzeug}", "pauschal": "mcp__*", "rueckfrage_schlaegt_freigabe": true},
194
194
  "_mcp_permission_rule_note": "Die Regelform eines MCP-Werkzeugs in der Berechtigungsdatei (Pruefung 101, D-459). Gemessen am 2026-09-28 mit Clientversion 2.1.283 (Vorpruefung zu 1.18.0): allow auf mcp__<server>__<werkzeug> laesst ein Lesewerkzeug im Druckmodus durch, ein Schreibwerkzeug auf ask wird abgewiesen (V4); steht mcp__* im ask-Korb - so erzeugt die Kernquelle die Datei -, wird auch das einzeln freigegebene Lesewerkzeug abgewiesen (V5). Die Freigabe zum Lesen ersetzt deshalb die Pauschale durch Einzelregeln.",
195
195
  "permission_tools_bare": [
@@ -22,7 +22,7 @@ Die **Regeltexte sind inhaltlich identisch**. Abweichend ist nur, wie ihre Ladeb
22
22
 
23
23
  2. **Hooks stehen in `settings.json`**, nicht in einer eigenen Datei.
24
24
 
25
- Bis Framework-Release 0.14.0 stand hier ein dritter Unterschied – „Schreibschutz braucht zwei Regeln je Pfad". Er galt nie: Dieser Client wertet Pfadregeln ausschließlich für `Read` und `Edit` aus (AP2-CC-02, D-26).
25
+ Bis Framework-Release 0.14.0 stand hier ein dritter Unterschied – „Schreibschutz braucht zwei Regeln je Pfad". Er galt nie: Dieser Client wertet Pfadregeln ausschließlich für `Read` und `Edit` aus (AP2-CC-02).
26
26
 
27
27
  ## Technology Packs
28
28
 
@@ -37,13 +37,13 @@ Zu beachten: Die Regel steht damit nicht schon zu Beginn der Aufgabe im Kontext,
37
37
  | `default` | Lesen automatisch; Schreiben und Befehle fragen | **Standard** für alle Kontrollstufen |
38
38
  | `acceptEdits` | Dateiänderungen automatisch; Befehle fragen | nur Kontrollstufe niedrig, nur mit Overlay-Freigabe |
39
39
  | `plan` | nur Analyse und Planung, keine Änderungen | zulässig; entspricht M1/M2 |
40
- | `bypassPermissions` | alles automatisch | **untersagt** (D-05) |
40
+ | `bypassPermissions` | alles automatisch | **untersagt** |
41
41
 
42
42
  ## Regelablage (`rules/`)
43
43
 
44
44
  Die Regelablage enthält die Laufzeitfassung der Framework-Regeln. Die kanonische, werkzeugneutrale Langform liegt in `.koolie/core/framework/`. Bei Widersprüchen gilt die Langform; die Laufzeitfassung wird dann korrigiert. **Die Regeltexte sind inhaltlich identisch zu denen anderer Client Packs.** Abweichend ist ausschließlich, wie die Ladebedingung notiert wird.
45
45
 
46
- > **Warum dieser Abschnitt hier steht und nicht in `rules/`.** Bis 0.25.0 lag dort eine eigene README. Dieser Client lädt **jede** `.md`-Datei der Regelablage unbedingt – gemessen am 2026-09-11: Die Sitzung führte die Datei samt Inhaltsangabe in ihrem geladenen Bestand auf (K-26). Ein erklärender Text mit Belegvorbehalten hatte damit einen dauerhaften Platz im Kontext. Seit 0.26.0 gilt: **Die Regelablage enthält ausschließlich Regeln** (D-36).
46
+ > **Warum dieser Abschnitt hier steht und nicht in `rules/`.** Bis 0.25.0 lag dort eine eigene README. Dieser Client lädt **jede** `.md`-Datei der Regelablage unbedingt – gemessen am 2026-09-11: Die Sitzung führte die Datei samt Inhaltsangabe in ihrem geladenen Bestand auf. Ein erklärender Text mit Belegvorbehalten hatte damit einen dauerhaften Platz im Kontext. Seit 0.26.0 gilt: **Die Regelablage enthält ausschließlich Regeln**.
47
47
 
48
48
  ### Mechanismus (Belegstatus)
49
49
 
@@ -54,7 +54,7 @@ Die Regelablage enthält die Laufzeitfassung der Framework-Regeln. Die kanonisch
54
54
  | Eine Regeldatei **ohne** `paths`-Feld wird beim Sitzungsstart unbedingt geladen – ohne Import | [DOK] (AP2, Clientversion 2.1.267) |
55
55
  | Eine Regeldatei **mit** `paths`-Feld lädt, sobald der Client eine Datei liest, die auf eines der Glob-Muster passt | [DOK] (AP2, Clientversion 2.1.267) |
56
56
  | `paths` nimmt mehrere Muster; Klammer-Expansion (`{ts,tsx}`) ist zulässig | [DOK] (AP2, Clientversion 2.1.267) |
57
- | `description` ist für Regeldateien **nicht** dokumentiert und steht deshalb nicht im Frontmatter (K-18) | [DOK] (AP2, Clientversion 2.1.267) |
57
+ | `description` ist für Regeldateien **nicht** dokumentiert und steht deshalb nicht im Frontmatter | [DOK] (AP2, Clientversion 2.1.267) |
58
58
  | Zeichenlimit der Wurzel-Anweisung: 4 MiB je Datei; darüber wird sie übersprungen. Empfehlung: unter 200 Zeilen | [DOK] (AP2, Clientversion 2.1.267) |
59
59
  | **Ein HTML-Kommentar erreicht die Sitzung nicht.** Dieselbe Messmarke blieb unsichtbar, solange sie in Kommentarklammern stand, und war im Klartext sofort da – in der Wurzel-Anweisungsdatei **und** in der Regelablage | in einer Sitzung erhoben (2026-09-11, ERH-01) |
60
60
 
@@ -64,7 +64,7 @@ Bis Framework-Release 0.14.0 lag diese Ablage unter `.claude/framework/` und wur
64
64
 
65
65
  Nur das Feld `paths` ist zulässig, und nur bei Regeln, die an Dateimuster gebunden sind; es nimmt eine Liste von Glob-Mustern. Eine Regel ohne Frontmatter lädt unbedingt. Der Validator meldet jedes andere Feld – insbesondere ein aus der Kernquelle stehen gebliebenes `trigger:` oder `globs:`, das dieser Client nicht auswertet.
66
66
 
67
- Der erzeugte HTML-Kommentar oberhalb des Regeltextes nennt Zweck, Ladeverhalten und den Ladetrigger der Kernquelle. **Er ist die Auskunft an den Menschen, der die Datei öffnet; in den Kontext geht er bei diesem Client nicht** – gemessen am 2026-09-11 (ERH-01). Deshalb steht dort Herkunft und keine Anweisung: Ein normativer Satz im Kommentar wäre eine Regel, die niemanden erreicht (D-38). Prüfung 23 meldet normative Schlüsselwörter in solchen Kommentaren.
67
+ Der erzeugte HTML-Kommentar oberhalb des Regeltextes nennt Zweck, Ladeverhalten und den Ladetrigger der Kernquelle. **Er ist die Auskunft an den Menschen, der die Datei öffnet; in den Kontext geht er bei diesem Client nicht** – gemessen am 2026-09-11 (ERH-01). Deshalb steht dort Herkunft und keine Anweisung: Ein normativer Satz im Kommentar wäre eine Regel, die niemanden erreicht. Prüfung 23 meldet normative Schlüsselwörter in solchen Kommentaren.
68
68
 
69
69
  ### Abbildung der Ladetrigger
70
70
 
@@ -76,7 +76,7 @@ Die Kernquelle kennt drei Ladetrigger, dieser Client eine Bedingung. Was womit a
76
76
  | `model_decision` | kein `paths`-Feld | bei jedem Sitzungsstart – **Verschärfung**, siehe unten |
77
77
  | `glob` mit Mustern | `paths:` mit denselben Mustern | sobald der Client eine passende Datei liest |
78
78
 
79
- Ein Ladetrigger ohne Eintrag in dieser Abbildung lässt die Installation scheitern; er wird nicht stillschweigend verworfen (D-26, D-27).
79
+ Ein Ladetrigger ohne Eintrag in dieser Abbildung lässt die Installation scheitern; er wird nicht stillschweigend verworfen.
80
80
 
81
81
  ### Nummernschema und Ebenenzuordnung (Framework-Konvention `[KONZ]`)
82
82
 
@@ -101,7 +101,7 @@ Bei Clients mit einer modellentschiedenen Ladebedingung laden `10-` und `15-` nu
101
101
  - **Für die Regelwirkung:** eine Verschärfung. Mehr Regeln sind aktiv, nicht weniger.
102
102
  - **Für den Kontext:** rund 25.000 Zeichen sind ständig belegt (`CLAUDE.md` und die vier unbedingten Regeltexte einer frischen Installation zusammen). Das Prinzip Least Context wird damit schwächer eingehalten als bei einem Client mit modellentschiedener Bedingung. Least Context ist ein Prinzip zur Ergebnisqualität, keine Sicherheitszusage – die Abweichung ist deshalb vertretbar und in `CLIENT_PACK.md` Zeile R2 ausgewiesen.
103
103
 
104
- Wächst der ständige Kontext durch aktivierte Packs deutlich, ist zu prüfen, ob ein Pack an Dateimuster gebunden werden kann. Der Validator meldet einen Fehler, sobald die unbedingt geladenen Texte zusammen 40.000 Zeichen überschreiten (D-387).
104
+ Wächst der ständige Kontext durch aktivierte Packs deutlich, ist zu prüfen, ob ein Pack an Dateimuster gebunden werden kann. Der Validator meldet einen Fehler, sobald die unbedingt geladenen Texte zusammen 40.000 Zeichen überschreiten.
105
105
 
106
106
  ### Grenzen dieser Ablage
107
107
 
@@ -109,11 +109,11 @@ Wächst der ständige Kontext durch aktivierte Packs deutlich, ist zu prüfen, o
109
109
  - **Eine Kernregel darf nicht an Dateimuster gebunden werden.** `00-`, `10-`, `15-` und `20-` gelten für jede Aufgabe; ein `paths`-Feld dort wäre eine Lockerung. Der Validator meldet es als Fehler.
110
110
  - **Ein ungültiges Muster trifft nichts.** Glob liest eine öffnende eckige Klammer als Beginn eines Klammerausdrucks; ein unausgeglichenes Muster trifft keine Datei, während die übrigen Muster derselben Regel weiter wirken. Eine literale Klammer wird mit vorangestelltem Rückstrich geschrieben.
111
111
  - **Klammer-Expansion hat ein Budget.** Die `paths`-Liste einer Regel teilt sich 1.000 expandierte Muster und 4 MiB; ein Muster darüber wird unexpandiert verwendet und trifft dann nichts.
112
- - **Nutzerlokal ausschließbar.** `claudeMdExcludes` in `.claude/settings.local.json` kann Regeldateien über ein Glob-Muster vom Laden ausnehmen. Das ist eine **Lockerung** und damit im Framework unzulässig (B9); technisch verhindert wird sie nicht. Der KI-Client selbst kann die Datei nicht schreiben – eine Verweigerungsregel auf die Laufzeitschicht steht in `deny` –, ein Mensch schon. Dasselbe Feld ist zugleich der Weg, eine Anweisungsdatei **außerhalb** des Projekts auszuschließen; das Framework liefert dafür keine Vorgabe aus (Zeile R6, D-37).
112
+ - **Nutzerlokal ausschließbar.** `claudeMdExcludes` in `.claude/settings.local.json` kann Regeldateien über ein Glob-Muster vom Laden ausnehmen. Das ist eine **Lockerung** und damit im Framework unzulässig (B9); technisch verhindert wird sie nicht. Der KI-Client selbst kann die Datei nicht schreiben – eine Verweigerungsregel auf die Laufzeitschicht steht in `deny` –, ein Mensch schon. Dasselbe Feld ist zugleich der Weg, eine Anweisungsdatei **außerhalb** des Projekts auszuschließen; das Framework liefert dafür keine Vorgabe aus (Zeile R6).
113
113
 
114
114
  ### Regeln für die Regelablage
115
115
 
116
- - **Dort liegt nur, was Regel ist.** Ein erklärender Text gehört hierher, nicht dorthin (D-36). Der Validator meldet eine Datei in der Vorlage der Regelablage, die dem Nummernschema nicht folgt.
116
+ - **Dort liegt nur, was Regel ist.** Ein erklärender Text gehört hierher, nicht dorthin. Der Validator meldet eine Datei in der Vorlage der Regelablage, die dem Nummernschema nicht folgt.
117
117
  - Änderungen an `00-`, `10-`, `15-` nur über einen Framework-Änderungsantrag; `20-` und `2N-` über den Overlay-Prozess des Projekts; `30-`, `40-` über den jeweiligen Modul-Owner.
118
118
  - Eine dort abgelegte Datei wirkt ohne weiteres Zutun. Eine Regel, die nicht wirken soll, gehört nicht in dieses Verzeichnis.
119
119
  - Dateien mit Endung `.template` sind Vorlagen; sie enden nicht auf `.md` und werden deshalb nicht geladen.
@@ -4,72 +4,70 @@
4
4
  |---|---|
5
5
  | Modul-ID | `CP-CU` |
6
6
  | Ebene | keine – Abbildungsschicht |
7
- | Version | 0.3.0 |
7
+ | Version | 0.4.0 |
8
8
  | Status | pilot |
9
9
  | Owner (Rolle) | `<FRAMEWORK_OWNER>` |
10
- | Client | Cursor – Kommandozeile (`cursor-agent`, auch `agent`) und IDE; die Agenten in der Cloud des Anbieters fallen unter D-10 und nicht unter dieses Pack |
11
- | Verbindliche Zielversion | Kommandozeile `2026.09.x`; IDE `3.22.x` (D-112) |
12
- | Geprüfte Clientversion | Kommandozeile `2026.09.26-dd393fe` – vor dem Messen festgeschrieben (D-117). IDE `3.22.7` installiert, **an keiner Sitzung gemessen** (`K-175`). Konto: Free, Modell `auto` |
13
- | Stand der Produktbeobachtung | Quellenliste in Anhang 31.4.5 (`QU-1` bis `QU-8`), abgerufen am 2026-09-26. `FW-AK-01` ist für dieses Pack nicht gefahren |
14
- | Datum der Prüfung | **2026-09-26** – der Bau (`CR-2026-155`, `tests/protocols/2026-09-26-bau-cursor.md`): 24 Läufe an realen Installationen im Betrieb ohne Rückfragen, davon fünf Abnahmeläufe am installierten Pack; Free-Tarif, 0 USD |
10
+ | Client | Cursor – Kommandozeile (`cursor-agent`, auch `agent`) und IDE; die Agenten in der Cloud des Anbieters sind nicht Gegenstand dieses Packs |
11
+ | Verbindliche Zielversion | Kommandozeile `2026.09.x`; IDE `3.22.x` |
12
+ | Geprüfte Clientversion | Kommandozeile `2026.09.26-dd393fe`. IDE `3.22.7` installiert, an keiner Sitzung gemessen. Konto: Free, Modell `auto` |
13
+ | Stand der Produktbeobachtung | Quellenliste in Anhang 31.4.5 (`QU-1` bis `QU-8`), abgerufen am 2026-09-26; die Akzeptanzprüfung `FW-AK-01` ist für dieses Pack nicht gefahren |
14
+ | Datum der Prüfung | 2026-09-26 (`tests/protocols/2026-09-26-bau-cursor.md`): 24 Läufe an realen Installationen im Betrieb ohne Rückfragen, davon fünf Abnahmeläufe am installierten Pack; Free-Tarif, 0 USD |
15
15
 
16
- > **Belegt, soweit gemessen (Stand 1.16.0).** Die Spalte „Einstufung" nennt die **vorgesehene** Durchsetzungstiefe, die Spalte „Beleg" ihren Nachweisstand: `gemessen` = an diesem Client beobachtet, `[DOK]` = aus der Herstellerdokumentation mit Quellenkennung, `[EMPF]` = Vorgabe des Frameworks, `BELEG OFFEN` = noch nicht belegt, mit Grund und Datum.
16
+ > Die Spalte „Einstufung" nennt die vorgesehene Durchsetzungstiefe, die Spalte „Beleg" ihren Nachweisstand: `gemessen` = an diesem Client beobachtet, `[DOK]` = aus der Herstellerdokumentation mit Quellenkennung, `[EMPF]` = Vorgabe des Frameworks, `BELEG OFFEN` = noch nicht belegt, mit Grund und Datum.
17
17
  >
18
- > **Alle sechs Kernzusagen sind `[TECHNISCH]`** – gemessen unter **Windows** an der Kommandozeile. 🔴 **Die Schreibweise der Pfadmuster ist die Bedingung:** Der Client vergleicht ein Muster mit dem **absoluten** Pfad, und die Muster der Herstellerdokumentation (`Read(.env)`, `Read(**/.env)`) ließen den Köder unter Windows durch (Abschnitt 1b).
19
- >
20
- > 🔴 **Drei Befunde stehen in keiner Dokumentation:** Ein weiterer Schlüssel in der Berechtigungsdatei lässt den Client nicht starten; ein durchsetzender Hook muss auch beim Durchlass antworten; die Hook-Eingabe beginnt unter Windows mit einem BOM (Abschnitt 1b, H2, H4).
21
- >
22
- > **Wer das Pack einsetzt,** liest zuerst Abschnitt 1b und Abschnitt 6.
18
+ > Alle sechs Kernzusagen sind `[TECHNISCH]`, gemessen unter Windows an der Kommandozeile – unter vier Bedingungen, die in keiner Herstellerdokumentation stehen (Abschnitt 1b). Wer das Pack einsetzt, liest zuerst Abschnitt 1b und Abschnitt 6.
23
19
 
24
20
  ## 1. Pfadabbildung
25
21
 
26
22
  | Rolle des Artefakts | Pfad bei diesem Client | Belegstatus |
27
23
  |---|---|---|
28
24
  | Wurzel-Anweisungsdatei | `AGENTS.md` | **gemessen** (2026-09-26): steht in jeder Sitzung im Kontext, auch im Betrieb ohne Rückfragen |
29
- | Regeldateien | `.cursor/rules/*.mdc`; Lademodus im Frontmatter (`alwaysApply`, `globs`) | **gemessen:** eine `.mdc`-Datei mit `alwaysApply: true` lädt in jeder Sitzung; 🔴 **eine `.md`-Datei in derselben Ablage lädt nie** |
25
+ | Regeldateien | `.cursor/rules/*.mdc`; Lademodus im Frontmatter (`alwaysApply`, `globs`) | **gemessen:** eine `.mdc`-Datei mit `alwaysApply: true` lädt in jeder Sitzung; eine `.md`-Datei in derselben Ablage lädt nie |
30
26
  | Skills | `.cursor/skills/<name>/SKILL.md` | **gemessen:** ein Skill mit den Frontmatter-Feldern des Frameworks wurde gefunden und gelesen |
31
- | Subagentenprofile | `.cursor/agents/<name>.md` (Frontmatter `name`, `description`, `readonly`) | `[DOK]` **`QU-5`**; die Wirkung ist Gegenstand von A1 |
32
- | Berechtigungskonfiguration | `.cursor/cli.json` – **nur** der Schlüssel `permissions` mit `allow` und `deny` (erzeugt aus `framework/runtime/permissions.json`) | **gemessen:** ein `deny` darin weist ab (*„Blocked by permissions configuration"*), auch mit `--force` |
33
- | Ausschlussdatei | `.cursorignore` – Syntax von `.gitignore`, erzeugt aus den Leseverboten der Kernquelle | **gemessen:** sperrt Lesen **und Suchen**; die Berechtigungsdatei sperrt nur das Lesen (D-443) |
27
+ | Subagentenprofile | `.cursor/agents/<name>.md` (Frontmatter `name`, `description`, `readonly`) | `[DOK]` `QU-5`; die Wirkung ist Gegenstand von A1 |
28
+ | Berechtigungskonfiguration | `.cursor/cli.json` – nur der Schlüssel `permissions` mit `allow` und `deny` (erzeugt aus `framework/runtime/permissions.json`) | **gemessen:** ein `deny` darin weist ab (*„Blocked by permissions configuration"*), auch mit `--force` |
29
+ | Ausschlussdatei | `.cursorignore` – Syntax von `.gitignore`, erzeugt aus den Leseverboten der Kernquelle | **gemessen:** sperrt Lesen und Suchen; die Berechtigungsdatei sperrt nur das Lesen |
34
30
  | Hook-Konfiguration | `.cursor/hooks.json`, Form `{version: 1, hooks: {ereignis: [...]}}` | **gemessen:** lädt auch im Betrieb ohne Rückfragen, in einem vertrauten Arbeitsbereich |
35
- | Planartefakt | **keines im Repositorium** – der Planmodus des Clients legt seinen Plan außerhalb ab | **gemessen:** `createPlan` mit leerer Ablageadresse; Träger des Plans ist die Planvorlage des Kerns (M4) |
36
- | MCP-Konfiguration | `.cursor/mcp.json` | `[DOK]` **`QU-2`**; das Framework liefert keinen Server aus. **Gemessen am 2026-09-28** (Stichprobe zu `1.18.0`, D-462): Ein Server mit `"url"` und `"headers"` lädt, die Kopfzeile `"Basic ${env:VARIABLE}"` wird aus der Umgebung gefüllt – die Datei trägt keinen Zugang. Ein Server der Projektdatei braucht eine Freigabe (`agent mcp list`: *needs approval*); `agent mcp enable` meldet sie, im Druckmodus stand der Server trotzdem nicht bereit – erst mit `--approve-mcps`, das **alle** Server freigibt |
37
- | Projektverzeichnis im Hook-Befehl | **keine Variable – das Arbeitsverzeichnis** | **gemessen:** der Hook-Prozess steht in der Projektwurzel. `CURSOR_PROJECT_DIR` steht in der Umgebung, aber unter Windows läuft das Kommando durch eine PowerShell-Hülle |
38
- | Nutzerlokale Überschreibung | **kein Mechanismus** | Der Hersteller dokumentiert keine nutzerlokale Wurzel-Anweisung; das Pack liefert keine Beispieldatei aus |
31
+ | Planartefakt | keines im Repositorium – der Planmodus des Clients legt seinen Plan außerhalb ab | **gemessen:** `createPlan` mit leerer Ablageadresse; Träger des Plans ist die Planvorlage des Kerns (M4) |
32
+ | MCP-Konfiguration | `.cursor/mcp.json` | `[DOK]` `QU-2`; das Framework liefert keinen Server aus. **Gemessen am 2026-09-28:** Ein Server mit `"url"` und `"headers"` lädt, die Kopfzeile `"Basic ${env:VARIABLE}"` wird aus der Umgebung gefüllt – die Datei trägt keinen Zugang. Ein Server der Projektdatei braucht eine Freigabe (`agent mcp list`: *needs approval*); im Druckmodus stand er erst mit `--approve-mcps` bereit, das alle Server freigibt |
33
+ | Projektverzeichnis im Hook-Befehl | keine Variable – das Arbeitsverzeichnis | **gemessen:** der Hook-Prozess steht in der Projektwurzel. `CURSOR_PROJECT_DIR` steht in der Umgebung, aber unter Windows läuft das Kommando durch eine PowerShell-Hülle |
34
+ | Nutzerlokale Überschreibung | kein Mechanismus | Der Hersteller dokumentiert keine nutzerlokale Wurzel-Anweisung; das Pack liefert keine Beispieldatei aus |
39
35
 
40
36
  ## 1a. Semantikabbildung der Berechtigungen
41
37
 
42
- Die Regelmenge liegt werkzeugneutral im Kern und wird bei der Installation übersetzt (D-18). Dieser Client kennt Regeln der Gestalt `Typ(Muster)` wie die erste Ausgabeform – **aber nur `allow` und `deny`**, und die Datei darf **keinen weiteren Schlüssel** tragen. Die Abbildung ist deshalb eine eigene Ausgabeform (`cursor-json`, D-440).
38
+ Die Regelmenge liegt werkzeugneutral im Kern und wird bei der Installation übersetzt. Dieser Client kennt Regeln der Gestalt `Typ(Muster)`, aber nur `allow` und `deny`, und die Datei darf keinen weiteren Schlüssel tragen. Die Abbildung ist deshalb eine eigene Ausgabeform (`cursor-json`).
43
39
 
44
40
  | Neutrales Werkzeugverb | Regeltyp bei diesem Client | Anmerkung |
45
41
  |---|---|---|
46
- | `read` | `Read(…)` | Jedes Muster in **zwei Schreibweisen** mit führendem `*`: `Read(*/.env)` und `Read(*\.env)` (Abschnitt 1b) |
47
- | `search` | – | Kein Regeltyp. 🔴 **Das Suchwerkzeug wertet ein `Read`-Verbot nicht aus** – gemessen. Die Lesesperre für die Suche trägt `.cursorignore` (D-443) |
48
- | `write` | `Write(…)` | Zwei Schreibweisen wie `read`. Deckt das Löschwerkzeug mit – gemessen |
49
- | `exec` | `Shell(…)` ohne Stern | Das Muster trifft den Befehl und jeden, der mit ihm und einem Leerzeichen beginnt (Programmcode); verkettete Befehle zerlegt der Client – gemessen |
42
+ | `read` | `Read(…)` | Jedes Muster in zwei Schreibweisen mit führendem `*`: `Read(*/.env)` und `Read(*\.env)` (Abschnitt 1b) |
43
+ | `search` | – | Kein Regeltyp. Das Suchwerkzeug wertet ein `Read`-Verbot nicht aus (gemessen); die Lesesperre für die Suche trägt `.cursorignore` |
44
+ | `write` | `Write(…)` | Zwei Schreibweisen wie `read`. Deckt das Löschwerkzeug mit (gemessen) |
45
+ | `exec` | `Shell(…)` ohne Stern | Das Muster trifft den Befehl und jeden, der mit ihm und einem Leerzeichen beginnt (Programmcode); verkettete Befehle zerlegt der Client (gemessen) |
50
46
  | `fetch` | `WebFetch(*)` | Das Argument ist eine Domain |
51
47
  | `mcp` | – (nur Rückfrage) | Ein MCP-Werkzeug braucht die Freigabe seines Servers (`QU-2`) |
52
48
  | `skill` | – | Ein Skill ist bei diesem Client eine Datei, kein Werkzeug mit Berechtigung |
53
49
 
54
50
  | Weitere Eigenschaft | Wert |
55
51
  |---|---|
56
- | Rückfragekorb | **keiner** – die Rückfrageregeln der Kernquelle erklärt das Manifest (`permission_ask_ohne_korb`) statt sie zu erzeugen |
57
- | Ebenen | Die Projektdatei wird in die globale Konfiguration gemischt; **Listen ersetzen** dabei die globalen (Programmcode) |
52
+ | Rückfragekorb | keiner – die Rückfrageregeln der Kernquelle erklärt das Manifest (`permission_ask_ohne_korb`), statt sie zu erzeugen |
53
+ | Ebenen | Die Projektdatei wird in die globale Konfiguration gemischt; Listen ersetzen dabei die globalen (Programmcode) |
58
54
  | Hook-Werkzeugnamen | `Read`, `Grep`, `Shell`, `Write`, `Delete`; das Dateinamenwerkzeug `Glob` löst keinen Hook aus |
59
55
  | Pfadfelder der Hook-Eingabe | `file_path` (absolut); `Shell` führt `command` |
60
- | Sperrform des Schutz-Hooks | `permission-json`: `{"permission": "deny"}` und Exit 2, beim Durchlass `{}` (D-441) |
56
+ | Sperrform des Schutz-Hooks | `permission-json`: `{"permission": "deny"}` und Exit 2, beim Durchlass `{}` |
61
57
 
62
58
  ## 1b. Die vier Bedingungen, unter denen das Pack trägt
63
59
 
64
- **1. Pfadmuster treffen nur mit führendem `*`.** Der Client vergleicht ein Muster **verankert mit dem absoluten Pfad**, und `*` steht dabei für eine beliebige Zeichenfolge über Trenner hinweg (Programmcode). Gemessen unter Windows: `Read(.env)` und `Read(**/.env)` ließen den Köder durch, `Read(*\.env)` und `Read(*.p12)` sperrten. Die Abbildung erzeugt deshalb jedes Pfadmuster zweimal, mit `/` für macOS und Linux und mit `\` für Windows. **Die Schreibweise mit `/` ist nicht gemessen** – sie folgt aus dem Programmcode (`K-176`). ⚠️ Der Preis: Das Muster ist **breiter** als das der Kernquelle – `Write(*/AGENTS.md)` sperrt auch ein `AGENTS.md` in einem Unterordner, und `Read(*/*secret*)` sperrt jede Datei, in deren Pfad `secret` vorkommt, **auch oberhalb des Projekts**. Bei einem Verbot ist das eine Verschärfung; ein Projekt unter einem solchen Pfad kann nichts mehr lesen und merkt es sofort.
60
+ **1. Pfadmuster treffen nur mit führendem `*`.** Der Client vergleicht ein Muster verankert mit dem absoluten Pfad; `*` steht dabei für eine beliebige Zeichenfolge über Trenner hinweg (Programmcode). Unter Windows ließen `Read(.env)` und `Read(**/.env)` den Köder durch, `Read(*\.env)` und `Read(*.p12)` sperrten. Die Abbildung erzeugt deshalb jedes Pfadmuster zweimal: mit `/` für macOS und Linux (aus dem Programmcode, nicht gemessen) und mit `\` für Windows.
61
+
62
+ Das Muster ist dadurch breiter als das der Kernquelle: `Write(*/AGENTS.md)` sperrt auch ein `AGENTS.md` in einem Unterordner, und `Read(*/*secret*)` sperrt jede Datei, in deren Pfad `secret` vorkommt, auch oberhalb des Projekts. Bei einem Verbot ist das eine Verschärfung; ein Projekt unter einem solchen Pfad kann nichts lesen und merkt es sofort.
65
63
 
66
- **2. Die Berechtigungsdatei trägt nur `permissions`.** Gemessen: Mit `_comment` und `_core_rules_integrity` brach der Client mit Exit 1 ab (*„Unrecognized key(s) in object"*), ebenso bei kaputtem JSON. Das ist **fail-closed** – der Client startet nicht, statt ohne Regeln zu laufen. **Prüfung 97** hält die Datei gegen die Kernquelle, weil sie ihre Kernregeln nicht selbst auflisten kann.
64
+ **2. Die Berechtigungsdatei trägt nur `permissions`.** Mit einem weiteren Schlüssel (etwa `_comment`) oder kaputtem JSON bricht der Client mit Exit 1 ab (*„Unrecognized key(s) in object"*) – er startet nicht, statt ohne Regeln zu laufen. Weil die Datei ihre Kernregeln nicht selbst auflisten kann, hält Prüfung 97 sie gegen die Kernquelle.
67
65
 
68
- **3. Die Hooks brauchen einen vertrauten Arbeitsbereich und unter Windows den richtigen Start.** Sie laufen in jeder Sitzung, **auch ohne Rückfragen** – anders als bei `kiro`. Unter Windows reicht der Client die Eingabe durch eine PowerShell-Hülle weiter. 🔴 **Mit gesetzter Variable `SHELL`** (Start aus Git Bash) führt er diese Hülle in `bash` aus; sie scheitert, und ein Hook mit `failClosed` sperrt dann **jede** Operation – gemessen. Aus PowerShell oder `cmd` gestartet, laufen die Hooks.
66
+ **3. Die Hooks brauchen einen vertrauten Arbeitsbereich und unter Windows den richtigen Start.** Sie laufen in jeder Sitzung, auch ohne Rückfragen. Unter Windows reicht der Client die Eingabe durch eine PowerShell-Hülle weiter. Ist die Variable `SHELL` gesetzt (Start aus Git Bash), führt er diese Hülle in `bash` aus; sie scheitert, und ein Hook mit `failClosed` sperrt dann **jede** Operation. Aus PowerShell oder `cmd` gestartet, laufen die Hooks.
69
67
 
70
- **4. Fremde Konfigurationen laden mit.** Der Client lädt standardmäßig Hooks von Claude Code aus `.claude/settings.json` **und `~/.claude/settings.json`**, Skills aus `.claude/skills/`, `.codex/skills/` und `~/.claude/skills/` und die Datei `CLAUDE.md` der Projektwurzel – gemessen. Der Schalter ist eine Einstellung der IDE (*Third-Party Imports*), nicht des Projekts. `install.py` meldet, was davon auf dem Arbeitsplatz belegt ist (R6).
68
+ **4. Fremde Konfigurationen laden mit.** Der Client lädt standardmäßig Hooks von Claude Code aus `.claude/settings.json` und `~/.claude/settings.json`, Skills aus `.claude/skills/`, `.codex/skills/` und `~/.claude/skills/` und die Datei `CLAUDE.md` der Projektwurzel (gemessen). Der Schalter ist eine Einstellung der IDE (*Third-Party Imports*), nicht des Projekts. `install.py` meldet, was davon auf dem Arbeitsplatz belegt ist (R6).
71
69
 
72
- **Die IDE** liest `.cursor/cli.json` nach der Herstellerdokumentation nicht – sie ist als Konfiguration der Kommandozeile beschrieben (`QU-2`). Hooks, Regeln, Skills und `.cursorignore` gelten laut Dokumentation für beide. **An einer IDE-Sitzung ist nichts davon gemessen** (`K-175`).
70
+ **Die IDE** liest `.cursor/cli.json` laut Herstellerdokumentation nicht – die Datei ist als Konfiguration der Kommandozeile beschrieben (`QU-2`). Hooks, Regeln, Skills und `.cursorignore` gelten laut Dokumentation für beide. An einer IDE-Sitzung ist nichts davon gemessen.
73
71
 
74
72
  ## 2. Fähigkeitsmatrix
75
73
 
@@ -82,9 +80,9 @@ Einstufung je Zusage: `[TECHNISCH]` erzwungen · `[TEXTUELL]` nur Anweisung · `
82
80
  | R1 | Wurzel-Anweisungsdatei wird ungefragt geladen | `AGENTS.md` steht in jeder Sitzung im Kontext | `[TECHNISCH]` | **gemessen** (2026-09-26): Kennwort aus `AGENTS.md` ohne Werkzeugaufruf genannt; im installierten Pack mit Pfad aufgezählt |
83
81
  | R2 | Regeldateien mit Ladebedingungen | `.cursor/rules/*.mdc`, Frontmatter `alwaysApply` und `globs` | `[TECHNISCH]` | **gemessen:** `alwaysApply: true` lädt immer; die vier Regeln des Frameworks standen im installierten Pack im Kontext. 🔴 **Eine `.md`-Datei in der Ablage lädt nie** – die Regeln heißen deshalb `.mdc` (`QU-1`). `model_decision` bildet auf unbedingtes Laden ab – eine Verschärfung |
84
82
  | R3 | Regeln an Dateimuster bindbar | `alwaysApply: false` mit `globs` als Liste | `[TECHNISCH]` | **gemessen mit Gegenprobe:** Eine Regel mit `**/*.xyz` stand nach dem Lesen von `probe.xyz` im Kontext, mit `**/*.abc` nicht |
85
- | R4 | Bekanntes Zeichenlimit | **Vorgabe des Frameworks** – höchstens 40.000 Zeichen für das stets Geladene (D-387) | `[TEXTUELL]` | `[EMPF]`. Der Hersteller empfiehlt Regeln unter 500 Zeilen (`QU-1`); ein Limit ist nicht dokumentiert. Gemessen ist die Last: 13.612 Eingabetoken einer Sitzung mit installiertem Pack gegenüber 10.190 im Minimalbaum |
83
+ | R4 | Bekanntes Zeichenlimit | Vorgabe des Frameworks – höchstens 40.000 Zeichen für das stets Geladene | `[TEXTUELL]` | `[EMPF]`. Der Hersteller empfiehlt Regeln unter 500 Zeilen (`QU-1`); ein Limit ist nicht dokumentiert. Gemessen ist die Last: 13.612 Eingabetoken einer Sitzung mit installiertem Pack gegenüber 10.190 im Minimalbaum |
86
84
  | R5 | Die geladenen Regelquellen sind vollständig aufzählbar | Keine Aufzählung des Clients in der Ausgabe; die Sitzung nennt ihre Quellen auf Nachfrage | `[TEXTUELL]` | **gemessen ist nur die Selbstauskunft** der Sitzung (Pfade aller fünf Träger). Eine Auskunft des Modells, keine des Clients |
87
- | R6 | Keine Importe fremder Werkzeugformate | **Kein Schalter im Projekt.** Der Import von Claude Code (Hooks, Skills, `CLAUDE.md`) ist eine Einstellung der IDE mit Standard „an" | `[NICHT ABBILDBAR]` | **gemessen:** `CLAUDE.md` lud in jeder Sitzung; die Hooks aus `~/.claude/settings.json` liefen an der Kommandozeile mit. **Ersatz, geliefert:** die Meldung von `install.py` über belegte Quellen, einschließlich der nur global abschaltbaren Commit-Attribution, und der Nachschritt zur Einstellung der IDE (Abschnitt 7) |
85
+ | R6 | Keine Importe fremder Werkzeugformate | Kein Schalter im Projekt. Der Import von Claude Code (Hooks, Skills, `CLAUDE.md`) ist eine Einstellung der IDE mit Standard „an" | `[NICHT ABBILDBAR]` | **gemessen:** `CLAUDE.md` lud in jeder Sitzung; die Hooks aus `~/.claude/settings.json` liefen an der Kommandozeile mit. **Ersatz, geliefert:** die Meldung von `install.py` über belegte Quellen, einschließlich der nur global abschaltbaren Commit-Attribution, und der Nachschritt zur Einstellung der IDE (Abschnitt 7) |
88
86
 
89
87
  ### S – Skills
90
88
 
@@ -92,13 +90,13 @@ Einstufung je Zusage: `[TECHNISCH]` erzwungen · `[TEXTUELL]` nur Anweisung · `
92
90
  |---|---|---|---|---|
93
91
  | S1 | Versionierte Skills im Repository | `.cursor/skills/<name>/SKILL.md` | `[TECHNISCH]` | **gemessen:** ein Skill der Ablage wurde gefunden und gelesen, auch mit den Frontmatter-Feldern des Frameworks |
94
92
  | S2 | Gezielter Aufruf | `/<name>` in der Sitzung | `[TECHNISCH]` | `[DOK]` **`QU-4`**; gemessen ist nur der Aufruf beim Namen im Auftrag – die Sitzung las den Skill |
95
- | S3 | Werkzeugbeschränkung je Skill | **Kein Feld.** `allowed-tools`, `permissions` und `triggers` werden angenommen und nicht ausgewertet | `[TEXTUELL]` | **gemessen:** Ein Skill mit `permissions: deny: [edit]` war geladen, und das Schreiben blieb im selben Lauf erlaubt. Was trägt, ist die globale Schicht |
93
+ | S3 | Werkzeugbeschränkung je Skill | Kein Feld. `allowed-tools`, `permissions` und `triggers` werden angenommen und nicht ausgewertet | `[TEXTUELL]` | **gemessen:** Ein Skill mit `permissions: deny: [edit]` war geladen, und das Schreiben blieb im selben Lauf erlaubt. Was trägt, ist die globale Schicht |
96
94
  | S4 | Schreibende Skills nur benutzergetriggert | `disable-model-invocation: true`, übersetzt aus `triggers` | `[TECHNISCH]` | `[DOK]` **`QU-4`**; `BELEG OFFEN` (2026-09-26): die Wirkung des Feldes ist nicht gemessen |
97
95
  | S5 | Die geladenen Skills sind aufzählbar | Selbstauskunft der Sitzung | `[TEXTUELL]` | `BELEG OFFEN` (2026-09-26): Die Ausgabe ohne Rückfragen führt keine Liste der Skills |
98
96
 
99
97
  ### B – Berechtigungen
100
98
 
101
- > **`[TECHNISCH]` heißt in diesem Block:** Der Client setzt die Regel durch, **auch im Betrieb, der Rückfragen überspringt** – gemessen: Jedes `deny` hielt mit `--force`. Für dieses Pack kommen **zwei gemessene Bedingungen** hinzu: **die Schreibweise der Pfadmuster** (Abschnitt 1b, Punkt 1) und **eine Datei, mit der der Client startet** (Punkt 2). Die Berechtigungsdatei ist eine Konfiguration der **Kommandozeile**; für die IDE ist sie nicht dokumentiert (`K-175`). **Die zweite Linie ist der Schutz-Hook, die dritte für Lesen und Suchen `.cursorignore`.**
99
+ > `[TECHNISCH]` heißt in diesem Block: Der Client setzt die Regel durch, auch im Betrieb, der Rückfragen überspringt – jedes `deny` hielt mit `--force`. Dazu kommen zwei Bedingungen aus Abschnitt 1b: die Schreibweise der Pfadmuster (Punkt 1) und eine Datei, mit der der Client startet (Punkt 2). Die Berechtigungsdatei ist eine Konfiguration der Kommandozeile; für die IDE ist sie nicht dokumentiert. Die zweite Linie ist der Schutz-Hook, die dritte für Lesen und Suchen `.cursorignore`.
102
100
 
103
101
  Die mit **Kern** markierten Zeilen entsprechen den Kernzusagen der Kernquelle; Prüfung 97 hält die Datei gegen sie, weil die Datei sie nicht selbst auflisten darf.
104
102
 
@@ -106,11 +104,11 @@ Die mit **Kern** markierten Zeilen entsprechen den Kernzusagen der Kernquelle; P
106
104
  |---|---|---|---|---|---|
107
105
  | B1 | Berechtigungen versioniert im Repository | ja | `.cursor/cli.json` und `.cursorignore` im Projekt | `[TECHNISCH]` | **gemessen:** beide Träger liegen im Projekt und wirken ohne Schalter. Mit einem fremden Schlüssel oder kaputtem JSON startet der Client nicht (fail-closed) |
108
106
  | B2 | Verweigern vor Rückfragen vor Erlauben | ja | `deny` vor `allow`; was kein `allow` deckt, fragt bei Befehlen zurück | `[TECHNISCH]` | **gemessen:** `deny` auf `.env` schlägt `allow` auf `Read(**)`. Einen Rückfragekorb gibt es nicht (B7) |
109
- | B3 | Secret-Dateien per Pfadmuster lesegeschützt | ja | `deny Read` in zwei Schreibweisen **und** `.cursorignore` | `[TECHNISCH]` | **gemessen an einer realen Installation:** `.env` und `secrets/pw.txt` abgewiesen, `probe.txt` gelesen – mit der Berechtigungsdatei allein, ohne Hook. 🔴 **Das Suchwerkzeug beachtet das `Read`-Verbot nicht** (Köder aus `secrets/` gefunden); mit `.cursorignore` war die Suche ausgefiltert, und der Schutz-Hook sperrte sie ebenfalls. Groß- und Kleinschreibung unterscheidet das Muster, der Hook nicht |
110
- | B4 | Framework- und Overlay-Artefakte schreibgeschützt | ja | `deny Write` auf `AGENTS.md`, `.cursor/**`, `.koolie/core/**`; `.cursorignore` schützt der Client selbst. **Das Overlay sperrt seit `1.17.0` allein der Schutz-Hook** (D-448); die Berechtigungsdatei führt es nicht mehr – nachgezählt an einer Installation am 2026-09-29 (D-468) | `[TECHNISCH]` | **gemessen:** Schreiben auf `AGENTS.md`, in `.koolie/core/` und `.cursor/rules/` abgewiesen, Löschen von `OVERLAY.md` abgewiesen (mit `1.16.0`, noch mit der statischen Sperre – über den Hook allein nicht nachgemessen), `neu.txt` angelegt. ⚠️ **Grenze, nicht gemessen:** ein freigegebener lesender `git`-Befehl mit schreibender Option (`git diff --output=<pfad>`) |
107
+ | B3 | Secret-Dateien per Pfadmuster lesegeschützt | ja | `deny Read` in zwei Schreibweisen und `.cursorignore` | `[TECHNISCH]` | **gemessen an einer realen Installation:** `.env` und `secrets/pw.txt` abgewiesen, `probe.txt` gelesen – mit der Berechtigungsdatei allein, ohne Hook. 🔴 **Das Suchwerkzeug beachtet das `Read`-Verbot nicht** (Köder aus `secrets/` gefunden); mit `.cursorignore` war die Suche ausgefiltert, und der Schutz-Hook sperrte sie ebenfalls. Groß- und Kleinschreibung unterscheidet das Muster, der Hook nicht |
108
+ | B4 | Framework- und Overlay-Artefakte schreibgeschützt | ja | `deny Write` auf `AGENTS.md`, `.cursor/**`, `.koolie/core/**`; `.cursorignore` schützt der Client selbst. Das Overlay sperrt allein der Schutz-Hook; die Berechtigungsdatei führt es nicht | `[TECHNISCH]` | **gemessen:** Schreiben auf `AGENTS.md`, in `.koolie/core/` und `.cursor/rules/` abgewiesen, Löschen von `OVERLAY.md` abgewiesen (mit `1.16.0`, noch mit der statischen Sperre – über den Hook allein nicht nachgemessen), `neu.txt` angelegt. ⚠️ **Grenze, nicht gemessen:** ein freigegebener lesender `git`-Befehl mit schreibender Option (`git diff --output=<pfad>`) |
111
109
  | B5 | CI-, Quality-Gate- und Lockdateien schreibgeschützt | ja | `deny Write` mit den Lockmustern und den Schlitzen `<CI_CONFIG_PATHS>`, `<QUALITY_GATE_CONFIG_PATHS>` | `[TECHNISCH]` | **gemessen am Mechanismus** (Pfadmuster im `deny`, B4); die Schlitze füllt der Overlay Owner in beiden Schreibweisen, die Lockmuster sind nicht einzeln angefahren |
112
110
  | B6 | Befehle per Muster verweigerbar | ja | `deny Shell(git push)` und die übrigen Befehlsverbote | `[TECHNISCH]` | **gemessen:** `git push origin main` abgewiesen, auch in `git status && git push origin main`; `rm probe.txt` abgewiesen. ⚠️ **Grenze wie bei allen Packs:** `git -C . push origin main` trifft das Muster nicht – es fiel in die **Rückfrage** und wurde ohne Rückfragekanal abgewiesen |
113
- | B7 | Schreiboperationen fragen zurück | – | **Kein Rückfragekorb; Dateien im Arbeitsbereich schreibt der Client ohne Rückfrage** | `[NICHT ABBILDBAR]` | **gemessen:** `neu2.txt` angelegt, auch **ohne** `--force`; der Hersteller sagt es selbst (`QU-8`). **Ersatz:** die Schreibverbote (B4, B5), der Schutz-Hook und die Sichtprüfung im Merge Request – eine Rückfrage vor jedem Schreiben gibt es bei diesem Client nicht |
111
+ | B7 | Schreiboperationen fragen zurück | – | Kein Rückfragekorb; Dateien im Arbeitsbereich schreibt der Client ohne Rückfrage | `[NICHT ABBILDBAR]` | **gemessen:** `neu2.txt` angelegt, auch **ohne** `--force`; der Hersteller sagt es selbst (`QU-8`). **Ersatz:** die Schreibverbote (B4, B5), der Schutz-Hook und die Sichtprüfung im Merge Request – eine Rückfrage vor jedem Schreiben gibt es bei diesem Client nicht |
114
112
  | B8 | Netzwerkzugriff standardmäßig unterbunden | – | `deny WebFetch(*)` und `deny Shell` auf `curl`, `wget`, `ssh`, `scp` | `[TECHNISCH]` für das Web-Werkzeug und diese vier Programme; `[TEXTUELL]` darüber hinaus | **gemessen:** `curl` abgewiesen; der Webabruf abgewiesen – ob durch das Verbot oder die Rückfrage, sagt die Meldung nicht. ⚠️ Jedes andere netzfähige Programm fragt zurück, ist aber nicht verboten |
115
113
  | B9 | Nutzerlokale Konfiguration kann nur verschärfen | – | Die Projektdatei ersetzt die Listen der globalen Konfiguration; ein `deny` gilt in jedem Betriebsmodus | `[TECHNISCH]` | **gemessen:** das `deny` des Projekts hielt mit `--force`; die Ersetzung der Listen ist aus dem Programmcode. ⚠️ **Ein `deny` des Arbeitsplatzes gilt in diesem Projekt nicht mehr**, und die globale Einstellung `approvalMode: unrestricted` überspringt die Rückfragen (M2) |
116
114
  | B10 | Externer Abruf auf freigegebene Domains beschränkbar | – | `WebFetch(<domain>)` | `[TECHNISCH]` | `[DOK]` **`QU-2`**. Das Framework nutzt die strengste Form – alles verboten (B8, D-59) |
@@ -119,16 +117,16 @@ Die mit **Kern** markierten Zeilen entsprechen den Kernzusagen der Kernquelle; P
119
117
 
120
118
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
121
119
  |---|---|---|---|---|
122
- | H1 | Prüfung vor Werkzeugausführung | `preToolUse` in `.cursor/hooks.json`, Matcher als regulärer Ausdruck über die Werkzeugnamen, seit `1.20.0` mit `MCP:.*`. Bei einem MCP-Werkzeug prüft der Hook den Inhalt gegen die Secret-Muster und die Pfadfelder gegen die Secret-Pfade (D-486); jede Entscheidung steht in `.git/koolie-hook.jsonl`, ohne Inhalt und Pfad (D-487) | `[TECHNISCH]` | **gemessen:** Der Hook läuft bei jedem Lese-, Such-, Schreib-, Lösch- und Shell-Aufruf, **auch ohne Rückfragen**. Bedingungen: ein vertrauter Arbeitsbereich und unter Windows ein Start ohne `SHELL` (Abschnitt 1b). **MCP gemessen am 2026-09-29** (2026.09.28, `tests/protocols/2026-09-29-schutzschicht.md`): Ein MCP-Aufruf löst `preToolUse` aus, `tool_name` ist `MCP:<werkzeug>`; ohne den Matcher erreichte ein Köderwert den Server, mit ihm sperrte der Hook, und eine harmlose Notiz kam an. Daneben feuert `beforeMCPExecution`, das der Hook nicht braucht |
120
+ | H1 | Prüfung vor Werkzeugausführung | `preToolUse` in `.cursor/hooks.json`, Matcher als regulärer Ausdruck über die Werkzeugnamen, mit `MCP:.*`. Bei einem MCP-Werkzeug prüft der Hook den Inhalt gegen die Secret-Muster und die Pfadfelder gegen die Secret-Pfade; jede Entscheidung steht in `.git/koolie-hook.jsonl`, ohne Inhalt und Pfad | `[TECHNISCH]` | **gemessen:** Der Hook läuft bei jedem Lese-, Such-, Schreib-, Lösch- und Shell-Aufruf, **auch ohne Rückfragen**. Bedingungen: ein vertrauter Arbeitsbereich und unter Windows ein Start ohne `SHELL` (Abschnitt 1b). **MCP gemessen am 2026-09-29** (2026.09.28, `tests/protocols/2026-09-29-schutzschicht.md`): Ein MCP-Aufruf löst `preToolUse` aus, `tool_name` ist `MCP:<werkzeug>`; ohne den Matcher erreichte ein Köderwert den Server, mit ihm sperrte der Hook, und eine harmlose Notiz kam an. Daneben feuert `beforeMCPExecution`, das der Hook nicht braucht |
123
121
  | H2 | Prüfung kann **blockieren** | `{"permission": "deny"}` und Exit 2; beim Durchlass `{}`; `failClosed: true` | `[TECHNISCH]` | 🔴 **Gemessen, und der schwerste Befund des Hooks** (D-441): Exit 2 sperrt – aber ohne `failClosed` lässt ein Hook, der scheitert, die Operation **durch**, und mit `failClosed` wertet der Client einen Hook **ohne Ausgabe** als gescheitert: Er sperrte jede Operation, auch das Lesen von `probe.txt`. Mit der Form `permission-json` gesperrt: `.env` über Lese-, Such- und Shell-Werkzeug, `AGENTS.md`, `.koolie/core/`, `.cursor/rules/`, `OVERLAY.md`; durchgelassen: `probe.txt`. **Prüfung 86** misst beide Hälften |
124
122
  | H3 | Statusmeldung beim Sitzungsstart | `sessionStart` mit `hook-overlay-status.py` | `[TECHNISCH]` | **gemessen:** Framework-Version und Overlay-Status standen wörtlich im Kontext, und die Sitzung arbeitete danach im Modus M1. Die Ausgabe in der Form von Claude Code (`hookSpecificOutput`) übersetzt der Client |
125
- | H4 | Eingabeschema und Pfadidentität des Schutz-Hooks | Ereignisprüfung, Pfadfeld `file_path`, BOM-feste Eingabe, alle Muster ohne Rücksicht auf Groß-/Kleinschreibung; `hook_fail_closed` steht auf `true`. **Grenze:** Ein Hook prüft **vor** dem Zugriff (D-397) | `[TECHNISCH]` für die Musterprüfung, **mit der Zeitlücke** | **gemessen:** das Schema von `preToolUse` für fünf Werkzeuge. 🔴 **Die Eingabe beginnt unter Windows mit einem UTF-8-BOM** – der Hook scheiterte daran, bis er sie als UTF-8 mit BOM las (D-441). ⚠️ Das Dateinamenwerkzeug `Glob` löst keinen Hook aus; es liefert Namen, keine Inhalte |
123
+ | H4 | Eingabeschema und Pfadidentität des Schutz-Hooks | Ereignisprüfung, Pfadfeld `file_path`, BOM-feste Eingabe, alle Muster ohne Rücksicht auf Groß-/Kleinschreibung; `hook_fail_closed` steht auf `true`. Grenze: Ein Hook prüft vor dem Zugriff | `[TECHNISCH]` für die Musterprüfung, **mit der Zeitlücke** | **gemessen:** das Schema von `preToolUse` für fünf Werkzeuge. 🔴 **Die Eingabe beginnt unter Windows mit einem UTF-8-BOM** – der Hook scheiterte daran, bis er sie als UTF-8 mit BOM las (D-441). ⚠️ Das Dateinamenwerkzeug `Glob` löst keinen Hook aus; es liefert Namen, keine Inhalte |
126
124
 
127
125
  ### A – Agentenprofile
128
126
 
129
127
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
130
128
  |---|---|---|---|---|
131
- | A1 | Rein lesendes Reviewprofil | `.cursor/agents/fw-reviewer.md` mit `readonly: true` | `[TECHNISCH]` | `[DOK]` **`QU-5`** (*„no file edits, no state-changing shell commands"*); `BELEG OFFEN` (2026-09-26): Der Start eines Subagenten ist nicht gemessen |
129
+ | A1 | Rein lesendes Reviewprofil | `.cursor/agents/koolie-reviewer.md` mit `readonly: true` | `[TECHNISCH]` | `[DOK]` **`QU-5`** (*„no file edits, no state-changing shell commands"*); `BELEG OFFEN` (2026-09-26): Der Start eines Subagenten ist nicht gemessen |
132
130
  | A2 | Rein lesendes Analyseprofil für Modus M1 | Modus `ask` (`--mode ask`, *„read-only"*) | `[TEXTUELL]` | `[DOK]` **`QU-6`**; `BELEG OFFEN` (2026-09-26) für seine Wirkung |
133
131
 
134
132
  ### M – Modi und Sitzungsfreigaben
@@ -138,7 +136,7 @@ Die mit **Kern** markierten Zeilen entsprechen den Kernzusagen der Kernquelle; P
138
136
  | M1 | Standardmodus fragt bei Schreiben und Befehlen zurück | Befehle außerhalb von `allow` fragen zurück; **Schreiben im Arbeitsbereich nicht** | `[NICHT ABBILDBAR]` für das Schreiben, `[TECHNISCH]` für Befehle | **gemessen:** ohne Rückfragekanal wurden `python --version` und `git log` abgewiesen, `neu2.txt` angelegt. **Ersatz:** wie B7 |
139
137
  | M2 | Modus ohne Rückfragen ausschließbar | **Kein Ausschluss.** `--force` (`--yolo`) und die globale Einstellung `approvalMode: unrestricted` überspringen Rückfragen; ein `deny` gilt weiter | `[TEXTUELL]` | **gemessen:** jedes `deny` hielt mit `--force`. Das ist mehr als bei den meisten Packs, aber keine Sperre des Modus |
140
138
  | M3 | Freigabe auf die Sitzung begrenzbar | Die Freigabe einer Rückfrage kann in die Freigabeliste übernommen werden | `[TEXTUELL]` | `BELEG OFFEN` (2026-09-26): Eine Rückfrage an einen Menschen ist ohne Rückfragekanal nicht messbar. ⚠️ Nach dem Programmcode schreibt die Übernahme in die Konfiguration – über die Sitzung hinaus |
141
- | M4 | Eigener Planungsmodus für Modus M2 | Modus `plan` (`--plan`); der Plan geht an ein eigenes Werkzeug und liegt **nicht im Repositorium** | `[TEXTUELL]` | **gemessen:** Die Sitzung las, schrieb nichts und legte einen Plan mit leerer Ablageadresse an. Der Träger des Plans ist deshalb die Planvorlage des Kerns (`fw-plan`); anders als bei `kiro` liefert das Pack keine Regel für ein clienteigenes Planartefakt |
139
+ | M4 | Eigener Planungsmodus für Modus M2 | Modus `plan` (`--plan`); der Plan geht an ein eigenes Werkzeug und liegt nicht im Repositorium | `[TEXTUELL]` | **gemessen:** Die Sitzung las, schrieb nichts und legte einen Plan mit leerer Ablageadresse an. Der Träger des Plans ist deshalb die Planvorlage des Kerns (`koolie-plan`); anders als bei `kiro` liefert das Pack keine Regel für ein clienteigenes Planartefakt |
142
140
  | M6 | Modus mit selbsttätiger Übernahme von Dateiänderungen begrenzbar | Änderungen im Arbeitsbereich übernimmt der Client **immer** selbsttätig | `[NICHT ABBILDBAR]` | **gemessen** (B7) und `[DOK]` **`QU-8`** (*„Changes save immediately to disk"*). **Ersatz:** wie B7 |
143
141
  | M7 | Modus, der selbst beurteilt, was sicher ist, begrenzbar | `--auto-review` und `approvalMode: auto-review` (ein Klassifikator des Anbieters) | `[TEXTUELL]` | `[DOK]` **`QU-2`**; `BELEG OFFEN` (2026-09-26) für seine Begrenzbarkeit. Der Hersteller nennt die Modi *„best-effort guardrails rather than a hard security boundary"* (`QU-8`) |
144
142
 
@@ -151,7 +149,7 @@ Die mit **Kern** markierten Zeilen entsprechen den Kernzusagen der Kernquelle; P
151
149
 
152
150
  ## 3. Zusammenfassung der Durchsetzungstiefe
153
151
 
154
- > **Zählregel (normativ für diese Tabelle):** Eine Zeile zählt bei ihrer **schwächsten** Einstufung (D-47). Prüfung 31 rechnet die Summen aus der Matrix nach.
152
+ > **Zählregel (normativ für diese Tabelle):** Eine Zeile zählt bei ihrer schwächsten Einstufung. Prüfung 31 rechnet die Summen aus der Matrix nach.
155
153
 
156
154
  | Klasse | Anzahl | davon Kernzusagen |
157
155
  |---|---|---|
@@ -159,21 +157,21 @@ Die mit **Kern** markierten Zeilen entsprechen den Kernzusagen der Kernquelle; P
159
157
  | `[TEXTUELL]` | **10 von 35** | 0 von 6 |
160
158
  | `[NICHT ABBILDBAR]` | **5 von 35** | 0 von 6 |
161
159
 
162
- **Belegstand:** `BELEG OFFEN` sagen **S4**, **S5**, **A1**, **A2**, **M3**, **M7** und **X1**, dazu **X2** dauerhaft. Gemessen ist an der Kommandozeile unter Windows; die Zeilen der IDE stehen auf der Dokumentation (`K-175`), die Schreibweise der Pfadmuster für macOS und Linux auf dem Programmcode (`K-176`).
160
+ `BELEG OFFEN` sagen S4, S5, A1, A2, M3, M7 und X1, dazu X2 dauerhaft. Gemessen ist an der Kommandozeile unter Windows; die Zeilen der IDE stehen auf der Dokumentation, die Schreibweise der Pfadmuster für macOS und Linux auf dem Programmcode.
163
161
 
164
162
  ## 4. Kernzusagen ohne technische Durchsetzung
165
163
 
166
- **Keine.** Alle sechs Kernzusagen sind `[TECHNISCH]` – unter den Bedingungen aus Abschnitt 1b, die in der Vorbemerkung des B-Blocks stehen, weil sie keine Zeile einzeln betreffen.
164
+ Keine. Alle sechs Kernzusagen sind `[TECHNISCH]`, unter den Bedingungen aus Abschnitt 1b; die Vorbemerkung des B-Blocks nennt sie.
167
165
 
168
166
  ## 5. Bekannte Abweichungen im Verhalten
169
167
 
170
- - **Die Berechtigungsdatei trägt nur `permissions`** (`permissions_format` `cursor-json`, D-440). Sie ist JSON mit Regeln der Gestalt `Typ(Muster)`, aber ohne `_core_rules_integrity`, ohne `ask` und mit einer eigenen Musterschreibweise. Deshalb erreichen dieses Pack nicht: **Prüfung 2**, **Prüfung 37**, **Prüfung 42**, **Prüfung 43**, **Prüfung 54** und **Prüfung 72**; nur zum Teil **Prüfung 59** und **Prüfung 89** (ihr Gegenstand (c), die Pfade des Overlays im `deny`, entfällt). An ihre Stelle tritt die Prüfung der Berechtigungsdatei gegen die Kernquelle (Abschnitt 1b, Punkt 2). Der Prüfapparat hält diese Liste gegen seine eigene Liste der formatgebundenen Prüfungen.
168
+ - **Die Berechtigungsdatei trägt nur `permissions`** (`permissions_format` `cursor-json`): Regeln der Gestalt `Typ(Muster)`, aber ohne `_core_rules_integrity`, ohne `ask` und mit eigener Musterschreibweise. Dieses Pack erreichen deshalb nicht: Prüfung 2, Prüfung 37, Prüfung 42, Prüfung 43, Prüfung 54 und Prüfung 72; nur zum Teil Prüfung 59 und Prüfung 89 (ihr Gegenstand (c), die Pfade des Overlays im `deny`, entfällt). An ihre Stelle tritt die Prüfung der Berechtigungsdatei gegen die Kernquelle (Abschnitt 1b, Punkt 2). Der Prüfapparat hält diese Liste gegen seine eigene Liste der formatgebundenen Prüfungen.
171
169
  - **Kein Rückfragekorb, und Schreiben im Arbeitsbereich fragt nicht zurück** (B7). Die Rückfrageregeln der Kernquelle erklärt das Manifest; die Befehlsschlitze des Overlays gehören nicht unter `allow`.
172
170
  - **Jedes Pfadmuster steht zweimal** und ist breiter als das der Kernquelle (Abschnitt 1b). Ein Projekt, das einen eigenen Pfad sperrt, schreibt ihn ebenso: `Read(*/<pfad>)` und `Read(*\<pfad>)`. Der Validator warnt bei einem Pfadverbot, das nie trifft.
173
- - **Die Lesesperre steht zweimal**, in der Berechtigungsdatei und in `.cursorignore` – die zweite, weil das Suchwerkzeug die erste nicht beachtet (D-443).
174
- - **Der Schutz-Hook antwortet auch beim Durchlass** und liest seine Eingabe BOM-fest (D-441).
175
- - **Regeldateien heißen `.mdc`**; eigene Regeln des Projekts ebenso (`rule_file_ext`).
176
- - **Die Commit-Attribution lässt sich nur global abschalten** (`attribution.attributeCommitsToAgent` in `~/.cursor/cli-config.json`). Gemessen: Mit dem Standard hängte die Sitzung jedem Commit `Co-authored-by: Cursor <…>` an – gegen Q5; mit `false` nicht.
171
+ - **Die Lesesperre steht zweimal**, in der Berechtigungsdatei und in `.cursorignore`, weil das Suchwerkzeug die erste nicht beachtet.
172
+ - **Der Schutz-Hook antwortet auch beim Durchlass** und liest seine Eingabe BOM-fest.
173
+ - **Regeldateien heißen `.mdc`**, eigene Regeln des Projekts ebenso (`rule_file_ext`).
174
+ - **Die Commit-Attribution lässt sich nur global abschalten** (`attribution.attributeCommitsToAgent` in `~/.cursor/cli-config.json`). Mit dem Standard hängt die Sitzung jedem Commit `Co-authored-by: Cursor <…>` an – gegen Q5; mit `false` nicht.
177
175
 
178
176
  ## 6. Installation und Prüfung
179
177
 
@@ -182,13 +180,20 @@ python .koolie/core/install.py --target /pfad/zum/projekt --client cursor
182
180
  python .koolie/core/tests/scripts/validate-framework.py
183
181
  ```
184
182
 
185
- 🔴 **Danach:** Unter Windows die Kommandozeile aus PowerShell oder `cmd` starten, nicht aus Git Bash. Beim ersten Start dem Arbeitsbereich vertrauen. Die Commit-Attribution global auf `false` setzen. Den Import fremder Konfigurationen in der IDE prüfen. `install.py` nennt diese Schritte nach der Installation und meldet belegte fremde Quellen; nach jeder Hebung nennt es, dass `.cursor/cli.json` und `.cursorignore` Saat sind und nicht angefasst werden.
183
+ Danach:
184
+
185
+ 1. Unter Windows die Kommandozeile aus PowerShell oder `cmd` starten, **nicht aus Git Bash** – sonst sperrt der Schutz-Hook jede Operation (Abschnitt 1b, Punkt 3).
186
+ 2. Beim ersten Start dem Arbeitsbereich vertrauen.
187
+ 3. Die Commit-Attribution global auf `false` setzen.
188
+ 4. Den Import fremder Konfigurationen in der IDE prüfen.
189
+
190
+ `install.py` nennt diese Schritte nach der Installation und meldet belegte fremde Quellen. Nach jeder Hebung erinnert es daran, dass `.cursor/cli.json` und `.cursorignore` Saat sind und nicht angefasst werden.
186
191
 
187
192
  Vor der ersten produktiven Nutzung sind die Basistests des Testkatalogs gegen diesen Client zu fahren und zu protokollieren.
188
193
 
189
194
  ## 7. Anweisungs- und Konfigurationsquellen außerhalb des Projekts
190
195
 
191
- **Pflichtabschnitt** (D-34). Solche Quellen haben nach Regel 2.6 der Prioritätshierarchie **keine Ebene**.
196
+ Pflichtabschnitt. Solche Quellen haben nach Regel 2.6 der Prioritätshierarchie keine Ebene.
192
197
 
193
198
  **Erhebungsstand: 2026-09-26**, Kommandozeile `2026.09.26-dd393fe`, erhoben mit der Herstellerdokumentation (`QU-1` bis `QU-5`), dem Programmcode der Kommandozeile, Messläufen mit dem echten und einem leeren Benutzerprofil und `install.py` (`import_channels_report`).
194
199
 
@@ -200,24 +205,24 @@ Vor der ersten produktiven Nutzung sind die Basistests des Testkatalogs gegen di
200
205
  | Hooks in `.claude/settings.json` und `~/.claude/settings.json` | in jeder Sitzung, neben den Hooks des Projekts (Drittimport) | **gemessen** – sie liefen mit, und unter Git Bash sperrten sie jede Operation | Auskunft; `install.py` meldet sie, wenn die Datei Hooks führt |
201
206
  | `~/.claude/skills/`, `~/.codex/skills/`, `.claude/skills/`, `.codex/skills/` | in jeder Sitzung verfügbar (Drittimport) | `[DOK]` `QU-4` | Auskunft; `install.py` meldet sie |
202
207
  | `~/.cursor/skills/`, `~/.agents/skills/`, `~/.cursor/agents/` | in jeder Sitzung verfügbar | `[DOK]` `QU-4`, `QU-5` | Auskunft; `install.py` meldet sie |
203
- | Nutzerregeln und Teamregeln | in jeder Sitzung, in den Einstellungen gepflegt, keine Datei | `[DOK]` `QU-1` | **keine** – nicht aus dem Projekt erreichbar |
204
- | Eingebaute Skills des Clients (`/create-rule`, `/review` …) | in jeder Sitzung zur Wahl | `[DOK]` `QU-4` | **keine** – nicht abschaltbar |
208
+ | Nutzerregeln und Teamregeln | in jeder Sitzung, in den Einstellungen gepflegt, keine Datei | `[DOK]` `QU-1` | keine – nicht aus dem Projekt erreichbar |
209
+ | Eingebaute Skills des Clients (`/create-rule`, `/review` …) | in jeder Sitzung zur Wahl | `[DOK]` `QU-4` | keine – nicht abschaltbar |
205
210
 
206
211
  ### 7.2 Konfigurationsquellen
207
212
 
208
213
  | Quelle | Wirkung | Belegstatus |
209
214
  |---|---|---|
210
- | `~/.cursor/cli-config.json` | globale Konfiguration der Kommandozeile; ihre Listen **ersetzt** die Projektdatei. Führt `approvalMode`, `sandbox` und die **Commit-Attribution** | Programmcode; Attribution **gemessen** |
215
+ | `~/.cursor/cli-config.json` | globale Konfiguration der Kommandozeile; ihre Listen ersetzt die Projektdatei. Führt `approvalMode`, `sandbox` und die Commit-Attribution | Programmcode; Attribution **gemessen** |
211
216
  | `~/.cursor/hooks.json` | Hooks des Arbeitsplatzes; laufen neben denen des Projekts, ein `deny` gewinnt | `[DOK]` `QU-3` |
212
217
  | `~/.cursor/mcp.json` | MCP-Server des Arbeitsplatzes | `[DOK]` `QU-2` |
213
218
  | Hooks der Organisation (`C:\ProgramData\Cursor\hooks.json` und Entsprechungen) | höchste Priorität; ein `deny` gewinnt | `[DOK]` `QU-3` |
214
- | `.cursor/cli.json` in einem **Elternverzeichnis** des Projekts | wird ebenfalls gelesen und eingemischt | Programmcode |
219
+ | `.cursor/cli.json` in einem Elternverzeichnis des Projekts | wird ebenfalls gelesen und eingemischt | Programmcode |
215
220
 
216
221
  ### 7.3 Was dieser Abschnitt nicht leistet
217
222
 
218
- **Eine Auskunft ist keine Schranke**, und ein **Abwesenheitsbeleg altert**. Prüfung 19 prüft die Anwesenheit dieser Auskunft, nicht ihre Richtigkeit.
223
+ Eine Auskunft ist keine Schranke, und ein Abwesenheitsbeleg altert. Prüfung 19 prüft, ob diese Auskunft da ist, nicht ob sie stimmt.
219
224
 
220
- **Das Entscheidungsprotokoll des Schutz-Hooks ist kein Nachweis gegen den Agenten** (`K-200`, D-487): Es liegt unter `.git/`, der Agent kann es über die Shell ändern, und eine Eingabe, die der Hook nicht lesen kann, hinterlässt keine Zeile.
225
+ Das Entscheidungsprotokoll des Schutz-Hooks ist kein Nachweis gegen den Agenten: Es liegt unter `.git/`, der Agent kann es über die Shell ändern, und eine Eingabe, die der Hook nicht lesen kann, hinterlässt keine Zeile.
221
226
 
222
227
  ## 8. Änderungsverlauf
223
228
 
@@ -227,3 +232,4 @@ Vor der ersten produktiven Nutzung sind die Basistests des Testkatalogs gegen di
227
232
  | 0.2.0 | 2026-09-28 | **Die MCP-Anbindung ist als Stichprobe gemessen** (`CR-2026-157`, D-459, D-462, D-463). Zeile MCP-Konfiguration: `${env:VARIABLE}` in der Kopfzeile, im Druckmodus nur mit `--approve-mcps`. Zeile X1: Freigabe je Werkzeug trägt, ein Schreibwerkzeug ohne `allow` wird abgewiesen. 🔴 Dabei gefunden: Die Hook-Eingabe kam mit **zwei** BOM; der Schutz-Hook entfernte eines und sperrte fail-closed jede Operation – berichtigt für alle Packs (D-463). Das Manifest führt `mcp_permission_rule` (Prüfung 101) | `<FRAMEWORK_OWNER>` |
228
233
  | 0.2.1 | 2026-09-29 | Zeile B4 folgt dem Erzeugnis: Die Berechtigungsdatei sperrt das Overlay seit `1.17.0` nicht mehr, das tut allein der Schutz-Hook (D-448); die Zeile nannte die alte Sperre weiter (`CR-2026-158`, D-468) | `<FRAMEWORK_OWNER>` |
229
234
  | 0.3.0 | 2026-09-29 | **MCP-Aufrufe erreichen den Schutz-Hook** (`CR-2026-162`, D-486, D-487, `K-184`, `K-192`). Manifest: `hook_tools.mcp` mit `MCP:.*` und `hook_mcp_prefixes`. Zeile H1: MCP über `preToolUse`, gemessen mit einem Köderserver, und das Entscheidungsprotokoll; Abschnitt 7.3: seine Grenze (`K-200`) | `<FRAMEWORK_OWNER>` |
235
+ | 0.4.0 | 2026-10-02 | Sprachlich überarbeitet; Zusagen, Einstufungen und Belege unverändert | `<FRAMEWORK_OWNER>` |
@@ -14,7 +14,7 @@
14
14
  "agents_dir": ".cursor/agents",
15
15
  "pack_runtime_dir": ".cursor/rules",
16
16
  "has_rule_triggers": true,
17
- "core_skill_prefix": "fw-",
17
+ "core_skill_prefix": "koolie-",
18
18
  "core_paths": [
19
19
  ".cursor/README.md"
20
20
  ],
@@ -159,8 +159,8 @@
159
159
  "dst": "<RULES_DIR>/15-development-rules.mdc"
160
160
  },
161
161
  {
162
- "src": "framework/runtime/agents/fw-reviewer.md",
163
- "dst": "<AGENTS_DIR>/fw-reviewer.md"
162
+ "src": "framework/runtime/agents/koolie-reviewer.md",
163
+ "dst": "<AGENTS_DIR>/koolie-reviewer.md"
164
164
  },
165
165
  {
166
166
  "src": "templates/rules/21-overlay-TEMPLATE.md.template",
@@ -1,6 +1,6 @@
1
1
  # Laufzeitschicht `.cursor/` – was hier liegt und wem es gehört
2
2
 
3
- Diese Ablage ist die **Laufzeitform** des Frameworks für den Client `cursor`. Die kanonische, werkzeugneutrale Langform steht in `.koolie/core/framework/`; was hier liegt, ist daraus erzeugt (D-02). **Inhaltliche Änderungen gehören in den Kern und laufen als Änderungsantrag** (`.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md`).
3
+ Diese Ablage ist die **Laufzeitform** des Frameworks für den Client `cursor`. Die kanonische, werkzeugneutrale Langform steht in `.koolie/core/framework/`; was hier liegt, ist daraus erzeugt. **Inhaltliche Änderungen gehören in den Kern und laufen als Änderungsantrag** (`.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md`).
4
4
 
5
5
  ## Was hier liegt
6
6
 
@@ -12,8 +12,8 @@ Diese Ablage ist die **Laufzeitform** des Frameworks für den Client `cursor`. D
12
12
  | `rules/40-tech-*.mdc`, `rules/30-*.mdc` | Technology und Role Packs (Ebenen 5 und 6); eine an Dateimuster gebundene Regel trägt `alwaysApply: false` und `globs` | Projekt |
13
13
  | `cli.json` | **Berechtigungen** des Frameworks, dazu die Projektwerte | Projekt (aus dem Kern erzeugt) |
14
14
  | `hooks.json` | Schutz-Hook und Statusmeldung | Framework |
15
- | `agents/fw-reviewer.md` | Nur lesender Review-Subagent (`readonly: true`) | Framework |
16
- | `skills/fw-*/` | Skills des Frameworks | Framework |
15
+ | `agents/koolie-reviewer.md` | Nur lesender Review-Subagent (`readonly: true`) | Framework |
16
+ | `skills/koolie-*/` | Skills des Frameworks | Framework |
17
17
 
18
18
  ## Vier Dinge, die bei diesem Client anders sind
19
19