@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
@@ -4,18 +4,18 @@
4
4
  |---|---|
5
5
  | Modul-ID | `CP-DD` |
6
6
  | Ebene | keine – Abbildungsschicht |
7
- | Version | 0.14.8 |
7
+ | Version | 0.15.0 |
8
8
  | Status | pilot |
9
9
  | Owner (Rolle) | `<FRAMEWORK_OWNER>` |
10
10
  | Client | Devin Desktop (Devin Local) |
11
- | Verbindliche Zielversion | `3.9.x`, Agent-CLI `3000.10.x` (D-112). Die Spanne ist der Geltungsbereich dieses Packs; der gemessene Punktwert steht in der Zeile darunter (D-113). **Das ausgelieferte Produkt hat die Spanne verlassen:** Der Changelog weist am 2026-09-16 **3.10.31** aus, die 3.10-Reihe beginnt am 2026-09-10 (`FW-AK-01`, 2026-09-18). Die Spanne bleibt der *geprüfte* Geltungsbereich, nicht der aktuelle Produktstand, und wird ohne Messung gegen 3.10.x nicht gehoben (D-157) |
12
- | Geprüfte Clientversion | 3.9.19 (Agent-CLI 3000.10.21) – gemessen am 2026-09-16, `.koolie/core/tests/protocols/2026-09-16-AP2-zielversion-devin-desktop.md` Läufe E1 und E2; **am 2026-09-22 unverändert nachgemessen** und Grundlage der 70 Sitzungsläufe des `AP2`-Restes. Modell aller Läufe: `SWE-1.6 Slow`, Konto `Devin Free` |
13
- | Stand der Produktbeobachtung | **2026-09-18** (`FW-AK-01`, `tests/protocols/2026-09-18-FW-AK-01.md`). Alle siebzehn Quellen `QD-1` bis `QD-17` und der Produkt-Changelog bis 3.10.31 sind abgeglichen. **Vier Befunde:** die verlassene Zielspanne (oben), drei Quellen, die einen **entfernten** Agenten belegen (`R1`, `R4`), die Unüberschreibbarkeit der Organisationsebene innerhalb der Zielspanne (`M2`, CVE-2026-81376) und die Skillquellen (`S1`, `X2`, `K-64`) |
14
- | Datum der Prüfung | **2026-09-22** – der Rest von `AP2`: 70 Sitzungsläufe an einer Installation, siebzehn Messbäume, vier Marker aufgelöst (`.koolie/core/tests/protocols/2026-09-22-ap2-rest-devin-desktop.md`, `CR-2026-120`). Zuvor 2026-09-16 – Erhebung der Pfadabbildung; die Belege zur Berechtigungsdatei stammen vom 2026-09-11 und vom 2026-09-14 und liegen in der Zielspanne (D-114) |
11
+ | Verbindliche Zielversion | `3.9.x`, Agent-CLI `3000.10.x` – der geprüfte Geltungsbereich dieses Packs; der gemessene Punktwert steht in der Zeile darunter. Das ausgelieferte Produkt liegt darüber: Der Changelog weist am 2026-09-16 3.10.31 aus (`FW-AK-01`, 2026-09-18). Gehoben wird die Spanne erst nach einer Messung gegen 3.10.x |
12
+ | Geprüfte Clientversion | 3.9.19 (Agent-CLI 3000.10.21) – gemessen am 2026-09-16 (`.koolie/core/tests/protocols/2026-09-16-AP2-zielversion-devin-desktop.md`, Läufe E1 und E2), am 2026-09-22 unverändert nachgemessen; Grundlage der 70 Sitzungsläufe des `AP2`-Restes. Modell aller Läufe: `SWE-1.6 Slow`, Konto `Devin Free` |
13
+ | Stand der Produktbeobachtung | 2026-09-18 (`FW-AK-01`, `tests/protocols/2026-09-18-FW-AK-01.md`): alle siebzehn Quellen `QD-1` bis `QD-17` und der Produkt-Changelog bis 3.10.31 abgeglichen. Die Vorbehalte daraus stehen in der Zielversion (oben), in `R1` und `R4` (Quellen zu einem entfernten Agenten), `M2` (Organisationsebene, CVE-2026-81376) sowie `S1` und `X2` (Skillquellen) |
14
+ | Datum der Prüfung | 2026-09-22 – Rest von `AP2`: 70 Sitzungsläufe an einer Installation, siebzehn Messbäume (`.koolie/core/tests/protocols/2026-09-22-ap2-rest-devin-desktop.md`). Die Pfadabbildung ist am 2026-09-16 erhoben, die Belege zur Berechtigungsdatei am 2026-09-11 und 2026-09-14, alle in der Zielspanne |
15
15
 
16
- > **Belegt, soweit gemessen (Stand 0.86.0).** Die Spalte „Einstufung" nennt die **vorgesehene** Durchsetzungstiefe, die Spalte „Beleg" ihren Nachweisstand: `[DOK]` = in der Herstellerdokumentation beschrieben, `[EMPF]` = Empfehlung des Frameworks, `BELEG OFFEN` = noch nicht belegt, mit Grund und Datum in der Zelle – ohne Frist (D-291). Die Zielspanne ist mit D-112 festgelegt, und die Pfadabbildung ist gegen sie erhoben (`.koolie/core/tests/protocols/2026-09-16-AP2-zielversion-devin-desktop.md`).
16
+ > **Lesart.** Die Spalte „Einstufung" nennt die vorgesehene Durchsetzungstiefe, die Spalte „Beleg" ihren Nachweisstand: `[DOK]` = in der Herstellerdokumentation beschrieben, `[EMPF]` = Empfehlung des Frameworks, `BELEG OFFEN` = noch nicht belegt, mit Grund und Datum in der Zelle. Die Pfadabbildung ist gegen die Zielspanne erhoben (`.koolie/core/tests/protocols/2026-09-16-AP2-zielversion-devin-desktop.md`).
17
17
  >
18
- > **`AP2` ist abgeschlossen** (`CR-2026-120`, `tests/protocols/2026-09-22-ap2-rest-devin-desktop.md`): **S3**, **B3**, **B10** und **A1** sind an einer Installation gemessen – S3 und A1 tragen, B10 ist widerlegt, B3 trägt mit benannter Grenze (D-277 bis D-287). Beobachtet sind außerdem H1, H2, R5, R6 und S5. **Genau eine Zeile sagt `BELEG OFFEN`, und dauerhaft – `X2`** (`K-20`, D-292): Was ein Client indexiert und wohin er es gibt, ist von außen nicht zu beobachten.
18
+ > An einer Installation gemessen sind S3, B3, B10 und A1 (`tests/protocols/2026-09-22-ap2-rest-devin-desktop.md`): S3 und A1 tragen, B10 ist nicht abbildbar, B3 trägt mit benannter Grenze. Beobachtet sind H1, H2, R5, R6 und S5. Offen bleibt nur `X2`, und zwar dauerhaft: Was ein Client indexiert und wohin er es gibt, ist von außen nicht zu beobachten.
19
19
  >
20
20
  > **Wer das Pack einsetzt,** liest zuerst Abschnitt 6 (Installation), die Vorbemerkung des B-Blocks (in welchen Betriebsmodi die Berechtigungsschicht trägt) und Abschnitt 5 (bekannte Abweichungen, darunter die Benutzerkonfiguration, die eine projektseitige Verschärfung aufheben kann).
21
21
 
@@ -25,26 +25,26 @@
25
25
  |---|---|---|
26
26
  | Wurzel-Anweisungsdatei | `AGENTS.md` | `[DOK]` |
27
27
  | Regeldateien | `.devin/rules/*.md` mit `trigger`-Frontmatter | `[DOK]` |
28
- | Skills | `.devin/skills/<name>/SKILL.md` | `[DOK]` (`QD-9`, Stand 2026-09-18). **Der Client durchsucht sechs Ablagen je Repositorium, nicht zwei:** `.agents/skills/` (vom Hersteller empfohlen), `.devin/skills/`, `.github/skills/`, `.claude/skills/`, `.cognition/skills/` und `.windsurf/skills/` – *„all six paths are scanned in every repo"*. **Eine davon ist die Ablage des Schwesterpacks.** Für vier der sechs greift die Importsteuerung (`read_config_from`: `cursor`, `windsurf`, `claude` und – dokumentiert, abgerufen am 2026-09-26 – `copilot` für `.github/skills/`), für `.cognition/skills/` ist **kein Schalter dokumentiert**. Seit `1.12.1` steht `windsurf` auf `true` (D-411) – `.windsurf/skills/` ist damit eine Ablage, die lädt; `.github/skills/` lud am 2026-09-26 (3000.11.3) auch **ohne** abschaltenden Schalter nicht, die Wirkung von `copilot: false` ist deshalb nicht gemessen. Das Framework schreibt nur `.devin/skills/`; die übrigen sind Gegenstand der Auskunft nach D-34. `K-12` bleibt offen: Ob der Desktop-Client `.agents/skills/` **tatsächlich** so liest, ist nicht beobachtet |
29
- | Skills, die das Modell erreicht | `triggers: model` im Frontmatter | **Erhoben am 2026-09-22** (D-288): Der Sitzungsschritt `<available_skills>` führt **drei** der zwölf `fw-*`-Skills – genau die drei mit `triggers: user, model` –, dazu **zwei eingebaute Skills des Clients** (`declarative-repo-setup`, `upload-secrets`, je `source: builtin:…`). Die übrigen neun meldet das Modell als **nicht vorhanden**; sie sind Schrägstrich-Befehle für einen Menschen. Das ist `K-57` für diesen Client, und es ist schärfer als dort: Beim Schwesterpack ist der gesperrte Skill über den Prompt erreichbar. ⚠️ **`devin skills list` auf der Kommandozeile zeigt dagegen alle zwölf** – eine Auflistung, die etwas zeigt, was die Sitzung nicht sieht. Der eingebaute `upload-secrets` hat dieselbe Dateiklasse zum Gegenstand, die `B3` schützt (`K-94`). **Geklärt am 2026-09-30** (D-503): Er lädt über `devin cloud drs secret-create`; die CLI liest die Werte selbst, ein `deny Read` trifft diesen Weg also nicht, und mit `--from-env` steht kein Pfad im Befehl. Seit `1.20.2` sperrt der Schutz-Hook den Befehl, gemessen ohne Regeltext und mit `--permission-mode dangerous`; im Standardmodus lehnte schon die Regelschicht ab (K3, nicht delegierbar) |
30
- | Startwerkzeug für Unteragenten | `run_subagent` (Argument `profile`) | **Am 2026-09-22 erhoben** (D-284): Die Mitschrift führt es unter `agent.tool_definitions`, und der Client stellt der Sitzung neben `fw-reviewer` zwei eigene Profile bereit (`subagent_explore` lesend, `subagent_general` mit vollem Schreibzugriff). **Die Mitschrift führt die Werkzeugaufrufe des Unteragenten nicht** (D-282) – wer ihn misst, braucht einen Aufzeichnungs-Hook. **Der Schutz-Hook und der `deny`-Korb erfassen ihn** (Lauf `A1-DENY2`) |
28
+ | Skills | `.devin/skills/<name>/SKILL.md` | `[DOK]` (`QD-9`, Stand 2026-09-18). Der Client durchsucht sechs Ablagen je Repositorium: `.agents/skills/` (vom Hersteller empfohlen), `.devin/skills/`, `.github/skills/`, `.claude/skills/` (die Ablage des Schwesterpacks), `.cognition/skills/` und `.windsurf/skills/` – *„all six paths are scanned in every repo"*. Für vier greift die Importsteuerung (`read_config_from`: `cursor`, `windsurf`, `claude` und `copilot` für `.github/skills/`, dokumentiert, abgerufen am 2026-09-26); für `.cognition/skills/` ist kein Schalter dokumentiert. `windsurf` steht auf `true`, `.windsurf/skills/` lädt also. `.github/skills/` lud am 2026-09-26 (3000.11.3) auch ohne Schalter nicht; die Wirkung von `copilot: false` ist deshalb nicht gemessen. Das Framework schreibt nur `.devin/skills/`; die übrigen nennt Abschnitt 7. Ob der Desktop-Client `.agents/skills/` tatsächlich liest, ist nicht beobachtet |
29
+ | Skills, die das Modell erreicht | `triggers: model` im Frontmatter | Erhoben am 2026-09-22: Der Sitzungsschritt `<available_skills>` führt drei der zwölf `koolie-*`-Skills – die mit `triggers: user, model` – und zwei eingebaute Skills des Clients (`declarative-repo-setup`, `upload-secrets`, je `source: builtin:…`). Die übrigen neun meldet das Modell als nicht vorhanden; sie sind Schrägstrich-Befehle für einen Menschen. Beim Schwesterpack ist ein gesperrter Skill dagegen über den Prompt erreichbar. `devin skills list` auf der Kommandozeile zeigt alle zwölf, also mehr, als die Sitzung sieht. Der eingebaute `upload-secrets` betrifft dieselbe Dateiklasse, die `B3` schützt. Er lädt über `devin cloud drs secret-create`; die CLI liest die Werte selbst, ein `deny Read` trifft diesen Weg nicht, und mit `--from-env` steht kein Pfad im Befehl (geklärt am 2026-09-30). Der Schutz-Hook sperrt den Befehl, gemessen ohne Regeltext und mit `--permission-mode dangerous`; im Standardmodus lehnte schon die Regelschicht ab (K3, nicht delegierbar) |
30
+ | Startwerkzeug für Unteragenten | `run_subagent` (Argument `profile`) | Erhoben am 2026-09-22: Die Mitschrift führt es unter `agent.tool_definitions`; neben `koolie-reviewer` stellt der Client zwei eigene Profile bereit (`subagent_explore` lesend, `subagent_general` mit vollem Schreibzugriff). Die Werkzeugaufrufe des Unteragenten stehen nicht in der Mitschrift – wer ihn misst, braucht einen Aufzeichnungs-Hook. Schutz-Hook und `deny`-Korb erfassen ihn (Lauf `A1-DENY2`) |
31
31
  | Subagentenprofile | `.devin/agents/<name>.md` | `[DOK]` |
