@onlooker-community/ecosystem 0.30.1 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.gitattributes +18 -0
  3. package/.release-please-manifest.json +17 -17
  4. package/CHANGELOG.md +14 -0
  5. package/package.json +2 -3
  6. package/plugins/archivist/.claude-plugin/plugin.json +1 -1
  7. package/plugins/archivist/CHANGELOG.md +14 -0
  8. package/plugins/archivist/README.md +4 -10
  9. package/plugins/archivist/config.json +0 -1
  10. package/plugins/archivist/scripts/hooks/archivist-extract.sh +10 -6
  11. package/plugins/archivist/scripts/hooks/archivist-inject.sh +12 -7
  12. package/plugins/archivist/scripts/lib/archivist-config.sh +0 -8
  13. package/plugins/archivist/scripts/lib/archivist-events.sh +6 -0
  14. package/plugins/assayer/.claude-plugin/plugin.json +1 -1
  15. package/plugins/assayer/CHANGELOG.md +14 -0
  16. package/plugins/assayer/README.md +4 -10
  17. package/plugins/assayer/config.json +0 -1
  18. package/plugins/assayer/scripts/hooks/assayer-stop.sh +11 -3
  19. package/plugins/assayer/scripts/lib/assayer-config.sh +0 -6
  20. package/plugins/assayer/scripts/lib/assayer-events.sh +6 -0
  21. package/plugins/bursar/.claude-plugin/plugin.json +1 -1
  22. package/plugins/bursar/CHANGELOG.md +14 -0
  23. package/plugins/bursar/README.md +3 -11
  24. package/plugins/bursar/config.json +0 -1
  25. package/plugins/bursar/scripts/hooks/bursar-session-end.sh +4 -6
  26. package/plugins/bursar/scripts/hooks/bursar-session-start.sh +3 -5
  27. package/plugins/bursar/scripts/lib/bursar-config.sh +1 -7
  28. package/plugins/bursar/scripts/lib/bursar-events.sh +6 -0
  29. package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
  30. package/plugins/cartographer/CHANGELOG.md +14 -0
  31. package/plugins/cartographer/README.md +3 -10
  32. package/plugins/cartographer/config.json +0 -1
  33. package/plugins/cartographer/scripts/hooks/cartographer-post-write.sh +0 -2
  34. package/plugins/cartographer/scripts/hooks/cartographer-session-start.sh +0 -2
  35. package/plugins/cartographer/scripts/lib/cartographer-config.sh +0 -7
  36. package/plugins/cartographer/scripts/lib/cartographer-events.sh +6 -0
  37. package/plugins/cartographer/skills/cartographer/SKILL.md +0 -5
  38. package/plugins/compass/.claude-plugin/plugin.json +1 -1
  39. package/plugins/compass/CHANGELOG.md +14 -0
  40. package/plugins/compass/README.md +4 -10
  41. package/plugins/compass/config.json +0 -1
  42. package/plugins/compass/scripts/hooks/compass-bash-gate.sh +0 -4
  43. package/plugins/compass/scripts/hooks/compass-pre-tool-use.sh +0 -4
  44. package/plugins/compass/scripts/hooks/compass-record-write.sh +0 -4
  45. package/plugins/compass/scripts/hooks/compass-session-start.sh +1 -6
  46. package/plugins/compass/scripts/lib/compass-config.sh +0 -7
  47. package/plugins/compass/scripts/lib/compass-events.sh +6 -0
  48. package/plugins/counsel/.claude-plugin/plugin.json +1 -1
  49. package/plugins/counsel/CHANGELOG.md +14 -0
  50. package/plugins/counsel/README.md +6 -10
  51. package/plugins/counsel/config.json +0 -1
  52. package/plugins/counsel/scripts/hooks/counsel-session-start.sh +1 -7
  53. package/plugins/counsel/scripts/lib/counsel-config.sh +0 -6
  54. package/plugins/counsel/scripts/lib/counsel-events.sh +6 -0
  55. package/plugins/counsel/skills/counsel/SKILL.md +0 -5
  56. package/plugins/curator/.claude-plugin/plugin.json +1 -1
  57. package/plugins/curator/CHANGELOG.md +14 -0
  58. package/plugins/curator/README.md +1 -11
  59. package/plugins/curator/config.json +0 -1
  60. package/plugins/curator/scripts/hooks/curator-session-start.sh +10 -6
  61. package/plugins/curator/scripts/lib/curator-config.sh +0 -7
  62. package/plugins/curator/scripts/lib/curator-emit.sh +10 -0
  63. package/plugins/echo/.claude-plugin/plugin.json +1 -1
  64. package/plugins/echo/CHANGELOG.md +14 -0
  65. package/plugins/echo/README.md +3 -9
  66. package/plugins/echo/config.json +0 -1
  67. package/plugins/echo/scripts/hooks/echo-stop-gate.sh +11 -3
  68. package/plugins/echo/scripts/lib/echo-config.sh +0 -6
  69. package/plugins/echo/scripts/lib/echo-events.sh +6 -0
  70. package/plugins/governor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/governor/CHANGELOG.md +14 -0
  72. package/plugins/governor/README.md +4 -10
  73. package/plugins/governor/config.json +0 -1
  74. package/plugins/governor/scripts/hooks/governor-post-tool-use.sh +10 -5
  75. package/plugins/governor/scripts/hooks/governor-pre-tool-use.sh +10 -5
  76. package/plugins/governor/scripts/hooks/governor-session-start.sh +14 -9
  77. package/plugins/governor/scripts/hooks/governor-stop.sh +10 -5
  78. package/plugins/governor/scripts/lib/governor-config.sh +0 -7
  79. package/plugins/governor/scripts/lib/governor-events.sh +6 -0
  80. package/plugins/historian/.claude-plugin/plugin.json +1 -1
  81. package/plugins/historian/CHANGELOG.md +14 -0
  82. package/plugins/historian/README.md +3 -7
  83. package/plugins/historian/config.json +0 -1
  84. package/plugins/historian/scripts/hooks/historian-prompt-submit.sh +11 -6
  85. package/plugins/historian/scripts/hooks/historian-session-end.sh +10 -2
  86. package/plugins/historian/scripts/lib/historian-config.sh +0 -6
  87. package/plugins/historian/scripts/lib/historian-emit.sh +10 -0
  88. package/plugins/inspector/.claude-plugin/plugin.json +1 -1
  89. package/plugins/inspector/CHANGELOG.md +14 -0
  90. package/plugins/inspector/README.md +9 -5
  91. package/plugins/inspector/config.json +0 -1
  92. package/plugins/inspector/scripts/hooks/inspector-post-write.sh +0 -7
  93. package/plugins/inspector/scripts/lib/inspector-config.sh +0 -7
  94. package/plugins/inspector/scripts/lib/inspector-events.sh +6 -0
  95. package/plugins/librarian/.claude-plugin/plugin.json +1 -1
  96. package/plugins/librarian/CHANGELOG.md +14 -0
  97. package/plugins/librarian/README.md +5 -9
  98. package/plugins/librarian/config.json +0 -1
  99. package/plugins/librarian/scripts/hooks/librarian-session-end.sh +10 -2
  100. package/plugins/librarian/scripts/hooks/librarian-session-start.sh +10 -6
  101. package/plugins/librarian/scripts/lib/librarian-config.sh +0 -8
  102. package/plugins/librarian/scripts/lib/librarian-emit.sh +10 -0
  103. package/plugins/lineage/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lineage/CHANGELOG.md +14 -1
  105. package/plugins/lineage/README.md +3 -12
  106. package/plugins/lineage/config.json +0 -1
  107. package/plugins/lineage/scripts/hooks/lineage-post-tool-use.sh +0 -1
  108. package/plugins/lineage/scripts/lib/lineage-config.sh +0 -7
  109. package/plugins/lineage/scripts/lib/lineage-events.sh +6 -0
  110. package/plugins/lineage/skills/lineage/SKILL.md +1 -4
  111. package/plugins/scribe/.claude-plugin/plugin.json +1 -1
  112. package/plugins/scribe/CHANGELOG.md +14 -0
  113. package/plugins/scribe/README.md +4 -12
  114. package/plugins/scribe/config.json +0 -1
  115. package/plugins/scribe/scripts/hooks/scribe-capture.sh +0 -4
  116. package/plugins/scribe/scripts/hooks/scribe-session-start.sh +2 -7
  117. package/plugins/scribe/scripts/hooks/scribe-stop.sh +0 -5
  118. package/plugins/scribe/scripts/lib/scribe-config.sh +1 -8
  119. package/plugins/scribe/scripts/lib/scribe-events.sh +6 -0
  120. package/plugins/scribe/scripts/lib/scribe-extract.sh +16 -12
  121. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  122. package/plugins/tribunal/CHANGELOG.md +14 -0
  123. package/plugins/tribunal/README.md +7 -1
  124. package/plugins/tribunal/config.json +0 -1
  125. package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +13 -14
  126. package/plugins/tribunal/scripts/lib/tribunal-config.sh +0 -8
  127. package/plugins/tribunal/scripts/lib/tribunal-events.sh +6 -0
  128. package/plugins/warden/.claude-plugin/plugin.json +1 -1
  129. package/plugins/warden/CHANGELOG.md +14 -0
  130. package/plugins/warden/README.md +3 -12
  131. package/plugins/warden/config.json +0 -1
  132. package/plugins/warden/scripts/hooks/warden-post-tool-use.sh +0 -4
  133. package/plugins/warden/scripts/hooks/warden-pre-tool-use.sh +0 -4
  134. package/plugins/warden/scripts/hooks/warden-session-start.sh +1 -6
  135. package/plugins/warden/scripts/lib/warden-config.sh +1 -8
  136. package/plugins/warden/scripts/lib/warden-events.sh +6 -0
  137. package/renovate.json +34 -0
  138. package/test/bats/archivist-config-files.bats +2 -2
  139. package/test/bats/archivist-config.bats +0 -25
  140. package/test/bats/archivist-inject.bats +1 -13
  141. package/test/bats/assayer-config.bats +0 -13
  142. package/test/bats/assayer-stop-hook.bats +3 -17
  143. package/test/bats/bursar-config.bats +0 -25
  144. package/test/bats/bursar-session-end.bats +0 -20
  145. package/test/bats/bursar-session-start.bats +1 -18
  146. package/test/bats/cartographer-config.bats +0 -25
  147. package/test/bats/compass-config.bats +1 -26
  148. package/test/bats/compass-gate.bats +1 -3
  149. package/test/bats/curator-session-start.bats +2 -12
  150. package/test/bats/echo-config.bats +0 -24
  151. package/test/bats/echo-stop-hook.bats +3 -15
  152. package/test/bats/governor-config.bats +0 -36
  153. package/test/bats/historian-prompt-submit.bats +1 -8
  154. package/test/bats/historian-session-end.bats +4 -14
  155. package/test/bats/inspector-config.bats +0 -13
  156. package/test/bats/inspector-post-write-hook.bats +10 -17
  157. package/test/bats/librarian-session-end.bats +0 -11
  158. package/test/bats/librarian-session-start.bats +1 -11
  159. package/test/bats/lineage-config.bats +0 -25
  160. package/test/bats/lineage-post-tool-use.bats +1 -7
  161. package/test/bats/scribe-extract.bats +6 -6
  162. package/test/bats/tribunal-config.bats +0 -25
  163. package/test/bats/warden-config.bats +0 -25
  164. package/test/bats/warden-scanner.bats +1 -1
