@onlooker-community/ecosystem 0.30.0 → 0.31.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 (150) 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 +19 -0
  5. package/CLAUDE.md +10 -0
  6. package/package.json +2 -3
  7. package/plugins/archivist/.claude-plugin/plugin.json +1 -1
  8. package/plugins/archivist/CHANGELOG.md +7 -0
  9. package/plugins/archivist/README.md +4 -10
  10. package/plugins/archivist/config.json +0 -1
  11. package/plugins/archivist/scripts/hooks/archivist-extract.sh +0 -6
  12. package/plugins/archivist/scripts/hooks/archivist-inject.sh +2 -7
  13. package/plugins/archivist/scripts/lib/archivist-config.sh +0 -8
  14. package/plugins/assayer/.claude-plugin/plugin.json +1 -1
  15. package/plugins/assayer/CHANGELOG.md +7 -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 +1 -3
  19. package/plugins/assayer/scripts/lib/assayer-config.sh +0 -6
  20. package/plugins/bursar/.claude-plugin/plugin.json +1 -1
  21. package/plugins/bursar/CHANGELOG.md +7 -0
  22. package/plugins/bursar/README.md +3 -11
  23. package/plugins/bursar/config.json +0 -1
  24. package/plugins/bursar/scripts/hooks/bursar-session-end.sh +4 -6
  25. package/plugins/bursar/scripts/hooks/bursar-session-start.sh +3 -5
  26. package/plugins/bursar/scripts/lib/bursar-config.sh +1 -7
  27. package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
  28. package/plugins/cartographer/CHANGELOG.md +7 -0
  29. package/plugins/cartographer/README.md +3 -10
  30. package/plugins/cartographer/config.json +0 -1
  31. package/plugins/cartographer/scripts/hooks/cartographer-post-write.sh +0 -2
  32. package/plugins/cartographer/scripts/hooks/cartographer-session-start.sh +0 -2
  33. package/plugins/cartographer/scripts/lib/cartographer-config.sh +0 -7
  34. package/plugins/cartographer/skills/cartographer/SKILL.md +0 -5
  35. package/plugins/compass/.claude-plugin/plugin.json +1 -1
  36. package/plugins/compass/CHANGELOG.md +7 -0
  37. package/plugins/compass/README.md +4 -10
  38. package/plugins/compass/config.json +0 -1
  39. package/plugins/compass/scripts/hooks/compass-bash-gate.sh +0 -4
  40. package/plugins/compass/scripts/hooks/compass-pre-tool-use.sh +0 -4
  41. package/plugins/compass/scripts/hooks/compass-record-write.sh +0 -4
  42. package/plugins/compass/scripts/hooks/compass-session-start.sh +1 -6
  43. package/plugins/compass/scripts/lib/compass-config.sh +0 -7
  44. package/plugins/counsel/.claude-plugin/plugin.json +1 -1
  45. package/plugins/counsel/CHANGELOG.md +7 -0
  46. package/plugins/counsel/README.md +6 -10
  47. package/plugins/counsel/config.json +0 -1
  48. package/plugins/counsel/scripts/hooks/counsel-session-start.sh +1 -7
  49. package/plugins/counsel/scripts/lib/counsel-config.sh +0 -6
  50. package/plugins/counsel/skills/counsel/SKILL.md +0 -5
  51. package/plugins/curator/.claude-plugin/plugin.json +1 -1
  52. package/plugins/curator/CHANGELOG.md +7 -0
  53. package/plugins/curator/README.md +1 -11
  54. package/plugins/curator/config.json +0 -1
  55. package/plugins/curator/scripts/hooks/curator-session-start.sh +0 -6
  56. package/plugins/curator/scripts/lib/curator-config.sh +0 -7
  57. package/plugins/echo/.claude-plugin/plugin.json +1 -1
  58. package/plugins/echo/CHANGELOG.md +7 -0
  59. package/plugins/echo/README.md +3 -9
  60. package/plugins/echo/config.json +0 -1
  61. package/plugins/echo/scripts/hooks/echo-stop-gate.sh +1 -3
  62. package/plugins/echo/scripts/lib/echo-config.sh +0 -6
  63. package/plugins/governor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/governor/CHANGELOG.md +7 -0
  65. package/plugins/governor/README.md +4 -10
  66. package/plugins/governor/config.json +0 -1
  67. package/plugins/governor/scripts/hooks/governor-post-tool-use.sh +0 -5
  68. package/plugins/governor/scripts/hooks/governor-pre-tool-use.sh +0 -5
  69. package/plugins/governor/scripts/hooks/governor-session-start.sh +4 -9
  70. package/plugins/governor/scripts/hooks/governor-stop.sh +0 -5
  71. package/plugins/governor/scripts/lib/governor-config.sh +0 -7
  72. package/plugins/historian/.claude-plugin/plugin.json +1 -1
  73. package/plugins/historian/CHANGELOG.md +14 -0
  74. package/plugins/historian/README.md +3 -7
  75. package/plugins/historian/config.json +0 -1
  76. package/plugins/historian/scripts/hooks/historian-prompt-submit.sh +1 -6
  77. package/plugins/historian/scripts/hooks/historian-session-end.sh +2 -6
  78. package/plugins/historian/scripts/lib/historian-config.sh +0 -6
  79. package/plugins/historian/scripts/lib/historian-embedder.sh +10 -6
  80. package/plugins/inspector/.claude-plugin/plugin.json +1 -1
  81. package/plugins/inspector/CHANGELOG.md +7 -0
  82. package/plugins/inspector/README.md +9 -5
  83. package/plugins/inspector/config.json +0 -1
  84. package/plugins/inspector/scripts/hooks/inspector-post-write.sh +0 -7
  85. package/plugins/inspector/scripts/lib/inspector-config.sh +0 -7
  86. package/plugins/librarian/.claude-plugin/plugin.json +1 -1
  87. package/plugins/librarian/CHANGELOG.md +7 -0
  88. package/plugins/librarian/README.md +5 -9
  89. package/plugins/librarian/config.json +0 -1
  90. package/plugins/librarian/scripts/hooks/librarian-session-end.sh +0 -2
  91. package/plugins/librarian/scripts/hooks/librarian-session-start.sh +0 -6
  92. package/plugins/librarian/scripts/lib/librarian-config.sh +0 -8
  93. package/plugins/lineage/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lineage/CHANGELOG.md +7 -1
  95. package/plugins/lineage/README.md +3 -12
  96. package/plugins/lineage/config.json +0 -1
  97. package/plugins/lineage/scripts/hooks/lineage-post-tool-use.sh +0 -1
  98. package/plugins/lineage/scripts/lib/lineage-config.sh +0 -7
  99. package/plugins/lineage/skills/lineage/SKILL.md +1 -4
  100. package/plugins/scribe/.claude-plugin/plugin.json +1 -1
  101. package/plugins/scribe/CHANGELOG.md +7 -0
  102. package/plugins/scribe/README.md +4 -12
  103. package/plugins/scribe/config.json +0 -1
  104. package/plugins/scribe/scripts/hooks/scribe-capture.sh +0 -4
  105. package/plugins/scribe/scripts/hooks/scribe-session-start.sh +2 -7
  106. package/plugins/scribe/scripts/hooks/scribe-stop.sh +0 -5
  107. package/plugins/scribe/scripts/lib/scribe-config.sh +1 -8
  108. package/plugins/scribe/scripts/lib/scribe-extract.sh +16 -12
  109. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  110. package/plugins/tribunal/CHANGELOG.md +7 -0
  111. package/plugins/tribunal/README.md +7 -1
  112. package/plugins/tribunal/config.json +0 -1
  113. package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +3 -14
  114. package/plugins/tribunal/scripts/lib/tribunal-config.sh +0 -8
  115. package/plugins/warden/.claude-plugin/plugin.json +1 -1
  116. package/plugins/warden/CHANGELOG.md +7 -0
  117. package/plugins/warden/README.md +3 -12
  118. package/plugins/warden/config.json +0 -1
  119. package/plugins/warden/scripts/hooks/warden-post-tool-use.sh +0 -4
  120. package/plugins/warden/scripts/hooks/warden-pre-tool-use.sh +0 -4
  121. package/plugins/warden/scripts/hooks/warden-session-start.sh +1 -6
  122. package/plugins/warden/scripts/lib/warden-config.sh +1 -8
  123. package/renovate.json +34 -0
  124. package/test/bats/archivist-config-files.bats +2 -2
  125. package/test/bats/archivist-config.bats +0 -25
  126. package/test/bats/archivist-inject.bats +1 -13
  127. package/test/bats/assayer-config.bats +0 -13
  128. package/test/bats/assayer-stop-hook.bats +3 -17
  129. package/test/bats/bursar-config.bats +0 -25
  130. package/test/bats/bursar-session-end.bats +0 -20
  131. package/test/bats/bursar-session-start.bats +1 -18
  132. package/test/bats/cartographer-config.bats +0 -25
  133. package/test/bats/compass-config.bats +1 -26
  134. package/test/bats/compass-gate.bats +1 -3
  135. package/test/bats/curator-session-start.bats +2 -12
  136. package/test/bats/echo-config.bats +0 -24
  137. package/test/bats/echo-stop-hook.bats +3 -15
  138. package/test/bats/governor-config.bats +0 -36
  139. package/test/bats/historian-prompt-submit.bats +2 -8
  140. package/test/bats/historian-session-end.bats +4 -14
  141. package/test/bats/inspector-config.bats +0 -13
  142. package/test/bats/inspector-post-write-hook.bats +10 -17
  143. package/test/bats/librarian-session-end.bats +0 -11
  144. package/test/bats/librarian-session-start.bats +1 -11
  145. package/test/bats/lineage-config.bats +0 -25
  146. package/test/bats/lineage-post-tool-use.bats +1 -7
  147. package/test/bats/scribe-extract.bats +6 -6
  148. package/test/bats/tribunal-config.bats +0 -25
  149. package/test/bats/warden-config.bats +0 -25
  150. package/test/bats/warden-scanner.bats +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "compass",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
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,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.3.0...compass-v0.4.0) (2026-07-03)
4
+
5
+
6
+ ### Features
7
+
8
+ * **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))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.2.1...compass-v0.3.0) (2026-06-15)
4
11
 