32
- | Berechtigungskonfiguration | `.devin/config.json` (erzeugt aus `framework/runtime/permissions.json`) | **In Sitzungen erhoben.** Der Client liest die Datei und weist aus ihrem `deny`-Korb ab – und benennt dabei selbst die Quelle: *„Read access … was denied by a deny rule in the project settings"* (2026-09-14, Läufe P4 und W1; am 2026-09-22 in zwölf Läufen bestätigt). Der `hooks`-Block wird aus derselben Datei ausgeführt, aus einer eigenen Hook-Datei nicht (2026-09-11, `AP2-DD-10`). **Die Körbe `ask` und `allow` sind am 2026-09-22 erhoben, und das Ergebnis ist eine Enthaltung** (D-280): Im **nicht-interaktiven** Betrieb sind sie von der Voreinstellung des Clients **nicht zu unterscheiden** – im Modus `auto` weist der Client jeden Schreibaufruf auch **ohne** Regel ab, im Modus `accept-edits` läuft jeder auch **mit** Regel durch, und `allow: Exec(git status)` verhält sich wie der leere Baum. **Der interaktive Betrieb ist nicht gemessen und wird nicht behauptet** – eine Rückfrage an einen Menschen lässt sich nicht-interaktiv nicht messen. **Der `deny`-Korb dagegen ist zurechenbar**: `Exec(git push)` wird im Regelbaum abgewiesen und im leeren ausgeführt. ⚠️ **`--permission-mode dangerous` hebt den `deny`-Korb auf** (D-281, Vorbemerkung B-Block) |
33
- | Hook-Konfiguration | `.devin/config.json` unter `hooks` (erzeugt aus `framework/runtime/hooks.json`) | **In einer Sitzung erhoben** (AP2, 3.9.19 / CLI 3000.10.21): Aus `.devin/hooks.v1.json` wird kein Hook ausgeführt, aus `config.json` sofort. Eingabeschema belegt, einschließlich des undokumentierten Feldes `tool_use_id` |
34
- | MCP-Konfiguration | `.devin/mcp_config.json` (Vorlage: `.devin/mcp_config.json.example`) | **Am Client erhoben** (2026-09-16, Läufe E5 und E6): Der Container heißt `mcpServers`, ein Eintrag trägt `command`, `args` und `transport`. Drei Ablageorte, und **der Standard ist der unversionierte**: `.devin/mcp_config.local.json` (`local`), `.devin/mcp_config.json` (`project`), die Benutzerkonfiguration (`user`). **Gemessen ist allein der `stdio`-Fall**; der Lauf für einen `http`-Server brach ohne Ausgabe ab. 🟢 **Stichprobe des Owners zu `1.18.0`** (2026-09-28, D-468): der Atlassian-Server als `stdio`-Eintrag über `npx mcp-remote <Adresse des offiziellen Remote-Servers>` in `.devin/mcp_config.local.json`, Anmeldung per OAuth im Browser – **trägt**; die Seitenwerkzeuge liefern die Version, anders als bei `claude-code` (D-464). Den Kommentar in ein Ticket verweigerte die Regelschicht (Zweck *lesen*), bevor die Rückfrage auf das Schreibwerkzeug anlaufen konnte. Die git-ignorierte `mcp_config.local.json` las der Client nicht: *„matched by an ignore file … not allowed to read or modify ignored files“* |
35
- | Projektverzeichnis-Variable in Hooks | `DEVIN_PROJECT_DIR` | **Im Hook-Prozess erhoben** (2026-09-11, fünf Aufzeichnungen, ausgewertet am 2026-09-16 als Lauf E8): gesetzt, und der Wert zeigt auf das Projektverzeichnis |
32
+ | Berechtigungskonfiguration | `.devin/config.json` (erzeugt aus `framework/runtime/permissions.json`) | In Sitzungen erhoben. Der Client liest die Datei, weist aus ihrem `deny`-Korb ab und nennt die Quelle: *„Read access … was denied by a deny rule in the project settings"* (2026-09-14, Läufe P4 und W1; am 2026-09-22 in zwölf Läufen bestätigt). Den `hooks`-Block führt er aus derselben Datei aus, eine eigene Hook-Datei nicht (2026-09-11, `AP2-DD-10`). Die Körbe `ask` und `allow` sind im nicht-interaktiven Betrieb von der Voreinstellung nicht zu unterscheiden (2026-09-22): Im Modus `auto` weist der Client jeden Schreibaufruf auch ohne Regel ab, im Modus `accept-edits` läuft jeder auch mit Regel durch, und `allow: Exec(git status)` verhält sich wie der leere Baum. Für den interaktiven Betrieb sagt das Pack nichts zu, weil sich eine Rückfrage an einen Menschen nicht-interaktiv nicht messen lässt. Der `deny`-Korb ist zurechenbar: `Exec(git push)` wird im Regelbaum abgewiesen und im leeren ausgeführt. `--permission-mode dangerous` hebt ihn auf (Vorbemerkung B-Block) |
33
+ | Hook-Konfiguration | `.devin/config.json` unter `hooks` (erzeugt aus `framework/runtime/hooks.json`) | In einer Sitzung erhoben (AP2, 3.9.19 / CLI 3000.10.21): Aus `.devin/hooks.v1.json` wird kein Hook ausgeführt, aus `config.json` sofort. Eingabeschema belegt, einschließlich des undokumentierten Feldes `tool_use_id` |
34
+ | MCP-Konfiguration | `.devin/mcp_config.json` (Vorlage: `.devin/mcp_config.json.example`) | Am Client erhoben (2026-09-16, Läufe E5 und E6): Der Container heißt `mcpServers`, ein Eintrag trägt `command`, `args` und `transport`. Drei Ablageorte; Standard ist der unversionierte: `.devin/mcp_config.local.json` (`local`), `.devin/mcp_config.json` (`project`), die Benutzerkonfiguration (`user`). Gemessen ist nur der `stdio`-Fall; der Lauf für einen `http`-Server brach ohne Ausgabe ab. Stichprobe des Owners (2026-09-28): Der Atlassian-Server als `stdio`-Eintrag über `npx mcp-remote <Adresse des offiziellen Remote-Servers>` in `.devin/mcp_config.local.json`, Anmeldung per OAuth im Browser, trägt; die Seitenwerkzeuge liefern die Version, anders als bei `claude-code`. Einen Kommentar in ein Ticket verweigerte die Regelschicht (Zweck *lesen*), bevor die Rückfrage auf das Schreibwerkzeug anlief. Die git-ignorierte `mcp_config.local.json` las der Client nicht: *„matched by an ignore file … not allowed to read or modify ignored files“* |
35
+ | Projektverzeichnis-Variable in Hooks | `DEVIN_PROJECT_DIR` | Im Hook-Prozess erhoben (2026-09-11, fünf Aufzeichnungen, ausgewertet am 2026-09-16 als Lauf E8): gesetzt, und der Wert zeigt auf das Projektverzeichnis |
36
36
  | Nutzerlokale Überschreibung | `AGENTS.local.md`, `.devin/config.local.json`, `*.local.md` neben Regeln | `[DOK]` |
37
37
 
38
38
  Legacy: `.windsurf/` wird nicht gepflegt; `.devin/` hat Vorrang `[DOK]`.
39
39
 
40
40
  ## 1a. Semantikabbildung der Berechtigungen und Hooks
41
41
 
42
- Die Regelmenge liegt werkzeugneutral im Kern (`.koolie/core/framework/runtime/permissions.json`, `hooks.json`) und wird bei der Installation in die Werkzeuge dieses Clients übersetzt (D-18). Was dabei abgebildet wird, steht maschinenlesbar im `manifest.json`; diese Tabelle ist die menschenlesbare Fassung.
42
+ Die Regelmenge liegt werkzeugneutral im Kern (`.koolie/core/framework/runtime/permissions.json`, `hooks.json`) und wird bei der Installation in die Werkzeuge dieses Clients übersetzt. Was dabei abgebildet wird, steht maschinenlesbar im `manifest.json`; diese Tabelle ist die menschenlesbare Fassung.
43
43
 
44
44
  | Neutrales Werkzeugverb | Werkzeug bei diesem Client | Anmerkung |
45
45
  |---|---|---|
46
46
  | `read` | `Read(muster)` | |
47
- | `search` | – | **zwei Suchwerkzeuge, `grep` und `find_file_by_name`** (erhoben 2026-09-14, D-87). Eine eigene `allow`-Regel entfällt trotzdem: Die Klasse `Read(...)` dieses Clients umfasst die Suche mit – ein `deny Read(**/.env)` weist einen `grep`-Aufruf auf dieselbe Datei ab |
47
+ | `search` | – | zwei Suchwerkzeuge, `grep` und `find_file_by_name` (erhoben 2026-09-14). Eine eigene `allow`-Regel entfällt: Die Klasse `Read(...)` dieses Clients umfasst die Suche mit – ein `deny Read(**/.env)` weist einen `grep`-Aufruf auf dieselbe Datei ab |
48
48
  | `write` | `Write(muster)` | ein Werkzeug für Ändern und Anlegen |
49
49
  | `exec` | `Exec(befehl)` | wörtliche Form; die Präfixform der Quelle wird nicht gebraucht |
50
50
  | `fetch` | `Fetch(muster)` | |
@@ -60,9 +60,9 @@ Die Abbildung ist kein freies Feld: Eine `deny`- oder `ask`-Regel, für die dies
60
60
 
61
61
  ## 2. Fähigkeitsmatrix
62
62
 