@@ -21,17 +21,11 @@ Cartographer is part of the Onlooker ecosystem monorepo. It requires the ecosyst
21
21
 
22
22
  ## Activation
23
23
 
24
- Cartographer is **disabled by default**. Enable it per-project in `.claude/settings.json`:
24
+ Install Cartographer from the marketplace and it runs automatically:
25
25
 
26
- ```json
27
- {
28
- "cartographer": {
29
- "enabled": true
30
- }
31
- }
32
26
  ```
33
-
34
- Or globally in `~/.claude/settings.json` to audit all projects.
27
+ /plugin install cartographer@onlooker-community
28
+ ```
35
29
 
36
30
  ## Usage
37
31
 
@@ -59,7 +53,6 @@ All options are optional. Defaults shown:
59
53
  ```json
60
54
  {
61
55
  "cartographer": {
62
- "enabled": false,
63
56
  "audit_interval_hours": 24,
64
57
  "phase_timeout_seconds": 60,
65
58
  "total_timeout_seconds": 600,
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "cartographer",
3
3
  "storage_path": "~/.onlooker",
4
4
  "cartographer": {
5
- "enabled": false,
6
5
  "audit_interval_hours": 24,
7
6
  "phase_timeout_seconds": 60,
8
7
  "total_timeout_seconds": 600,
@@ -47,8 +47,6 @@ TARGET_BASENAME=$(basename "$CANONICAL")
47
47
  REPO_ROOT=$(cartographer_project_repo_root "$CWD")
48
48
  cartographer_config_load "$REPO_ROOT"
49
49
 
50
- cartographer_config_enabled || exit 0
51
-
52
50
  PROJECT_KEY=$(cartographer_project_key "$CWD")
53
51
  [[ -z "$PROJECT_KEY" ]] && exit 0
54
52
 
@@ -27,8 +27,6 @@ export _HOOK_SESSION_ID
27
27
  REPO_ROOT=$(cartographer_project_repo_root "$CWD")
28
28
  cartographer_config_load "$REPO_ROOT"
29
29
 
30
- cartographer_config_enabled || exit 0
31
-
32
30
  PROJECT_KEY=$(cartographer_project_key "$CWD")
33
31
  [[ -z "$PROJECT_KEY" ]] && exit 0
34
32
 
@@ -8,7 +8,6 @@
8
8
  #
9
9
  # Usage:
10
10
  # cartographer_config_load <repo_root>
11
- # cartographer_config_get ".cartographer.enabled"
12
11
  # cartographer_config_get_json ".cartographer.exclude_paths"
13
12
 
14
13
  _CARTOGRAPHER_CONFIG=""
@@ -52,12 +51,6 @@ cartographer_config_get_json() {
52
51
  printf '%s' "$_CARTOGRAPHER_CONFIG" | jq -c "$path // empty" 2>/dev/null
53
52
  }
54
53
 
55
- cartographer_config_enabled() {
56
- local v
57
- v=$(cartographer_config_get '.cartographer.enabled')
58
- [[ "$v" == "true" ]]
59
- }
60
-
61
54
  cartographer_config_model_extraction() {
62
55
  local v
63
56
  v=$(cartographer_config_get '.cartographer.extraction.model')
@@ -23,6 +23,12 @@ _cartographer_event_js_path() {
23
23
  for c in "${candidates[@]}"; do
24
24
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
25
25
  done
26
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
27
+ # works regardless of which ecosystem version is installed.
28
+ local mjs
29
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
30
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
31
+ done
26
32
  return 1
27
33
  }
28
34
 
@@ -26,11 +26,6 @@ Load config and resolve project context:
26
26
  REPO_ROOT=$(cartographer_project_repo_root "$(pwd)")
27
27
  cartographer_config_load "$REPO_ROOT"
28
28
 
29
- if ! cartographer_config_enabled; then
30
- echo "Cartographer is disabled. Set cartographer.enabled=true in .claude/settings.json to enable."
31
- exit 0
32
- fi
33
-
34
29
  PROJECT_KEY=$(cartographer_project_key "$(pwd)")
35
30
  CARTOGRAPHER_DIR="${ONLOOKER_DIR:-$HOME/.onlooker}/cartographer/$PROJECT_KEY"
36
31
  mkdir -p "$CARTOGRAPHER_DIR"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "compass",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Pre-write intent clarity gate. Intercepts write-class tool calls and requires a confidence threshold before allowing them to proceed. Evaluates the pending write against the prior assistant turn as context to avoid false positives on question-answer turns. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1](https://github.com/onlooker-community/ecosystem/compare/compass-v0.4.0...compass-v0.4.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
10
+ ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.3.0...compass-v0.4.0) (2026-07-03)
11
+
12
+
13
+ ### Features
14
+
15
+ * **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
16
+
3
17
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.2.1...compass-v0.3.0) (2026-06-15)
4
18
 
5
19
 
@@ -38,17 +38,13 @@ The default `error_policy` is `closed`: when fewer than `evaluator.min_valid_sam
38
38
 
39
39
  ## Activation
40
40
 
41
- Compass is **off by default**. Enable per-project in `.claude/settings.json`:
41
+ Install Compass from the marketplace:
42
42
 
43
- ```json
44
- {
45
- "compass": {
46
- "enabled": true
47
- }
48
- }
43
+ ```
44
+ /plugin install compass@onlooker-community
49
45
  ```
50
46
 
51
- Or globally in `~/.claude/settings.json`.
47
+ Compass activates as soon as it is installed — no additional configuration is required.
52
48
 
53
49
  ## Configuration
54
50
 
@@ -57,7 +53,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
57
53
  ```json
58
54
  {
59
55
  "compass": {
60
- "enabled": false,
61
56
  "evaluator": {
62
57
  "model": "claude-haiku-4-5-20251001",
63
58
  "n": 5,
@@ -102,7 +97,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
102
97
 
103
98
  | Key | Default | Description |
104
99
  |-----|---------|-------------|
105
- | `enabled` | `false` | Must be `true` for any evaluation to run. |
106
100
  | `evaluator.model` | `claude-haiku-4-5-20251001` | Model used for each evaluation sample. Haiku is fast and cheap; the convergence prompt does not require deep reasoning. |
107
101
  | `evaluator.n` | `5` | Number of parallel evaluation samples launched per check. |
108
102
  | `evaluator.temperature` | `0.3` | Sampling temperature. The noise floor at `n=5`, `temperature=0.3` is ~0.62–0.65 for unambiguous tasks, which informs the `confidence_threshold` default. |
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "compass",
3
3
  "storage_path": "~/.onlooker",
4
4
  "compass": {
5
- "enabled": false,
6
5
  "evaluator": {
7
6
  "model": "claude-haiku-4-5-20251001",
8
7
  "n": 5,
@@ -47,10 +47,6 @@ export _HOOK_SESSION_ID="$SESSION_ID"
47
47
 
48
48
  compass_config_load "$CWD"
49
49
 
50
- if ! compass_config_enabled; then
51
- exit 0
52
- fi
53
-
54
50
  [[ -z "$COMMAND" ]] && exit 0
55
51
 
56
52
  # -----------------------------------------------------------------------
@@ -46,10 +46,6 @@ export _HOOK_SESSION_ID="$SESSION_ID"
46
46
 
47
47
  compass_config_load "$CWD"
48
48
 
49
- if ! compass_config_enabled; then
50
- exit 0
51
- fi
52
-
53
49
  # -----------------------------------------------------------------------
54
50
  # Resolve file path and context from tool input.
55
51
  # -----------------------------------------------------------------------
@@ -32,10 +32,6 @@ _done() { exit 0; }
32
32
 
33
33
  compass_config_load "$CWD"
34
34
 
35
- if ! compass_config_enabled; then
36
- _done
37
- fi
38
-
39
35
  [[ -z "$SESSION_ID" ]] && _done
40
36
 
41
37
  # Extract the file path from the tool output.
@@ -2,8 +2,7 @@
2
2
  # Compass SessionStart hook.
3
3
  #
4
4
  # Fires at every session start. Responsibilities:
5
- # 1. Skip silently when compass.enabled is false.
6
- # 2. Create storage directories.
5
+ # 1. Create storage directories.
7
6
  # 3. Initialize session state file:
8
7
  # - turn_check_count: 0
9
8
  # - cooldown table: empty
@@ -33,10 +32,6 @@ _done() { exit 0; }
33
32
 
34
33
  compass_config_load "$CWD"
35
34
 
36
- if ! compass_config_enabled; then
37
- _done
38
- fi
39
-
40
35
  export _HOOK_SESSION_ID="$SESSION_ID"
41
36
 
42
37
  ONLOOKER_DIR="${ONLOOKER_DIR:-${HOME}/.onlooker}"
@@ -10,7 +10,6 @@
10
10
  # compass_config_load <repo_root> # populates _COMPASS_CONFIG (JSON)
11
11
  # compass_config_get <jq-path> # echoes string value (empty if unset)
12
12
  # compass_config_get_json <jq-path> # echoes JSON value (null if unset)
13
- # compass_config_enabled # 0 if compass.enabled is true
14
13
 
15
14
  _COMPASS_CONFIG="{}"
16
15
 
@@ -64,9 +63,3 @@ compass_config_get_json() {
64
63
  local path="$1"
65
64
  printf '%s' "$_COMPASS_CONFIG" | jq -c "${path}" 2>/dev/null
66
65
  }
67
-
68
- compass_config_enabled() {
69
- local v
70
- v=$(compass_config_get '.compass.enabled')
71
- [[ "$v" == "true" ]]
72
- }
@@ -24,6 +24,12 @@ _compass_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "counsel",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "Weekly synthesis and recommendations from the full observability stack. Reads all plugin event logs, produces a structured improvement brief, and injects it at session start when the last brief is stale.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.1](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.5.0...counsel-v0.5.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
10
+ ## [0.5.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.4.0...counsel-v0.5.0) (2026-07-03)
11
+
12
+
13
+ ### Features
14
+
15
+ * **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
16
+
3
17
  ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.3.1...counsel-v0.4.0) (2026-06-24)
4
18
 
5
19
 
@@ -16,7 +16,7 @@ The synthesis pass produces a structured JSON object — `summary`, `patterns`,
16
16
 
17
17
  Counsel partitions the event stream by source plugin, recognizing `tribunal`, `echo`, `sentinel`, `warden`, `oracle`, and `meridian` events (everything else maps to a generic `onlooker_events` source). The synthesis prompt focuses on recurring failure modes and blocked gates, prompt regression trends, budget and resource pressure, quality trends over time, and what the team is consistently doing well.
18
18
 
19
- The hook always exits 0 — it never blocks a session from starting. It skips silently when Counsel is disabled, the directory has no project key (non-git), the latest brief is still fresh, or fewer than `capture.min_events` events fall inside the lookback window.
19
+ The hook always exits 0 — it never blocks a session from starting. It skips silently when the directory has no project key (non-git), the latest brief is still fresh, or fewer than `capture.min_events` events fall inside the lookback window.
20
20
 
21
21
  ## On-demand brief — `/counsel`
22
22
 
@@ -32,15 +32,13 @@ The on-demand path bypasses only the staleness gate — output, events, storage
32
32
 
33
33
  ## Activation
34
34
 
35
- Counsel is **on by default**. Disable it per-project in `.claude/settings.json` (or globally in `~/.claude/settings.json`):
35
+ Install via the marketplace:
36
36
 
37
- ```json
38
- {
39
- "counsel": {
40
- "enabled": false
41
- }
42
- }
43
37
  ```
38
+ /plugin install counsel@onlooker-community
39
+ ```
40
+
41
+ Installing the plugin enables it. To remove it, uninstall the plugin.
44
42
 
45
43
  ## Configuration
46
44
 
@@ -49,7 +47,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
49
47
  ```json
50
48
  {
51
49
  "counsel": {
52
- "enabled": true,
53
50
  "synthesis_interval_days": 7,
54
51
  "lookback_days": 30,
55
52
  "evaluator": {
@@ -71,7 +68,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
71
68
 
72
69
  | Key | Default | Description |
73
70
  |-----|---------|-------------|
74
- | `enabled` | `true` | Set to `false` to skip all synthesis and injection. |
75
71
  | `synthesis_interval_days` | `7` | Minimum age (in days) of the latest brief before a new one is generated. A brief younger than this is considered fresh and the hook skips. |
76
72
  | `lookback_days` | `30` | How far back in the event log to read when synthesizing a brief. |
77
73
  | `evaluator.model` | `claude-haiku-4-5-20251001` | Model used for the synthesis pass. Haiku is fast and cheap; upgrade for higher-stakes repos. |
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "counsel": {
3
- "enabled": true,
4
3
  "synthesis_interval_days": 7,
5
4
  "lookback_days": 30,
6
5
  "evaluator": {
@@ -6,7 +6,6 @@
6
6
  # full event log and injects the resulting brief as additionalContext.
7
7
  #
8
8
  # Skip conditions (all silent):
9
- # - counsel.enabled is false
10
9
  # - no project key (non-git directory)
11
10
  # - brief is still fresh
12
11
  # - fewer than min_events events in the lookback window
@@ -59,11 +58,6 @@ export _HOOK_SESSION_ID="$SESSION_ID"
59
58
  REPO_ROOT=$(counsel_project_repo_root "$CWD")
60
59
  counsel_config_load "$REPO_ROOT"
61
60
 
62
- if ! counsel_config_enabled; then
63
- _emit ""
64
- exit 0
65
- fi
66
-
67
61
  PROJECT_KEY=$(counsel_project_key "$CWD")
68
62
  if [[ -z "$PROJECT_KEY" ]]; then
69
63
  _emit ""
@@ -100,7 +94,7 @@ CONTEXT="Counsel — weekly improvement brief (auto-generated from your onlooker
100
94
 
101
95
  ${BRIEF_CONTENT}
102
96
 
103
- (Counsel injected this brief for project key ${PROJECT_KEY}. Set counsel.enabled=false to disable.)"
97
+ (Counsel injected this brief for project key ${PROJECT_KEY}.)"
104
98
 
105
99
  _emit "$CONTEXT"
106
100
  exit 0
@@ -10,7 +10,6 @@
10
10
  # counsel_config_load <repo_root> # populates _COUNSEL_CONFIG (JSON)
11
11
  # counsel_config_get <jq-path> # echoes string value (empty if unset)
12
12
  # counsel_config_get_json <jq-path> # echoes JSON value (null if unset)
13
- # counsel_config_enabled # 0 if counsel.enabled is true
14
13
 
15
14
  _COUNSEL_CONFIG="{}"
16
15
 
@@ -65,8 +64,3 @@ counsel_config_get_json() {
65
64
  printf '%s' "$_COUNSEL_CONFIG" | jq -c "${path}" 2>/dev/null
66
65
  }
67
66
 
68
- counsel_config_enabled() {
69
- local v
70
- v=$(counsel_config_get '.counsel.enabled')
71
- [[ "$v" == "true" ]]
72
- }
@@ -24,6 +24,12 @@ _counsel_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -31,11 +31,6 @@ source "$PLUGIN_ROOT/scripts/lib/counsel-brief.sh"
31
31
  REPO_ROOT=$(counsel_project_repo_root "$(pwd)")
32
32
  counsel_config_load "$REPO_ROOT"
33
33
 
34
- if ! counsel_config_enabled; then
35
- echo "Counsel is disabled. Set counsel.enabled=true in .claude/settings.json to enable."
36
- exit 0
37
- fi
38
-
39
34
  PROJECT_KEY=$(counsel_project_key "$(pwd)")
40
35
  if [[ -z "$PROJECT_KEY" ]]; then
41
36
  echo "No project key — Counsel needs a git repository (remote or root) to scope briefs. Skipping."
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "curator",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Maintenance layer for the user's typed auto-memory store. At every SessionStart, runs four cheap heuristic checks (date_decayed, path_broken, broken_index, orphaned_memory) against the memories at ~/.claude/projects/<encoded>/memory/ inside a wall-clock budget. Surfaces findings as a one-line pointer to /curator review; never edits the memory store directly. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/curator-v0.2.0...curator-v0.2.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
10
+ ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.1.0...curator-v0.2.0) (2026-07-03)
11
+
12
+
13
+ ### Features
14
+
15
+ * **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
16
+
3
17
  ## [0.1.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.0.1...curator-v0.1.0) (2026-06-04)
4
18
 
5
19
 
@@ -16,17 +16,7 @@ Curator is a sibling plugin to [`ecosystem`](../../) and assumes the Onlooker ob
16
16
 
17
17
  ## Activation
18
18
 
19
- Curator is **off by default**. Enable per-project in `.claude/settings.json`:
20
-
21
- ```json
22
- {
23
- "curator": {
24
- "enabled": true
25
- }
26
- }
27
- ```
28
-
29
- Or globally in `~/.claude/settings.json`. See [`config.json`](config.json) for the full set of tunable defaults.
19
+ Install Curator with `/plugin install curator@onlooker-community` installing the plugin enables it. See [`config.json`](config.json) for the full set of tunable defaults.
30
20
 
31
21
  ## Storage layout
32
22
 
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "curator",
3
3
  "storage_path": "~/.onlooker",
4
4
  "curator": {
5
- "enabled": false,
6
5
  "memory_store_path": "${HOME}/.claude/projects/${CLAUDE_PROJECT_ENCODED}/memory",
7
6
  "cheap_checks": {
8
7
  "enabled": true,
@@ -8,7 +8,6 @@
8
8
  # Hook contract:
9
9
  # - Always exits 0. Never blocks session start.
10
10
  # - Emits valid hookSpecificOutput JSON even when nothing to inject.
11
- # - No-ops when curator.enabled is not true.
12
11
  # - No-ops when no git context, no memory store path, or no checks pass
13
12
  # the rate gate.
14
13
  #
@@ -26,6 +25,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
26
25
  _ECOSYSTEM_ROOT="$_candidate"
27
26
  fi
28
27
  fi
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
31
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
32
+ if [[ -f "$_candidate" ]]; then
33
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
34
+ break
35
+ fi
36
+ done
37
+ fi
29
38
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
30
39
  # shellcheck disable=SC1091
31
40
  CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
@@ -65,11 +74,6 @@ SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.session_id // ""' 2>/dev/null) || SE
65
74
  REPO_ROOT=$(curator_project_repo_root "$CWD")
66
75
  curator_config_load "$REPO_ROOT"
67
76
 
68
- if ! curator_config_enabled; then
69
- _emit ""
70
- exit 0
71
- fi
72
-
73
77
  PROJECT_KEY=$(curator_project_key "$CWD")
74
78
  if [[ -z "$PROJECT_KEY" ]]; then
75
79
  _emit ""
@@ -9,7 +9,6 @@
9
9
  # Exposes:
10
10
  # curator_config_load <repo_root> # populates _CURATOR_CONFIG (JSON)
11
11
  # curator_config_get <jq-path> # echoes string value (empty if unset)
12
- # curator_config_enabled # 0 if curator.enabled is true
13
12
  #
14
13
  # Settings overlay only touches the `curator.*` subtree of settings.json.
15
14
 
@@ -59,9 +58,3 @@ curator_config_get() {
59
58
  printf '%s' "$_CURATOR_CONFIG" \
60
59
  | jq -r "${path} | if . == null then empty else . end" 2>/dev/null
61
60
  }
62
-
63
- curator_config_enabled() {
64
- local v
65
- v=$(curator_config_get '.curator.enabled')
66
- [[ "$v" == "true" ]]
67
- }
@@ -16,6 +16,16 @@ _curator_resolve_event_js() {
16
16
  ecosystem_root="$candidate"
17
17
  fi
18
18
  fi
19
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
20
+ # works regardless of which ecosystem version is installed.
21
+ if [[ -z "$ecosystem_root" ]]; then
22
+ for candidate in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
23
+ if [[ -f "$candidate" ]]; then
24
+ ecosystem_root="$(cd "$(dirname "$(dirname "$candidate")")" && pwd)"
25
+ break
26
+ fi
27
+ done
28
+ fi
19
29
 
20
30
  if [[ -n "$ecosystem_root" ]]; then
21
31
  printf '%s/scripts/lib/onlooker-event.mjs' "$ecosystem_root"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echo",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Prompt-change regression detection. When a watched agent file is modified, Echo runs a single-judge quality pass via claude -p and compares the score against a stored baseline to report improved, degraded, or neutral. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/echo-v0.3.0...echo-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
10
+ ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.2.0...echo-v0.3.0) (2026-07-03)
11
+
12
+
13
+ ### Features
14
+
15
+ * **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
16
+
3
17
  ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.1.0...echo-v0.2.0) (2026-05-25)
4
18
 
5
19
 
@@ -20,14 +20,10 @@ The hook always exits 0 — it never blocks a session from ending.
20
20
 
21
21
  ## Activation
22
22
 
23
- Echo is **off by default**. Enable it per-project in `.claude/settings.json`:
23
+ Install Echo from the marketplace and it is active immediately:
24
24
 
25
- ```json
26
- {
27
- "echo": {
28
- "enabled": true
29
- }
30
- }
25
+ ```
26
+ /plugin install echo@onlooker-community
31
27
  ```
32
28
 
33
29
  ## Configuration
@@ -37,7 +33,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
37
33
  ```json
38
34
  {
39
35
  "echo": {
40
- "enabled": true,
41
36
  "watch_paths": ["plugins/*/agents/*.md"],
42
37
  "exclude_paths": [],
43
38
  "drift_threshold": 0.05,
@@ -51,7 +46,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
51
46
 
52
47
  | Key | Default | Description |
53
48
  |-----|---------|-------------|
54
- | `enabled` | `false` | Must be `true` for any evaluation to run. |
55
49
  | `watch_paths` | `["plugins/*/agents/*.md"]` | Glob patterns (relative to repo root) of files to watch. Bash extended glob syntax. |
56
50
  | `exclude_paths` | `[]` | Patterns to exclude. `plugins/echo/**` is always excluded regardless of this setting. |
57
51
  | `drift_threshold` | `0.05` | Minimum absolute score delta to classify a change as improvement or regression. Deltas below this are reported as neutral. |
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "echo",
3
3
  "storage_path": "~/.onlooker",
4
4
  "echo": {
5
- "enabled": false,
6
5
  "watch_paths": ["plugins/*/agents/*.md"],
7
6
  "exclude_paths": [],
8
7
  "drift_threshold": 0.05,