5
12
 
@@ -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
- }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "counsel",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
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,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.4.0...counsel-v0.5.0) (2026-07-03)
4
+
5
+
6
+ ### Features
7
+
8
+ * **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))
9
+
3
10
  ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.3.1...counsel-v0.4.0) (2026-06-24)
4
11
 
5
12
 
@@ -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
- }
@@ -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.0",
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,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.1.0...curator-v0.2.0) (2026-07-03)
4
+
5
+
6
+ ### Features
7
+
8
+ * **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))
9
+
3
10
  ## [0.1.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.0.1...curator-v0.1.0) (2026-06-04)
4
11
 
5
12
 
@@ -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
  #
@@ -65,11 +64,6 @@ SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.session_id // ""' 2>/dev/null) || SE
65
64
  REPO_ROOT=$(curator_project_repo_root "$CWD")
66
65
  curator_config_load "$REPO_ROOT"
67
66
 
68
- if ! curator_config_enabled; then
69
- _emit ""
70
- exit 0
71
- fi
72
-
73
67
  PROJECT_KEY=$(curator_project_key "$CWD")
74
68
  if [[ -z "$PROJECT_KEY" ]]; then
75
69
  _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
- }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echo",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
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,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.2.0...echo-v0.3.0) (2026-07-03)
4
+
5
+
6
+ ### Features
7
+
8
+ * **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))
9
+
3
10
  ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.1.0...echo-v0.2.0) (2026-05-25)