63
- **Zur Belegspalte.** Jede `[DOK]`-Zeile nennt die **Quellenkennung** der Liste in Anhang 31.4.1 (`QD-1` bis `QD-17`). Die Kennung ist die verbindliche Form, weil allein sie gegen die Liste gehalten werden kann; ein Seitenpfad darf danebenstehen. **Prüfung 73 setzt es durch.** Eine Zelle, die auf eine andere Zeile verweist (*„wie B3"*), erbt deren Kennung – die Prüfung löst den Verweis auf (D-266). `B4`, `B5`, `B6` und `B8` hängen auf diese Weise an `B3`.
63
+ **Zur Belegspalte.** Jede `[DOK]`-Zeile nennt die Quellenkennung der Liste in Anhang 31.4.1 (`QD-1` bis `QD-17`); nur die Kennung lässt sich gegen die Liste halten, ein Seitenpfad darf danebenstehen. Prüfung 73 setzt das durch. Eine Zelle, die auf eine andere Zeile verweist (*„wie B3"*), erbt deren Kennung; so hängen `B4`, `B5`, `B6` und `B8` an `B3`.
64
64
 
65
- **Was der Zusatz `(Zuordnung K-62)` sagt – und was er nicht sagt.** Die Zuordnung ist am 22.09.2026 **aus dem Bestand** gewonnen: aus der Quellenliste und den Protokollen zu AP2 und `FW-AK-01`, **nicht aus einem eigenen Abruf.** Der Recherchestand der Seiten bleibt deshalb der von `FW-AK-01` (18.09.2026) – eine Zuordnung ist keine Aktualitätsaussage (D-156, D-263).
65
+ Die Quellenzuordnung ist am 2026-09-22 aus dem Bestand gewonnen (Quellenliste und Protokolle zu AP2 und `FW-AK-01`), nicht aus einem eigenen Abruf. Der Recherchestand der Seiten bleibt der von `FW-AK-01` (2026-09-18); eine Zuordnung ist keine Aktualitätsaussage.
66
66
 
67
67
  ### R – Regelladung
68
68
 
@@ -71,63 +71,60 @@ Die Abbildung ist kein freies Feld: Eine `deny`- oder `ask`-Regel, für die dies
71
71
  | R1 | Wurzel-Anweisungsdatei wird ungefragt geladen | `AGENTS.md` wird als always-on-Regel in die Regel-Engine eingespeist | `[TECHNISCH]` | `[DOK]` **`QD-6`** (`cli/extensibility/rules`), Stand 2026-09-18: `QD-6` führt `AGENTS.md` als Regeldatei ohne Bindung an einen Agenten. `QD-5`, die Seite, die diese Zusage wörtlich hergibt, beschreibt das Laden als Einspeisung in den Systemprompt des **Cascade**-Agenten – und der Changelog sagt zu 3.9.19 (2026-09-08): *„Cascade has been removed. Devin Local is now the only agent available in Devin Desktop."* `QD-5` trägt die Zeile deshalb nicht (`FW-AK-01`, D-159) |
72
72
  | R2 | Regeldateien mit Ladebedingungen | Frontmatter `trigger`: `always_on`, `model_decision`, `manual`, `agent` | `[TECHNISCH]` | `[DOK]` **`QD-6`** (Zuordnung `K-62`). ⚠️ **Vorbehalt aus AP2** (`AP2-DD-09`, 2026-09-11): Die Seite stellt die Frontmatter-Aktivierungswerte **im Zusammenhang importierter Fremdformate** dar und sagt nicht ausdrücklich, dass `.devin/rules/*.md` dieselben Werte trägt. 🟢 **`K-156` beantwortet mit `1.12.1` (D-411):** Mit `read_config_from.windsurf: false` lädt Devin CLI die Regelablage nicht – mit 3000.11.1 und 3000.11.3, **gegen die Herstellerdokumentation**, die `.devin/rules/` als eigenen Ablageort unabhängig von der Importsteuerung führt. Das Pack setzt `windsurf: true` (Zeile `R6`). Gemessen am 2026-09-26 mit 3000.11.3 an Kennworten je Kanal: `always_on` lädt; `model_decision` erscheint mit seiner Beschreibung unter den verfügbaren Regeln. 🔴 **Eine Regel mit `trigger: glob` lädt nicht** – weder aufgeführt noch nach dem Lesen einer passenden Datei, mit und ohne Anführungszeichen um das Muster, drei Läufe (`K-161`). Die Einstufung gilt damit für `always_on` und `model_decision`, für `glob` steht sie unter diesem Vorbehalt |
73
73
  | R3 | Regeln an Dateimuster bindbar | Frontmatter `trigger: glob` mit `globs` – Grundlage der Technology Packs | `[TECHNISCH]` | `[DOK]` **`QD-6`** (Zuordnung `K-62`) |
74
- | R4 | Bekanntes Zeichenlimit | Wurzel-Anweisung und Regeln mit `always_on` zusammen höchstens 40.000 (verbindlich, D-387); 12.000 je Workspace-Regel, 6.000 global als SOLL-Grenzen – **Vorgabe des Frameworks, keine Produkteigenschaft** | `[TEXTUELL]` | `[EMPF]`. Die Zahlen stammen aus der Cascade-Dokumentation (QD-7); für Devin Local nennt der Hersteller **keine** Grenze. Zweimal unabhängig geprüft am 2026-09-11 gegen Devin Desktop 3.9.19 (`cli/extensibility/rules`, ERH-10); K-19 bleibt offen. **Nachtrag 2026-09-18 (`FW-AK-01`): Die Herkunft der Zahlen ist Altbestand.** Der Changelog sagt zu 3.9.19, Cascade sei **entfernt**; `QD-7` schreibt selbst *„Memories apply to the legacy Cascade agent only"*. Die Zahlen bleiben in Kraft – **als Vorgabe des Frameworks**; ihre Herkunft ist nur keine Aussage über das ausgelieferte Produkt mehr. ⚠️ **Die Herstellerdoku widerspricht sich:** `QD-2` sagt weiter *„The existing Cascade agent remains available through July"*, `QD-5`, `QD-7` und `QD-8` sprechen im Präsens von Cascade |
74
+ | R4 | Bekanntes Zeichenlimit | Wurzel-Anweisung und Regeln mit `always_on` zusammen höchstens 40.000 (verbindlich); 12.000 je Workspace-Regel, 6.000 global als SOLL-Grenzen – Vorgabe des Frameworks, keine Produkteigenschaft | `[TEXTUELL]` | `[EMPF]`. Die Zahlen stammen aus der Cascade-Dokumentation (QD-7); für Devin Local nennt der Hersteller **keine** Grenze. Zweimal unabhängig geprüft am 2026-09-11 gegen Devin Desktop 3.9.19 (`cli/extensibility/rules`, ERH-10); K-19 bleibt offen. **Nachtrag 2026-09-18 (`FW-AK-01`): Die Herkunft der Zahlen ist Altbestand.** Der Changelog sagt zu 3.9.19, Cascade sei **entfernt**; `QD-7` schreibt selbst *„Memories apply to the legacy Cascade agent only"*. Die Zahlen bleiben in Kraft – **als Vorgabe des Frameworks**; ihre Herkunft ist nur keine Aussage über das ausgelieferte Produkt mehr. ⚠️ **Die Herstellerdoku widerspricht sich:** `QD-2` sagt weiter *„The existing Cascade agent remains available through July"*, `QD-5`, `QD-7` und `QD-8` sprechen im Präsens von Cascade |
75
75
  | R5 | Die geladenen Regelquellen sind vollständig aufzählbar | `devin rules list` und `devin rules show <name>` führen die Regeln samt Herkunftspfad und Aktivierung; `devin rules paths` nennt die Ablageorte. Die vollständige Auskunft des Frameworks steht in Abschnitt 7 dieses Packs | `[TEXTUELL]` | **Beobachtet – und mit gemessenem Vorbehalt.** Die Kommandos laufen und listen (K-21). Ihre Aufzählung ist aber **nicht deckungsgleich mit dem, was lädt**: Mit `windsurf: false` führt `devin rules list` die abgeschaltete Quelle unverändert auf, obwohl ihr Inhalt nicht mehr im Kontext steht (ERH-02), und `devin rules paths` nennt `~/.claude/skills/` nicht, obwohl 67 von 81 Skills von dort stammen (ERH-03). Die Zusage ist damit **nicht technisch getragen**: Das Register ist eine Auskunft des Clients über seine Konfiguration, kein Abbild des Kontexts. Wer die Wirkung prüfen will, misst den Kontext |
76
- | R6 | Keine Importe fremder Werkzeugformate | `read_config_from` in der Berechtigungsdatei: `cursor`, `claude`, `copilot`, `opencode` und `zed` auf `false`; **`windsurf` steht seit `1.12.1` auf `true`** (siehe unten), **`agents_standard` bleibt `true`** – das ist bei diesem Client das Format der **eigenen** Wurzel-Anweisungsdatei; es abzuschalten hieße, das Framework abzuschalten. Erzeugt von `clientmap.py` aus dem Manifest (D-37) | `[TEXTUELL]` | **Wirkung gemessen, Durchsetzung widerlegt.** Am 2026-09-11 gemessen: Mit abgeschalteten Fremdformaten verschwinden 67 fremde Skills (69 → 2) und der Inhalt der fremden Regel aus dem Kontext (K-21, K-23). Ebenso gemessen: Die Benutzerkonfiguration hat in **beide** Richtungen Vorrang (K-27, ERH-11) – die Einstellung ist damit ein Standard, den jede Arbeitsstation still aufheben kann, wirksam dort, wo die Benutzerkonfiguration schweigt. Prüfung 22 hält die Abbildung fest, nicht ihre Wirkung. **Am 2026-09-22 ein zweites Mal gemessen, und diesmal an der Menge:** In **sieben** Läufen im Baum **ohne** `config.json` lädt die Sitzung eine Anweisungsdatei aus dem Benutzerprofil als `<rules type="always-on">` – `…\.codeium\windsurf\memories\global_rules.md`; in **sechzig** Läufen mit `read_config_from.windsurf: false` erscheint sie in **keiner** Mitschrift. Sieben gegen sechzig, derselbe Arbeitsplatz, derselbe Tag (D-290). ⚠️ **Der Kanal existiert also und liegt außerhalb jedes Projektverzeichnisses** – die Datei war hier leer; dass sie es bleibt, sagt niemand zu 🔴 **Seit `1.12.1` steht `windsurf` auf `true` – eine Abwägung, kein Versehen (D-411, `K-156`):** Mit `false` lädt der Client die **eigene** Regelablage nicht (3000.11.1 und 3000.11.3, siehe `R2`). Der Preis ist der Kanal aus D-290: Gemessen am 2026-09-26 mit Kennworten je Kanal lädt mit `true` die Anweisungsdatei im Benutzerprofil **und** `.windsurf/rules/` im Projekt; laut Dokumentation dazu Skills und MCP-Server aus Windsurf. `install.py` nennt die Kanäle nach Installation und Hebung, wenn sie belegt sind (`import_channels_report`) – eine Auskunft, keine Schranke. `copilot`, `opencode` und `zed` sind dokumentierte Schlüssel mit Standard `true` (abgerufen am 2026-09-26); das Pack setzt sie auf `false`, ihre Wirkung ist nicht gemessen |
76
+ | R6 | Keine Importe fremder Werkzeugformate | `read_config_from` in der Berechtigungsdatei: `cursor`, `claude`, `copilot`, `opencode` und `zed` auf `false`; `windsurf` steht auf `true` (siehe Beleg), `agents_standard` bleibt `true` – das ist bei diesem Client das Format der eigenen Wurzel-Anweisungsdatei; es abzuschalten hieße, das Framework abzuschalten. Erzeugt von `clientmap.py` aus dem Manifest | `[TEXTUELL]` | **Wirkung gemessen, Durchsetzung widerlegt.** Am 2026-09-11 gemessen: Mit abgeschalteten Fremdformaten verschwinden 67 fremde Skills (69 → 2) und der Inhalt der fremden Regel aus dem Kontext (K-21, K-23). Ebenso gemessen: Die Benutzerkonfiguration hat in **beide** Richtungen Vorrang (K-27, ERH-11) – die Einstellung ist damit ein Standard, den jede Arbeitsstation still aufheben kann, wirksam dort, wo die Benutzerkonfiguration schweigt. Prüfung 22 hält die Abbildung fest, nicht ihre Wirkung. **Am 2026-09-22 ein zweites Mal gemessen, und diesmal an der Menge:** In **sieben** Läufen im Baum **ohne** `config.json` lädt die Sitzung eine Anweisungsdatei aus dem Benutzerprofil als `<rules type="always-on">` – `…\.codeium\windsurf\memories\global_rules.md`; in **sechzig** Läufen mit `read_config_from.windsurf: false` erscheint sie in **keiner** Mitschrift. Sieben gegen sechzig, derselbe Arbeitsplatz, derselbe Tag (D-290). ⚠️ **Der Kanal existiert also und liegt außerhalb jedes Projektverzeichnisses** – die Datei war hier leer; dass sie es bleibt, sagt niemand zu 🔴 **Seit `1.12.1` steht `windsurf` auf `true` – eine Abwägung, kein Versehen (D-411, `K-156`):** Mit `false` lädt der Client die **eigene** Regelablage nicht (3000.11.1 und 3000.11.3, siehe `R2`). Der Preis ist der Kanal aus D-290: Gemessen am 2026-09-26 mit Kennworten je Kanal lädt mit `true` die Anweisungsdatei im Benutzerprofil **und** `.windsurf/rules/` im Projekt; laut Dokumentation dazu Skills und MCP-Server aus Windsurf. `install.py` nennt die Kanäle nach Installation und Hebung, wenn sie belegt sind (`import_channels_report`) – eine Auskunft, keine Schranke. `copilot`, `opencode` und `zed` sind dokumentierte Schlüssel mit Standard `true` (abgerufen am 2026-09-26); das Pack setzt sie auf `false`, ihre Wirkung ist nicht gemessen |
77
77
 
78
- **Der HTML-Kommentar einer Regeldatei geht bei diesem Client in den Kontext ein.** Gemessen am
79
- 2026-09-12 (K-28, `.koolie/core/tests/protocols/2026-09-12-erhebungen-K28-S5-B9-bypass.md`):
80
- Der Kommentar steht **wörtlich** in dem Regelblock, den der Client selbst bildet – die
81
- Mitschrift führt ihn samt Kommentarklammern, und die Sitzung gab eine Marke aus dem Kommentar
82
- zurück, ohne eine Datei zu lesen. **Das ist das Gegenteil des Befunds beim anderen Pack**
83
- (ERH-01). Wer hier einen Kommentar schreibt, schreibt in den Sitzungskontext.
78
+ **Der HTML-Kommentar einer Regeldatei geht bei diesem Client in den Kontext ein** (gemessen am
79
+ 2026-09-12, `.koolie/core/tests/protocols/2026-09-12-erhebungen-K28-S5-B9-bypass.md`): Er steht
80
+ wörtlich in dem Regelblock, den der Client bildet, und die Sitzung gab eine Marke aus dem
81
+ Kommentar zurück, ohne eine Datei zu lesen. Beim Pack `claude-code` ist es umgekehrt (ERH-01).
84
82
 
85
- Normative Sätze gehören trotzdem in den Fließtext (D-38) – und zwar gerade deshalb: Was gilt,
86
- darf nicht davon abhängen, mit welchem Werkzeug gearbeitet wird.
83
+ Normative Sätze gehören trotzdem in den Fließtext, damit nicht vom Werkzeug abhängt, was gilt.
87
84
 
88
85
  ### S – Skills
89
86
 
90
87
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
91
88
  |---|---|---|---|---|
92
89
  | S1 | Versionierte Skills im Repository | `.devin/skills/<name>/SKILL.md` mit Frontmatter | `[TECHNISCH]` | `[DOK]` **`QD-9`, `QD-10`** (Zuordnung `K-62`) – die Skill-Suchpfade nennen beide Seiten |
93
- | S2 | Gezielter Aufruf | **Zwei Wege, beide erhoben (2026-09-14):** ein Werkzeugaufruf `skill` mit dem Skillnamen im Argument – **und** die Slash-Form `/name`, die die CLI **clientseitig** in den Prompt expandiert, bevor das Modell sie sieht | `[TECHNISCH]` | `[DOK]` **`QD-10`** (Zuordnung `K-62`: Aufruf `/skill-name`). **Der zweite Weg ist kein Werkzeugaufruf** und von einer Werkzeugschranke deshalb nicht erreichbar. Und die Berechtigungsdatei erreicht auch den ersten nicht: `Skill(name)` und `skill(name)` im `deny` laufen beide durch, während `Read(**/.env)` in denselben Läufen abweist (K-34) |
94
- | S3 | Werkzeugbeschränkung je Skill | Frontmatter `allowed-tools`, `permissions`. **Beide Felder erreichen die installierte Fassung unverändert** – dieses Pack führt sie nicht in `drop_fields`, anders als das andere | `[TECHNISCH]`, **unter der Bedingung aus der Belegspalte** | **Erhoben am 2026-09-22 an einer Installation, und die Zusage trägt** (`tests/protocols/2026-09-22-ap2-rest-devin-desktop.md`, D-287). **Sechs von sechs Läufen mit einem aktiven Skill, der `edit` in beiden Feldern ausschließt, wurden abgewiesen; acht von acht ohne diese Kombination liefen durch**, und die Kontrolle ohne Skillaufruf im **selben** Baum ebenfalls. **Die Bedingung ist der Messwert:** `allowed-tools` **allein** wirkt nicht (vier Läufe), `permissions` **allein** wirkt nicht (zwei Läufe) – **die Einschränkung greift nur, wenn `edit` aus `allowed-tools` fehlt und ein `permissions`-Block dasteht.** Gemessen an vier Bäumen, die sich **nur** im Frontmatter eines Sondenskills unterscheiden, und am ausgelieferten `fw-code-explain`. **Alle dreizehn ausgelieferten Skills führen beide Felder** – die Bedingung ist im Bestand erfüllt. ⚠️ **Zwei Grenzen:** Die Abweisung nennt den **Arbeitsbereich** als Grund, nicht den Skill – wer sie am Wortlaut zurechnet, rechnet sie falsch zu; und **ein Skill, der nur eines der beiden Felder trägt, bekommt keine Einschränkung und keine Meldung** (`K-93`). Der Gegenbefund beim Schwesterpack bleibt davon unberührt (B01, `CR-2026-050`, D-50). 🟢 **Auch für `exec` belegt** (Stichprobe des Owners, 2026-09-28, D-468, `K-187`): Unter `fw-change-analyze` wurden `git status` und `find` mit *„Permission denied for this tool.“* abgewiesen, obwohl die Berechtigungsdatei `Exec(git status)` freigibt – auch diese Meldung nennt den Skill nicht. Ausgelesen aus der Sitzungsdatenbank des Clients (`sessions.db`, Tabelle `tool_call_state`) |
90
+ | S2 | Gezielter Aufruf | Zwei Wege, beide erhoben (2026-09-14): ein Werkzeugaufruf `skill` mit dem Skillnamen im Argument und die Slash-Form `/name`, die die CLI clientseitig in den Prompt expandiert, bevor das Modell sie sieht | `[TECHNISCH]` | `[DOK]` **`QD-10`** (Zuordnung `K-62`: Aufruf `/skill-name`). **Der zweite Weg ist kein Werkzeugaufruf** und von einer Werkzeugschranke deshalb nicht erreichbar. Und die Berechtigungsdatei erreicht auch den ersten nicht: `Skill(name)` und `skill(name)` im `deny` laufen beide durch, während `Read(**/.env)` in denselben Läufen abweist (K-34) |
91
+ | S3 | Werkzeugbeschränkung je Skill | Frontmatter `allowed-tools`, `permissions`. Beide Felder erreichen die installierte Fassung unverändert; anders als `claude-code` führt dieses Pack sie nicht in `drop_fields` | `[TECHNISCH]`, unter der Bedingung aus der Belegspalte | **Erhoben am 2026-09-22 an einer Installation, und die Zusage trägt** (`tests/protocols/2026-09-22-ap2-rest-devin-desktop.md`, D-287). **Sechs von sechs Läufen mit einem aktiven Skill, der `edit` in beiden Feldern ausschließt, wurden abgewiesen; acht von acht ohne diese Kombination liefen durch**, und die Kontrolle ohne Skillaufruf im **selben** Baum ebenfalls. **Die Bedingung ist der Messwert:** `allowed-tools` **allein** wirkt nicht (vier Läufe), `permissions` **allein** wirkt nicht (zwei Läufe) – **die Einschränkung greift nur, wenn `edit` aus `allowed-tools` fehlt und ein `permissions`-Block dasteht.** Gemessen an vier Bäumen, die sich **nur** im Frontmatter eines Sondenskills unterscheiden, und am ausgelieferten `koolie-code-explain`. **Alle dreizehn ausgelieferten Skills führen beide Felder** – die Bedingung ist im Bestand erfüllt. ⚠️ **Zwei Grenzen:** Die Abweisung nennt den **Arbeitsbereich** als Grund, nicht den Skill – wer sie am Wortlaut zurechnet, rechnet sie falsch zu; und **ein Skill, der nur eines der beiden Felder trägt, bekommt keine Einschränkung und keine Meldung** (`K-93`). Der Gegenbefund beim Schwesterpack bleibt davon unberührt (B01, `CR-2026-050`, D-50). 🟢 **Auch für `exec` belegt** (Stichprobe des Owners, 2026-09-28, D-468, `K-187`): Unter `koolie-change-analyze` wurden `git status` und `find` mit *„Permission denied for this tool.“* abgewiesen, obwohl die Berechtigungsdatei `Exec(git status)` freigibt – auch diese Meldung nennt den Skill nicht. Ausgelesen aus der Sitzungsdatenbank des Clients (`sessions.db`, Tabelle `tool_call_state`) |
95
92
  | S4 | Schreibende Skills nur benutzergetriggert | Frontmatter `triggers` – Framework-Konvention, statisch geprüft durch `.koolie/core/tests/scripts/validate-framework.py` | `[TEXTUELL]` | `[EMPF]`; die Laufzeitwirkung ist Modellverhalten. **Reichweite:** Die Zusage gilt für die Skill-Ablage, die das Framework schreibt. Skills aus Ablagen außerhalb des Repositoriums unterliegen diesen Konventionen nicht; sie sind nach Regel 2.6 der Prioritätshierarchie ebenenlos und dürfen den Handlungsspielraum nur einschränken (`AP2-DD-16`, `CR-2026-032`) |
96
93
  | S5 | Die geladenen Skills sind vollständig aufzählbar, samt Herkunft und Aufrufbarkeit | `devin skills list --json` führt je Skill `provider`, `base_dir` und `triggers`; `devin skills paths` nennt die Suchpfade | `[TEXTUELL]` | **Beobachtet – mit demselben Vorbehalt wie R5.** Am 2026-09-11 führte die Liste 81 Skills, davon 67 aus `~\.claude\skills\` mit `[user,model]` (`AP2-DD-16`, K-24). `devin skills paths` nennt diese Ablage jedoch **nicht** (ERH-03): Die Aufzählung der Skills ist vollständig, die der Pfade nicht. Aufzählbarkeit ist zudem keine Kontrolle – die Liste entsteht nur, wenn ein Mensch das Kommando ausführt. **Zweiter Befund am 2026-09-12 (ERH-17):** Der Block `<available_skills>`, den der Client in den Sitzungskontext stellt, **nennt je Skill den vollen Quellpfad** – die Auskunft existiert also, nur nicht in dem Kommando, das sie verspricht. Als Ersatz für die fehlende Pfadangabe von `devin skills paths` steht daneben `install.py --list-skills` (`CR-2026-041` E3), das den Teil aufzählt, für den das Framework einstehen kann. **Am 2026-09-22 ist die Grenze dieser Aufzählung gemessen** (D-288): `devin skills list` führt **alle zwölf** Skills des Frameworks, der Sitzungsschritt `<available_skills>` führt **drei** – die mit `triggers: model` – und dazu **zwei eingebaute Skills des Clients**, die in keiner Auflistung des Projekts stehen. Die Auflistung zeigt etwas, was die Sitzung nicht sieht, und verschweigt etwas, was sie sieht. **Wer die Skillmenge einer Sitzung wissen will, liest die Mitschrift, nicht die Kommandozeile** |
97
94
 
98
95
  ### B – Berechtigungen
99
96
 
100
- > **`[TECHNISCH]` heißt in diesem Block:** Die Engine setzt die Regel durch, **solange der Betriebsmodus die Berechtigungsprüfung nicht abschaltet** (D-35). 🔴 **`--permission-mode dangerous` hebt den gesamten `deny`-Korb auf** (D-281, gemessen am 2026-09-22): `Read(.env)` wurde gelesen, `Exec(git push)` ausgeführt – beide stehen unter `_core_rules_integrity.deny_must_contain`, also in der Liste, die das Projekt nicht entfernen darf. Sie sind nicht entfernt, sondern von außen abgeschaltet worden, ohne die Datei anzufassen. **Alle Einstufungen `[TECHNISCH]` dieses Blocks gelten deshalb für die Betriebsmodi `auto`, `accept-edits` und `smart`** – gemessen sind `auto`, `accept-edits`, `smart` und `dangerous`. **Im Modus `dangerous` trägt die zweite Linie:** Der Schutz-Hook hat denselben Lesezugriff blockiert, den die Berechtigungsschicht durchließ (Lauf `H-D`, Baum ohne Berechtigungsregeln; zuvor beobachtet am 2026-09-11 im Modus `Bypass`, `AP2-DD-12`). Erste und zweite Linie fallen unter verschiedenen Bedingungen – das ist die empirische Rechtfertigung des Hooks. ⚠️ Diesen Satz setzt keine Prüfung durch (dieselbe Bauform wie `K-41`).
97
+ > **`[TECHNISCH]` heißt in diesem Block:** Die Engine setzt die Regel durch, solange der Betriebsmodus die Berechtigungsprüfung nicht abschaltet. Die Einstufungen gelten für die Betriebsmodi `auto`, `accept-edits` und `smart`; gemessen sind diese drei und `dangerous`. `--permission-mode dangerous` hebt den gesamten `deny`-Korb auf (gemessen am 2026-09-22): `Read(.env)` wurde gelesen und `Exec(git push)` ausgeführt, obwohl beide unter `_core_rules_integrity.deny_must_contain` stehen, der Liste, die das Projekt nicht entfernen darf. Dort trägt der Schutz-Hook: Er blockierte denselben Lesezugriff (Lauf `H-D`, Baum ohne Berechtigungsregeln; ebenso am 2026-09-11 im Modus `Bypass`, `AP2-DD-12`). Diese Aussage setzt keine Prüfung durch.
101
98
  >
102
- > **Und nur für eine Sitzung, die im Verzeichnis der Installation startet** (D-408, gemessen am 2026-09-26 mit Clientversion 3000.11.1, `tests/protocols/2026-09-26-mehrprojekt-tokenlast.md`). Startet die Sitzung in einem Unterverzeichnis mit eigenem git-Repositorium, lädt der Client **weder die Wurzel-Anweisung der Elternebene noch deren Berechtigungsdatei und Hooks**: Ein Kennwort aus der Wurzel-Anweisung kannte die Sitzung nicht, ein aufzeichnender Hook lief nicht, und eine durch `Write(**/*.lock)` gesperrte Datei wurde im Modus `accept-edits` angelegt. In der Wurzel lief der Hook und blockierte den Lesezugriff auf `.env`. ⚠️ **Ein Kontrolllauf für genau diese `deny`-Regel in der Wurzel fehlt:** Das Modell hat den Schreibaufruf dort nicht abgesetzt, weil die Statusmeldung das Overlay als nicht aktiv auswies. **Eine eigene Installation im Unterverzeichnis trägt** – ihr Schutz-Hook blockierte, und nur ihre Wurzel-Anweisung lädt. **Nichts meldet einen falschen Startort** (`K-159`).
99
+ > **Die Sitzung muss im Verzeichnis der Installation starten** (gemessen am 2026-09-26 mit Clientversion 3000.11.1, `tests/protocols/2026-09-26-mehrprojekt-tokenlast.md`). In einem Unterverzeichnis mit eigenem git-Repositorium lädt der Client weder die Wurzel-Anweisung der Elternebene noch deren Berechtigungsdatei und Hooks: Ein Kennwort aus der Wurzel-Anweisung war unbekannt, ein aufzeichnender Hook lief nicht, und eine durch `Write(**/*.lock)` gesperrte Datei wurde im Modus `accept-edits` angelegt. In der Wurzel lief der Hook und blockierte den Lesezugriff auf `.env`; ein Kontrolllauf für die `deny`-Regel dort fehlt, weil das Modell den Schreibaufruf nicht absetzte. Eine eigene Installation im Unterverzeichnis trägt. Einen falschen Startort meldet nichts.
103
100
 
104
101
  | ID | Zusage des Frameworks | Kern | Mechanismus beim Client | Einstufung | Beleg |
105
102
  |---|---|---|---|---|---|
106
103
  | B1 | Berechtigungen versioniert im Repository | ja | `.devin/config.json` | `[TECHNISCH]` | `[DOK]` **`QD-12`** (Zuordnung `K-62`) |
107
104
  | B2 | Verweigern vor Rückfragen vor Erlauben | ja | Zusammenführung über Ebenen | `[TECHNISCH]` | `[DOK]` **`QD-11`** (Zuordnung `K-62`) |
108
- | B3 | Secret-Dateien per Pfadmuster lesegeschützt | ja | Verweigerungsregeln auf `.env`, `**/*.pem`, `**/secrets/**` und weitere. **Je Kanal:** direktes Lesen **wirkt** (Regel und Hook); Shell **wirkt** über den Schutz-Hook; **Suche wirkt über beide Schichten** (D-87) – ohne die Suchklasse im Hook-Matcher kam in einer Umgebung mit nur diesem Hook ein Secret über `grep` wörtlich heraus (gemessen 2026-09-14, `tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md`, Läufe H1 und H2; wie ausgeliefert trug die Berechtigungsschicht, Läufe P4 und W1); **Notebook-Lesen wirkt nachweislich** (2026-09-22) – die Klasse `Read(…)` dieses Clients umfasst auch `notebook_read` (D-278, Lauf `KA-NB-P`), obwohl das Manifest es nicht nennt; **Notebook-Schreiben und Unterprozess nicht nachgewiesen**. Im untersagten Betriebsmodus greift die Regel nicht und allein der Hook trägt (`AP2-DD-12`, D-35; am 2026-09-22 für `--permission-mode dangerous` nachgemessen, Läufe `KA-D-P3` und `H-D`) | `[TECHNISCH]` für Lesen, Suche, Notebook-Lesen und Shell; `[TEXTUELL]` für den Unterprozess | Mechanismus `[DOK]` **`QD-11`** (Zuordnung `K-62`). **Muster-Semantik erhoben am 2026-09-22 in neun Läufen** (D-277): `**/` trifft **null** Verzeichnisse (`server.pem` auf Wurzelebene fällt unter `Read(**/*.pem)`) **und mehrere** (`unter/tief/gold.pem`); ein Präfixmuster ohne `**/` wirkt (`Read(deploy/**)`). 🔴 **Grenze, gemessen: Die Muster unterscheiden Groß- und Kleinschreibung.** `Read(**/*secret*)` weist `klein/notiz.secret` ab und lässt `UNTEN/Notiz.SECRET` durch – zweimal gefahren –, während NTFS beide Schreibweisen als **dieselbe Datei** führt. **Der Schutz-Hook tut das Gegenteil** (Zeile `H4`), **und seine Semantik gilt** (`K-92`, D-492): Die Berechtigungsschicht gehört dem Client und lässt sich nicht angleichen; für das direkte Lesen trägt deshalb der Hook die Zusage in jeder Schreibweise, die Regel nur in der des Musters. Beim Pack `claude-code` unterscheidet die Berechtigungsschicht nicht (gemessen am 2026-09-30). **Reichweite je Kanal**: Der Befund B04 ist am Schutz-Hook gemessen (`tests/protocols/2026-09-12-B04-B05-gegenpruefung.md`); der Hook ist bei beiden Packs derselbe, die Berechtigungsschicht nicht |
109
- | B4 | Framework- und Overlay-Artefakte schreibgeschützt | ja | Verweigerungsregeln auf `AGENTS.md`, `.devin/` und das **gesamte** Kernverzeichnis (`.koolie/core/**`, `CR-2026-012`). **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). **Je Kanal:** direktes Schreiben **wirkt**; **Shell und Unterprozess wirken nicht** – die Berechtigungsdatei führt für `exec` ausschließlich Befehlsverbote und keine Pfadregel, und der Schutz-Hook prüft das Kernverzeichnis nur bei schreibenden Werkzeugen. Was den Shell-Schreibweg aufhält, ist die Regelschicht | `[TECHNISCH]` für das direkte Schreiben; **`[TEXTUELL]` für Shell und Unterprozess** | wie B3. **Reichweite je Kanal**: Der Befund B04 ist am Schutz-Hook gemessen (`tests/protocols/2026-09-12-B04-B05-gegenpruefung.md`); der Hook ist bei beiden Packs derselbe, die Berechtigungsschicht nicht (Läufe B04-1 bis B04-3) |
110
- | B5 | CI-, Quality-Gate- und Lockdateien schreibgeschützt | ja | Verweigerungsregeln auf Lockdateien und die Overlay-Platzhalterpfade. **Je Kanal wie B4:** direktes Schreiben wirkt, Shell und Unterprozess nicht | `[TECHNISCH]` für das direkte Schreiben; **`[TEXTUELL]` für Shell und Unterprozess** | wie B4 |
105
+ | B3 | Secret-Dateien per Pfadmuster lesegeschützt | ja | Verweigerungsregeln auf `.env`, `**/*.pem`, `**/secrets/**` und weitere. Je Kanal: direktes Lesen wirkt (Regel und Hook); Shell wirkt über den Schutz-Hook; Suche wirkt über beide Schichten – ohne die Suchklasse im Hook-Matcher kam in einer Umgebung mit nur diesem Hook ein Secret über `grep` wörtlich heraus (gemessen 2026-09-14, `tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md`, Läufe H1 und H2; wie ausgeliefert trug die Berechtigungsschicht, Läufe P4 und W1); Notebook-Lesen wirkt (2026-09-22) – die Klasse `Read(…)` dieses Clients umfasst auch `notebook_read` (Lauf `KA-NB-P`), obwohl das Manifest es nicht nennt; Notebook-Schreiben und Unterprozess nicht nachgewiesen. Im untersagten Betriebsmodus greift die Regel nicht und allein der Hook trägt (`AP2-DD-12`; am 2026-09-22 für `--permission-mode dangerous` nachgemessen, Läufe `KA-D-P3` und `H-D`) | `[TECHNISCH]` für Lesen, Suche, Notebook-Lesen und Shell; `[TEXTUELL]` für den Unterprozess | Mechanismus `[DOK]` **`QD-11`** (Zuordnung `K-62`). **Muster-Semantik erhoben am 2026-09-22 in neun Läufen** (D-277): `**/` trifft **null** Verzeichnisse (`server.pem` auf Wurzelebene fällt unter `Read(**/*.pem)`) **und mehrere** (`unter/tief/gold.pem`); ein Präfixmuster ohne `**/` wirkt (`Read(deploy/**)`). 🔴 **Grenze, gemessen: Die Muster unterscheiden Groß- und Kleinschreibung.** `Read(**/*secret*)` weist `klein/notiz.secret` ab und lässt `UNTEN/Notiz.SECRET` durch – zweimal gefahren –, während NTFS beide Schreibweisen als **dieselbe Datei** führt. **Der Schutz-Hook tut das Gegenteil** (Zeile `H4`), **und seine Semantik gilt** (`K-92`, D-492): Die Berechtigungsschicht gehört dem Client und lässt sich nicht angleichen; für das direkte Lesen trägt deshalb der Hook die Zusage in jeder Schreibweise, die Regel nur in der des Musters. Beim Pack `claude-code` unterscheidet die Berechtigungsschicht nicht (gemessen am 2026-09-30). **Reichweite je Kanal**: Der Befund B04 ist am Schutz-Hook gemessen (`tests/protocols/2026-09-12-B04-B05-gegenpruefung.md`); der Hook ist bei beiden Packs derselbe, die Berechtigungsschicht nicht |
106
+ | B4 | Framework- und Overlay-Artefakte schreibgeschützt | ja | Verweigerungsregeln auf `AGENTS.md`, `.devin/` und das gesamte Kernverzeichnis (`.koolie/core/**`). Das Overlay sperrt allein der Schutz-Hook; die Berechtigungsdatei führt es nicht (nachgezählt an einer Installation am 2026-09-29). Je Kanal: direktes Schreiben wirkt; Shell und Unterprozess wirken nicht – die Berechtigungsdatei führt für `exec` ausschließlich Befehlsverbote und keine Pfadregel, und der Schutz-Hook prüft das Kernverzeichnis nur bei schreibenden Werkzeugen. Was den Shell-Schreibweg aufhält, ist die Regelschicht | `[TECHNISCH]` für das direkte Schreiben; **`[TEXTUELL]` für Shell und Unterprozess** | wie B3. **Reichweite je Kanal**: Der Befund B04 ist am Schutz-Hook gemessen (`tests/protocols/2026-09-12-B04-B05-gegenpruefung.md`); der Hook ist bei beiden Packs derselbe, die Berechtigungsschicht nicht (Läufe B04-1 bis B04-3) |
107
+ | B5 | CI-, Quality-Gate- und Lockdateien schreibgeschützt | ja | Verweigerungsregeln auf Lockdateien und die Overlay-Platzhalterpfade. Je Kanal wie B4: direktes Schreiben wirkt, Shell und Unterprozess nicht | `[TECHNISCH]` für das direkte Schreiben; **`[TEXTUELL]` für Shell und Unterprozess** | wie B4 |
111
108
  | B6 | Befehle per Muster verweigerbar | ja | Verweigerungsregeln auf Push-, Merge-, Lösch- und Rechteausweitungsbefehle | `[TECHNISCH]` | wie B3 |
112
109
  | B7 | Schreiboperationen fragen zurück | – | Rückfrageregel auf alle Schreiboperationen | `[TECHNISCH]` | `[DOK]` **`QD-11`** (Zuordnung `K-62`) |
113
- | B8 | Netzwerkzugriff standardmäßig unterbunden | – | Verweigerungsregeln auf das Abrufwerkzeug sowie auf die Befehle `curl`, `wget`, `ssh` und `scp`. **Je Kanal:** das Abrufwerkzeug **wirkt**; der Shell-Kanal **nur für diese vier Programme** – jedes andere netzfähige Programm ist nicht erfasst, und die Liste wird bewusst nicht verlängert | `[TECHNISCH]` für das Abrufwerkzeug; **`[TEXTUELL]` für den Shell-Kanal** | wie B3. **Reichweite je Kanal**: Der Befund B04 ist am Schutz-Hook gemessen (`tests/protocols/2026-09-12-B04-B05-gegenpruefung.md`); der Hook ist bei beiden Packs derselbe, die Berechtigungsschicht nicht (Lauf B04-6) |
114
- | B9 | Nutzerlokale Konfiguration kann nur verschärfen | – | `.devin/config.local.json` und die Benutzerkonfiguration `%APPDATA%\devin\config.json` – **Framework-Regel, keine Produkteigenschaft** | `[TEXTUELL]` | `[EMPF]`. **Der Client verhindert eine Lockerung nicht.** Gemessen am 2026-09-11 in beiden Richtungen (K-27, ERH-11): Der Wert der Benutzerkonfiguration setzt sich gegen den projektseitigen durch – auch dann, wenn der projektseitige der strengere ist. Eine projektseitige Verschärfung ist damit ein Standard, den jede Arbeitsstation still aufheben kann, wirksam dort, wo die Benutzerkonfiguration schweigt (der Normalfall). Bei `claude-code` ist die Lage anders, gemessen am 2026-09-12 (`tests/protocols/2026-09-12-erhebungen-K28-S5-B9-bypass.md`, Abschnitt 2.3): Dort setzt sich eine Verweigerung von jeder Ebene durch – die Benutzerkonfiguration kann verschärfen, nicht lockern, und auch ein nutzerglobales `defaultMode: bypassPermissions` blieb wirkungslos. **Dieselbe Frage, zwei Clients, entgegengesetzte Antworten** |
115
- | B10 | Externer Abruf auf freigegebene Domains beschränkbar | – | **Erhoben am 2026-09-22: Die Berechtigungsdatei erreicht den Abrufkanal dieses Clients in keiner Richtung** (D-279). **Das Abrufwerkzeug heißt `webfetch`; `Fetch` ist kein Werkzeugname dieses Clients** – die Mitschrift führt die 25 Werkzeuge unter `agent.tool_definitions`. Acht Läufe über sechs Bäume, drei Schreibweisen und drei Betriebsmodi: `deny: Fetch(*)`, kein Korb, `allow: Fetch(*)`, `allow: Fetch(example.com)` und **`allow: webfetch`** führen zum selben Ausgang wie der leere Korb – der Aufruf scheitert am **Betriebsmodus**, und der Client nennt in keinem Lauf eine Regel als Quelle. Damit ist die Frage nach der Domain-Angabe beantwortet, ohne gestellt zu werden: Ein Argument kann nicht ausgewertet werden, wenn schon der Werkzeugname nicht trifft. Die Regel `Fetch(*)` bleibt in der werkzeugneutralen Regelmenge des Kerns und ist bei diesem Client **mechanisch unwirksam** – dieselbe Bauform wie `AP2-CC-02`, nur dass dieser Client sie beim Sitzungsstart nicht einmal meldet. **Ersatz: keiner durch das Framework, und das ist eine Aussage und kein Rest.** Der Kern sagt die Beschränkung nicht zu (B11, D-59); was den Kanal bei diesem Client steuert, ist allein der **Betriebsmodus** – `auto`, `accept-edits` und `smart` weisen jeden Abruf ab, `dangerous` lässt jeden durch. **Der organisatorische Ersatz** ist die Freigabezeile des Overlays, und sie hat nach D-65 keine technische Seite | `[NICHT ABBILDBAR]` | **gemessen**, `tests/protocols/2026-09-22-ap2-rest-devin-desktop.md` Abschnitt 6. Der Kern sagt diese Beschränkung nicht zu (B11, D-59); die Zeile hält fest, warum sie es auch nicht könnte |
110
+ | B8 | Netzwerkzugriff standardmäßig unterbunden | – | Verweigerungsregeln auf das Abrufwerkzeug sowie auf die Befehle `curl`, `wget`, `ssh` und `scp`. Je Kanal: das Abrufwerkzeug wirkt; der Shell-Kanal nur für diese vier Programme – andere netzfähige Programme sind nicht erfasst, und die Liste wird nicht verlängert | `[TECHNISCH]` für das Abrufwerkzeug; **`[TEXTUELL]` für den Shell-Kanal** | wie B3. **Reichweite je Kanal**: Der Befund B04 ist am Schutz-Hook gemessen (`tests/protocols/2026-09-12-B04-B05-gegenpruefung.md`); der Hook ist bei beiden Packs derselbe, die Berechtigungsschicht nicht (Lauf B04-6) |
111
+ | B9 | Nutzerlokale Konfiguration kann nur verschärfen | – | `.devin/config.local.json` und die Benutzerkonfiguration `%APPDATA%\devin\config.json` – Framework-Regel, keine Produkteigenschaft | `[TEXTUELL]` | `[EMPF]`. **Der Client verhindert eine Lockerung nicht.** Gemessen am 2026-09-11 in beiden Richtungen (K-27, ERH-11): Der Wert der Benutzerkonfiguration setzt sich gegen den projektseitigen durch – auch dann, wenn der projektseitige der strengere ist. Eine projektseitige Verschärfung ist damit ein Standard, den jede Arbeitsstation still aufheben kann, wirksam dort, wo die Benutzerkonfiguration schweigt (der Normalfall). Bei `claude-code` ist die Lage anders, gemessen am 2026-09-12 (`tests/protocols/2026-09-12-erhebungen-K28-S5-B9-bypass.md`, Abschnitt 2.3): Dort setzt sich eine Verweigerung von jeder Ebene durch – die Benutzerkonfiguration kann verschärfen, nicht lockern, und auch ein nutzerglobales `defaultMode: bypassPermissions` blieb wirkungslos. **Dieselbe Frage, zwei Clients, entgegengesetzte Antworten** |
112
+ | B10 | Externer Abruf auf freigegebene Domains beschränkbar | – | Erhoben am 2026-09-22: Die Berechtigungsdatei erreicht den Abrufkanal dieses Clients in keiner Richtung. Das Abrufwerkzeug heißt `webfetch`; `Fetch` ist kein Werkzeugname dieses Clients (die Mitschrift führt die 25 Werkzeuge unter `agent.tool_definitions`). In acht Läufen über sechs Bäume, drei Schreibweisen und drei Betriebsmodi führen `deny: Fetch(*)`, kein Korb, `allow: Fetch(*)`, `allow: Fetch(example.com)` und `allow: webfetch` zum selben Ausgang wie der leere Korb: Der Aufruf scheitert am Betriebsmodus, und der Client nennt nie eine Regel als Quelle. Eine Domain-Angabe kann deshalb nicht wirken. Die Regel `Fetch(*)` bleibt in der werkzeugneutralen Regelmenge des Kerns und ist hier mechanisch unwirksam – wie `AP2-CC-02`, nur ohne Meldung beim Sitzungsstart. Den Kanal steuert allein der Betriebsmodus: `auto`, `accept-edits` und `smart` weisen jeden Abruf ab, `dangerous` lässt jeden durch. Ersatz durch das Framework: keiner, der Kern sagt die Beschränkung nicht zu (B11). Organisatorischer Ersatz ist die Freigabezeile des Overlays, ohne technische Seite | `[NICHT ABBILDBAR]` | **gemessen**, `tests/protocols/2026-09-22-ap2-rest-devin-desktop.md` Abschnitt 6. Der Kern sagt diese Beschränkung nicht zu (B11, D-59); die Zeile hält fest, warum sie es auch nicht könnte |
116
113
 
117
114
  ### H – Hooks
118
115
 
119
116
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
120
117
  |---|---|---|---|---|
121
118
  | H1 | Prüfung vor Werkzeugausführung | `hooks.PreToolUse` in `.devin/config.json`; Matcher auf lesende, schreibende und ausführende Werkzeuge | `[TECHNISCH]` | **beobachtet** (AP2, `tests/protocols/2026-09-11-AP2-devin-desktop.md`). Die Hooks stehen in der Berechtigungsdatei, weil der Client eine eigene Hook-Datei nicht liest (D-32) |
122
- | H2 | Prüfung kann **blockieren** | Exit-Code 2 des Hook-Befehls bricht die Operation ab. **Fail-closed** (`hook_fail_closed: true`): Das Eingabeschema ist gegen eine Installation belegt, damit ist die Bedingung aus D-31 erfüllt | `[TECHNISCH]` | **beobachtet**: Ein Lesezugriff auf eine Secret-Datei wurde blockiert – in einer Umgebung ohne Regeltexte und bei ausgeschalteter Berechtigungsschranke, dort kann nichts als Anweisung gewirkt haben |
119
+ | H2 | Prüfung kann **blockieren** | Exit-Code 2 des Hook-Befehls bricht die Operation ab. Fail-closed (`hook_fail_closed: true`): Das Eingabeschema ist gegen eine Installation belegt, damit darf der Hook sperren, statt nur zu warnen | `[TECHNISCH]` | **beobachtet**: Ein Lesezugriff auf eine Secret-Datei wurde blockiert – in einer Umgebung ohne Regeltexte und bei ausgeschalteter Berechtigungsschranke, dort kann nichts als Anweisung gewirkt haben |
123
120
  | H3 | Statusmeldung beim Sitzungsstart | `SessionStart` mit `hook-overlay-status.py` in `.devin/config.json` | `[TECHNISCH]` | `[DOK]` **`QD-13`** Mechanismus (Zuordnung `K-62`); **die Meldung selbst ist nicht beobachtet**. Der Agent nannte den Overlay-Status zwar, konnte ihn aber aus den Regeltexten haben (AP2-DD-10) |
124
- | H4 | Eingabeschema und Pfadidentität des Schutz-Hooks | Wie beim Pack `claude-code`: Ereignisprüfung, **unprüfbar** als eigener Ausgang (blockiert, weil dieses Pack `hook_fail_closed: true` führt), Prüfung der Operation statt des Umschlags, Pfadidentität über den aufgelösten Pfad, alle Pfadmuster ohne Rücksicht auf Groß-/Kleinschreibung. Eine Angabe `/c/…` löst der Hook unter Windows in beiden Lesarten auf – dieser Client liest sie als `C:\c\…` (D-285), eine MSYS-Shell als `C:\…` (D-491, `K-96`). **Grenze:** Ein Hook prüft **vor** dem Zugriff; eine zwischenzeitlich umgebogene Verknüpfung kann er nicht ausschließen (`CR-2026-047` E5) | `[TECHNISCH]`, mit benannter Zeitlücke | **Gemessen am 2026-09-13** (`tests/protocols/2026-09-13-B06-gegenpruefung.md`, Befund **B06**): Die fünf Hook-Aufzeichnungen dieses Packs führen `hook_event_name`, `prompt_id`, `session_id`, `tool_input`, `tool_name`, `tool_use_id` – **kein** `transcript_path` und **kein** `cwd`. Der Fehlblockade-Befund des anderen Packs tritt hier deshalb nicht auf; **das ist eine Eigenschaft dieses Schemas, keine des Hooks** |
121
+ | H4 | Eingabeschema und Pfadidentität des Schutz-Hooks | Wie beim Pack `claude-code`: Ereignisprüfung, unprüfbar als eigener Ausgang (blockiert, weil dieses Pack `hook_fail_closed: true` führt), Prüfung der Operation statt des Umschlags, Pfadidentität über den aufgelösten Pfad, alle Pfadmuster ohne Rücksicht auf Groß-/Kleinschreibung. Eine Angabe `/c/…` löst der Hook unter Windows in beiden Lesarten auf – dieser Client liest sie als `C:\c\…`, eine MSYS-Shell als `C:\…`. Grenze: Ein Hook prüft vor dem Zugriff; eine zwischenzeitlich umgebogene Verknüpfung kann er nicht ausschließen | `[TECHNISCH]`, mit benannter Zeitlücke | **Gemessen am 2026-09-13** (`tests/protocols/2026-09-13-B06-gegenpruefung.md`, Befund **B06**): Die fünf Hook-Aufzeichnungen dieses Packs führen `hook_event_name`, `prompt_id`, `session_id`, `tool_input`, `tool_name`, `tool_use_id` – **kein** `transcript_path` und **kein** `cwd`. Der Fehlblockade-Befund des anderen Packs tritt hier deshalb nicht auf; **das ist eine Eigenschaft dieses Schemas, keine des Hooks** |
125
122
 
126
123
  ### A – Agentenprofile
127
124
 
128
125
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
129
126
  |---|---|---|---|---|
130
- | A1 | Rein lesendes Reviewprofil | `.devin/agents/fw-reviewer.md` | `[TECHNISCH]` | **Profilwirkung erhoben am 2026-09-22 und belegt** (D-284, `tests/protocols/2026-09-22-ap2-rest-devin-desktop.md` Abschnitt 7): Das `allowed-tools` eines Subagentenprofils **bestimmt den Werkzeugbestand des Unteragenten.** Das Vollzugriffsprofil des Clients ruft `exec` und `write` auf; eine synthetische Sonde mit `read, grep, glob` und neutralem Rollentext ruft **kein** Werkzeug auf, und `fw-reviewer` verhält sich wie die Sonde. **Das Profil steht in der Sitzung**, mit seiner eigenen Beschreibung und vor den beiden eingebauten Profilen des Clients. **Der Beleg kommt nicht aus der Mitschrift:** `--export` führt den Unteragenten nicht (D-282) – gemessen über einen Aufzeichnungs-Hook mit Positivkontrolle. **Grenze:** Belegt ist der **Werkzeugbestand**, nicht die Reichweite je Werkzeug. Mechanismus `[DOK]` **`QD-14`** (Zuordnung `K-62`); Startwerkzeug `run_subagent`, erhoben am selben Tag |
127
+ | A1 | Rein lesendes Reviewprofil | `.devin/agents/koolie-reviewer.md` | `[TECHNISCH]` | **Profilwirkung erhoben am 2026-09-22 und belegt** (D-284, `tests/protocols/2026-09-22-ap2-rest-devin-desktop.md` Abschnitt 7): Das `allowed-tools` eines Subagentenprofils **bestimmt den Werkzeugbestand des Unteragenten.** Das Vollzugriffsprofil des Clients ruft `exec` und `write` auf; eine synthetische Sonde mit `read, grep, glob` und neutralem Rollentext ruft **kein** Werkzeug auf, und `koolie-reviewer` verhält sich wie die Sonde. **Das Profil steht in der Sitzung**, mit seiner eigenen Beschreibung und vor den beiden eingebauten Profilen des Clients. **Der Beleg kommt nicht aus der Mitschrift:** `--export` führt den Unteragenten nicht (D-282) – gemessen über einen Aufzeichnungs-Hook mit Positivkontrolle. **Grenze:** Belegt ist der **Werkzeugbestand**, nicht die Reichweite je Werkzeug. Mechanismus `[DOK]` **`QD-14`** (Zuordnung `K-62`); Startwerkzeug `run_subagent`, erhoben am selben Tag |
131
128
  | A2 | Rein lesendes Analyseprofil für Modus M1 | Subagent-Profil `subagent_explore` | `[TECHNISCH]` | `[DOK]` **`QD-14`** (Zuordnung `K-62`: eingebaute Profile); übernommen mit `CR-2026-025` |
132
129
 
133
130
  ### M – Modi und Sitzungsfreigaben
@@ -135,23 +132,23 @@ darf nicht davon abhängen, mit welchem Werkzeug gearbeitet wird.
135
132
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
136
133
  |---|---|---|---|---|
137
134
  | M1 | Standardmodus fragt bei Schreiben und Befehlen zurück | Modus `Normal` (CLI: `auto`) | `[TECHNISCH]` | `[DOK]` (QD-11); die CLI-Namen abgeglichen am 2026-09-11 gegen 3.9.19 (ERH-08) |
138
- | M2 | Modus ohne Rückfragen ausschließbar | `Bypass` (CLI: `dangerous`, auch über `DEVIN_PERMISSION_MODE`) ist per D-05 untersagt. **Eine Sperre des Modus selbst ist bei diesem Client nicht dokumentiert; was es gibt, ist die Begrenzung seiner Wirkung** durch die Terminal Permissions der Organisationsebene, die laut Team-Dokumentation den höchsten Vorrang haben und von lokalen wie projektseitigen Konfigurationen nicht überschrieben werden – sie greifen also auch bei gewähltem Bypass | `[TEXTUELL]` | `[DOK]` für die Wirkungsbegrenzung (QD-16); **nicht beobachtet** – ohne Team-Plan mit Admin-Kontrollen nicht beobachtbar (K-05). Abgeglichen am 2026-09-11 gegen 3.9.19. Bei `claude-code` ist die Modus-Sperre selbst dokumentiert und belegt (AP2-CC-05) – die Packs unterscheiden sich hier. 🔴 **Nachtrag 2026-09-18 (`FW-AK-01`), und er trifft die tragende Hälfte dieser Zeile:** Die Wirkungsbegrenzung steht und fällt damit, dass die Organisationsebene **unüberschreibbar** ist – `QD-12` sagt das unverändert (*„Organization-level (enterprise) settings can **never** be overridden by project or user config"*). **In der verbindlichen Zielspanne dieses Packs galt es nicht.** Der Changelog weist zu 3.10.31 (2026-09-16) aus: *„Restricted Mode blocks restricted workspace settings written in nested object form, not just the dotted form (CVE-2026-81376)."* Bis einschließlich 3.10.27 wurde dieselbe eingeschränkte Einstellung also **je nach Schreibweise** durchgesetzt oder nicht – und `QD-12` verwendet in seinen Beispielen die verschachtelte Form und nennt den Restricted Mode mit keinem Wort. **Die Zielspanne `3.9.x` liegt vollständig vor der Behebung.** Das ist die Bauform von D-150 im Produkt: dieselbe Regel in zwei Ausdrucksformen, durchgesetzt nur in einer. Das Framework hat die eigene Entsprechung mit Prüfung 54 geschlossen (D-155) |
135
+ | M2 | Modus ohne Rückfragen ausschließbar | `Bypass` (CLI: `dangerous`, auch über `DEVIN_PERMISSION_MODE`) ist untersagt (`03-security.md` Abschnitt 4). Eine Sperre des Modus selbst ist bei diesem Client nicht dokumentiert, nur die Begrenzung seiner Wirkung durch die Terminal Permissions der Organisationsebene, die laut Team-Dokumentation den höchsten Vorrang haben und von lokalen wie projektseitigen Konfigurationen nicht überschrieben werden – sie greifen also auch bei gewähltem Bypass | `[TEXTUELL]` | `[DOK]` für die Wirkungsbegrenzung (QD-16); **nicht beobachtet** – ohne Team-Plan mit Admin-Kontrollen nicht beobachtbar (K-05). Abgeglichen am 2026-09-11 gegen 3.9.19. Bei `claude-code` ist die Modus-Sperre selbst dokumentiert und belegt (AP2-CC-05) – die Packs unterscheiden sich hier. 🔴 **Nachtrag 2026-09-18 (`FW-AK-01`), und er trifft die tragende Hälfte dieser Zeile:** Die Wirkungsbegrenzung steht und fällt damit, dass die Organisationsebene **unüberschreibbar** ist – `QD-12` sagt das unverändert (*„Organization-level (enterprise) settings can **never** be overridden by project or user config"*). **In der verbindlichen Zielspanne dieses Packs galt es nicht.** Der Changelog weist zu 3.10.31 (2026-09-16) aus: *„Restricted Mode blocks restricted workspace settings written in nested object form, not just the dotted form (CVE-2026-81376)."* Bis einschließlich 3.10.27 wurde dieselbe eingeschränkte Einstellung also **je nach Schreibweise** durchgesetzt oder nicht – und `QD-12` verwendet in seinen Beispielen die verschachtelte Form und nennt den Restricted Mode mit keinem Wort. **Die Zielspanne `3.9.x` liegt vollständig vor der Behebung.** Das ist die Bauform von D-150 im Produkt: dieselbe Regel in zwei Ausdrucksformen, durchgesetzt nur in einer. Das Framework hat die eigene Entsprechung mit Prüfung 54 geschlossen (D-155) |
139
136
  | M3 | Freigabe auf die Sitzung begrenzbar | Sitzungsfreigaben „einmalig" und „für die Sitzung" | `[TECHNISCH]` | `[DOK]` **`QD-11`** (Zuordnung `K-62`: Sitzungs-Grant-Stufen). Dieselbe Zusage beim Schwesterpack ist **nicht** zugeordnet – dort führt keine der sechs Seiten die Grant-Stufen (`K-62`) |
140
137
  | M4 | Eigener Planungsmodus für Modus M2 | Plan-Modus mit persistenter Plan-Datei unter `~/.devin/plans/plan-<session>.md`; die Datei liegt außerhalb des Repositorys | `[TECHNISCH]` | `[DOK]` **`QD-3`, `QD-4`** (Zuordnung `K-62`: der Modus aus `QD-3`, die persistente Plan-Datei aus `QD-4`); übernommen mit `CR-2026-025` |
141
138
  | M5 | Eigener Nur-Lese-Modus für Modus M1 | Plan-Modus („read-only research“) | `[TECHNISCH]` | `[DOK]` **`QD-3`** (Zuordnung `K-62`); übernommen mit `CR-2026-025` |
142
- | M6 | Modus mit selbsttätiger Übernahme von Dateiänderungen begrenzbar | `Accept Edits` (CLI: `accept-edits`) genehmigt Dateiänderungen im Workspace ohne Rückfrage; nach D-05 nur über dokumentierte Ausnahme bei Kontrollstufe niedrig zulässig. Eine Abschaltung des Modus ist nicht dokumentiert; wirksam ist auch hier allein die Wirkungsbegrenzung der Organisationsebene | `[TEXTUELL]` | `[DOK]` für den Modus (QD-11), `[EMPF]` für die Beschränkung; **nicht beobachtet** (K-05) |
143
- | M7 | Selbst beurteilender Modus begrenzbar | `Smart` (CLI: `smart`) genehmigt Workspace-Änderungen selbsttätig und beurteilt die übrigen Aktionen nach eigener Sicherheitseinschätzung; nach D-05 nur über dokumentierte Ausnahme bei Kontrollstufe niedrig zulässig. **Ein Modus, der selbst beurteilt, was sicher ist, ersetzt die menschliche Freigabe durch Modellverhalten** – das Framework lässt ihn deshalb nur als Ausnahme zu. Abschaltung nicht dokumentiert; Wirkungsbegrenzung wie M2 | `[TEXTUELL]` | `[DOK]` für den Modus (QD-11), `[EMPF]` für die Beschränkung; **nicht beobachtet** (K-05) |
139
+ | M6 | Modus mit selbsttätiger Übernahme von Dateiänderungen begrenzbar | `Accept Edits` (CLI: `accept-edits`) genehmigt Dateiänderungen im Workspace ohne Rückfrage; nach `03-security.md` Abschnitt 4 nur über dokumentierte Ausnahme bei Kontrollstufe niedrig zulässig. Eine Abschaltung des Modus ist nicht dokumentiert; wirksam ist auch hier allein die Wirkungsbegrenzung der Organisationsebene | `[TEXTUELL]` | `[DOK]` für den Modus (QD-11), `[EMPF]` für die Beschränkung; **nicht beobachtet** (K-05) |
140
+ | M7 | Selbst beurteilender Modus begrenzbar | `Smart` (CLI: `smart`) genehmigt Workspace-Änderungen selbsttätig und beurteilt die übrigen Aktionen nach eigener Sicherheitseinschätzung; nach `03-security.md` Abschnitt 4 nur über dokumentierte Ausnahme bei Kontrollstufe niedrig zulässig. Ein Modus, der selbst beurteilt, was sicher ist, ersetzt die menschliche Freigabe durch Modellverhalten. Abschaltung nicht dokumentiert; Wirkungsbegrenzung wie M2 | `[TEXTUELL]` | `[DOK]` für den Modus (QD-11), `[EMPF]` für die Beschränkung; **nicht beobachtet** (K-05) |
144
141
 
145
142
  ### X – Externe Anbindung
146
143
 
147
144
  | ID | Zusage des Frameworks | Mechanismus beim Client | Einstufung | Beleg |
148
145
  |---|---|---|---|---|
149
- | X1 | Keine externe Anbindung ohne Einzelfreigabe | Keine MCP-Konfiguration ausgeliefert, nur die `.example`-Vorlage; Rückfrageregel auf alle MCP-Werkzeuge | `[TECHNISCH]`, **mit zwei benannten Grenzen** | `[DOK]` (`QD-11`, `QD-12`), Stand 2026-09-18. **Erste Grenze:** Der Mechanismus deckt die Werkzeuganbindung. Das **fremde Agentenprotokoll**, das D-10 ebenfalls standardmäßig deaktiviert stellt, deckt er nicht – und der clientseitige Schalter ist entfallen: Changelog 3.10.23 (2026-09-10), *„ACP is always enabled — the Enable ACP toggle is gone."* Die Freigabezeile des Overlays bleibt als **organisatorische Auflage** in Kraft und hat für diesen Client keine technische Seite mehr (`K-65`). **Zweite Grenze:** Die organisationsseitige Skillquelle (`QD-9`, *„Indexed repos"*) speist Skills aus allen angebundenen Repositorien in **jede** Sitzung ein, bevor überhaupt geklont wird. Sie liegt außerhalb jeder Datei, die das Framework schreibt, und die Teameinstellungen (`QD-16`) nennen sie nicht (`K-64`) |
146
+ | X1 | Keine externe Anbindung ohne Einzelfreigabe | Keine MCP-Konfiguration ausgeliefert, nur die `.example`-Vorlage; Rückfrageregel auf alle MCP-Werkzeuge | `[TECHNISCH]`, mit zwei benannten Grenzen | `[DOK]` (`QD-11`, `QD-12`), Stand 2026-09-18. **Erste Grenze:** Der Mechanismus deckt die Werkzeuganbindung. Das **fremde Agentenprotokoll**, das D-10 ebenfalls standardmäßig deaktiviert stellt, deckt er nicht – und der clientseitige Schalter ist entfallen: Changelog 3.10.23 (2026-09-10), *„ACP is always enabled — the Enable ACP toggle is gone."* Die Freigabezeile des Overlays bleibt als **organisatorische Auflage** in Kraft und hat für diesen Client keine technische Seite mehr (`K-65`). **Zweite Grenze:** Die organisationsseitige Skillquelle (`QD-9`, *„Indexed repos"*) speist Skills aus allen angebundenen Repositorien in **jede** Sitzung ein, bevor überhaupt geklont wird. Sie liegt außerhalb jeder Datei, die das Framework schreibt, und die Teameinstellungen (`QD-16`) nennen sie nicht (`K-64`) |
150
147
  | X2 | Art und Ort der Codebasis-Indexierung bekannt | Kein Mechanismus zur Steuerung bekannt | `[NICHT ABBILDBAR]` | `BELEG OFFEN (dauerhaft)` – von außen nicht zu beobachten, Stand 2026-09-22 (`K-20`, D-292). **Kein Ersatz durch das Framework:** Was ein Client indexiert und wohin er es gibt, ist von außen nicht zu beobachten – weder die Installation noch der Validator sehen es. Die Zusage entfällt für diesen Client; K-20 hält die Frage ohne Frist offen. Nach D-41 eine **Fähigkeitszusage**, keine Kernzusage. **Nachtrag 2026-09-18 (`FW-AK-01`): der erste dokumentierte Datenpunkt, und er ist schmal.** `QD-9` sagt: *„Devin discovers skills from two sources, merged together at the start of every session: 1. Indexed repos — Devin's backend indexes `SKILL.md` files across all repositories connected to your organization."* Damit ist für **einen** Gegenstand – Skilldateien – gesagt, dass eine serverseitige Indexierung stattfindet und woher sie speist. **Über die Codebasis sagt es nichts**, der Beleg bleibt offen, und ein Steuerungsmechanismus ist weiter nicht dokumentiert (`K-64`) |
151
148
 
152
149
  ## 3. Zusammenfassung der Durchsetzungstiefe
153
150
 
154
- > **Zählregel (normativ für diese Tabelle):** Eine Zeile zählt bei ihrer **schwächsten** Einstufung. Trägt sie zwei Angaben je Zugriffskanal – `[TECHNISCH]` für direktes Lesen und Schreiben, `[TEXTUELL]` für Shell und Unterprozess –, zählt sie als `[TEXTUELL]`. Das folgt D-47: Zugesagt wird je Kanal, was gemessen ist; eine Zeile, deren Zusage in einem Kanal nur als Anweisung trägt, ist nicht technisch durchgesetzt. Prüfung 31 rechnet die Summen aus der Matrix nach (D-60).
151
+ > **Zählregel (normativ für diese Tabelle):** Eine Zeile zählt bei ihrer schwächsten Einstufung. Trägt sie zwei Angaben je Zugriffskanal – `[TECHNISCH]` für direktes Lesen und Schreiben, `[TEXTUELL]` für Shell und Unterprozess –, zählt sie als `[TEXTUELL]`. Zugesagt wird je Kanal, was gemessen ist; eine Zeile, deren Zusage in einem Kanal nur als Anweisung trägt, ist nicht technisch durchgesetzt. Prüfung 31 rechnet die Summen aus der Matrix nach.
155
152
 
156
153
  | Klasse | Anzahl | davon Kernzusagen |
157
154
  |---|---|---|
@@ -159,24 +156,24 @@ darf nicht davon abhängen, mit welchem Werkzeug gearbeitet wird.
159
156
  | `[TEXTUELL]` | **13 von 36** | 3 von 6 (B3, B4, B5 – Shell und Unterprozess) |
160
157
  | `[NICHT ABBILDBAR]` | **2 von 36** | 0 |
161
158
 
162
- **Belegstand:** Genau eine Zeile sagt `BELEG OFFEN` – **X2**, und dauerhaft (`K-20`, D-292): Was ein Client indexiert, ist von außen nicht zu beobachten. Ein Verweisbeleg (*„wie B3"*) erbt den Beleg seines Ziels (D-266); B4, B5, B6 und B8 sind deshalb mit `B3` belegt (D-297). ⚠️ Diese Angabe rechnet keine Prüfung nach. **Gegen eine Installation geprüft sind** S3, B3, B10 und A1 (2026-09-22, `CR-2026-120`, D-277 bis D-287: S3 und A1 tragen, B10 ist widerlegt, B3 trägt mit benannter Grenze) sowie H1, H2 (AP2) und R5, R6, S5 (2026-09-11). R4 und B9 sind zum Schlechteren, M2 durch den richtigen Mechanismus aufgelöst.
159
+ **Belegstand:** Genau eine Zeile sagt `BELEG OFFEN` – `X2`, dauerhaft, weil von außen nicht zu beobachten ist, was ein Client indexiert. Ein Verweisbeleg (*„wie B3"*) erbt den Beleg seines Ziels; B4, B5, B6 und B8 sind deshalb mit `B3` belegt. Diese Angabe rechnet keine Prüfung nach. Gegen eine Installation geprüft sind S3, B3, B10 und A1 (2026-09-22) sowie H1, H2 (AP2) und R5, R6, S5 (2026-09-11).
163
160
 
164
161
  ## 4. Kernzusagen ohne technische Durchsetzung
165
162
 
166
- Alle sechs Kernzusagen (B1 bis B6) sind als `[TECHNISCH]` vorgesehen; B3, B4 und B5 sind es für den direkten Zugriff, für Shell und Unterprozess `[TEXTUELL]` (Abschnitt 3). `AP2` hat **keine** der sechs zurückgenommen – `B3` ist an neun Läufen bestätigt, mit der Mustergrenze aus D-277. Ein Eintrag in diesem Abschnitt ist damit **nicht erforderlich.** ⚠️ **Zwei Grenzen gehören dazu und stehen in der Vorbemerkung des B-Blocks:** Der Modus `--permission-mode dangerous` hebt den `deny`-Korb auf (D-281) – dort trägt der Schutz-Hook –, und die Pfadmuster der Berechtigungsschicht unterscheiden Groß- und Kleinschreibung (D-277, `K-92`).
163
+ Alle sechs Kernzusagen (B1 bis B6) sind als `[TECHNISCH]` vorgesehen; B3, B4 und B5 für den direkten Zugriff, für Shell und Unterprozess `[TEXTUELL]` (Abschnitt 3). Keine ist durch eine Messung zurückgenommen – `B3` ist in neun Läufen bestätigt, mit der benannten Mustergrenze –, ein Eintrag hier ist deshalb nicht nötig. Zwei Grenzen stehen in der Vorbemerkung des B-Blocks: `--permission-mode dangerous` hebt den `deny`-Korb auf, dort trägt der Schutz-Hook; und die Pfadmuster der Berechtigungsschicht unterscheiden Groß- und Kleinschreibung.
167
164
 
168
165
  Ergibt eine Prüfung, dass eine der sechs Zusagen nicht technisch durchgesetzt wird, ist sie hier einzutragen und nach der Regel in `.koolie/core/clients/README.md` Abschnitt 4 durch `<SECURITY_CONTACT>` freizugeben.
169
166
 
170
167
  ## 5. Bekannte Abweichungen im Verhalten
171
168
 
172
- - **Der Schutz-Hook läuft fail-closed** (`hook_fail_closed: true`, D-31): Das Eingabeschema ist gegen eine Installation belegt (Zeile H2). Die Hook-Aufzeichnungen dieses Clients führen weder `transcript_path` noch `cwd`; der Fehlblockade-Befund des Packs `claude-code` tritt deshalb nicht auf (Zeile H4, Befund B06). Prüfung 17 hält die Zusage an ihrer Wirkung fest.
173
- - **Der nicht-interaktive Lauf bricht still ab.** Braucht ein Lauf eine Rückfrage, endet er gelegentlich **ohne jede Ausgabe mit Erfolgscode** (`AP2-DD-13`, am 2026-09-11 erneut aufgetreten: ERH-05). Ein leeres Ergebnis ist damit nicht unbedingt ein leeres Ergebnis. **Folge für die in Abschnitt 6 vorgeschriebene Prüfung:** Jeder Nachweislauf bekommt `--export <pfad>` mit – die Mitschrift führt alle Schritte, auch wenn stdout leer bleibt –, und jeder Nachweis aus dem Ausbleiben einer Wirkung trägt eine Positivkontrolle im selben Lauf (Testkatalog Nr. 7).
174
- - **Die Vertrauensschranke greift im nicht-interaktiven Betrieb.** In einem unbestätigten Verzeichnis scheitert der Print-Modus, solange die Vertrauensprüfung nicht abgeschaltet ist (`--respect-workspace-trust false`) (`AP2-DD-14`). **Folge für Abschnitt 6:** Die vorgeschriebene Prüfung läuft in einem frischen Verzeichnis erst nach dieser Bestätigung. Ein Nachweis, der dafür die Schranke abschaltet, bleibt zulässig, gilt aber nicht für den Normalbetrieb und weist die Bedingung im Protokoll aus (Testkatalog Nr. 7).
175
- - **Nutzerlokale Konfiguration kann lockern – B9 gilt bei diesem Client nicht.** Die Benutzerkonfiguration (`%APPDATA%\devin\config.json`) setzt sich gegen die projektseitige durch, in beide Richtungen gemessen (K-27, ERH-11). Eine projektseitige Verschärfung ist damit ein Standard, den jede Arbeitsstation still aufheben kann – in einer Datei, die außerhalb des Repositoriums liegt und die niemand im Projekt sieht. Wirksam bleibt sie, wo die Benutzerkonfiguration schweigt; das ist der Normalfall, aber es ist keine Zusage. Was das Framework dagegen setzen kann, steht auf Ebene 2 (Organisation), nicht im Repositorium.
176
- - **Sechs Skill-Ablagen je Repositorium** (Abschnitt 1, `QD-9`). Das Framework schreibt `.devin/skills/`; `.agents/skills/` empfiehlt der Hersteller. Welche Ablagen der Desktop-Client tatsächlich liest, ist unbestätigt (K-12).
177
- - **Keine Workflows, keine Memories.** Beides wird vom Client nicht unterstützt `[DOK]`; Skills und versionierte Regeln übernehmen diese Funktion. Für ein Client Pack mit Memory-Mechanismus wäre zu klären, wie das Framework verhindert, dass Wissen an den versionierten Regeln vorbei entsteht.
178
- - **Sandbox nicht auf allen Betriebssystemen.** Laut Dokumentation unter Windows nicht verfügbar (K-11); der Modus `Autonomous` – in der CLI kein eigener Modus, sondern das Flag `--sandbox` (ERH-08) – ist damit dort nicht absicherbar. D-05 lässt ihn nur zu, wo die Sandbox verfügbar ist; auf der Zielplattform ist er untersagt. Er bekommt **keine** Matrixzeile, weil das Framework hier keine Zusage abbildet, sondern eine Beschränkung benennt, deren Träger auf dieser Plattform fehlt.
179
- - **Die Modusnamen der Oberfläche und der CLI weichen voneinander ab.** Oberfläche: `Normal`, `Accept Edits`, `Smart`, `Bypass`. CLI (`devin --help`, 2026-09-11): `auto`, `accept-edits`, `smart`, `dangerous`. Die Matrixzeilen M1, M2, M6 und M7 führen beide Namensräume; D-05 nennt die der Oberfläche.
169
+ - **Der Schutz-Hook läuft fail-closed** (`hook_fail_closed: true`): Das Eingabeschema ist gegen eine Installation belegt (Zeile H2). Die Hook-Aufzeichnungen dieses Clients führen weder `transcript_path` noch `cwd`, daher keine Fehlblockade wie beim Pack `claude-code` (Zeile H4). Prüfung 17 hält die Zusage an ihrer Wirkung fest.
170
+ - **Der nicht-interaktive Lauf bricht gelegentlich still ab.** Braucht ein Lauf eine Rückfrage, endet er manchmal ohne Ausgabe mit Erfolgscode (`AP2-DD-13`, ERH-05); eine leere Ausgabe beweist also nichts. Jeder Nachweislauf nach Abschnitt 6 bekommt deshalb `--export <pfad>` – die Mitschrift führt alle Schritte, auch wenn stdout leer bleibt –, und jeder Nachweis aus dem Ausbleiben einer Wirkung trägt eine Positivkontrolle im selben Lauf (Testkatalog Nr. 7).
171
+ - **Die Vertrauensschranke greift im nicht-interaktiven Betrieb.** In einem unbestätigten Verzeichnis scheitert der Print-Modus, solange die Vertrauensprüfung nicht abgeschaltet ist (`--respect-workspace-trust false`, `AP2-DD-14`). Die Prüfung nach Abschnitt 6 läuft in einem frischen Verzeichnis deshalb erst nach der Bestätigung. Ein Nachweis mit abgeschalteter Schranke ist zulässig, gilt aber nicht für den Normalbetrieb und nennt die Bedingung im Protokoll (Testkatalog Nr. 7).
172
+ - **Nutzerlokale Konfiguration kann lockern – B9 gilt bei diesem Client nicht.** Die Benutzerkonfiguration (`%APPDATA%\devin\config.json`) setzt sich in beide Richtungen gegen die projektseitige durch (ERH-11). Jede Arbeitsstation kann eine projektseitige Verschärfung also still aufheben, in einer Datei außerhalb des Repositoriums. Wirksam bleibt die Verschärfung, wo die Benutzerkonfiguration schweigt – der Normalfall, aber keine Zusage. Dagegen hilft nur eine Regel auf Ebene 2 (Organisation).
173
+ - **Sechs Skill-Ablagen je Repositorium** (Abschnitt 1, `QD-9`). Das Framework schreibt `.devin/skills/`, der Hersteller empfiehlt `.agents/skills/`. Welche Ablagen der Desktop-Client tatsächlich liest, ist unbestätigt.
174
+ - **Keine Workflows, keine Memories** `[DOK]`. Skills und versionierte Regeln übernehmen diese Funktion.
175
+ - **Keine Sandbox unter Windows** (laut Dokumentation). Der Modus `Autonomous` – in der CLI das Flag `--sandbox` (ERH-08) – ist dort nicht absicherbar; `03-security.md` Abschnitt 4 lässt ihn nur zu, wo die Sandbox verfügbar ist, auf der Zielplattform also nicht. Er hat keine Matrixzeile, weil das Framework hier keine Zusage abbildet, sondern eine Beschränkung benennt.
176
+ - **Modusnamen von Oberfläche und CLI weichen ab.** Oberfläche: `Normal`, `Accept Edits`, `Smart`, `Bypass`; CLI (`devin --help`, 2026-09-11): `auto`, `accept-edits`, `smart`, `dangerous`. Die Zeilen M1, M2, M6 und M7 führen beide.
180
177
 
181
178
  ## 6. Installation und Prüfung
182
179
 
@@ -196,7 +193,7 @@ Ohne `--client` erkennt `install.py` das installierte Pack; bei einer Erstinstal
196
193
 
197
194
  ## 7. Anweisungs- und Konfigurationsquellen außerhalb des Projekts
198
195
 
199
- Was dieser Client aus Ablagen **außerhalb des Repositoriums** lädt. Solche Quellen haben nach Regel 2.6 der Prioritätshierarchie **keine Ebene**: Sie dürfen einschränken, nie über die Ebenen 1 bis 4 hinaus erweitern und keine Governance-, Datenschutz- oder Sicherheitsregeln setzen (D-34).
196
+ Was dieser Client aus Ablagen außerhalb des Repositoriums lädt. Solche Quellen haben nach Regel 2.6 der Prioritätshierarchie keine Ebene: Sie dürfen einschränken, nie über die Ebenen 1 bis 4 hinaus erweitern und keine Governance-, Datenschutz- oder Sicherheitsregeln setzen.
200
197
 
201
198
  **Erhebungsstand: 2026-09-11**, Devin Desktop 3.9.19 / CLI 3000.10.21, erhoben mit `devin rules list`, `devin rules show <name>`, `devin rules paths`, `devin skills list --json`, `devin skills paths` und `devin doctor`, dazu gemessene Kontextläufe in einer Installation ohne Regeltexte (`tests/protocols/2026-09-11-erhebungen-K21-K26.md`).
202
199
 
@@ -204,10 +201,10 @@ Was dieser Client aus Ablagen **außerhalb des Repositoriums** lädt. Solche Que
204
201
 
205
202
  | Quelle | Ladebedingung | Belegstatus | Maßnahme des Frameworks |
206
203
  |---|---|---|---|
207
- | `~\.codeium\windsurf\memories\global_rules.md` | always-on, in **jedem** Projekt – auch in einem ohne jeden Regeltext | **Gemessen** (`AP2-DD-15`, K-21 Lauf A): Der Inhalt stand wörtlich im Kontext einer Sitzung in einem Verzeichnis ohne Regeltexte | bis `1.12.0` abgeschaltet über `read_config_from.windsurf: false` (R6, gemessen K-21 Lauf B); **seit `1.12.1` zugelassen** (D-411, `K-156`) – gemessen am 2026-09-26: ein Kennwort in der Datei erreicht die Sitzung. `install.py` meldet die Datei, wenn sie nicht leer ist |
208
- | `.windsurf/` im Projekt (Regeln, Skills); MCP-Server aus Windsurf (`~\.codeium\windsurf\mcp_config.json`) | Regeln always-on nach ihrem Frontmatter | Regeln **gemessen** am 2026-09-26 (Kennwort in `.windsurf/rules/` lädt mit `windsurf: true`); Skills und MCP-Server `[DOK]`, der Ablageort der MCP-Datei nach Windsurf-Konvention, nicht erhoben | seit `1.12.1` zugelassen (D-411); `install.py` meldet `.windsurf/` im Projekt und eine vorhandene `mcp_config.json` |
209
- | `~\.claude\skills\` | 67 von 81 Skills, Aufrufbarkeit `[user,model]` | **Gemessen** (`AP2-DD-16`, K-24): Ein Skill von dort läuft; seine Werkzeugaufrufe erreichen Berechtigungsschranke und Schutz-Hook | abgeschaltet über `read_config_from.claude: false` (R6); gemessen 69 → 2 Skills (K-23) |
210
- | `%APPDATA%\devin\AGENTS.md`, `~\.devin\rules\*.md`, `~\.devin\global_rules.md`, `~\.claude\CLAUDE.md` | laut Herstellerdokumentation weitere Ablageorte für Regeln | `[DOK]` (ERH-09); **auf dieser Arbeitsstation nicht erhoben** – die ersten drei sind das eigene Format des Clients und von `read_config_from` **nicht** erfasst | keine; sie bleiben Auskunft |
204
+ | `~\.codeium\windsurf\memories\global_rules.md` | always-on, in **jedem** Projekt – auch in einem ohne jeden Regeltext | Gemessen (`AP2-DD-15`, Lauf A): Der Inhalt stand wörtlich im Kontext einer Sitzung in einem Verzeichnis ohne Regeltexte | zugelassen (`read_config_from.windsurf: true`, R6); gemessen am 2026-09-26: ein Kennwort in der Datei erreicht die Sitzung. `install.py` meldet die Datei, wenn sie nicht leer ist |
205
+ | `.windsurf/` im Projekt (Regeln, Skills); MCP-Server aus Windsurf (`~\.codeium\windsurf\mcp_config.json`) | Regeln always-on nach ihrem Frontmatter | Regeln gemessen am 2026-09-26 (Kennwort in `.windsurf/rules/` lädt mit `windsurf: true`); Skills und MCP-Server `[DOK]`, der Ablageort der MCP-Datei nach Windsurf-Konvention, nicht erhoben | zugelassen; `install.py` meldet `.windsurf/` im Projekt und eine vorhandene `mcp_config.json` |
206
+ | `~\.claude\skills\` | 67 von 81 Skills, Aufrufbarkeit `[user,model]` | Gemessen (`AP2-DD-16`): Ein Skill von dort läuft; seine Werkzeugaufrufe erreichen Berechtigungsschranke und Schutz-Hook | abgeschaltet über `read_config_from.claude: false` (R6); gemessen 69 → 2 Skills |
207
+ | `%APPDATA%\devin\AGENTS.md`, `~\.devin\rules\*.md`, `~\.devin\global_rules.md`, `~\.claude\CLAUDE.md` | laut Herstellerdokumentation weitere Ablageorte für Regeln | `[DOK]` (ERH-09); auf dieser Arbeitsstation nicht erhoben; die ersten drei sind das eigene Format des Clients und von `read_config_from` nicht erfasst | keine; sie bleiben Auskunft |
211
208
 
212
209
  ### 7.2 Konfigurationsquellen
213
210
 
@@ -215,14 +212,14 @@ Berechtigungen, Hooks und Einstellungen außerhalb des Repositoriums betreffen g
215
212
 
216
213
  | Quelle | Wirkung | Belegstatus |
217
214
  |---|---|---|
218
- | `%APPDATA%\devin\config.json` (Benutzerkonfiguration) | führt dieselben Schlüssel wie die Projektdatei – Berechtigungen, Hooks, `read_config_from` – und **hat Vorrang**, auch gegenüber einer projektseitigen Verschärfung | **Gemessen in beiden Richtungen** (K-27, ERH-11). Damit ist B9 bei diesem Pack widerlegt |
215
+ | `%APPDATA%\devin\config.json` (Benutzerkonfiguration) | führt dieselben Schlüssel wie die Projektdatei – Berechtigungen, Hooks, `read_config_from` – und hat Vorrang, auch gegenüber einer projektseitigen Verschärfung | Gemessen in beiden Richtungen (ERH-11); B9 gilt bei diesem Pack nicht |
219
216
  | `.devin/config.local.json` | nutzerlokale Überschreibung im Projekt, nicht versioniert | `[DOK]`; dieselbe Lage wie oben |
220
217
 
221
218
  ### 7.3 Was dieser Abschnitt nicht leistet
222
219
 
223
- **Eine Auskunft ist keine Schranke, und die Abschaltung ist ein Standard, keine Sperre.** Was in `read_config_from` steht, kann die Benutzerkonfiguration aufheben (7.2) – wirksam ist die Einstellung dort, wo jene schweigt, und das ist der Normalfall.
220
+ **Eine Auskunft ist keine Schranke.** Was in `read_config_from` steht, kann die Benutzerkonfiguration aufheben (7.2); die Einstellung wirkt dort, wo jene schweigt.
224
221
 
225
- **Ein Abwesenheitsbeleg altert.** Der Erhebungsstand oben ist am Tag der nächsten Clientversion eine Aussage über die Vergangenheit. Prüfung 19 sieht den Unterschied nicht: Sie prüft die **Anwesenheit** dieser Auskunft, nicht ihre Richtigkeit.
222
+ **Ein Abwesenheitsbeleg altert.** Der Erhebungsstand oben gilt bis zur nächsten Clientversion. Prüfung 19 prüft, dass diese Auskunft da ist, nicht, dass sie stimmt.
226
223
 
227
224
  **Das Register des Clients ist keine zweite Quelle.** Es zeigt mehr, als lädt (ERH-02), und seine Pfadauskunft weniger, als es gibt (ERH-03). Maßgeblich ist dieser Abschnitt, gestützt auf gemessene Kontextläufe.
228
225
 
@@ -249,3 +246,4 @@ Berechtigungen, Hooks und Einstellungen außerhalb des Repositoriums betreffen g
249
246
  | 0.14.6 | 2026-09-29 | Zeile B4 folgt dem Erzeugnis: Das Overlay sperrt seit `1.17.0` allein der Schutz-Hook (D-448). Zeile MCP-Konfiguration: die Stichprobe des Owners zu `1.18.0` – `stdio` über `mcp-remote` trägt, die Seitenversion kommt an. Zeile S3: die Werkzeugsperre eines Skills wirkt auch für `exec` (`K-187`). `CR-2026-158`, D-468 | `<FRAMEWORK_OWNER>` |
250
247
  | 0.14.8 | 2026-09-30 | **Der eingebaute Skill `upload-secrets` ist eingestuft** (`CR-2026-164`, D-503, `K-94`): Er lädt über die CLI, die die Werte selbst liest; der Schutz-Hook sperrt `cloud drs secret-create`, gemessen in zwei Läufen | `<FRAMEWORK_OWNER>` |
251
248
  | 0.14.7 | 2026-09-30 | **Die Schreibweise der Muster ist entschieden** (`CR-2026-163`, D-491, D-492, `K-92`, `K-96`). Zeile B3: Die Semantik des Schutz-Hooks gilt, die Grenze der Berechtigungsschicht bleibt benannt. Zeile H4: `/c/…` in beiden Lesarten | `<FRAMEWORK_OWNER>` |
249
+ | 0.15.0 | 2026-10-02 | Sprachlich überarbeitet; Zusagen, Einstufungen und Belege unverändert | `<FRAMEWORK_OWNER>` |
@@ -8,7 +8,7 @@
8
8
  "agents_dir": ".devin/agents",
9
9
  "pack_runtime_dir": ".devin/rules",
10
10
  "has_rule_triggers": true,
11
- "core_skill_prefix": "fw-",
11
+ "core_skill_prefix": "koolie-",
12
12
  "core_paths": [
13
13
  ".devin/README.md"
14
14
  ],
@@ -57,8 +57,8 @@
57
57
  "dst": "<RULES_DIR>/15-development-rules.md"
58
58
  },
59
59
  {
60
- "src": "framework/runtime/agents/fw-reviewer.md",
61
- "dst": "<AGENTS_DIR>/fw-reviewer.md"
60
+ "src": "framework/runtime/agents/koolie-reviewer.md",
61
+ "dst": "<AGENTS_DIR>/koolie-reviewer.md"
62
62
  },
63
63
  {
64
64
  "src": "templates/rules/21-overlay-TEMPLATE.md.template",
@@ -98,7 +98,7 @@
98
98
  "tools_format": "list",
99
99
  "tool_names": {"read": ["read"], "grep": ["grep"], "glob": ["glob"], "edit": ["edit"], "exec": ["exec"]},
100
100
  "tool_names_namespace": "eigen",
101
- "_tool_names_note": "Wie skill_frontmatter - dasselbe eigene Frontmatter-Vokabular an der zweiten Stelle, an der es abgebildet wird (2026-09-14, tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md, D-88). Das Agentenprofil fw-reviewer traegt danach unveraendert 'allowed-tools: read, grep, glob'; und seit dem 2026-09-22 ist gemessen, dass dieser Client damit die Zusage A1 EINLOEST: Ein Unteragent mit diesem Profil ruft kein schreibendes Werkzeug auf, das Vollzugriffsprofil des Clients ruft exec und write (D-284). GRENZE: Belegt ist der Werkzeugbestand, nicht die Reichweite je Werkzeug."
101
+ "_tool_names_note": "Wie skill_frontmatter - dasselbe eigene Frontmatter-Vokabular an der zweiten Stelle, an der es abgebildet wird (2026-09-14, tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md, D-88). Das Agentenprofil koolie-reviewer traegt danach unveraendert 'allowed-tools: read, grep, glob'; und seit dem 2026-09-22 ist gemessen, dass dieser Client damit die Zusage A1 EINLOEST: Ein Unteragent mit diesem Profil ruft kein schreibendes Werkzeug auf, das Vollzugriffsprofil des Clients ruft exec und write (D-284). GRENZE: Belegt ist der Werkzeugbestand, nicht die Reichweite je Werkzeug."
102
102
  },
103
103
  "agent_start_tools": ["run_subagent"],
104
104
  "agent_start_tools_absent": [],
@@ -122,7 +122,7 @@
122
122
  ],
123
123
  "skill": []
124
124
  },
125
- "_permission_tools_skill_note": "ERHOBEN am 2026-09-14 (tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md, CR-2026-065, D-89; Klaerungspunkt K-33 damit geschlossen). Der Skill-Aufruf IST bei diesem Client ein eigener Werkzeugaufruf: Das Werkzeug heisst skill, der Skillname steht im Argument skill (Laeufe K1, K1b, P2, P3). Die Liste bleibt trotzdem leer, und der Grund ist ein anderer als bisher: Es ist keine Schreibweise bekannt, mit der eine Regel dieser Datei den Aufruf erreicht. Skill(fw-code-explain) laeuft durch (P2), skill(fw-code-explain) laeuft durch (P3) - waehrend Read(**/.env) in derselben Datei und denselben Laeufen abweist (P1b, Kontrolllauf). Eine Regel zu schreiben, die nichts tut, waere die Bauform von D-66 und D-82. ZWEITER WEG, nicht gesucht: Die Slash-Form /fw-name wird CLIENTSEITIG in den Prompt expandiert - im user-Schritt der Mitschrift steht der Inhalt der SKILL.md, nicht der Befehl (K1b). Eine Schranke auf dem Werkzeug erreicht diesen Weg ohnehin nicht. Offen als K-34: ob dieser Client eine wirksame Schreibweise kennt.",
125
+ "_permission_tools_skill_note": "ERHOBEN am 2026-09-14 (tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md, CR-2026-065, D-89; Klaerungspunkt K-33 damit geschlossen). Der Skill-Aufruf IST bei diesem Client ein eigener Werkzeugaufruf: Das Werkzeug heisst skill, der Skillname steht im Argument skill (Laeufe K1, K1b, P2, P3). Die Liste bleibt trotzdem leer, und der Grund ist ein anderer als bisher: Es ist keine Schreibweise bekannt, mit der eine Regel dieser Datei den Aufruf erreicht. Skill(koolie-code-explain) laeuft durch (P2), skill(koolie-code-explain) laeuft durch (P3) - waehrend Read(**/.env) in derselben Datei und denselben Laeufen abweist (P1b, Kontrolllauf). Eine Regel zu schreiben, die nichts tut, waere die Bauform von D-66 und D-82. ZWEITER WEG, nicht gesucht: Die Slash-Form /koolie-name wird CLIENTSEITIG in den Prompt expandiert - im user-Schritt der Mitschrift steht der Inhalt der SKILL.md, nicht der Befehl (K1b). Eine Schranke auf dem Werkzeug erreicht diesen Weg ohnehin nicht. Offen als K-34: ob dieser Client eine wirksame Schreibweise kennt.",
126
126
  "permission_tools_bare": [
127
127
  "mcp__*"
128
128
  ],
@@ -7,7 +7,7 @@ Dieses Verzeichnis enthält alles, was Devin Local aus dem Repository liest. Es
7
7
  | `rules/*.md` | Regeldateien mit `trigger`-Frontmatter (Kurzfassungen von Core, Overlay, Packs) | `[DOK]` Mechanismus |
8
8
  | `skills/<name>/SKILL.md` | Skills, Aufruf `/name`; Frontmatter `name`, `description`, `argument-hint`, `allowed-tools`, `permissions`, `triggers` | `[DOK]` |
9
9
  | `agents/<name>.md` | Subagent-Profile (hier: nur lesender Reviewer) | `[DOK]` |
10
- | `config.json` | Berechtigungen `deny` / `ask` / `allow` (projektweit, versioniert) **und Lebenszyklus-Hooks** (`PreToolUse`-Secret- und Pfadprüfung, `SessionStart`-Statusmeldung). Erzeugt aus `.koolie/core/framework/runtime/permissions.json` und `hooks.json`; hier trägt das Projekt nur die Platzhalterwerte ein. Dass die Hooks in dieser Datei stehen und nicht in einer eigenen, folgt D-32: In einer Sitzung wurde erhoben, dass der Client aus einer eigenen Hook-Datei (`hooks.v1.json`) **keinen** Hook ausführt, aus `config.json` sofort (`AP2-DD-10`) | `[DOK]` Mechanismus; Hook-Ort **in einer Sitzung erhoben** (AP2, 3.9.19); Regelmenge `[EMPF]`; **Schemadetails in Sitzungen erhoben** – der Client liest `permissions.deny` aus dieser Datei und führt den `hooks`-Block aus ihr aus (2026-09-11 und 2026-09-14, Abschnitt 1 des Client Packs). Ungemessen bleibt die Wirkung von `ask` und `allow` |
10
+ | `config.json` | Berechtigungen `deny` / `ask` / `allow` (projektweit, versioniert) **und Lebenszyklus-Hooks** (`PreToolUse`-Secret- und Pfadprüfung, `SessionStart`-Statusmeldung). Erzeugt aus `.koolie/core/framework/runtime/permissions.json` und `hooks.json`; hier trägt das Projekt nur die Platzhalterwerte ein. Dass die Hooks in dieser Datei stehen und nicht in einer eigenen, hat einen gemessenen Grund: In einer Sitzung wurde erhoben, dass der Client aus einer eigenen Hook-Datei (`hooks.v1.json`) **keinen** Hook ausführt, aus `config.json` sofort (`AP2-DD-10`) | `[DOK]` Mechanismus; Hook-Ort **in einer Sitzung erhoben** (AP2, 3.9.19); Regelmenge `[EMPF]`; **Schemadetails in Sitzungen erhoben** – der Client liest `permissions.deny` aus dieser Datei und führt den `hooks`-Block aus ihr aus (2026-09-11 und 2026-09-14, Abschnitt 1 des Client Packs). Ungemessen bleibt die Wirkung von `ask` und `allow` |
11
11
  | `config.local.json` (nicht versioniert) | persönliche Überschreibungen; im Framework nur zum Verschärfen zulässig | `[DOK]`; **eine Lockerung verhindert der Client nicht** (ERH-11, Zeile B9 des Packs) |
12
12
  | `mcp_config.json.example` | Vorlage für MCP-Server (Standard: keine) | `[DOK]` Dateiname; **Struktur am Client erhoben** (2026-09-16): Container `mcpServers`, je Eintrag `command`, `args` und `transport`. **Der Standardablageort des Clients ist der unversionierte** `mcp_config.local.json` – wer einen Server ohne Angabe des Geltungsbereichs hinzufügt, schreibt nicht in die versionierte Datei |
13
13
 
@@ -16,7 +16,7 @@ Dieses Verzeichnis enthält alles, was Devin Local aus dem Repository liest. Es
16
16
  - `workflows/` – Cascade-Workflows werden von Devin Local nicht unterstützt `[DOK]`; Skills übernehmen diese Funktion.
17
17
  - `memories` – Devin Local persistiert keine Memories `[DOK]`; Wissen wird ausschließlich über versionierte Regeln, Overlay-Dokumente und Skills bereitgestellt.
18
18
  - `.windsurf/` – Legacy-Pfad, wird nicht gepflegt (`.gitignore`).
19
- - `hooks.v1.json` – seit 0.25.0 **nicht mehr erzeugt** (D-32). Der Client führt aus dieser Datei keinen Hook aus; die Hook-Konfiguration steht in `config.json`. Eine Installation von vor 0.25.0 trägt die Datei weiterhin: `install.py --update` legt die neue Fassung an, **löscht die verwaiste Datei aber nicht**. Sie ist von Hand zu entfernen; der Validator meldet sie bis dahin als Warnung.
19
+ - `hooks.v1.json` – seit 0.25.0 **nicht mehr erzeugt**. Der Client führt aus dieser Datei keinen Hook aus; die Hook-Konfiguration steht in `config.json`. Eine Installation von vor 0.25.0 trägt die Datei weiterhin: `install.py --update` legt die neue Fassung an, **löscht die verwaiste Datei aber nicht**. Sie ist von Hand zu entfernen; der Validator meldet sie bis dahin als Warnung.
20
20
 
21
21
  ## Berechtigungsmodi (Permission Modes) und Framework-Vorgabe
22
22
 
@@ -24,8 +24,8 @@ Dieses Verzeichnis enthält alles, was Devin Local aus dem Repository liest. Es
24
24
  |---|---|---|
25
25
  | Normal | Lesen automatisch; Schreiben und Befehle fragen | **Standard** für alle Kontrollstufen |
26
26
  | Accept Edits | Workspace-Änderungen automatisch; Shell fragt | nur Kontrollstufe niedrig, nur mit Overlay-Freigabe |
27
- | Smart | Änderungen automatisch; „sichere" Aktionen automatisch | untersagt (D-05), Ausnahme nur über Ausnahmeprozess |
28
- | Bypass | alles automatisch | **untersagt** (D-05) |
27
+ | Smart | Änderungen automatisch; „sichere" Aktionen automatisch | untersagt, Ausnahme nur über Ausnahmeprozess |
28
+ | Bypass | alles automatisch | **untersagt** |
29
29
  | Autonomous (mit Sandbox) | Shell und Fetch automatisch im Sandkasten; Dateiänderungen fragen | nur über Ausnahmeprozess und mit Sandbox-Nachweis |
30
30
 
31
31
  ## Sitzungsfreigaben
@@ -36,7 +36,7 @@ Beim Bestätigen einer Anfrage bietet Devin Local an, die Freigabe einmalig, fü
36
36
 
37
37
  Die Regelablage enthält die clientspezifische Laufzeitfassung der Framework-Regeln. Die kanonische, werkzeugneutrale Langform liegt in `.koolie/core/framework/`. Bei Widersprüchen gilt die Langform; die Laufzeitfassung wird dann korrigiert.
38
38
 
39
- > **Warum dieser Abschnitt hier steht und nicht in `rules/`.** Der Client führt **jede** Datei der Regelablage in seinem Regelregister und macht sie damit ladbar – auch eine, die keine Regel ist. Bis 0.25.0 lag dort eine eigene README; der Client führte sie mit Trigger `manual` (`AP2-DD-17`). Seit 0.26.0 gilt: **Die Regelablage enthält ausschließlich Regeln** (D-36). Registriert wird, was *in* der Ablage liegt, nicht was daneben liegt.
39
+ > **Warum dieser Abschnitt hier steht und nicht in `rules/`.** Der Client führt **jede** Datei der Regelablage in seinem Regelregister und macht sie damit ladbar – auch eine, die keine Regel ist. Bis 0.25.0 lag dort eine eigene README; der Client führte sie mit Trigger `manual` (`AP2-DD-17`). Seit 0.26.0 gilt: **Die Regelablage enthält ausschließlich Regeln**. Registriert wird, was *in* der Ablage liegt, nicht was daneben liegt.
40
40
 
41
41
  ### Mechanismus (Belegstatus)
42
42
 
@@ -47,8 +47,8 @@ Die Regelablage enthält die clientspezifische Laufzeitfassung der Framework-Reg
47
47
  | Frontmatter-Felder `description`, `trigger` (`always_on`, `manual`, `model_decision`, `agent`, `glob`), `globs` | `[DOK]` |
48
48
  | Root-Regeln werden beim Sitzungsstart geladen, Regeln in Unterverzeichnissen erst beim Zugriff auf das Verzeichnis | `[DOK]` |
49
49
  | `.devin/` hat Vorrang vor `.windsurf/`; persönliche `*.local.md`-Dateien überschreiben geteilte Pendants | `[DOK]` |
50
- | Eine Datei **ohne** Frontmatter führt der Client mit Aktivierung `manual` – gemessen mit `devin rules show` (K-25) | in einer Sitzung erhoben (2026-09-11) |
51
- | Zeichenlimits: `AGENTS.md` und die Regeln mit `always_on` zusammen höchstens 40.000 Zeichen (verbindlich, D-387); 12.000 Zeichen je Regeldatei, 6.000 Zeichen für `20-project-overlay.md` als SOLL-Grenzen – **Vorgabe des Frameworks, keine Produkteigenschaft** | `[EMPF]`. Die Zahlen stammen aus der Cascade-Dokumentation; für Devin Local nennt der Hersteller **keine** Grenze (zweimal geprüft am 2026-09-11 gegen 3.9.19, `CR-2026-027`). Der Validator prüft weiter dagegen |
50
+ | Eine Datei **ohne** Frontmatter führt der Client mit Aktivierung `manual` – gemessen mit `devin rules show` | in einer Sitzung erhoben (2026-09-11) |
51
+ | Zeichenlimits: `AGENTS.md` und die Regeln mit `always_on` zusammen höchstens 40.000 Zeichen (verbindlich); 12.000 Zeichen je Regeldatei, 6.000 Zeichen für `20-project-overlay.md` als SOLL-Grenzen – **Vorgabe des Frameworks, keine Produkteigenschaft** | `[EMPF]`. Die Zahlen stammen aus der Cascade-Dokumentation; für Devin Local nennt der Hersteller **keine** Grenze (zweimal geprüft am 2026-09-11 gegen 3.9.19). Der Validator prüft weiter dagegen |
52
52
  | Bedeutung der Trigger: `always_on` = vollständiger Inhalt in jedem Prompt; `model_decision` = nur Beschreibung im Prompt, Inhalt bei Relevanz; `glob` = bei Lesen/Ändern passender Dateien; `manual` = nur bei ausdrücklicher Erwähnung | `[DOK]` |
53
53
 
54
54
  ### Nummernschema und Ebenenzuordnung (Framework-Konvention `[KONZ]`)
@@ -66,8 +66,8 @@ Die Nummern bilden die Ladereihenfolge im Dateisystem ab, nicht die Priorität.
66
66
 
67
67
  ### Regeln für die Regelablage
68
68
 
69
- - **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.
70
- - `AGENTS.md` und die Regeln mit `always_on` bleiben zusammen unter 40.000 Zeichen (verbindlich, D-387). Jede Datei SOLL unter 12.000 Zeichen bleiben, `20-project-overlay.md` unter 6.000 Zeichen, damit die Summe der always-on-Inhalte klein bleibt (Least Context).
69
+ - **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.
70
+ - `AGENTS.md` und die Regeln mit `always_on` bleiben zusammen unter 40.000 Zeichen (verbindlich). Jede Datei SOLL unter 12.000 Zeichen bleiben, `20-project-overlay.md` unter 6.000 Zeichen, damit die Summe der always-on-Inhalte klein bleibt (Least Context).
71
71
  - Dateien mit Endung `.template` sind Vorlagen und werden nicht als Regeln gelesen (Konvention des Frameworks; der Client liest laut Dokumentation `*.md`).
72
72
  - Änderungen an `00-`, `10-`, `15-` nur über Framework-Änderungsantrag; `20-` über den Overlay-Prozess des Projekts; `30-`, `40-` über den jeweiligen Modul-Owner.
73
73
  - `.koolie/core/tests/scripts/validate-framework.py` prüft Frontmatter, Zeichenlimits und verbotene Inhalte.