4
11
 
5
12
 
@@ -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,
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Echo Stop-gate hook.
3
3
  #
4
- # Triggered by Stop. Off by default gated on echo.enabled in config.
5
- # When enabled, detects which watched agent files changed in this session,
4
+ # Triggered by Stop. Detects which watched agent files changed in this session,
6
5
  # runs a single-judge advisory pass on each, and compares the score against a
7
6
  # stored baseline to report improved / degraded / neutral.
8
7
  #
@@ -61,7 +60,6 @@ REPO_ROOT=$(echo_project_repo_root "$CWD")
61
60
  [[ -z "$REPO_ROOT" ]] && _done
62
61
 
63
62
  CLAUDE_PLUGIN_ROOT="$PLUGIN_ROOT" echo_config_load "$REPO_ROOT"
64
- echo_config_enabled || _done
65
63
 
66
64
  PROJECT_KEY=$(echo_project_key "$CWD")
67
65
  [[ -z "$PROJECT_KEY" ]] && _done
@@ -61,12 +61,6 @@ echo_config_get_json() {
61
61
  fi
62
62
  }
63
63
 
64
- echo_config_enabled() {
65
- local val
66
- val=$(echo_config_get '.enabled')
67
- [[ "$val" == "true" ]]
68
- }
69
-
70
64
  echo_config_model() {
71
65
  local val
72
66
  val=$(echo_config_get '.evaluation.model')
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "governor",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Resource governance and budget enforcement for the Onlooker ecosystem. Tracks per-session token and cost spend, gates Task spawns before they exceed a configurable budget ceiling, and emits governor.* events for audit. Named for the steam-engine governor — a device that regulates output. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/governor-v0.2.1...governor-v0.3.0) (2026-07-03)
4
+
5
+
6
+ ### Features
7
+
8
+ * **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))
9
+
3
10
  ## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/governor-v0.2.0...governor-v0.2.1) (2026-06-10)
4
11
 
5
12
 
@@ -42,17 +42,13 @@ The raw estimate is multiplied by `safety_margin` before the gate check. Cost is
42
42
 
43
43
  ## Activation
44
44
 
45
- Governor is **off by default**. Enable it per-project in `.claude/settings.json`:
45
+ Install Governor from the marketplace:
46
46
 
47
- ```json
48
- {
49
- "governor": {
50
- "enabled": true
51
- }
52
- }
47
+ ```
48
+ /plugin install governor@onlooker-community
53
49
  ```
54
50
 
55
- Or globally in `~/.claude/settings.json`. While disabled, every hook skips silently and no ledger is written.
51
+ Once installed, the plugin is active. No additional configuration is required to enable it.
56
52
 
57
53
  ## Configuration
58
54
 
@@ -61,7 +57,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
61
57
  ```json
62
58
  {
63
59
  "governor": {
64
- "enabled": false,
65
60
  "enforcement": "soft",
66
61
  "global_policy_path": "~/.onlooker/governance/global-policy.yaml",
67
62
  "session": {
@@ -80,7 +75,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
80
75
 
81
76
  | Key | Default | Description |
82
77
  |-----|---------|-------------|
83
- | `enabled` | `false` | Must be `true` for any tracking, gating, or event emission to run. |
84
78
  | `enforcement` | `"soft"` | `"soft"` tracks and emits events but never blocks on a budget overrun; `"hard"` blocks `Task` spawns once the budget is exceeded. A `ceiling_exceeded` overrun blocks in both modes. |
85
79
  | `global_policy_path` | `"~/.onlooker/governance/global-policy.yaml"` | Path checked at `SessionStart`. Missing file warns to stderr only — the session runs without a global ceiling. |
86
80
  | `session.tokens_default` | `100000` | Per-session token budget. Projecting past this triggers `budget_exceeded`. Overridable per session via the `ONLOOKER_SESSION_BUDGET_TOKENS` environment variable. |
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "governor",
3
3
  "storage_path": "~/.onlooker",
4
4
  "governor": {
5
- "enabled": false,
6
5
  "enforcement": "soft",
7
6
  "global_policy_path": "~/.onlooker/governance/global-policy.yaml",
8
7
  "session": {
@@ -6,7 +6,6 @@
6
6
  #
7
7
  # Hook contract:
8
8
  # - Always exits 0. Recording failure must never block the session.
9
- # - Skips silently when governor.enabled is false.
10
9
 
11
10
  set -uo pipefail
12
11
 
@@ -52,10 +51,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
52
51
 
53
52
  governor_config_load "$CWD"
54
53
 
55
- if ! governor_config_enabled; then
56
- _done
57
- fi
58
-
59
54
  # -----------------------------------------------------------------------
60
55
  # Extract hook fields.
61
56
  # -----------------------------------------------------------------------
@@ -18,7 +18,6 @@
18
18
  # - Exit 0 always.
19
19
  # - To block: write {"decision": "block", "reason": "..."} to stdout.
20
20
  # - To allow: write nothing (or {"decision": "allow"}) to stdout.
21
- # - Skips silently when governor.enabled is false.
22
21
 
23
22
  set -uo pipefail
24
23
 
@@ -70,10 +69,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
70
69
 
71
70
  governor_config_load "$CWD"
72
71
 
73
- if ! governor_config_enabled; then
74
- _allow
75
- fi
76
-
77
72
  # -----------------------------------------------------------------------
78
73
  # Read config.
79
74
  # -----------------------------------------------------------------------
@@ -2,11 +2,10 @@
2
2
  # Governor SessionStart hook.
3
3
  #
4
4
  # Fires at every session start. Responsibilities:
5
- # 1. Skip silently when governor.enabled is false.
6
- # 2. Create governance storage directories.
7
- # 3. Sweep stale lock files left by crashed prior sessions.
8
- # 4. Check global-policy.yaml exists (warn if missing, don't block).
9
- # 5. Emit governor.lock.stale_cleared for each stale lock removed.
5
+ # 1. Create governance storage directories.
6
+ # 2. Sweep stale lock files left by crashed prior sessions.
7
+ # 3. Check global-policy.yaml exists (warn if missing, don't block).
8
+ # 4. Emit governor.lock.stale_cleared for each stale lock removed.
10
9
  #
11
10
  # Hook contract:
12
11
  # - Always exits 0. Never blocks SessionStart.
@@ -51,10 +50,6 @@ _done() { exit 0; }
51
50
 
52
51
  governor_config_load "$CWD"
53
52
 
54
- if ! governor_config_enabled; then
55
- _done
56
- fi
57
-
58
53
  # -----------------------------------------------------------------------
59
54
  # 1. Ensure storage directories exist.
60
55
  # -----------------------------------------------------------------------
@@ -6,7 +6,6 @@
6
6
  #
7
7
  # Hook contract:
8
8
  # - Always exits 0. Never blocks Stop.
9
- # - Skips silently when governor.enabled is false.
10
9
  # - Errors from ledger reads are swallowed; emits best-effort totals.
11
10
 
12
11
  set -uo pipefail
@@ -51,10 +50,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
51
50
 
52
51
  governor_config_load "$CWD"
53
52
 
54
- if ! governor_config_enabled; then
55
- _done
56
- fi
57
-
58
53
  # -----------------------------------------------------------------------
59
54
  # Read session totals from the ledger.
60
55
  # -----------------------------------------------------------------------